custom t-shirt designs

51
California State University, San Bernardino California State University, San Bernardino CSUSB ScholarWorks CSUSB ScholarWorks Electronic Theses, Projects, and Dissertations Office of Graduate Studies 6-2017 Custom T-Shirt Designs Custom T-Shirt Designs Ranjan Khadka Follow this and additional works at: https://scholarworks.lib.csusb.edu/etd Part of the Other Computer Sciences Commons, and the Systems Architecture Commons Recommended Citation Recommended Citation Khadka, Ranjan, "Custom T-Shirt Designs" (2017). Electronic Theses, Projects, and Dissertations. 602. https://scholarworks.lib.csusb.edu/etd/602 This Project is brought to you for free and open access by the Office of Graduate Studies at CSUSB ScholarWorks. It has been accepted for inclusion in Electronic Theses, Projects, and Dissertations by an authorized administrator of CSUSB ScholarWorks. For more information, please contact [email protected].

Upload: others

Post on 02-Dec-2021

6 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Custom T-Shirt Designs

California State University, San Bernardino California State University, San Bernardino

CSUSB ScholarWorks CSUSB ScholarWorks

Electronic Theses, Projects, and Dissertations Office of Graduate Studies

6-2017

Custom T-Shirt Designs Custom T-Shirt Designs

Ranjan Khadka

Follow this and additional works at: https://scholarworks.lib.csusb.edu/etd

Part of the Other Computer Sciences Commons, and the Systems Architecture Commons

Recommended Citation Recommended Citation Khadka, Ranjan, "Custom T-Shirt Designs" (2017). Electronic Theses, Projects, and Dissertations. 602. https://scholarworks.lib.csusb.edu/etd/602

This Project is brought to you for free and open access by the Office of Graduate Studies at CSUSB ScholarWorks. It has been accepted for inclusion in Electronic Theses, Projects, and Dissertations by an authorized administrator of CSUSB ScholarWorks. For more information, please contact [email protected].

Page 2: Custom T-Shirt Designs

CUSTOM T-SHIRT DESIGNS

A Project

Presented to the

Faculty of

California State University,

San Bernardino

In Partial Fulfillment

of the Requirements for the Degree

Master of Science

in

Computer Science

by

Ranjan Khadka

December 2017

Page 3: Custom T-Shirt Designs

CUSTOM T-SHIRT DESIGNS

A Project

Presented to the

Faculty of

California State University,

San Bernardino

by

Ranjan Khadka

December 2017

Approved by:

Dr. Owen J. Murphy, Advisor, Computer Science

Dr. Ernesto Gomez, Committee Member

Dr. Kerstin Voigt, Committee Member

Page 4: Custom T-Shirt Designs

© 2017 Ranjan Khadka

Page 5: Custom T-Shirt Designs

iii

ABSTRACT

Custom T-shirt Designs is a web-based application. The purpose of this

project is to provide a website that would allow customers to be able to

customize T-shirt and place an order of custom T-shirt. Customers can sign up,

sign in, select T-shirt color, add text, choose Font, choose Font color, upload an

image, apply filters to images, transform text or images, choose T-shirt size and

save designs for future references. Customers would be able to add the design

to a cart, manage cart and checkout with their credit card to purchase for the

order and view their previous orders. The project focuses on object-oriented

programming paradigm using PHP framework Laravel along with JavaScript,

CSS, and HTML, Bootstrap and jQuery. Custom T-shirt Designs application uses

Model-view-controller architecture. Stripe API is used to handle the credit card

payments tokens providing a secure way for customers to purchase a T-shirt.

Google SMTP is used to send confirmation of purchase order to administrator

and customer. The project implements AJAX technology to send and receive

parts of data from the server asynchronously making Custom T-shirt Designs a

fast and efficient real-time web application.

Page 6: Custom T-Shirt Designs

iv

ACKNOWLEDGEMENTS

Thanks to my family and friends for all the support and encouragement to

continue my academic career. Thanks to all the professors of CSUSB Computer

Science faculty members for their time, afford and guidance to help me complete

the project.

Page 7: Custom T-Shirt Designs

v

TABLE OF CONTENTS

ABSTRACT .......................................................................................................... iii

ACKNOWLEDGEMENTS .....................................................................................iv

CHAPTER ONE: INTRODUCTION

1.1 Overview ......................................................................................... 1

1.2 Purpose ........................................................................................... 1

1.3 Project Scope .................................................................................. 2

1.4 Definitions, Acronyms, and Abbreviations ....................................... 2

CHAPTER TWO: TOOLS AND ENVIRONMENT

