├── .env.example
├── .gitattributes
├── .gitignore
├── LICENSE
├── README.md
├── _sample_pages_
├── Account Detail Page.htm
└── Account Detail Page_files
│ ├── bootstrap.css
│ ├── bootstrap.js
│ ├── jquery-2.js
│ ├── jquery-ui.css
│ ├── jquery-ui.js
│ ├── jquery.css
│ └── jquery.js
├── app
├── Account.php
├── Activity.php
├── AppHelper.php
├── Commands
│ └── Command.php
├── Console
│ ├── Commands
│ │ └── Inspire.php
│ └── Kernel.php
├── Contact.php
├── ControllerHelperTrait.php
├── Events
│ └── Event.php
├── Exceptions
│ └── Handler.php
├── Handlers
│ ├── Commands
│ │ └── .gitkeep
│ └── Events
│ │ └── .gitkeep
├── Http
│ ├── Controllers
│ │ ├── AccountController.php
│ │ ├── ActivityController.php
│ │ ├── Auth
│ │ │ ├── AuthController.php
│ │ │ └── PasswordController.php
│ │ ├── ContactController.php
│ │ ├── Controller.php
│ │ ├── HomeController.php
│ │ ├── LeadController.php
│ │ ├── LookupHelperController.php
│ │ ├── OpportunityController.php
│ │ └── ReportController.php
│ ├── Kernel.php
│ ├── Middleware
│ │ ├── Authenticate.php
│ │ ├── RedirectIfAuthenticated.php
│ │ └── VerifyCsrfToken.php
│ ├── Requests
│ │ └── Request.php
│ └── routes.php
├── Lead.php
├── Opportunity.php
├── Providers
│ ├── AppServiceProvider.php
│ ├── BusServiceProvider.php
│ ├── ConfigServiceProvider.php
│ ├── EventServiceProvider.php
│ └── RouteServiceProvider.php
├── Services
│ └── Registrar.php
├── User.php
├── UserGroup.php
└── help.php
├── artisan
├── bootstrap
├── app.php
└── autoload.php
├── composer.json
├── config
├── app.php
├── auth.php
├── cache.php
├── compile.php
├── database.php
├── filesystems.php
├── mail.php
├── queue.php
├── services.php
├── session.php
└── view.php
├── database
├── .gitignore
├── migrations
│ ├── .gitkeep
│ ├── 2014_10_12_000000_create_users_table.php
│ ├── 2014_10_12_100000_create_password_resets_table.php
│ ├── 2015_03_10_035619_create_user_groups_table.php
│ ├── 2015_03_11_193031_create_contacts_table.php
│ ├── 2015_03_13_013543_create_leads_table.php
│ ├── 2015_03_13_034918_create_accounts_table.php
│ ├── 2015_03_13_034932_create_opportunities_table.php
│ ├── 2015_03_13_041506_create_activities_table.php
│ ├── 2015_03_19_034030_create_lookup_salutations.php
│ ├── 2015_03_19_034206_create_lookup_lead_sources.php
│ ├── 2015_03_19_034226_create_lookup_lead_status.php
│ ├── 2015_03_19_034437_create_lookup_ratings.php
│ ├── 2015_03_19_034616_create_lookup_industries.php
│ ├── 2015_03_22_002731_create_lookup_contact_type.php
│ ├── 2015_03_24_144917_create_lookup_account_type.php
│ ├── 2015_03_24_145147_create_lookup_account_ownership.php
│ ├── 2015_03_24_234023_create_lookup_opportunity_stage.php
│ ├── 2015_03_25_000627_create_lookup_opportunity_type.php
│ ├── 2015_03_26_154750_create_lookup_activity_priority.php
│ ├── 2015_03_26_155128_create_lookup_activity_status.php
│ └── 2015_03_26_200417_create_lookup_activity_type.php
└── seeds
│ ├── .gitkeep
│ └── DatabaseSeeder.php
├── gulpfile.js
├── package.json
├── phpspec.yml
├── phpunit.xml
├── public
├── .htaccess
├── css
│ ├── app.css
│ ├── bootstrap.min.css
│ ├── images
│ │ ├── ui-bg_diagonals-thick_90_eeeeee_40x40.png
│ │ ├── ui-bg_flat_15_cd0a0a_40x100.png
│ │ ├── ui-bg_glass_100_e4f1fb_1x400.png
│ │ ├── ui-bg_glass_50_3baae3_1x400.png
│ │ ├── ui-bg_glass_80_d7ebf9_1x400.png
│ │ ├── ui-bg_highlight-hard_100_f2f5f7_1x100.png
│ │ ├── ui-bg_highlight-hard_70_000000_1x100.png
│ │ ├── ui-bg_highlight-soft_100_deedf7_1x100.png
│ │ ├── ui-bg_highlight-soft_25_ffef8f_1x100.png
│ │ ├── ui-icons_2694e8_256x240.png
│ │ ├── ui-icons_2e83ff_256x240.png
│ │ ├── ui-icons_3d80b3_256x240.png
│ │ ├── ui-icons_72a7cf_256x240.png
│ │ └── ui-icons_ffffff_256x240.png
│ ├── jquery-ui.min.css
│ └── jquery.datetimepicker.css
├── favicon.ico
├── fonts
│ ├── glyphicons-halflings-regular.eot
│ ├── glyphicons-halflings-regular.svg
│ ├── glyphicons-halflings-regular.ttf
│ ├── glyphicons-halflings-regular.woff
│ └── glyphicons-halflings-regular.woff2
├── index.php
├── js
│ ├── bootstrap.min.js
│ ├── jquery-2.1.3.min.js
│ ├── jquery-ui.min.js
│ └── jquery.datetimepicker.js
└── robots.txt
├── resources
├── assets
│ └── less
│ │ ├── app.less
│ │ └── bootstrap
│ │ ├── alerts.less
│ │ ├── badges.less
│ │ ├── bootstrap.less
│ │ ├── breadcrumbs.less
│ │ ├── button-groups.less
│ │ ├── buttons.less
│ │ ├── carousel.less
│ │ ├── close.less
│ │ ├── code.less
│ │ ├── component-animations.less
│ │ ├── dropdowns.less
│ │ ├── forms.less
│ │ ├── glyphicons.less
│ │ ├── grid.less
│ │ ├── input-groups.less
│ │ ├── jumbotron.less
│ │ ├── labels.less
│ │ ├── list-group.less
│ │ ├── media.less
│ │ ├── mixins.less
│ │ ├── mixins
│ │ ├── alerts.less
│ │ ├── background-variant.less
│ │ ├── border-radius.less
│ │ ├── buttons.less
│ │ ├── center-block.less
│ │ ├── clearfix.less
│ │ ├── forms.less
│ │ ├── gradients.less
│ │ ├── grid-framework.less
│ │ ├── grid.less
│ │ ├── hide-text.less
│ │ ├── image.less
│ │ ├── labels.less
│ │ ├── list-group.less
│ │ ├── nav-divider.less
│ │ ├── nav-vertical-align.less
│ │ ├── opacity.less
│ │ ├── pagination.less
│ │ ├── panels.less
│ │ ├── progress-bar.less
│ │ ├── reset-filter.less
│ │ ├── resize.less
│ │ ├── responsive-visibility.less
│ │ ├── size.less
│ │ ├── tab-focus.less
│ │ ├── table-row.less
│ │ ├── text-emphasis.less
│ │ ├── text-overflow.less
│ │ └── vendor-prefixes.less
│ │ ├── modals.less
│ │ ├── navbar.less
│ │ ├── navs.less
│ │ ├── normalize.less
│ │ ├── pager.less
│ │ ├── pagination.less
│ │ ├── panels.less
│ │ ├── popovers.less
│ │ ├── print.less
│ │ ├── progress-bars.less
│ │ ├── responsive-embed.less
│ │ ├── responsive-utilities.less
│ │ ├── scaffolding.less
│ │ ├── tables.less
│ │ ├── theme.less
│ │ ├── thumbnails.less
│ │ ├── tooltip.less
│ │ ├── type.less
│ │ ├── utilities.less
│ │ ├── variables.less
│ │ └── wells.less
├── lang
│ └── en
│ │ ├── pagination.php
│ │ ├── passwords.php
│ │ └── validation.php
└── views
│ ├── account
│ ├── account-change-helper.blade.php
│ ├── account-edit-owner.blade.php
│ ├── account-edit.blade.php
│ ├── account-form-fields.blade.php
│ ├── account-index.blade.php
│ ├── account-new.blade.php
│ └── account-view.blade.php
│ ├── activity
│ ├── activity-edit.blade.php
│ ├── activity-form-fields.blade.php
│ ├── activity-index.blade.php
│ ├── activity-new.blade.php
│ ├── activity-related-list.blade.php
│ └── activity-view.blade.php
│ ├── app.blade.php
│ ├── appguest.blade.php
│ ├── appnonav.blade.php
│ ├── auth
│ ├── login.blade.php
│ ├── password.blade.php
│ ├── register.blade.php
│ └── reset.blade.php
│ ├── contact
│ ├── contact-edit-owner.blade.php
│ ├── contact-edit.blade.php
│ ├── contact-form-fields.blade.php
│ ├── contact-index.blade.php
│ ├── contact-new.blade.php
│ ├── contact-related-list.blade.php
│ └── contact-view.blade.php
│ ├── emails
│ └── password.blade.php
│ ├── errors
│ └── 503.blade.php
│ ├── home.blade.php
│ ├── lead
│ ├── lead-conversion-form.blade.php
│ ├── lead-edit-owner.blade.php
│ ├── lead-edit.blade.php
│ ├── lead-form-fields.blade.php
│ ├── lead-index.blade.php
│ ├── lead-new.blade.php
│ └── lead-view.blade.php
│ ├── opportunity
│ ├── opportunity-edit-owner.blade.php
│ ├── opportunity-edit.blade.php
│ ├── opportunity-form-fields.blade.php
│ ├── opportunity-index.blade.php
│ ├── opportunity-new.blade.php
│ ├── opportunity-related-list.blade.php
│ └── opportunity-view.blade.php
│ ├── partials
│ ├── css.blade.php
│ ├── desc-owner-timestamps.blade.php
│ ├── index-history-list.blade.php
│ ├── index-search-form-fields.blade.php
│ ├── js.blade.php
│ └── page-messages.blade.php
│ └── vendor
│ └── .gitkeep
├── server.php
├── storage
├── .gitignore
├── app
│ └── .gitignore
├── framework
│ ├── .gitignore
│ ├── cache
│ │ └── .gitignore
│ ├── sessions
│ │ └── .gitignore
│ └── views
│ │ └── .gitignore
└── logs
│ └── .gitignore
└── tests
├── ExampleTest.php
└── TestCase.php
/.env.example:
--------------------------------------------------------------------------------
1 | APP_ENV=local
2 | APP_DEBUG=true
3 | APP_KEY=SomeRandomString
4 |
5 | DB_HOST=localhost
6 | DB_DATABASE=homestead
7 | DB_USERNAME=homestead
8 | DB_PASSWORD=secret
9 |
10 | CACHE_DRIVER=file
11 | SESSION_DRIVER=file
12 |
--------------------------------------------------------------------------------
/.gitattributes:
--------------------------------------------------------------------------------
1 | * text=auto
2 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Build and Release Folders
2 | bin/
3 | bin-debug/
4 | bin-release/
5 |
6 | # Other files and folders
7 | .settings/
8 |
9 | # Project files, i.e. `.project`, `.actionScriptProperties` and `.flexProperties`
10 | # should NOT be excluded as they contain compiler settings and other important
11 | # information for Eclipse / Flash Builder.
12 |
13 |
14 |
15 |
16 | /vendor
17 | /node_modules
18 | .env
19 | composer.lock
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # crm-laravel
2 | A CRM application in Laravel 5
3 |
4 | This a project I've developed as part of my self-learning. It uses Laravel 5, Bootstrap 3 and some jQuery components. You can use it at your own risk.
5 |
6 | Setup
7 | -----
8 | * Install Laravel and save all files under project folder.
9 | * Update database credentials in config/database.php or save a copy of .env-example file as .env and update credentials
10 | * Run migrations and seed database.
11 | * Use user credentials in the seeder to login.
12 |
--------------------------------------------------------------------------------
/app/Account.php:
--------------------------------------------------------------------------------
1 | morphMany('App\Activity', 'related');
20 | }
21 |
22 | public function contacts()
23 | {
24 | return $this->hasMany('App\Contact');
25 | }
26 |
27 | public function owner()
28 | {
29 | return $this->belongsTo('App\User');
30 | }
31 |
32 | public function adder()
33 | {
34 | return $this->belongsTo('App\User');
35 | }
36 |
37 | public function modifier()
38 | {
39 | return $this->belongsTo('App\User');
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/app/Activity.php:
--------------------------------------------------------------------------------
1 | morphTo();
19 | }
20 |
21 | public function owner()
22 | {
23 | return $this->belongsTo('App\User');
24 | }
25 | }
26 |
27 |
--------------------------------------------------------------------------------
/app/Commands/Command.php:
--------------------------------------------------------------------------------
1 | comment(PHP_EOL.Inspiring::quote().PHP_EOL);
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/app/Console/Kernel.php:
--------------------------------------------------------------------------------
1 | command('inspire')
26 | ->hourly();
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/app/Contact.php:
--------------------------------------------------------------------------------
1 | morphMany('App\Activity', 'related');
19 | }
20 |
21 | public function opportunities()
22 | {
23 | return $this->hasMany('App\Opportunity');
24 | }
25 |
26 | public function account()
27 | {
28 | return $this->belongsTo('App\Account');
29 | }
30 |
31 | public function owner()
32 | {
33 | return $this->belongsTo('App\User');
34 | }
35 |
36 | public function adder()
37 | {
38 | return $this->belongsTo('App\User');
39 | }
40 |
41 | public function modifier()
42 | {
43 | return $this->belongsTo('App\User');
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/Events/Event.php:
--------------------------------------------------------------------------------
1 | auth=$auth;
36 | $this->registrar=$registrar;
37 |
38 | $this->middleware('guest', ['except'=>'getLogout']);
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Auth/PasswordController.php:
--------------------------------------------------------------------------------
1 | auth=$auth;
36 | $this->passwords=$passwords;
37 |
38 | $this->middleware('guest');
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/app/Http/Controllers/Controller.php:
--------------------------------------------------------------------------------
1 | middleware('auth');
30 | }
31 |
32 | /**
33 | * Show the application dashboard to the user.
34 | *
35 | * @return Response
36 | */
37 | public function index()
38 | {
39 | $recentViews=$this->recentViews();
40 |
41 | $activityList=Auth::User()->activities()->where('status_id', '!=', 4)->get();
42 |
43 | return view('home', ['recentViews'=>$recentViews, 'activityList'=>$activityList]);
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/app/Http/Controllers/LookupHelperController.php:
--------------------------------------------------------------------------------
1 | middleware('auth');
19 | }
20 |
21 | /**
22 | * Display a listing of the resource.
23 | *
24 | * @return Response
25 | */
26 | public function index()
27 | {
28 | return redirect('/')->with('pageError', 'Reports have not been implemented yet!');
29 | }
30 |
31 | /**
32 | * Show the form for creating a new resource.
33 | *
34 | * @return Response
35 | */
36 | public function create()
37 | {
38 | //
39 | }
40 |
41 | /**
42 | * Store a newly created resource in storage.
43 | *
44 | * @return Response
45 | */
46 | public function store()
47 | {
48 | //
49 | }
50 |
51 | /**
52 | * Display the specified resource.
53 | *
54 | * @param int $id
55 | * @return Response
56 | */
57 | public function show($id)
58 | {
59 | //
60 | }
61 |
62 | /**
63 | * Show the form for editing the specified resource.
64 | *
65 | * @param int $id
66 | * @return Response
67 | */
68 | public function edit($id)
69 | {
70 | //
71 | }
72 |
73 | /**
74 | * Update the specified resource in storage.
75 | *
76 | * @param int $id
77 | * @return Response
78 | */
79 | public function update($id)
80 | {
81 | //
82 | }
83 |
84 | /**
85 | * Remove the specified resource from storage.
86 | *
87 | * @param int $id
88 | * @return Response
89 | */
90 | public function destroy($id)
91 | {
92 | //
93 | }
94 |
95 | }
96 |
--------------------------------------------------------------------------------
/app/Http/Kernel.php:
--------------------------------------------------------------------------------
1 | 'App\Http\Middleware\Authenticate',
28 | 'auth.basic' => 'Illuminate\Auth\Middleware\AuthenticateWithBasicAuth',
29 | 'guest' => 'App\Http\Middleware\RedirectIfAuthenticated',
30 | ];
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/app/Http/Middleware/Authenticate.php:
--------------------------------------------------------------------------------
1 | auth = $auth;
24 | }
25 |
26 | /**
27 | * Handle an incoming request.
28 | *
29 | * @param \Illuminate\Http\Request $request
30 | * @param \Closure $next
31 | * @return mixed
32 | */
33 | public function handle($request, Closure $next)
34 | {
35 | if ($this->auth->guest())
36 | {
37 | if ($request->ajax())
38 | {
39 | return response('Unauthorized.', 401);
40 | }
41 | else
42 | {
43 | return redirect()->guest('auth/login');
44 | }
45 | }
46 |
47 | return $next($request);
48 | }
49 |
50 | }
51 |
--------------------------------------------------------------------------------
/app/Http/Middleware/RedirectIfAuthenticated.php:
--------------------------------------------------------------------------------
1 | auth = $auth;
25 | }
26 |
27 | /**
28 | * Handle an incoming request.
29 | *
30 | * @param \Illuminate\Http\Request $request
31 | * @param \Closure $next
32 | * @return mixed
33 | */
34 | public function handle($request, Closure $next)
35 | {
36 | if ($this->auth->check())
37 | {
38 | return new RedirectResponse(url('/'));
39 | }
40 |
41 | return $next($request);
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/app/Http/Middleware/VerifyCsrfToken.php:
--------------------------------------------------------------------------------
1 | 'Auth\AuthController',
54 | 'password' => 'Auth\PasswordController',
55 | ]);
56 |
57 |
58 |
--------------------------------------------------------------------------------
/app/Lead.php:
--------------------------------------------------------------------------------
1 | morphMany('App\Activity', 'related');
19 | }
20 |
21 | public function owner()
22 | {
23 | return $this->belongsTo('App\User');
24 | }
25 |
26 | public function adder()
27 | {
28 | return $this->belongsTo('App\User');
29 | }
30 |
31 | public function modifier()
32 | {
33 | return $this->belongsTo('App\User');
34 | }
35 | }
36 |
--------------------------------------------------------------------------------
/app/Opportunity.php:
--------------------------------------------------------------------------------
1 | morphMany('App\Activity', 'related');
19 | }
20 |
21 | public function account()
22 | {
23 | return $this->belongsTo('App\Account');
24 | }
25 |
26 | public function owner()
27 | {
28 | return $this->belongsTo('App\User');
29 | }
30 |
31 | public function adder()
32 | {
33 | return $this->belongsTo('App\User');
34 | }
35 |
36 | public function modifier()
37 | {
38 | return $this->belongsTo('App\User');
39 | }
40 | }
41 |
42 |
--------------------------------------------------------------------------------
/app/Providers/AppServiceProvider.php:
--------------------------------------------------------------------------------
1 | app->bind(
29 | 'Illuminate\Contracts\Auth\Registrar',
30 | 'App\Services\Registrar'
31 | );
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/app/Providers/BusServiceProvider.php:
--------------------------------------------------------------------------------
1 | mapUsing(function($command)
17 | {
18 | return Dispatcher::simpleMapping(
19 | $command, 'App\Commands', 'App\Handlers\Commands'
20 | );
21 | });
22 | }
23 |
24 | /**
25 | * Register any application services.
26 | *
27 | * @return void
28 | */
29 | public function register()
30 | {
31 | //
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/app/Providers/ConfigServiceProvider.php:
--------------------------------------------------------------------------------
1 | [
15 | 'EventListener',
16 | ],
17 | ];
18 |
19 | /**
20 | * Register any other events for your application.
21 | *
22 | * @param \Illuminate\Contracts\Events\Dispatcher $events
23 | * @return void
24 | */
25 | public function boot(DispatcherContract $events)
26 | {
27 | parent::boot($events);
28 |
29 | //
30 | }
31 |
32 | }
33 |
--------------------------------------------------------------------------------
/app/Providers/RouteServiceProvider.php:
--------------------------------------------------------------------------------
1 | group(['namespace' => $this->namespace], function($router)
39 | {
40 | require app_path('Http/routes.php');
41 | });
42 | }
43 |
44 | }
45 |
--------------------------------------------------------------------------------
/app/Services/Registrar.php:
--------------------------------------------------------------------------------
1 | 'required|max:255',
19 | 'email' => 'required|email|max:255|unique:users',
20 | 'password' => 'required|confirmed|min:6',
21 | ]);
22 | }
23 |
24 | /**
25 | * Create a new user instance after a valid registration.
26 | *
27 | * @param array $data
28 | * @return User
29 | */
30 | public function create(array $data)
31 | {
32 | return User::create([
33 | 'name' => $data['name'],
34 | 'email' => $data['email'],
35 | 'password' => bcrypt($data['password']),
36 | ]);
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/app/User.php:
--------------------------------------------------------------------------------
1 | belongsTo('App\UserGroup');
37 | }
38 |
39 | public function leads()
40 | {
41 | return $this->hasMany('App\Lead');
42 | }
43 |
44 | public function contacts()
45 | {
46 | return $this->hasMany('App\Contact');
47 | }
48 |
49 | public function activities()
50 | {
51 | return $this->hasMany('App\Activity', 'owner_id');
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/app/UserGroup.php:
--------------------------------------------------------------------------------
1 | make('Illuminate\Contracts\Console\Kernel');
32 |
33 | $status = $kernel->handle(
34 | $input = new Symfony\Component\Console\Input\ArgvInput,
35 | new Symfony\Component\Console\Output\ConsoleOutput
36 | );
37 |
38 | /*
39 | |--------------------------------------------------------------------------
40 | | Shutdown The Application
41 | |--------------------------------------------------------------------------
42 | |
43 | | Once Artisan has finished running. We will fire off the shutdown events
44 | | so that any final work may be done by the application before we shut
45 | | down the process. This is the last thing to happen to the request.
46 | |
47 | */
48 |
49 | $kernel->terminate($input, $status);
50 |
51 | exit($status);
52 |
--------------------------------------------------------------------------------
/bootstrap/app.php:
--------------------------------------------------------------------------------
1 | singleton(
30 | 'Illuminate\Contracts\Http\Kernel',
31 | 'App\Http\Kernel'
32 | );
33 |
34 | $app->singleton(
35 | 'Illuminate\Contracts\Console\Kernel',
36 | 'App\Console\Kernel'
37 | );
38 |
39 | $app->singleton(
40 | 'Illuminate\Contracts\Debug\ExceptionHandler',
41 | 'App\Exceptions\Handler'
42 | );
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Return The Application
47 | |--------------------------------------------------------------------------
48 | |
49 | | This script returns the application instance. The instance is given to
50 | | the calling script so we can separate the building of the instances
51 | | from the actual running of the application and sending responses.
52 | |
53 | */
54 |
55 | return $app;
56 |
--------------------------------------------------------------------------------
/bootstrap/autoload.php:
--------------------------------------------------------------------------------
1 | 'eloquent',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Authentication Model
23 | |--------------------------------------------------------------------------
24 | |
25 | | When using the "Eloquent" authentication driver, we need to know which
26 | | Eloquent model should be used to retrieve your users. Of course, it
27 | | is often just the "User" model but you may use whatever you like.
28 | |
29 | */
30 |
31 | 'model' => 'App\User',
32 |
33 | /*
34 | |--------------------------------------------------------------------------
35 | | Authentication Table
36 | |--------------------------------------------------------------------------
37 | |
38 | | When using the "Database" authentication driver, we need to know which
39 | | table should be used to retrieve your users. We have chosen a basic
40 | | default value but you may easily change it to any table you like.
41 | |
42 | */
43 |
44 | 'table' => 'users',
45 |
46 | /*
47 | |--------------------------------------------------------------------------
48 | | Password Reset Settings
49 | |--------------------------------------------------------------------------
50 | |
51 | | Here you may set the options for resetting passwords including the view
52 | | that is your password reset e-mail. You can also set the name of the
53 | | table that maintains all of the reset tokens for your application.
54 | |
55 | | The expire time is the number of minutes that the reset token should be
56 | | considered valid. This security feature keeps tokens short-lived so
57 | | they have less time to be guessed. You may change this as needed.
58 | |
59 | */
60 |
61 | 'password' => [
62 | 'email' => 'emails.password',
63 | 'table' => 'password_resets',
64 | 'expire' => 60,
65 | ],
66 |
67 | ];
68 |
--------------------------------------------------------------------------------
/config/cache.php:
--------------------------------------------------------------------------------
1 | env('CACHE_DRIVER', 'file'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Cache Stores
21 | |--------------------------------------------------------------------------
22 | |
23 | | Here you may define all of the cache "stores" for your application as
24 | | well as their drivers. You may even define multiple stores for the
25 | | same cache driver to group types of items stored in your caches.
26 | |
27 | */
28 |
29 | 'stores' => [
30 |
31 | 'apc' => [
32 | 'driver' => 'apc'
33 | ],
34 |
35 | 'array' => [
36 | 'driver' => 'array'
37 | ],
38 |
39 | 'database' => [
40 | 'driver' => 'database',
41 | 'table' => 'cache',
42 | 'connection' => null,
43 | ],
44 |
45 | 'file' => [
46 | 'driver' => 'file',
47 | 'path' => storage_path().'/framework/cache',
48 | ],
49 |
50 | 'memcached' => [
51 | 'driver' => 'memcached',
52 | 'servers' => [
53 | [
54 | 'host' => '127.0.0.1', 'port' => 11211, 'weight' => 100
55 | ],
56 | ],
57 | ],
58 |
59 | 'redis' => [
60 | 'driver' => 'redis',
61 | 'connection' => 'default',
62 | ],
63 |
64 | ],
65 |
66 | /*
67 | |--------------------------------------------------------------------------
68 | | Cache Key Prefix
69 | |--------------------------------------------------------------------------
70 | |
71 | | When utilizing a RAM based store such as APC or Memcached, there might
72 | | be other applications utilizing the same cache. So, we'll specify a
73 | | value to get prefixed to all our keys so we can avoid collisions.
74 | |
75 | */
76 |
77 | 'prefix' => 'laravel',
78 |
79 | ];
80 |
--------------------------------------------------------------------------------
/config/compile.php:
--------------------------------------------------------------------------------
1 | [
17 |
18 | realpath(__DIR__.'/../app/Providers/AppServiceProvider.php'),
19 | realpath(__DIR__.'/../app/Providers/BusServiceProvider.php'),
20 | realpath(__DIR__.'/../app/Providers/ConfigServiceProvider.php'),
21 | realpath(__DIR__.'/../app/Providers/EventServiceProvider.php'),
22 | realpath(__DIR__.'/../app/Providers/RouteServiceProvider.php'),
23 |
24 | ],
25 |
26 | /*
27 | |--------------------------------------------------------------------------
28 | | Compiled File Providers
29 | |--------------------------------------------------------------------------
30 | |
31 | | Here you may list service providers which define a "compiles" function
32 | | that returns additional files that should be compiled, providing an
33 | | easy way to get common files from any packages you are utilizing.
34 | |
35 | */
36 |
37 | 'providers' => [
38 | //
39 | ],
40 |
41 | ];
42 |
--------------------------------------------------------------------------------
/config/filesystems.php:
--------------------------------------------------------------------------------
1 | 'local',
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Default Cloud Filesystem Disk
23 | |--------------------------------------------------------------------------
24 | |
25 | | Many applications store files both locally and in the cloud. For this
26 | | reason, you may specify a default "cloud" driver here. This driver
27 | | will be bound as the Cloud disk implementation in the container.
28 | |
29 | */
30 |
31 | 'cloud' => 's3',
32 |
33 | /*
34 | |--------------------------------------------------------------------------
35 | | Filesystem Disks
36 | |--------------------------------------------------------------------------
37 | |
38 | | Here you may configure as many filesystem "disks" as you wish, and you
39 | | may even configure multiple disks of the same driver. Defaults have
40 | | been setup for each driver as an example of the required options.
41 | |
42 | */
43 |
44 | 'disks' => [
45 |
46 | 'local' => [
47 | 'driver' => 'local',
48 | 'root' => storage_path().'/app',
49 | ],
50 |
51 | 's3' => [
52 | 'driver' => 's3',
53 | 'key' => 'your-key',
54 | 'secret' => 'your-secret',
55 | 'region' => 'your-region',
56 | 'bucket' => 'your-bucket',
57 | ],
58 |
59 | 'rackspace' => [
60 | 'driver' => 'rackspace',
61 | 'username' => 'your-username',
62 | 'key' => 'your-key',
63 | 'container' => 'your-container',
64 | 'endpoint' => 'https://identity.api.rackspacecloud.com/v2.0/',
65 | 'region' => 'IAD',
66 | ],
67 |
68 | ],
69 |
70 | ];
71 |
--------------------------------------------------------------------------------
/config/queue.php:
--------------------------------------------------------------------------------
1 | env('QUEUE_DRIVER', 'sync'),
20 |
21 | /*
22 | |--------------------------------------------------------------------------
23 | | Queue Connections
24 | |--------------------------------------------------------------------------
25 | |
26 | | Here you may configure the connection information for each server that
27 | | is used by your application. A default configuration has been added
28 | | for each back-end shipped with Laravel. You are free to add more.
29 | |
30 | */
31 |
32 | 'connections' => [
33 |
34 | 'sync' => [
35 | 'driver' => 'sync',
36 | ],
37 |
38 | 'database' => [
39 | 'driver' => 'database',
40 | 'table' => 'jobs',
41 | 'queue' => 'default',
42 | 'expire' => 60,
43 | ],
44 |
45 | 'beanstalkd' => [
46 | 'driver' => 'beanstalkd',
47 | 'host' => 'localhost',
48 | 'queue' => 'default',
49 | 'ttr' => 60,
50 | ],
51 |
52 | 'sqs' => [
53 | 'driver' => 'sqs',
54 | 'key' => 'your-public-key',
55 | 'secret' => 'your-secret-key',
56 | 'queue' => 'your-queue-url',
57 | 'region' => 'us-east-1',
58 | ],
59 |
60 | 'iron' => [
61 | 'driver' => 'iron',
62 | 'host' => 'mq-aws-us-east-1.iron.io',
63 | 'token' => 'your-token',
64 | 'project' => 'your-project-id',
65 | 'queue' => 'your-queue-name',
66 | 'encrypt' => true,
67 | ],
68 |
69 | 'redis' => [
70 | 'driver' => 'redis',
71 | 'queue' => 'default',
72 | 'expire' => 60,
73 | ],
74 |
75 | ],
76 |
77 | /*
78 | |--------------------------------------------------------------------------
79 | | Failed Queue Jobs
80 | |--------------------------------------------------------------------------
81 | |
82 | | These options configure the behavior of failed queue job logging so you
83 | | can control which database and table are used to store the jobs that
84 | | have failed. You may change them to any database / table you wish.
85 | |
86 | */
87 |
88 | 'failed' => [
89 | 'database' => 'mysql', 'table' => 'failed_jobs',
90 | ],
91 |
92 | ];
93 |
--------------------------------------------------------------------------------
/config/services.php:
--------------------------------------------------------------------------------
1 | [
18 | 'domain' => '',
19 | 'secret' => '',
20 | ],
21 |
22 | 'mandrill' => [
23 | 'secret' => '',
24 | ],
25 |
26 | 'ses' => [
27 | 'key' => '',
28 | 'secret' => '',
29 | 'region' => 'us-east-1',
30 | ],
31 |
32 | 'stripe' => [
33 | 'model' => 'User',
34 | 'secret' => '',
35 | ],
36 |
37 | ];
38 |
--------------------------------------------------------------------------------
/config/view.php:
--------------------------------------------------------------------------------
1 | [
17 | realpath(base_path('resources/views'))
18 | ],
19 |
20 | /*
21 | |--------------------------------------------------------------------------
22 | | Compiled View Path
23 | |--------------------------------------------------------------------------
24 | |
25 | | This option determines where all the compiled Blade templates will be
26 | | stored for your application. Typically, this is within the storage
27 | | directory. However, as usual, you are free to change this value.
28 | |
29 | */
30 |
31 | 'compiled' => realpath(storage_path().'/framework/views'),
32 |
33 | ];
34 |
--------------------------------------------------------------------------------
/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 |
--------------------------------------------------------------------------------
/database/migrations/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/database/migrations/.gitkeep
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_000000_create_users_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
19 | $table->integer('user_group_id')->unsigned()->default(0);
20 | $table->string('name');
21 | $table->string('email')->unique();
22 | $table->string('password', 60);
23 | $table->enum('status', array('active', 'frozen', 'disabled'))->default('active');
24 | $table->text('recent_items')->nullable();
25 | $table->softDeletes();
26 | $table->rememberToken();
27 | $table->timestamps();
28 |
29 | // $table->foreign('user_group_id')->references('id')->on('user_groups');
30 | });
31 |
32 |
33 | }
34 |
35 | /**
36 | * Reverse the migrations.
37 | *
38 | * @return void
39 | */
40 | public function down()
41 | {
42 | Schema::drop('users');
43 | }
44 |
45 | }
46 |
--------------------------------------------------------------------------------
/database/migrations/2014_10_12_100000_create_password_resets_table.php:
--------------------------------------------------------------------------------
1 | string('email')->index();
18 | $table->string('token')->index();
19 | $table->timestamp('created_at');
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::drop('password_resets');
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_10_035619_create_user_groups_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('user_groups');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_11_193031_create_contacts_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('email')->unique();
19 |
20 | $table->string('title')->nullable();
21 | $table->string('first_name');
22 | $table->string('last_name');
23 | $table->string('department')->nullable();
24 | $table->text('description')->nullable();
25 | $table->date('birthdate')->nullable();
26 | $table->string('interests')->nullable();
27 |
28 | $table->string('phone')->nullable();
29 | $table->string('mobile_phone')->nullable();
30 | $table->string('home_phone')->nullable();
31 | $table->string('other_phone')->nullable();
32 | $table->string('fax')->nullable();
33 |
34 | $table->string('assistant')->nullable();
35 | $table->string('assistant_phone')->nullable();
36 |
37 | $table->boolean('do_not_call')->nullable();
38 | $table->boolean('do_not_email')->nullable();
39 | $table->boolean('do_not_fax')->nullable();
40 |
41 | $table->boolean('email_opt_out')->nullable();
42 | $table->boolean('fax_opt_out')->nullable();
43 |
44 | $table->string('street')->nullable();
45 | $table->string('city')->nullable();
46 | $table->string('state')->nullable();
47 | $table->string('zip')->nullable();
48 | $table->string('country')->nullable();
49 |
50 | $table->string('street_other')->nullable();
51 | $table->string('city_other')->nullable();
52 | $table->string('state_other')->nullable();
53 | $table->string('zip_other')->nullable();
54 | $table->string('country_other')->nullable();
55 |
56 | $table->integer('salutation_id')->unsigned()->nullable();
57 | $table->integer('lead_source_id')->unsigned()->nullable();
58 | $table->integer('type_id')->unsigned()->nullable();
59 | $table->integer('converted_lead_id')->unsigned()->nullable();
60 |
61 | $table->integer('account_id')->unsigned()->nullable();
62 | $table->integer('owner_id')->unsigned()->nullable();
63 | $table->integer('adder_id')->unsigned()->nullable();
64 | $table->integer('modifier_id')->unsigned()->nullable();
65 | $table->softDeletes();
66 | $table->timestamps();
67 | });
68 | }
69 |
70 | /**
71 | * Reverse the migrations.
72 | *
73 | * @return void
74 | */
75 | public function down()
76 | {
77 | Schema::drop('contacts');
78 | }
79 | }
80 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_13_013543_create_leads_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('email')->unique();
19 |
20 | $table->string('title')->nullable();
21 | $table->string('first_name');
22 | $table->string('last_name');
23 | $table->text('description')->nullable();
24 | $table->string('company')->nullable();
25 | $table->integer('num_of_employees')->unsigned()->nullable();
26 | $table->string('website')->nullable();
27 | $table->decimal('annual_revenue', 14, 0)->nullable();
28 |
29 | $table->string('phone')->nullable();
30 | $table->string('mobile_phone')->nullable();
31 | $table->string('fax')->nullable();
32 |
33 | $table->boolean('do_not_call')->nullable();
34 | $table->boolean('do_not_email')->nullable();
35 | $table->boolean('do_not_fax')->nullable();
36 |
37 | $table->boolean('email_opt_out')->nullable();
38 | $table->boolean('fax_opt_out')->nullable();
39 |
40 | $table->date('birthdate')->nullable();
41 |
42 | $table->string('street')->nullable();
43 | $table->string('city')->nullable();
44 | $table->string('state')->nullable();
45 | $table->string('zip')->nullable();
46 | $table->string('country')->nullable();
47 |
48 | $table->integer('salutation_id')->unsigned()->nullable();
49 | $table->integer('lead_source_id')->unsigned()->nullable();
50 | $table->integer('status_id')->unsigned()->nullable();
51 | $table->integer('industry_id')->unsigned()->nullable();
52 | // $table->integer('campaign_id')->unsigned()->nullable();
53 | $table->integer('rating_id')->unsigned()->nullable();
54 |
55 | $table->date('converted_at')->nullable();
56 |
57 | $table->boolean('read_by_owner')->nullable();
58 |
59 | $table->integer('owner_id')->unsigned()->nullable();
60 | $table->integer('adder_id')->unsigned()->nullable();
61 | $table->integer('modifier_id')->unsigned()->nullable();
62 | $table->softDeletes();
63 | $table->timestamps();
64 | });
65 | }
66 |
67 | /**
68 | * Reverse the migrations.
69 | *
70 | * @return void
71 | */
72 | public function down()
73 | {
74 | Schema::drop('leads');
75 | }
76 |
77 | }
78 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_13_034918_create_accounts_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('name');
19 | $table->string('number');
20 | $table->string('phone')->nullable();
21 | $table->string('fax')->nullable();
22 | $table->decimal('annual_revenue', 14, 0)->nullable();
23 | $table->integer('num_of_employees')->unsigned()->nullable();
24 | $table->string('website')->nullable();
25 | $table->text('description')->nullable();
26 |
27 | $table->string('street')->nullable();
28 | $table->string('city')->nullable();
29 | $table->string('state')->nullable();
30 | $table->string('zip')->nullable();
31 | $table->string('country')->nullable();
32 |
33 | $table->string('street_other')->nullable();
34 | $table->string('city_other')->nullable();
35 | $table->string('state_other')->nullable();
36 | $table->string('zip_other')->nullable();
37 | $table->string('country_other')->nullable();
38 |
39 | $table->integer('lead_source_id')->unsigned()->nullable();
40 | $table->integer('industry_id')->unsigned()->nullable();
41 | $table->integer('type_id')->unsigned()->nullable();
42 | $table->integer('ownership_id')->unsigned()->nullable();
43 | $table->integer('rating_id')->unsigned()->nullable();
44 |
45 | $table->integer('owner_id')->unsigned()->nullable();
46 | $table->integer('adder_id')->unsigned()->nullable();
47 | $table->integer('modifier_id')->unsigned()->nullable();
48 | $table->softDeletes();
49 | $table->timestamps();
50 | });
51 | }
52 |
53 | /**
54 | * Reverse the migrations.
55 | *
56 | * @return void
57 | */
58 | public function down()
59 | {
60 | Schema::drop('accounts');
61 | }
62 | }
63 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_13_034932_create_opportunities_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('name');
19 | $table->decimal('amount', 12, 2)->nullable();
20 | $table->date('close_date');
21 | $table->decimal('expected_revenue', 12, 2)->nullable();
22 | $table->string('next_step')->nullable();
23 | $table->smallInteger('probability');
24 | $table->string('competitors')->nullable();
25 | $table->text('description')->nullable();
26 |
27 | $table->integer('lead_source_id')->unsigned()->nullable();
28 | $table->integer('stage_id')->unsigned()->nullable();
29 | $table->integer('type_id')->unsigned()->nullable();
30 |
31 | $table->integer('contact_id')->unsigned()->nullable();
32 | $table->integer('owner_id')->unsigned()->nullable();
33 | $table->integer('adder_id')->unsigned()->nullable();
34 | $table->integer('modifier_id')->unsigned()->nullable();
35 | $table->softDeletes();
36 | $table->timestamps();
37 | });
38 | }
39 |
40 | /**
41 | * Reverse the migrations.
42 | *
43 | * @return void
44 | */
45 | public function down()
46 | {
47 | Schema::drop('opportunities');
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_13_041506_create_activities_table.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('subject');
19 | $table->string('location');
20 | $table->date('start_date')->nullable();
21 | $table->date('end_date')->nullable();
22 | $table->text('description')->nullable();
23 | $table->smallInteger('allday')->unsigned()->nullable();
24 | $table->dateTime('remind_at')->nullable();
25 |
26 | $table->smallInteger('type_id')->unsigned()->nullable();
27 | $table->smallInteger('priority_id')->unsigned()->nullable();
28 | $table->smallInteger('status_id')->unsigned()->nullable();
29 |
30 | $table->integer('related_id')->unsigned()->nullable();
31 | $table->string('related_type')->nullable();
32 |
33 | $table->integer('owner_id')->unsigned()->nullable();
34 | $table->integer('adder_id')->unsigned()->nullable();
35 | $table->integer('modifier_id')->unsigned()->nullable();
36 | $table->softDeletes();
37 | $table->timestamps();
38 | });
39 | }
40 |
41 | /**
42 | * Reverse the migrations.
43 | *
44 | * @return void
45 | */
46 | public function down()
47 | {
48 | Schema::drop('activities');
49 | }
50 |
51 | }
52 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_19_034030_create_lookup_salutations.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_salutation');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_19_034206_create_lookup_lead_sources.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_lead_source');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_19_034226_create_lookup_lead_status.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_lead_status');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_19_034437_create_lookup_ratings.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_rating');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_19_034616_create_lookup_industries.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_industry');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_22_002731_create_lookup_contact_type.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_contact_type');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_24_144917_create_lookup_account_type.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_account_type');
32 | }
33 |
34 | }
--------------------------------------------------------------------------------
/database/migrations/2015_03_24_145147_create_lookup_account_ownership.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_account_ownership');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_24_234023_create_lookup_opportunity_stage.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_opportunity_stage');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_25_000627_create_lookup_opportunity_type.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_opportunity_type');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_26_154750_create_lookup_activity_priority.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_activity_priority');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_26_155128_create_lookup_activity_status.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_activity_status');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/migrations/2015_03_26_200417_create_lookup_activity_type.php:
--------------------------------------------------------------------------------
1 | increments('id');
18 | $table->string('value')->unique();
19 | $table->softDeletes();
20 | $table->timestamps();
21 | });
22 | }
23 |
24 | /**
25 | * Reverse the migrations.
26 | *
27 | * @return void
28 | */
29 | public function down()
30 | {
31 | Schema::drop('lkp_activity_type');
32 | }
33 |
34 | }
35 |
--------------------------------------------------------------------------------
/database/seeds/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/database/seeds/.gitkeep
--------------------------------------------------------------------------------
/gulpfile.js:
--------------------------------------------------------------------------------
1 | var elixir = require('laravel-elixir');
2 |
3 | /*
4 | |--------------------------------------------------------------------------
5 | | Elixir Asset Management
6 | |--------------------------------------------------------------------------
7 | |
8 | | Elixir provides a clean, fluent API for defining some basic Gulp tasks
9 | | for your Laravel application. By default, we are compiling the Less
10 | | file for our application, as well as publishing vendor resources.
11 | |
12 | */
13 |
14 | elixir(function(mix) {
15 | mix.less('app.less');
16 | });
17 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "devDependencies": {
3 | "gulp": "^3.8.8",
4 | "laravel-elixir": "*"
5 | }
6 | }
7 |
--------------------------------------------------------------------------------
/phpspec.yml:
--------------------------------------------------------------------------------
1 | suites:
2 | main:
3 | namespace: App
4 | psr4_prefix: App
5 | src_path: app
--------------------------------------------------------------------------------
/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
14 | ./tests/
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
--------------------------------------------------------------------------------
/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews
4 |
5 |
6 | RewriteEngine On
7 |
8 | # Redirect Trailing Slashes...
9 | RewriteRule ^(.*)/$ /$1 [L,R=301]
10 |
11 | # Handle Front Controller...
12 | RewriteCond %{REQUEST_FILENAME} !-d
13 | RewriteCond %{REQUEST_FILENAME} !-f
14 | RewriteRule ^ index.php [L]
15 |
16 |
--------------------------------------------------------------------------------
/public/css/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-bg_diagonals-thick_90_eeeeee_40x40.png
--------------------------------------------------------------------------------
/public/css/images/ui-bg_flat_15_cd0a0a_40x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-bg_flat_15_cd0a0a_40x100.png
--------------------------------------------------------------------------------
/public/css/images/ui-bg_glass_100_e4f1fb_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-bg_glass_100_e4f1fb_1x400.png
--------------------------------------------------------------------------------
/public/css/images/ui-bg_glass_50_3baae3_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-bg_glass_50_3baae3_1x400.png
--------------------------------------------------------------------------------
/public/css/images/ui-bg_glass_80_d7ebf9_1x400.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-bg_glass_80_d7ebf9_1x400.png
--------------------------------------------------------------------------------
/public/css/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-bg_highlight-hard_100_f2f5f7_1x100.png
--------------------------------------------------------------------------------
/public/css/images/ui-bg_highlight-hard_70_000000_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-bg_highlight-hard_70_000000_1x100.png
--------------------------------------------------------------------------------
/public/css/images/ui-bg_highlight-soft_100_deedf7_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-bg_highlight-soft_100_deedf7_1x100.png
--------------------------------------------------------------------------------
/public/css/images/ui-bg_highlight-soft_25_ffef8f_1x100.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-bg_highlight-soft_25_ffef8f_1x100.png
--------------------------------------------------------------------------------
/public/css/images/ui-icons_2694e8_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-icons_2694e8_256x240.png
--------------------------------------------------------------------------------
/public/css/images/ui-icons_2e83ff_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-icons_2e83ff_256x240.png
--------------------------------------------------------------------------------
/public/css/images/ui-icons_3d80b3_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-icons_3d80b3_256x240.png
--------------------------------------------------------------------------------
/public/css/images/ui-icons_72a7cf_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-icons_72a7cf_256x240.png
--------------------------------------------------------------------------------
/public/css/images/ui-icons_ffffff_256x240.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/css/images/ui-icons_ffffff_256x240.png
--------------------------------------------------------------------------------
/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/favicon.ico
--------------------------------------------------------------------------------
/public/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/public/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/public/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/public/fonts/glyphicons-halflings-regular.woff2:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/paralaks/crm-laravel/2540d59ee950be17c583ccc503478a237eb59cf1/public/fonts/glyphicons-halflings-regular.woff2
--------------------------------------------------------------------------------
/public/index.php:
--------------------------------------------------------------------------------
1 |
7 | */
8 |
9 | /*
10 | |--------------------------------------------------------------------------
11 | | Register The Auto Loader
12 | |--------------------------------------------------------------------------
13 | |
14 | | Composer provides a convenient, automatically generated class loader for
15 | | our application. We just need to utilize it! We'll simply require it
16 | | into the script here so that we don't have to worry about manual
17 | | loading any of our classes later on. It feels nice to relax.
18 | |
19 | */
20 |
21 | require __DIR__.'/../bootstrap/autoload.php';
22 |
23 | /*
24 | |--------------------------------------------------------------------------
25 | | Turn On The Lights
26 | |--------------------------------------------------------------------------
27 | |
28 | | We need to illuminate PHP development, so let us turn on the lights.
29 | | This bootstraps the framework and gets it ready for use, then it
30 | | will load up this application so that we can run it and send
31 | | the responses back to the browser and delight our users.
32 | |
33 | */
34 |
35 | $app = require_once __DIR__.'/../bootstrap/app.php';
36 |
37 | /*
38 | |--------------------------------------------------------------------------
39 | | Run The Application
40 | |--------------------------------------------------------------------------
41 | |
42 | | Once we have the application, we can simply call the run method,
43 | | which will execute the request and send the response back to
44 | | the client's browser allowing them to enjoy the creative
45 | | and wonderful application we have prepared for them.
46 | |
47 | */
48 |
49 | $kernel = $app->make('Illuminate\Contracts\Http\Kernel');
50 |
51 | $response = $kernel->handle($request = Illuminate\Http\Request::capture());
52 |
53 | $response->send();
54 |
55 | $kernel->terminate($request, $response);
56 |
--------------------------------------------------------------------------------
/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/resources/assets/less/app.less:
--------------------------------------------------------------------------------
1 | @import "bootstrap/bootstrap";
2 |
3 | @btn-font-weight: 300;
4 | @font-family-sans-serif: "Roboto", Helvetica, Arial, sans-serif;
5 |
6 | body, label, .checkbox label {
7 | font-weight: 300;
8 | }
9 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/alerts.less:
--------------------------------------------------------------------------------
1 | //
2 | // Alerts
3 | // --------------------------------------------------
4 |
5 |
6 | // Base styles
7 | // -------------------------
8 |
9 | .alert {
10 | padding: @alert-padding;
11 | margin-bottom: @line-height-computed;
12 | border: 1px solid transparent;
13 | border-radius: @alert-border-radius;
14 |
15 | // Headings for larger alerts
16 | h4 {
17 | margin-top: 0;
18 | // Specified for the h4 to prevent conflicts of changing @headings-color
19 | color: inherit;
20 | }
21 | // Provide class for links that match alerts
22 | .alert-link {
23 | font-weight: @alert-link-font-weight;
24 | }
25 |
26 | // Improve alignment and spacing of inner content
27 | > p,
28 | > ul {
29 | margin-bottom: 0;
30 | }
31 | > p + p {
32 | margin-top: 5px;
33 | }
34 | }
35 |
36 | // Dismissible alerts
37 | //
38 | // Expand the right padding and account for the close button's positioning.
39 |
40 | .alert-dismissable, // The misspelled .alert-dismissable was deprecated in 3.2.0.
41 | .alert-dismissible {
42 | padding-right: (@alert-padding + 20);
43 |
44 | // Adjust close link position
45 | .close {
46 | position: relative;
47 | top: -2px;
48 | right: -21px;
49 | color: inherit;
50 | }
51 | }
52 |
53 | // Alternate styles
54 | //
55 | // Generate contextual modifier classes for colorizing the alert.
56 |
57 | .alert-success {
58 | .alert-variant(@alert-success-bg; @alert-success-border; @alert-success-text);
59 | }
60 | .alert-info {
61 | .alert-variant(@alert-info-bg; @alert-info-border; @alert-info-text);
62 | }
63 | .alert-warning {
64 | .alert-variant(@alert-warning-bg; @alert-warning-border; @alert-warning-text);
65 | }
66 | .alert-danger {
67 | .alert-variant(@alert-danger-bg; @alert-danger-border; @alert-danger-text);
68 | }
69 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/badges.less:
--------------------------------------------------------------------------------
1 | //
2 | // Badges
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | .badge {
8 | display: inline-block;
9 | min-width: 10px;
10 | padding: 3px 7px;
11 | font-size: @font-size-small;
12 | font-weight: @badge-font-weight;
13 | color: @badge-color;
14 | line-height: @badge-line-height;
15 | vertical-align: baseline;
16 | white-space: nowrap;
17 | text-align: center;
18 | background-color: @badge-bg;
19 | border-radius: @badge-border-radius;
20 |
21 | // Empty badges collapse automatically (not available in IE8)
22 | &:empty {
23 | display: none;
24 | }
25 |
26 | // Quick fix for badges in buttons
27 | .btn & {
28 | position: relative;
29 | top: -1px;
30 | }
31 | .btn-xs & {
32 | top: 0;
33 | padding: 1px 5px;
34 | }
35 |
36 | // Hover state, but only for links
37 | a& {
38 | &:hover,
39 | &:focus {
40 | color: @badge-link-hover-color;
41 | text-decoration: none;
42 | cursor: pointer;
43 | }
44 | }
45 |
46 | // Account for badges in navs
47 | .list-group-item.active > &,
48 | .nav-pills > .active > a > & {
49 | color: @badge-active-color;
50 | background-color: @badge-active-bg;
51 | }
52 | .list-group-item > & {
53 | float: right;
54 | }
55 | .list-group-item > & + & {
56 | margin-right: 5px;
57 | }
58 | .nav-pills > li > a > & {
59 | margin-left: 3px;
60 | }
61 | }
62 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/bootstrap.less:
--------------------------------------------------------------------------------
1 | // Core variables and mixins
2 | @import "variables.less";
3 | @import "mixins.less";
4 |
5 | // Reset and dependencies
6 | @import "normalize.less";
7 | @import "print.less";
8 | @import "glyphicons.less";
9 |
10 | // Core CSS
11 | @import "scaffolding.less";
12 | @import "type.less";
13 | @import "code.less";
14 | @import "grid.less";
15 | @import "tables.less";
16 | @import "forms.less";
17 | @import "buttons.less";
18 |
19 | // Components
20 | @import "component-animations.less";
21 | @import "dropdowns.less";
22 | @import "button-groups.less";
23 | @import "input-groups.less";
24 | @import "navs.less";
25 | @import "navbar.less";
26 | @import "breadcrumbs.less";
27 | @import "pagination.less";
28 | @import "pager.less";
29 | @import "labels.less";
30 | @import "badges.less";
31 | @import "jumbotron.less";
32 | @import "thumbnails.less";
33 | @import "alerts.less";
34 | @import "progress-bars.less";
35 | @import "media.less";
36 | @import "list-group.less";
37 | @import "panels.less";
38 | @import "responsive-embed.less";
39 | @import "wells.less";
40 | @import "close.less";
41 |
42 | // Components w/ JavaScript
43 | @import "modals.less";
44 | @import "tooltip.less";
45 | @import "popovers.less";
46 | @import "carousel.less";
47 |
48 | // Utility classes
49 | @import "utilities.less";
50 | @import "responsive-utilities.less";
51 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/breadcrumbs.less:
--------------------------------------------------------------------------------
1 | //
2 | // Breadcrumbs
3 | // --------------------------------------------------
4 |
5 |
6 | .breadcrumb {
7 | padding: @breadcrumb-padding-vertical @breadcrumb-padding-horizontal;
8 | margin-bottom: @line-height-computed;
9 | list-style: none;
10 | background-color: @breadcrumb-bg;
11 | border-radius: @border-radius-base;
12 |
13 | > li {
14 | display: inline-block;
15 |
16 | + li:before {
17 | content: "@{breadcrumb-separator}\00a0"; // Unicode space added since inline-block means non-collapsing white-space
18 | padding: 0 5px;
19 | color: @breadcrumb-color;
20 | }
21 | }
22 |
23 | > .active {
24 | color: @breadcrumb-active-color;
25 | }
26 | }
27 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/close.less:
--------------------------------------------------------------------------------
1 | //
2 | // Close icons
3 | // --------------------------------------------------
4 |
5 |
6 | .close {
7 | float: right;
8 | font-size: (@font-size-base * 1.5);
9 | font-weight: @close-font-weight;
10 | line-height: 1;
11 | color: @close-color;
12 | text-shadow: @close-text-shadow;
13 | .opacity(.2);
14 |
15 | &:hover,
16 | &:focus {
17 | color: @close-color;
18 | text-decoration: none;
19 | cursor: pointer;
20 | .opacity(.5);
21 | }
22 |
23 | // Additional properties for button version
24 | // iOS requires the button element instead of an anchor tag.
25 | // If you want the anchor version, it requires `href="#"`.
26 | button& {
27 | padding: 0;
28 | cursor: pointer;
29 | background: transparent;
30 | border: 0;
31 | -webkit-appearance: none;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/code.less:
--------------------------------------------------------------------------------
1 | //
2 | // Code (inline and block)
3 | // --------------------------------------------------
4 |
5 |
6 | // Inline and block code styles
7 | code,
8 | kbd,
9 | pre,
10 | samp {
11 | font-family: @font-family-monospace;
12 | }
13 |
14 | // Inline code
15 | code {
16 | padding: 2px 4px;
17 | font-size: 90%;
18 | color: @code-color;
19 | background-color: @code-bg;
20 | border-radius: @border-radius-base;
21 | }
22 |
23 | // User input typically entered via keyboard
24 | kbd {
25 | padding: 2px 4px;
26 | font-size: 90%;
27 | color: @kbd-color;
28 | background-color: @kbd-bg;
29 | border-radius: @border-radius-small;
30 | box-shadow: inset 0 -1px 0 rgba(0,0,0,.25);
31 |
32 | kbd {
33 | padding: 0;
34 | font-size: 100%;
35 | font-weight: bold;
36 | box-shadow: none;
37 | }
38 | }
39 |
40 | // Blocks of code
41 | pre {
42 | display: block;
43 | padding: ((@line-height-computed - 1) / 2);
44 | margin: 0 0 (@line-height-computed / 2);
45 | font-size: (@font-size-base - 1); // 14px to 13px
46 | line-height: @line-height-base;
47 | word-break: break-all;
48 | word-wrap: break-word;
49 | color: @pre-color;
50 | background-color: @pre-bg;
51 | border: 1px solid @pre-border-color;
52 | border-radius: @border-radius-base;
53 |
54 | // Account for some code outputs that place code tags in pre tags
55 | code {
56 | padding: 0;
57 | font-size: inherit;
58 | color: inherit;
59 | white-space: pre-wrap;
60 | background-color: transparent;
61 | border-radius: 0;
62 | }
63 | }
64 |
65 | // Enable scrollable blocks of code
66 | .pre-scrollable {
67 | max-height: @pre-scrollable-max-height;
68 | overflow-y: scroll;
69 | }
70 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/component-animations.less:
--------------------------------------------------------------------------------
1 | //
2 | // Component animations
3 | // --------------------------------------------------
4 |
5 | // Heads up!
6 | //
7 | // We don't use the `.opacity()` mixin here since it causes a bug with text
8 | // fields in IE7-8. Source: https://github.com/twbs/bootstrap/pull/3552.
9 |
10 | .fade {
11 | opacity: 0;
12 | .transition(opacity .15s linear);
13 | &.in {
14 | opacity: 1;
15 | }
16 | }
17 |
18 | .collapse {
19 | display: none;
20 | visibility: hidden;
21 |
22 | &.in { display: block; visibility: visible; }
23 | tr&.in { display: table-row; }
24 | tbody&.in { display: table-row-group; }
25 | }
26 |
27 | .collapsing {
28 | position: relative;
29 | height: 0;
30 | overflow: hidden;
31 | .transition-property(~"height, visibility");
32 | .transition-duration(.35s);
33 | .transition-timing-function(ease);
34 | }
35 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/grid.less:
--------------------------------------------------------------------------------
1 | //
2 | // Grid system
3 | // --------------------------------------------------
4 |
5 |
6 | // Container widths
7 | //
8 | // Set the container width, and override it for fixed navbars in media queries.
9 |
10 | .container {
11 | .container-fixed();
12 |
13 | @media (min-width: @screen-sm-min) {
14 | width: @container-sm;
15 | }
16 | @media (min-width: @screen-md-min) {
17 | width: @container-md;
18 | }
19 | @media (min-width: @screen-lg-min) {
20 | width: @container-lg;
21 | }
22 | }
23 |
24 |
25 | // Fluid container
26 | //
27 | // Utilizes the mixin meant for fixed width containers, but without any defined
28 | // width for fluid, full width layouts.
29 |
30 | .container-fluid {
31 | .container-fixed();
32 | }
33 |
34 |
35 | // Row
36 | //
37 | // Rows contain and clear the floats of your columns.
38 |
39 | .row {
40 | .make-row();
41 | }
42 |
43 |
44 | // Columns
45 | //
46 | // Common styles for small and large grid columns
47 |
48 | .make-grid-columns();
49 |
50 |
51 | // Extra small grid
52 | //
53 | // Columns, offsets, pushes, and pulls for extra small devices like
54 | // smartphones.
55 |
56 | .make-grid(xs);
57 |
58 |
59 | // Small grid
60 | //
61 | // Columns, offsets, pushes, and pulls for the small device range, from phones
62 | // to tablets.
63 |
64 | @media (min-width: @screen-sm-min) {
65 | .make-grid(sm);
66 | }
67 |
68 |
69 | // Medium grid
70 | //
71 | // Columns, offsets, pushes, and pulls for the desktop device range.
72 |
73 | @media (min-width: @screen-md-min) {
74 | .make-grid(md);
75 | }
76 |
77 |
78 | // Large grid
79 | //
80 | // Columns, offsets, pushes, and pulls for the large desktop device range.
81 |
82 | @media (min-width: @screen-lg-min) {
83 | .make-grid(lg);
84 | }
85 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/jumbotron.less:
--------------------------------------------------------------------------------
1 | //
2 | // Jumbotron
3 | // --------------------------------------------------
4 |
5 |
6 | .jumbotron {
7 | padding: @jumbotron-padding (@jumbotron-padding / 2);
8 | margin-bottom: @jumbotron-padding;
9 | color: @jumbotron-color;
10 | background-color: @jumbotron-bg;
11 |
12 | h1,
13 | .h1 {
14 | color: @jumbotron-heading-color;
15 | }
16 | p {
17 | margin-bottom: (@jumbotron-padding / 2);
18 | font-size: @jumbotron-font-size;
19 | font-weight: 200;
20 | }
21 |
22 | > hr {
23 | border-top-color: darken(@jumbotron-bg, 10%);
24 | }
25 |
26 | .container &,
27 | .container-fluid & {
28 | border-radius: @border-radius-large; // Only round corners at higher resolutions if contained in a container
29 | }
30 |
31 | .container {
32 | max-width: 100%;
33 | }
34 |
35 | @media screen and (min-width: @screen-sm-min) {
36 | padding: (@jumbotron-padding * 1.6) 0;
37 |
38 | .container &,
39 | .container-fluid & {
40 | padding-left: (@jumbotron-padding * 2);
41 | padding-right: (@jumbotron-padding * 2);
42 | }
43 |
44 | h1,
45 | .h1 {
46 | font-size: (@font-size-base * 4.5);
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/labels.less:
--------------------------------------------------------------------------------
1 | //
2 | // Labels
3 | // --------------------------------------------------
4 |
5 | .label {
6 | display: inline;
7 | padding: .2em .6em .3em;
8 | font-size: 75%;
9 | font-weight: bold;
10 | line-height: 1;
11 | color: @label-color;
12 | text-align: center;
13 | white-space: nowrap;
14 | vertical-align: baseline;
15 | border-radius: .25em;
16 |
17 | // Add hover effects, but only for links
18 | a& {
19 | &:hover,
20 | &:focus {
21 | color: @label-link-hover-color;
22 | text-decoration: none;
23 | cursor: pointer;
24 | }
25 | }
26 |
27 | // Empty labels collapse automatically (not available in IE8)
28 | &:empty {
29 | display: none;
30 | }
31 |
32 | // Quick fix for labels in buttons
33 | .btn & {
34 | position: relative;
35 | top: -1px;
36 | }
37 | }
38 |
39 | // Colors
40 | // Contextual variations (linked labels get darker on :hover)
41 |
42 | .label-default {
43 | .label-variant(@label-default-bg);
44 | }
45 |
46 | .label-primary {
47 | .label-variant(@label-primary-bg);
48 | }
49 |
50 | .label-success {
51 | .label-variant(@label-success-bg);
52 | }
53 |
54 | .label-info {
55 | .label-variant(@label-info-bg);
56 | }
57 |
58 | .label-warning {
59 | .label-variant(@label-warning-bg);
60 | }
61 |
62 | .label-danger {
63 | .label-variant(@label-danger-bg);
64 | }
65 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/list-group.less:
--------------------------------------------------------------------------------
1 | //
2 | // List groups
3 | // --------------------------------------------------
4 |
5 |
6 | // Base class
7 | //
8 | // Easily usable on
, , or .
9 |
10 | .list-group {
11 | // No need to set list-style: none; since .list-group-item is block level
12 | margin-bottom: 20px;
13 | padding-left: 0; // reset padding because ul and ol
14 | }
15 |
16 |
17 | // Individual list items
18 | //
19 | // Use on `li`s or `div`s within the `.list-group` parent.
20 |
21 | .list-group-item {
22 | position: relative;
23 | display: block;
24 | padding: 10px 15px;
25 | // Place the border on the list items and negative margin up for better styling
26 | margin-bottom: -1px;
27 | background-color: @list-group-bg;
28 | border: 1px solid @list-group-border;
29 |
30 | // Round the first and last items
31 | &:first-child {
32 | .border-top-radius(@list-group-border-radius);
33 | }
34 | &:last-child {
35 | margin-bottom: 0;
36 | .border-bottom-radius(@list-group-border-radius);
37 | }
38 | }
39 |
40 |
41 | // Linked list items
42 | //
43 | // Use anchor elements instead of `li`s or `div`s to create linked list items.
44 | // Includes an extra `.active` modifier class for showing selected items.
45 |
46 | a.list-group-item {
47 | color: @list-group-link-color;
48 |
49 | .list-group-item-heading {
50 | color: @list-group-link-heading-color;
51 | }
52 |
53 | // Hover state
54 | &:hover,
55 | &:focus {
56 | text-decoration: none;
57 | color: @list-group-link-hover-color;
58 | background-color: @list-group-hover-bg;
59 | }
60 | }
61 |
62 | .list-group-item {
63 | // Disabled state
64 | &.disabled,
65 | &.disabled:hover,
66 | &.disabled:focus {
67 | background-color: @list-group-disabled-bg;
68 | color: @list-group-disabled-color;
69 | cursor: @cursor-disabled;
70 |
71 | // Force color to inherit for custom content
72 | .list-group-item-heading {
73 | color: inherit;
74 | }
75 | .list-group-item-text {
76 | color: @list-group-disabled-text-color;
77 | }
78 | }
79 |
80 | // Active class on item itself, not parent
81 | &.active,
82 | &.active:hover,
83 | &.active:focus {
84 | z-index: 2; // Place active items above their siblings for proper border styling
85 | color: @list-group-active-color;
86 | background-color: @list-group-active-bg;
87 | border-color: @list-group-active-border;
88 |
89 | // Force color to inherit for custom content
90 | .list-group-item-heading,
91 | .list-group-item-heading > small,
92 | .list-group-item-heading > .small {
93 | color: inherit;
94 | }
95 | .list-group-item-text {
96 | color: @list-group-active-text-color;
97 | }
98 | }
99 | }
100 |
101 |
102 | // Contextual variants
103 | //
104 | // Add modifier classes to change text and background color on individual items.
105 | // Organizationally, this must come after the `:hover` states.
106 |
107 | .list-group-item-variant(success; @state-success-bg; @state-success-text);
108 | .list-group-item-variant(info; @state-info-bg; @state-info-text);
109 | .list-group-item-variant(warning; @state-warning-bg; @state-warning-text);
110 | .list-group-item-variant(danger; @state-danger-bg; @state-danger-text);
111 |
112 |
113 | // Custom content options
114 | //
115 | // Extra classes for creating well-formatted content within `.list-group-item`s.
116 |
117 | .list-group-item-heading {
118 | margin-top: 0;
119 | margin-bottom: 5px;
120 | }
121 | .list-group-item-text {
122 | margin-bottom: 0;
123 | line-height: 1.3;
124 | }
125 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/media.less:
--------------------------------------------------------------------------------
1 | .media {
2 | // Proper spacing between instances of .media
3 | margin-top: 15px;
4 |
5 | &:first-child {
6 | margin-top: 0;
7 | }
8 | }
9 |
10 | .media-right,
11 | .media > .pull-right {
12 | padding-left: 10px;
13 | }
14 |
15 | .media-left,
16 | .media > .pull-left {
17 | padding-right: 10px;
18 | }
19 |
20 | .media-left,
21 | .media-right,
22 | .media-body {
23 | display: table-cell;
24 | vertical-align: top;
25 | }
26 |
27 | .media-middle {
28 | vertical-align: middle;
29 | }
30 |
31 | .media-bottom {
32 | vertical-align: bottom;
33 | }
34 |
35 | // Reset margins on headings for tighter default spacing
36 | .media-heading {
37 | margin-top: 0;
38 | margin-bottom: 5px;
39 | }
40 |
41 | // Media list variation
42 | //
43 | // Undo default ul/ol styles
44 | .media-list {
45 | padding-left: 0;
46 | list-style: none;
47 | }
48 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------------------------------
3 |
4 | // Utilities
5 | @import "mixins/hide-text.less";
6 | @import "mixins/opacity.less";
7 | @import "mixins/image.less";
8 | @import "mixins/labels.less";
9 | @import "mixins/reset-filter.less";
10 | @import "mixins/resize.less";
11 | @import "mixins/responsive-visibility.less";
12 | @import "mixins/size.less";
13 | @import "mixins/tab-focus.less";
14 | @import "mixins/text-emphasis.less";
15 | @import "mixins/text-overflow.less";
16 | @import "mixins/vendor-prefixes.less";
17 |
18 | // Components
19 | @import "mixins/alerts.less";
20 | @import "mixins/buttons.less";
21 | @import "mixins/panels.less";
22 | @import "mixins/pagination.less";
23 | @import "mixins/list-group.less";
24 | @import "mixins/nav-divider.less";
25 | @import "mixins/forms.less";
26 | @import "mixins/progress-bar.less";
27 | @import "mixins/table-row.less";
28 |
29 | // Skins
30 | @import "mixins/background-variant.less";
31 | @import "mixins/border-radius.less";
32 | @import "mixins/gradients.less";
33 |
34 | // Layout
35 | @import "mixins/clearfix.less";
36 | @import "mixins/center-block.less";
37 | @import "mixins/nav-vertical-align.less";
38 | @import "mixins/grid-framework.less";
39 | @import "mixins/grid.less";
40 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/mixins/alerts.less:
--------------------------------------------------------------------------------
1 | // Alerts
2 |
3 | .alert-variant(@background; @border; @text-color) {
4 | background-color: @background;
5 | border-color: @border;
6 | color: @text-color;
7 |
8 | hr {
9 | border-top-color: darken(@border, 5%);
10 | }
11 | .alert-link {
12 | color: darken(@text-color, 10%);
13 | }
14 | }
15 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/mixins/background-variant.less:
--------------------------------------------------------------------------------
1 | // Contextual backgrounds
2 |
3 | .bg-variant(@color) {
4 | background-color: @color;
5 | a&:hover {
6 | background-color: darken(@color, 10%);
7 | }
8 | }
9 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/mixins/border-radius.less:
--------------------------------------------------------------------------------
1 | // Single side border-radius
2 |
3 | .border-top-radius(@radius) {
4 | border-top-right-radius: @radius;
5 | border-top-left-radius: @radius;
6 | }
7 | .border-right-radius(@radius) {
8 | border-bottom-right-radius: @radius;
9 | border-top-right-radius: @radius;
10 | }
11 | .border-bottom-radius(@radius) {
12 | border-bottom-right-radius: @radius;
13 | border-bottom-left-radius: @radius;
14 | }
15 | .border-left-radius(@radius) {
16 | border-bottom-left-radius: @radius;
17 | border-top-left-radius: @radius;
18 | }
19 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/mixins/buttons.less:
--------------------------------------------------------------------------------
1 | // Button variants
2 | //
3 | // Easily pump out default styles, as well as :hover, :focus, :active,
4 | // and disabled options for all buttons
5 |
6 | .button-variant(@color; @background; @border) {
7 | color: @color;
8 | background-color: @background;
9 | border-color: @border;
10 |
11 | &:hover,
12 | &:focus,
13 | &.focus,
14 | &:active,
15 | &.active,
16 | .open > .dropdown-toggle& {
17 | color: @color;
18 | background-color: darken(@background, 10%);
19 | border-color: darken(@border, 12%);
20 | }
21 | &:active,
22 | &.active,
23 | .open > .dropdown-toggle& {
24 | background-image: none;
25 | }
26 | &.disabled,
27 | &[disabled],
28 | fieldset[disabled] & {
29 | &,
30 | &:hover,
31 | &:focus,
32 | &.focus,
33 | &:active,
34 | &.active {
35 | background-color: @background;
36 | border-color: @border;
37 | }
38 | }
39 |
40 | .badge {
41 | color: @background;
42 | background-color: @color;
43 | }
44 | }
45 |
46 | // Button sizes
47 | .button-size(@padding-vertical; @padding-horizontal; @font-size; @line-height; @border-radius) {
48 | padding: @padding-vertical @padding-horizontal;
49 | font-size: @font-size;
50 | line-height: @line-height;
51 | border-radius: @border-radius;
52 | }
53 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/mixins/center-block.less:
--------------------------------------------------------------------------------
1 | // Center-align a block level element
2 |
3 | .center-block() {
4 | display: block;
5 | margin-left: auto;
6 | margin-right: auto;
7 | }
8 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/mixins/clearfix.less:
--------------------------------------------------------------------------------
1 | // Clearfix
2 | //
3 | // For modern browsers
4 | // 1. The space content is one way to avoid an Opera bug when the
5 | // contenteditable attribute is included anywhere else in the document.
6 | // Otherwise it causes space to appear at the top and bottom of elements
7 | // that are clearfixed.
8 | // 2. The use of `table` rather than `block` is only necessary if using
9 | // `:before` to contain the top-margins of child elements.
10 | //
11 | // Source: http://nicolasgallagher.com/micro-clearfix-hack/
12 |
13 | .clearfix() {
14 | &:before,
15 | &:after {
16 | content: " "; // 1
17 | display: table; // 2
18 | }
19 | &:after {
20 | clear: both;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/resources/assets/less/bootstrap/mixins/forms.less:
--------------------------------------------------------------------------------
1 | // Form validation states
2 | //
3 | // Used in forms.less to generate the form validation CSS for warnings, errors,
4 | // and successes.
5 |
6 | .form-control-validation(@text-color: #555; @border-color: #ccc; @background-color: #f5f5f5) {
7 | // Color the label and help text
8 | .help-block,
9 | .control-label,
10 | .radio,
11 | .checkbox,
12 | .radio-inline,
13 | .checkbox-inline,
14 | &.radio label,
15 | &.checkbox label,
16 | &.radio-inline label,
17 | &.checkbox-inline label {
18 | color: @text-color;
19 | }
20 | // Set the border and box shadow on specific inputs to match
21 | .form-control {
22 | border-color: @border-color;
23 | .box-shadow(inset 0 1px 1px rgba(0,0,0,.075)); // Redeclare so transitions work
24 | &:focus {
25 | border-color: darken(@border-color, 10%);
26 | @shadow: inset 0 1px 1px rgba(0,0,0,.075), 0 0 6px lighten(@border-color, 20%);
27 | .box-shadow(@shadow);
28 | }
29 | }
30 | // Set validation states also for addons
31 | .input-group-addon {
32 | color: @text-color;
33 | border-color: @border-color;
34 | background-color: @background-color;
35 | }
36 | // Optional feedback icon
37 | .form-control-feedback {
38 | color: @text-color;
39 | }
40 | }
41 |
42 |
43 | // Form control focus state
44 | //
45 | // Generate a customized focus state and for any input with the specified color,
46 | // which defaults to the `@input-border-focus` variable.
47 | //
48 | // We highly encourage you to not customize the default value, but instead use
49 | // this to tweak colors on an as-needed basis. This aesthetic change is based on
50 | // WebKit's default styles, but applicable to a wider range of browsers. Its
51 | // usability and accessibility should be taken into account with any change.
52 | //
53 | // Example usage: change the default blue border and shadow to white for better
54 | // contrast against a dark gray background.
55 | .form-control-focus(@color: @input-border-focus) {
56 | @color-rgba: rgba(red(@color), green(@color), blue(@color), .6);
57 | &:focus {
58 | border-color: @color;
59 | outline: 0;
60 | .box-shadow(~"inset 0 1px 1px rgba(0,0,0,.075), 0 0 8px @{color-rgba}");
61 | }
62 | }
63 |
64 | // Form control sizing
65 | //
66 | // Relative text size, padding, and border-radii changes for form controls. For
67 | // horizontal sizing, wrap controls in the predefined grid classes. `