2.1 Software .......................................................................................... 5

2.1.1 JavaScript ............................................................................ 5

2.1.2 Laravel ................................................................................. 5

2.1.3 MySQL ................................................................................. 6

2.2 Libraries .......................................................................................... 6

2.2.1 Fabric.js ............................................................................... 6

2.2.2 Bootstrap ............................................................................. 6

CHAPTER THREE: SYSTEM ARCHITECTURE .................................................. 7

CHAPTER FOUR: SYSTEM DESIGN .................................................................. 9

CHAPTER FIVE: IMPLEMENTATION

5.1 Migration Table For Products ........................................................ 11

5.2 Model For Product ......................................................................... 12

5.3 Code For ProductController .......................................................... 13

5.4 Defining Routes For Controllers .................................................... 18

Page 8: Custom T-Shirt Designs

vi

5.5 Displaying View For Index Page ................................................... 21

5.6 Code For Upload An Image .......................................................... 28

5.7 Code For Add Text Function ......................................................... 29

5.8 Code For Change Color Of T-Shirt ................................................ 30

5.9 Code To Delete Image Or Text ..................................................... 30

5.10 Code To Change Font ................................................................... 31

5.11 Apply Filters On Image Or Text ..................................................... 32

5.12 Sending AJAX To Save Design .................................................... 33

CHAPTER SIX: CONCLUSION

6.1 Future Work .................................................................................. 34

USER MANUAL .................................................................................................. 35

REFERENCES ................................................................................................... 42

Page 9: Custom T-Shirt Designs

vii

LIST OF FIGURES

Figure 1. Custom T-Shirt Designs Application And Laravel .................................. 7

Figure 2. Client-Server Architecture ..................................................................... 8

Figure 3. Activity Diagram For Custom T-Shirt Designs ....................................... 9

Figure 4. Use Case Diagram For Custom T-Shirt Designs ................................. 10

Figure 5. Class Diagram Of Custom T-Shirt Designs ......................................... 11

Figure 6. Product Page ....................................................................................... 35

Figure 7. Sign Up Page ...................................................................................... 36

Figure 8. Sign In Page ........................................................................................ 36

Figure 9. Profile Page ......................................................................................... 37

Figure 10. Design Page By Default .................................................................... 37

Figure 11. Design Page After Design ................................................................. 38

Figure 12. Choosing Size and Adding To Cart ................................................... 39

Figure 13. Viewing Shopping Cart ...................................................................... 39

Figure 14. Checkout Page .................................................................................. 40

Figure 15. Successfully Purchased Notification .................................................. 40

Figure 16. Email Notification Of Purchase For Customer ................................... 41

Figure 17. Email Notification With Attachment Of Design To Admin .................. 41

Page 10: Custom T-Shirt Designs

1

CHAPTER ONE

INTRODUCTION

1.1 Overview

Custom T-Shirt Designs is a web-based application that provides a

customer to design a T-shirt and make a purchase of a designed T-shirt. This

project provides two main services for customers. Firstly, it provides a way for

customers to design and save the design for future purchases. Secondly, it

provides an easy way to purchase that T-shirt Design using a shopping cart

system. PHP framework Laravel provided a platform for Custom T-Shirt Designs

with command line interface artisan with Eloquent ORM, simple syntax pattern,

database migration, schema building tools and simple and secure authentication

mechanism for expressive, simplicity and readability.

1.2 Purpose

The start-up cost to sell custom T-shirts online is high. Magento plugin

"Online T-shirt Design Tool || PrintCommerce" costs around $1990. It would be

expensive for small businesses to afford such a high cost. The project provides a

cost-effective for small business owners with a small investment. Custom T-shirt

Designs would serve as a platform where small business owners would be able

to provide a designing platform for customers to be able to design their T-shirts

according to their wish. Most of the custom T-shirt design websites don’t offer

filters feature at all. One of the purposes of the project is to provide image filters

Page 11: Custom T-Shirt Designs

2

on design. Customers can choose Grayscale, Invert, Sepia, Emboss, Sharpen

filters. Customers can choose filters to the design as they wish.

1.3 Project Scope

The project is a web application to help the business owners to be able to

launch an online platform so that people would be able to place an order based

on their selection of customization. Customers can choose different colors of

their choice for the T-shirt design. Customers can add text to the T-shirt design.

In addition to adding text, they can choose font color, font size, rotate the text.

Customers can choose different colors of their choice for the T-shirt design.

Customers can attach pictures of their choices and apply filters to it. The

customers can pay it on demand using a credit card payment system. This

application is for the individuals who wish to customize their T-shirt. It is not

specific to one age but rather appeals to all. The application is free to sign up. It

is available for browser supporting devices including mobile devices since the

application will be responsive web design so that design and development should

respond to the user’s behavior and environment based on screen size, platform,

and orientation.

1.4 Definitions, Acronyms, and Abbreviations

AJAX: Asynchronous JavaScript And XML

Page 12: Custom T-Shirt Designs

3

It can send and receive information in various formats, including JSON, XML,

HTML, and text files. It can communicate with the server, exchange data, and

update the page without having to refresh the page.

Browser: Software application for retrieving, presenting and traversing

information resources on the World Wide Web

CSS: Cascading Style Sheets

A language that describes the look and formatting of a web page

DBMS: Database management system; an environment for managing databases

Wi-Fi: Technology that enables a wireless connection to the Internet using radio

waves

Form: A document requiring the completion of various fields

HTML: Hyper Text Markup Language

Hypertext transfer markup language which is used to format web pages.

JavaScript: A web language used to create dynamic web pages

MySQL: My Structured Query Language An open source relational database

management system that relies on SQL for processing the data in a database

PHP: PHP Hypertext Preprocessor; a scripting language is typically used on a

server to handle requests by clients

RAM: Random-access memory RAM is a form of computer data storage

designed for fast retrieval and storage of binary data.

Session: A way to store user data between pages to denote the state of the

application

Page 13: Custom T-Shirt Designs

4

UML: Unified Modeling Language (UML) diagrams, which are used in the design,

will help define the application software, architecture, and process model.

XML: Extensible Markup Language Designed especially for web documents. It is

a text-based format which that allows for the structuring of electronic documents

and is not limited to a set of labels

Page 14: Custom T-Shirt Designs

5

CHAPTER TWO

TOOLS AND ENVIRONMENT

Custom T-shirt Designs have used open source software for

implementation and development of the project. The list of software that has

been used on the project are follows.

2.1 Software

2.1.1 JavaScript

JavaScript (JS) is a lightweight interpreted or JIT-compiled programming

language with first-class functions. JavaScript is a prototype-based, multi-

paradigm, dynamic language, supporting object-oriented, imperative, and

declarative (e.g. functional programming) styles [2]. JavaScript is a programming

language that enables to create dynamically updating content, control

multimedia, animate images and much more [6].

2.1.2 Laravel

Laravel is a web application framework with expressive, elegant syntax.

Laravel has simple fast routing engine, powerful dependency injection

containers, multiple back-ends for session and cache storage, database ORM,

schema migrations, robust background job processing and real-time event

broadcasting [3].

Page 15: Custom T-Shirt Designs

6

2.1.3 MySQL

MySQL, the most popular Open Source SQL database management

system, is developed, distributed, and supported by Oracle Corporation. MySQL

is a fast, reliable, scalable relational database management system that works in

client/server or embedded systems with large amounts of contributed software

[5].

2.2 Libraries

2.2.1 Fabric.js

Fabric.js is JavaScript HTML5 canvas library that provides SVG-to-canvas

parsing and vice-versa. Creating objects, complex shapes, images become much

easier with fabric.js. It provides scaling, moving, rotating, coloring features for

text and images [1].

2.2.2 Bootstrap

Bootstrap is a free and open-source front-end web framework for

designing websites and web applications. It contains HTML- and CSS-based

design templates for typography, forms, buttons, navigation and other interface

components, as well as optional JavaScript extensions [7] .

Page 16: Custom T-Shirt Designs

7

CHAPTER THREE

SYSTEM ARCHITECTURE

Custom T-shirt Designs uses Laravel to handle all the requests from user

interface with the model view controller. When user requests are sent to the

server, Laravel routing sends requests to the assigned controller. Controller

interacts with the data model and gives view to user’s requests.

Figure 1. Custom T-Shirt Designs Application And Laravel

Custom T-Shirt Designs uses client-server architecture. Customers

browser support device acts as client and server hosting Custom T-shirt Designs

act as a server. Server request and response is handled by Laravel on the back-

end.

Page 17: Custom T-Shirt Designs

8

Figure 2. Client-Server Architecture

Page 18: Custom T-Shirt Designs

9

CHAPTER FOUR

SYSTEM DESIGN

Custom T-Shirt Designs follows a series of steps for customer to be able

to purchase the T-shirt Designs. A customer can choose two of the options one

to design custom t-shirt, other to select from prebuilt listed T-shirt Designs. Upon

choosing an option, customer then adds product to the shopping cart. Customer

can view shopping cart, confirm and go through checkout with the credit card

payments process. Only authenticated users can purchase the t-shirt. The

activity and use-case diagrams below give an overview process for Custom T-

Shirt Designs project.

Figure 3. Activity Diagram For Custom T-Shirt Designs

Page 19: Custom T-Shirt Designs

10

Figure 4. Use Case Diagram For Custom T-Shirt Designs

Page 20: Custom T-Shirt Designs

11

CHAPTER FIVE

IMPLEMENTATION

Figure 5. Class Diagram Of Custom T-Shirt Designs

Above class diagram represents the data in Custom T-shirt Designs

project. It is a model of MVC.

5.1 Migration Table For Products

<?php

use Illuminate\Support\Facades\Schema;

use Illuminate\Database\Schema\Blueprint;

use Illuminate\Database\Migrations\Migration;

Page 21: Custom T-Shirt Designs

12

class CreateProductsTable extends Migration

{

public function up()

{

Schema::create('products', function (Blueprint $table) {

$table->increments('id');

$table->timestamps();

$table->string('imagePath');

$table->string('title');

$table->text('description');

$table->integer('price');

$table->string('color');

});

}

public function down()

{

Schema::dropIfExists('products');

}

}

All the migration tables for each class in class diagram are created in

similar way. Laravel provides migration table so we don’t have write queries. It

provides object oriented pattern to interact with database. Now we create each

models as follows.

5.2 Model For Product

Page 22: Custom T-Shirt Designs

13

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Product extends Model

{

protected $fillable = ['imagePath', 'title', 'description', 'price',

'color'];

}

All the models Design, Order, Product, Profile, Shippinginfo, User are

created similarly so that it can be accessed in controller as an object.

ProductController is defined to use models as follows. [4]

5.3 Code For ProductController

<?php

namespace App\Http\Controllers;

use App\Cart;

use App\Product;

use Illuminate\Http\Request;

use Session;

use Stripe\Stripe;

use Stripe\Charge;

use App\Order;

use Auth;

use App\Shippinginfo;

use Mail;

use Log;

Page 23: Custom T-Shirt Designs

14

use DB;

class ProductController extends Controller

{

public function getIndex(){

$products = Product::all();

return view('shop.index', ['products' => $products] );

}

public function getAddtocart( Request $request, $id){

$product = Product::find($id);

$oldCart = $request->session()->has('cart') ? $request-

>session()->get('cart') : null;

$cart = new Cart($oldCart);

$request->session()->put('cart', $cart);

$size = $request->cookie('size');

$cart->add($product, $product->id, $size);;

return redirect()->route('product.index');

}

public function getRemoveItem($id) {

$oldCart = Session::has('cart') ? Session::get('cart') : null;

$cart = new Cart($oldCart);

$cart->removeItem($id);

if (count($cart->items) > 0) {

Session::put('cart', $cart);

} else {

Session::forget('cart');

}

return redirect()->route('product.shopping-cart');

Page 24: Custom T-Shirt Designs

15

}

public function getCart(){

if(!Session::has('cart')){

return view('shop.shopping-cart');

}

$oldCart = Session::get('cart');

$cart = new Cart($oldCart);

return view('shop.shopping-cart', ['products'=> $cart->items,

'totalPrice' => $cart->totalPrice]);

}

public function getCheckout(){

if(!Session::has('cart')){

return view('shop.shopping-cart');

}

$oldCart = Session::get('cart');

$cart = new Cart($oldCart);

$total = $cart->totalPrice;

return view('shop.checkout', ['total' => $total]);

}

public function postCheckout(Request $request){

if(!Session::has('cart')){

return redirect()->route('shop.shopping-cart');

}

$oldCart = Session::get('cart');

$cart = new Cart($oldCart);

$shippinginfo = new Shippinginfo();

$shippinginfo->address = $request->input('shippingaddress');

Page 25: Custom T-Shirt Designs

16

$shippinginfo->city = $request->input('city');

$shippinginfo->state =$request->input('state');

$shippinginfo->zip =$request->input('zipcode');

Stripe::setApikey('sk_test_wUvdtaSqyINkJ1ZbcPcJUmjo');

try{

$charge = Charge::create(array(

"amount" => $cart->totalPrice *100,

"currency" => "usd",

"source" => $request->input('stripeToken'),

"description" => "Test Charge"

));

$order->cart = serialize($cart);

$order->address = $request->input('address');

$order->name = $request->input('name');

$order->payment_id = $charge->id;

if(Auth::user()->orders()->save($order)){

$shippinginfo->payment_id = $order->payment_id;

Auth::user()->shippinginfos()->save($shippinginfo);

$data = array();

$data['address'] = $shippinginfo->address;

$data['city'] = $shippinginfo->city;

$data['state'] = $shippinginfo->state;

$data['zip'] = $shippinginfo->zip;

$data['payment_id'] = $order->payment_id;

$data['totalprice'] = $cart->totalPrice ;

$data['name'] = $order->name;

Mail::send('mail', $data, function($message) {

Page 26: Custom T-Shirt Designs

17

$message->to(Auth::user()['email'], 'Customer')

->subject ('Your order has been placed');

$message->from('[email protected]',

'Custom T-shirt Design ');

$message->cc('[email protected]',

'Custom T-shirt Design');

});

$userId = Auth::id();

$data['files'] = serialize($cart);

$designcolors = array();

foreach($cart->items as $item){

array_push($designcolors, DB::table('designs')

->where('Designname', $item['item']['title'])

->value('Tshirtcolor'));

}

$data['colors'] = serialize($designcolors);

Mail::send('mail', $data, function($message)

use ($cart, $userId) {

$message->to('[email protected]', 'Sales')->subject

('Ready for Order Design- Attachment');

$message->from('[email protected]',

'Custom T-shirt Design ');

foreach($cart->items as $item){

$designpath = DB::table('designs')->where(

'Designname', $item['item']['title'])

->value('Designpath');

$message->attach( $designpath);

Page 27: Custom T-Shirt Designs

18

}

});

}

}catch(\Exception $e){

return redirect()->route('checkout')->with('error', $e-

>getMessage());

}

Session::forget('cart');

return redirect()->route('product.index')->with('success',

'Successfully purchased');

}

}

Custom T-shirt Designs requests are handled by controllers. We define

those routes to the contollers as follows.

5.4 Defining Routes For Controllers

<?php

Route::get('/', [

'uses' => 'ProductController@getIndex',

'as' => 'product.index'

]);

Route::get('/add-to-cart/{id}', [

'uses' => 'ProductController@getAddtocart',

'as' => 'product.addtocart'

]);

Route::get('/reduce/{id}', [

'uses' => 'ProductController@getReduceByOne',

Page 28: Custom T-Shirt Designs

19

'as' => 'product.reduceByone'

]);

Route::get('/shopping-cart', [

'uses' => 'ProductController@getCart',

'as' => 'product.shopping-cart'

]);

Route::get('/checkout', [

'uses' => 'ProductController@getCheckout',

'as' => 'checkout',

'middleware' => 'auth'

]);

Route::post('/checkout', [

'uses' => 'ProductController@postCheckout',

'as' => 'checkout',

'middleware' => 'auth'

]);

Route::post('/user/savedesignvalues', [

'uses' => 'UserController@saveDesignvalues',

'as' => 'user.savedesignvalues'

]);

Route::post('/user/savedesign', [

'uses' => 'UserController@saveDesign',

'as' => 'user.savedesign'

]);

Route::get('/remove/{id}', [

'uses' => 'ProductController@getRemoveItem',

'as' => 'product.remove'

Page 29: Custom T-Shirt Designs

20

]);

Route::group(['prefix' => 'user'], function(){

Route::group(['middleware' => 'guest'], function(){

Route::get('/signup', [

'uses' => 'UserController@getSignup',

'as' => 'user.signup'

]);

Route::post('/signup', [

'uses' => 'UserController@postSignup',

'as' => 'user.signup'

]);

Route::get('/signin', [

'uses' => 'UserController@getSignin',

'as' => 'user.signin'

]);

Route::post('/signin', [

'uses' => 'UserController@postSignin',

'as' => 'user.signin'

]);

});

//Grouping all routes with /user with middleware /auth

Route::group(['middleware' => 'auth'], function(){

Route::get('/profile', [

'uses' => 'UserController@getProfile',

'as' => 'user.profile'

]);

Route::get('/logout', [

Page 30: Custom T-Shirt Designs

21

'uses' => 'UserController@getLogout',

'as' => 'user.logout'

]);

Route::get('/createdesign', [

'uses' => 'UserController@createDesign',

'as' => 'user.createdesign'

]);

Route::post('saveprofile', [

'uses' => 'UserController@saveProfile',

'as' => 'user.saveprofile'

]);

});

});

Laravel provides its own syntax for displaying a view in blade template.

The following code represents the index page view for products in blade

templating.

5.5 Displaying View For Index Page

@extends('layouts.master')

@section('title')

Shopping Cart

@endsection

@section('content')

<div class="container">

Page 31: Custom T-Shirt Designs

22

<div style="text-align:center">

@if(Session::has('success'))

<div class="row">

<div class="col-sm-6 col-md-4 col-md-offset-4 col-sm-

offset-3">

<div id="charge-mission" class="alert alert-success">

{{Session::get('success')}}

</div>

</div>

</div>

@endif

@if(!Auth::check())

<button type="button" class="btn btn-success"

onclick="window.location='{{route('user.signup')}}'"> Create your own

T-shirt here </button>

@else

<button type="button" class="btn btn-success"

onclick="window.location='{{route('user.createdesign')}}'"> Create your

own T-shirt here </button>

@endif

</div>

</br> </br>

<div class="main-slider">

<div id="myCarousel" class="carousel slide carousel-fade" data-

ride="carousel">

<!-- Indicators -->

<ol class="carousel-indicators">

Page 32: Custom T-Shirt Designs

23

<li data-target="#myCarousel" data-slide-to="0"

class="active"></li>

<li data-target="#myCarousel" data-slide-to="1"></li>

<li data-target="#myCarousel" data-slide-to="2"></li>

<li data-target="#myCarousel" data-slide-to="3"></li>

</ol>

<!-- Carousel items -->

<div class="carousel-inner">

<!-- Slide 1 : Active -->

<div class="item active">

<img align="left" width=60% src="{{

URL::to('images/tshirtdesign1.jpg')}}" alt="">

<img align="right" width=28% src="{{

URL::to('images/sale.png')}}" alt="">

<div class="carousel-caption">

<p> Get your sale today!! </p>

</div>

<!-- /.carousel-caption -->

</div>

<!-- /Slide1 -->

<!-- Slide 2 -->

<div class="item ">

<div style="text-align:center"><img width=76% src=

"{{ URL::to('images/tshirtdesign4.jpg')}}" alt=""> </div>

<div class="carousel-caption">

</div>

<!-- /.carousel-caption -->

Page 33: Custom T-Shirt Designs

24

</div>

<!-- /Slide2 -->

<!-- Slide 3 -->

<div class="item ">

<img align="left" width=40% src="{{

URL::to('images/shipping.png')}}" alt="">

<img align="right" src="{{

URL::to('images/tshirtdesign2.jpg')}}" alt="">

<div class="carousel-caption">

</div>

<!-- /.carousel-caption -->

</div>

<!-- /Slide3 -->

<!-- Slide 4 -->

<div class="item ">

<img align="right" src="{{

URL::to('images/tshirtdesign3.jpg')}}" alt="">

<img align="left" width=40% src="{{

URL::to('images/becreative.png')}}" alt="">

<div class="carousel-caption">

</div>

<!-- /.carousel-caption -->

</div>

<!-- /Slide4 -->

</div>

<!-- /.carousel-inner -->

<!-- Controls -->

Page 34: Custom T-Shirt Designs

25

<div class="control-box">

<a class="left carousel-control" href="#myCarousel"

role="button" data-slide="prev">

<span class="control-icon prev fa fa-chevron-left"

aria-hidden="true"></span>

<span class="sr-only">Previous</span>

</a>

<a class="right carousel-control" href="#myCarousel"

role="button" data-slide="next">

<span class="control-icon next fa fa-chevron-right"

aria-hidden="true"></span>

<span class="sr-only">Next</span>

</a>

</div>

<!-- /.control-box -->

</div>

<!-- /#myCarousel -->

</div>

<!-- /.main-slider -->

</div>

<hr>

</br></br>

<div> </div>

<div class="container">

<div class="text-center">

@foreach($products->chunk(3) as $productChunk)

<div class="row">

Page 35: Custom T-Shirt Designs

26

@foreach($productChunk as $product)

<div class="col-sm-6 col-md-4">

<div class="thumbnail">

<img class ="img-responsive" style="top:9%; width:28%;

height:48%;position:absolute;left:0; right:0; margin-left:auto; margin-

right:auto; "src="{{ $product->imagePath}}" alt="...">

<img class ="img-responsive" style=" background-color: {{

$product->color }}" src="{{ URL::to('images/front.png')}}" alt="...">

<div class="caption" >

<div class="btn-group pull-right" data-toggle="buttons"

>

<label class="btn btn-default ">

<input type="radio" name="size{{$product->id}}"

value="S" > S

</label>

<label class="btn btn-default">

<input type="radio" name="size{{$product->id}}"

value="M"> M

</label>

<label class="btn btn-default">

<input type="radio" name="size{{$product->id}}"

value="L"> L

</label>

</div>

<h3> {{$product->title}} </h3>

<p>{{$product->description}}

<p>

Page 36: Custom T-Shirt Designs

27

<div class="clearfix">

<div class="pull-left price"> $ {{$product->price}}

</div>

<a href="{{route('product.addtocart', ['id'=>

$product->id ]) }}" class="btn btn-success pull-right"

role="button">Add to Cart</a></p>

</div>

<br/>

</div>

</div>

</div>

@endforeach

</div>

@endforeach

@endsection

@section('scripts')

<script type="text/javascript"

src="https://cdnjs.cloudflare.com/ajax/libs/jquery-

cookie/1.4.1/jquery.cookie.min.js"></script>

<script type='text/javascript'>

$('input:radio').on('change', function() {

if ($(this).val() === "S") {

console.log('S');

$.cookie("size", "S");

} else if($(this).val() === "M"){

console.log('M');

$.cookie("size", "M");

Page 37: Custom T-Shirt Designs

28

}

else{

console.log('L');

$.cookie("size", "L");

}

});

</script>

<script>

$(document).ready(function() {

$('.carousel').carousel({

interval: 2500

})

});

</script>

@endsection

When design view is loaded on Design page, all the functionality is

handled by JavaScript dynamically. The following functions are used in this

project.

5.6 Code For Upload An Image

document.getElementById('files').onchange = function handleImage(e) {

var reader = new FileReader();

reader.onload = function (event) {

var imgObj = new Image();

imgObj.src = event.target.result;

Page 38: Custom T-Shirt Designs

29

imgObj.onload = function () {

var image = new fabric.Image(imgObj);

image.set({

angle: 0,

padding: 10,

cornersize: 10,

left: canvasobject.width / 2,

top: canvasobject.height / 2,

scaleY: canvasobject.height / image.width,

scaleX: canvasobject.width / image.width,

});

canvasobject.centerObject(image);

canvasobject.add(image);

canvasobject.renderAll();

designpricetotal += 5

myDiv.innerHTML = "$" + designpricetotal;

totalprice += 5;

myDiv2.innerHTML = "$" + totalprice;

}

}

reader.readAsDataURL(e.target.files[0]);

}

5.7 Code For Add Text Function

function addtext() {

var textvalue = document.getElementById('textbox').value;

var text = new fabric.Text(textvalue, { left: 100, top: 100 });

Page 39: Custom T-Shirt Designs

30

var fontcolor = document.getElementById("fontcolors").value

text.fontFamily = document.getElementById("fonts").value;

text.set({ fill: fontcolor });

canasobject.add(text);

if (!textvalue == "") {

designpricetotal += 4;

myDiv.innerHTML = "$" + designpricetotal;

totalprice += 4;

myDiv2.innerHTML = "$" + totalprice;

}

document.getElementById('textbox').value = null;

}

5.8 Code For Change Color Of T-Shirt

function changecolor(myinput) {

tshirt = document.getElementById("tshirt");

tshirt.style.backgroundColor = myinput;

selectcolor = myinput;

}

5.9 Code To Delete Image Or Text

function deleteObjects() {

var activeObject = canvasobject.getActiveObject();

if (activeObject) {

canvasobject.remove(activeObject);

if (activeObject.isType('text')) {

totalprice = totalprice - 4;

Page 40: Custom T-Shirt Designs

31

designpricetotal = designpricetotal - 4;

myDiv2.innerHTML = "$" + totalprice;

if (!designpricetotal == 0) {

myDiv.innerHTML = "$" + designpricetotal;

} else {

myDiv.innerHTML = "";

}

}

if (activeObject.isType('image')) {

totalprice = totalprice - 5;

designpricetotal = designpricetotal - 5;

myDiv2.innerHTML = "$" + totalprice;

myDiv.innerHTML = "$" + designpricetotal;

if (!designpricetotal == 0) {

myDiv.innerHTML = "$" + designpricetotal;

} else {

myDiv.innerHTML = "";

}

}

}

}

5.10 Code To Change Font

var changefont = function () {

selectedobject.fontFamily = document.getElementById("fonts").value;

canvasobject.deactivateAll().renderAll();

}

Page 41: Custom T-Shirt Designs

32

5.11 Apply Filters On Image Or Text

$(function () {

var filters = [

new fabric.Image.filters.Grayscale(), // grayscale 0

new fabric.Image.filters.Sepia(), // sepia 1

new fabric.Image.filters.Invert(), // invert 2

new fabric.Image.filters.Convolute({ // emboss 3

matrix: [1, 1, 1,

1, 0.7, -1,

-1, -1, -1]

}),

new fabric.Image.filters.Convolute({ // sharpen 4

matrix: [0, -1, 0,

-1, 5, -1,

0, -1, 0]

})

];

$('.filters').on("change", "input", function () {

var isChecked = $(this).prop("checked"),

filter = $("input[name=filterslist]:checked").val(),

obj = canvasobject.getActiveObject();

obj.filters.push(filters[filter]);

obj.applyFilters()

canvasobject.renderAll();

});

});

Page 42: Custom T-Shirt Designs

33

5.12 Sending AJAX To Save Design

var json_data = JSON.stringify(canvasobject.toDatalessJSON());

$.ajax({

url: 'savedesignvalues',

type: 'POST',

data: { _token: CSRF_TOKEN, message: JSON.stringify(designvalues),

message1: svg, message2: json_data },

success: function (response) {

if (response['error'] != 'error') {

var datatest = canvasobject.toJSON();

$.ajax({

url: 'savedesign',

type: 'POST',

data: { _token: CSRF_TOKEN, message:

JSON.stringify(datatest) },

success: function (response) {

document.getElementById('savedata').innerHTML

= "Design Saved Succcessfully";

}

});

} else {

document.getElementById('savedata').innerHTML =

"Design Already Exists. Please choose another name";

}

}

Page 43: Custom T-Shirt Designs

34

CHAPTER SIX

CONCLUSION

This project aims to integrate of MVC software architectural pattern to

create a fast and robust web application. With JavaScript embedded with

fabric.js, Custom T-Shirt Designs stands out to be a successful application that

lets a customer to pick their choice of design or make their own design with the

functionality of adding text, image and apply filters and save the entire design for

future reference.

6.1 Future Work

• Signing up through any social network could be added on the project.

• More pre-built objects or images by category could be selected instead of

uploading own images.

• A payment system could be added so that every customer whose design

is sold get a portion of the cost.

Page 44: Custom T-Shirt Designs

35

USER MANUAL

Figure 6. Product Page

Page 45: Custom T-Shirt Designs

36

Figure 7. Sign Up Page

Figure 8. Sign In Page

Page 46: Custom T-Shirt Designs

37

Figure 9. Profile Page

Figure 10. Design Page By Default

Page 47: Custom T-Shirt Designs

38

Figure 11. Design Page After Design

Page 48: Custom T-Shirt Designs

39

Figure 12. Choosing Size and Adding To Cart

Figure 13. Viewing Shopping Cart

Page 49: Custom T-Shirt Designs

40

Figure 14. Checkout Page

Figure 15. Successfully Purchased Notification

Page 50: Custom T-Shirt Designs

41

Figure 16. Email Notification Of Purchase For Customer

Figure 17. Email Notification With Attachment Of Design To Admin

Page 51: Custom T-Shirt Designs

42

REFERENCES

[1] “Fabric.js is a powerful and simpleJavascript HTML5 canvas library,” Fabric.js

Javascript Canvas Library. [Online]. Available: http://fabricjs.com/. [Accessed:

05-Sep-2017].

[2] “JavaScript,” Mozilla Developer Network. [Online]. Available:

https://developer.mozilla.org/en-US/docs/Web/JavaScript. [Accessed: 05-

Jun-2017].

[3] Laravel, “laravel/laravel,” GitHub, 01-Nov-2017. [Online]. Available:

https://github.com/laravel/laravel. [Accessed: 05-Nov-2017].

[4] Mschwarzmueller, “mschwarzmueller/laravel-shopping-cart-tutorial,” GitHub, 10-

May-2016. [Online]. Available: https://github.com/mschwarzmueller/laravel-

shopping-cart-tutorial. [Accessed: 05-Sep-2017].

[5] “MySQL 5.7 Reference Manual :: 1.3.1 What is MySQL?,” MySQL. [Online].

Available: https://dev.mysql.com/doc/refman/5.7/en/what-is-mysql.html.

[Accessed: 05-Aug-2017].

[6] “What is JavaScript?,” Mozilla Developer Network. [Online]. Available:

https://developer.mozilla.org/en-

US/docs/Learn/JavaScript/First_steps/What_is_JavaScript. [Accessed: 05-

Jun-2017].

[7] "Bootstrap (front-end framework)", En.wikipedia.org, 2017. [Online]. Available:

https://en.wikipedia.org/wiki/Bootstrap_(front-end_framework). [Accessed: 19-

Nov- 2017].