├── .gitignore
├── LICENSE
├── README.md
└── src
├── app
├── commands
│ └── .gitkeep
├── config
│ ├── app.php
│ ├── auth.php
│ ├── cache.php
│ ├── compile.php
│ ├── database.php
│ ├── local
│ │ ├── app.php
│ │ └── database.php
│ ├── mail.php
│ ├── packages
│ │ └── .gitkeep
│ ├── queue.php
│ ├── remote.php
│ ├── services.php
│ ├── session.php
│ ├── testing
│ │ ├── cache.php
│ │ └── session.php
│ ├── view.php
│ └── workbench.php
├── controllers
│ ├── .gitkeep
│ ├── BaseController.php
│ ├── ClientsController.php
│ ├── ImportController.php
│ ├── MailingsController.php
│ ├── ProfileController.php
│ └── UsersController.php
├── database
│ ├── .gitignore
│ ├── migrations
│ │ ├── .gitkeep
│ │ ├── 2014_11_18_001138_create-users-table.php
│ │ ├── 2014_11_19_212432_create-clients-table.php
│ │ ├── 2015_01_07_212316_create-sectors-table.php
│ │ ├── 2015_01_07_213802_create-activities-table.php
│ │ ├── 2015_01_07_223554_create-clients-activities-table.php
│ │ ├── 2015_01_07_223600_create-clients-sectors-table.php
│ │ ├── 2015_01_11_050001_create-histories-table.php
│ │ ├── 2015_01_11_050733_create-mailings-table.php
│ │ ├── 2015_03_26_121645_create-uploads-table.php
│ │ └── 2015_03_26_121716_create-mailings-uploads-table.php
│ └── seeds
│ │ ├── .gitkeep
│ │ ├── ActivityTableSeeder.php
│ │ ├── ClientTableSeeder.php
│ │ ├── DatabaseSeeder.php
│ │ ├── HistoryTableSeeder.php
│ │ ├── MailingTableSeeder.php
│ │ ├── SectorTableSeeder.php
│ │ └── UserTableSeeder.php
├── filters.php
├── lang
│ ├── en
│ │ ├── pagination.php
│ │ ├── reminders.php
│ │ └── validation.php
│ └── fr
│ │ ├── clients.php
│ │ ├── general.php
│ │ ├── import.php
│ │ ├── mailings.php
│ │ ├── main.php
│ │ ├── pagination.php
│ │ ├── profile.php
│ │ ├── reminders.php
│ │ ├── users.php
│ │ └── validation.php
├── models
│ ├── Activity.php
│ ├── Client.php
│ ├── History.php
│ ├── Mailing.php
│ ├── Sector.php
│ ├── Upload.php
│ └── User.php
├── routes.php
├── start
│ ├── artisan.php
│ ├── global.php
│ └── local.php
├── storage
│ ├── .gitignore
│ ├── cache
│ │ └── .gitignore
│ ├── logs
│ │ └── .gitignore
│ ├── meta
│ │ └── .gitignore
│ ├── sessions
│ │ └── .gitignore
│ └── views
│ │ └── .gitignore
├── tests
│ ├── ExampleTest.php
│ └── TestCase.php
└── views
│ ├── clients
│ ├── create.blade.php
│ ├── delete.blade.php
│ ├── edit.blade.php
│ ├── list.blade.php
│ └── results.blade.php
│ ├── import
│ ├── import.blade.php
│ └── results.blade.php
│ ├── layouts
│ ├── alerts.blade.php
│ ├── errors.blade.php
│ ├── main.blade.php
│ ├── menu.blade.php
│ ├── modal.blade.php
│ ├── standard.blade.php
│ └── template.blade.php
│ ├── mailings
│ ├── create.blade.php
│ ├── delete.blade.php
│ ├── list.blade.php
│ └── results.blade.php
│ ├── profiles
│ ├── profile.blade.php
│ └── profiles.blade.php
│ ├── translation.php
│ └── users
│ ├── authentication.blade.php
│ ├── dashboard.blade.php
│ ├── login.blade.php
│ └── register.blade.php
├── artisan
├── bootstrap
├── autoload.php
├── paths.php
└── start.php
├── composer.json
├── phpunit.xml
├── public
├── .htaccess
├── css
│ ├── main.css
│ ├── plugins
│ │ ├── dataTables.bootstrap.css
│ │ ├── metisMenu
│ │ │ ├── metisMenu.css
│ │ │ └── metisMenu.min.css
│ │ ├── morris.css
│ │ ├── social-buttons.css
│ │ └── timeline.css
│ └── sb-admin-2.css
├── favicon.ico
├── images
│ ├── Company.png
│ ├── Loyer.png
│ ├── Prix.png
│ ├── Surface.png
│ └── loader.gif
├── index.php
├── js
│ ├── bootstrap.ext.js
│ ├── clients
│ │ ├── edit.js
│ │ └── list.js
│ ├── loader.jquery.js
│ ├── mailings
│ │ └── list.js
│ ├── plugins
│ │ ├── dataTables
│ │ │ ├── dataTables.bootstrap.js
│ │ │ └── jquery.dataTables.js
│ │ ├── flot
│ │ │ ├── excanvas.min.js
│ │ │ ├── flot-data.js
│ │ │ ├── jquery.flot.js
│ │ │ ├── jquery.flot.pie.js
│ │ │ ├── jquery.flot.resize.js
│ │ │ └── jquery.flot.tooltip.min.js
│ │ ├── metisMenu
│ │ │ ├── metisMenu.js
│ │ │ └── metisMenu.min.js
│ │ └── morris
│ │ │ ├── morris-data.js
│ │ │ ├── morris.js
│ │ │ ├── morris.min.js
│ │ │ └── raphael.min.js
│ └── sb-admin-2.js
├── packages
│ ├── .gitkeep
│ ├── bootstrap-datetimepicker
│ │ ├── bootstrap-datetimepicker.min.css
│ │ └── bootstrap-datetimepicker.min.js
│ ├── bootstrap
│ │ ├── css
│ │ │ ├── bootstrap-theme.css
│ │ │ ├── bootstrap-theme.css.map
│ │ │ ├── bootstrap-theme.min.css
│ │ │ ├── bootstrap.css
│ │ │ ├── bootstrap.css.map
│ │ │ └── bootstrap.min.css
│ │ ├── fonts
│ │ │ ├── glyphicons-halflings-regular.eot
│ │ │ ├── glyphicons-halflings-regular.svg
│ │ │ ├── glyphicons-halflings-regular.ttf
│ │ │ └── glyphicons-halflings-regular.woff
│ │ └── js
│ │ │ ├── bootstrap.js
│ │ │ ├── bootstrap.min.js
│ │ │ └── npm.js
│ ├── font-awesome
│ │ ├── css
│ │ │ ├── font-awesome.css
│ │ │ └── font-awesome.min.css
│ │ ├── fonts
│ │ │ ├── FontAwesome.otf
│ │ │ ├── fontawesome-webfont.eot
│ │ │ ├── fontawesome-webfont.svg
│ │ │ ├── fontawesome-webfont.ttf
│ │ │ └── fontawesome-webfont.woff
│ │ ├── less
│ │ │ ├── bordered-pulled.less
│ │ │ ├── core.less
│ │ │ ├── fixed-width.less
│ │ │ ├── font-awesome.less
│ │ │ ├── icons.less
│ │ │ ├── larger.less
│ │ │ ├── list.less
│ │ │ ├── mixins.less
│ │ │ ├── path.less
│ │ │ ├── rotated-flipped.less
│ │ │ ├── spinning.less
│ │ │ ├── stacked.less
│ │ │ └── variables.less
│ │ └── scss
│ │ │ ├── _bordered-pulled.scss
│ │ │ ├── _core.scss
│ │ │ ├── _fixed-width.scss
│ │ │ ├── _icons.scss
│ │ │ ├── _larger.scss
│ │ │ ├── _list.scss
│ │ │ ├── _mixins.scss
│ │ │ ├── _path.scss
│ │ │ ├── _rotated-flipped.scss
│ │ │ ├── _spinning.scss
│ │ │ ├── _stacked.scss
│ │ │ ├── _variables.scss
│ │ │ └── font-awesome.scss
│ ├── jquery-loader
│ │ └── jquery-loader.js
│ ├── jquery
│ │ ├── jquery.js
│ │ ├── jquery.min.js
│ │ └── jquery.min.map
│ ├── moment
│ │ └── moment.js
│ └── tinymce
│ │ ├── LICENSE.TXT
│ │ ├── changelog.txt
│ │ └── js
│ │ └── tinymce
│ │ ├── langs
│ │ ├── fr_FR.js
│ │ └── readme.md
│ │ ├── license.txt
│ │ ├── plugins
│ │ ├── advlist
│ │ │ └── plugin.min.js
│ │ ├── anchor
│ │ │ └── plugin.min.js
│ │ ├── autolink
│ │ │ └── plugin.min.js
│ │ ├── autoresize
│ │ │ └── plugin.min.js
│ │ ├── autosave
│ │ │ └── plugin.min.js
│ │ ├── bbcode
│ │ │ └── plugin.min.js
│ │ ├── charmap
│ │ │ └── plugin.min.js
│ │ ├── code
│ │ │ └── plugin.min.js
│ │ ├── colorpicker
│ │ │ └── plugin.min.js
│ │ ├── contextmenu
│ │ │ └── plugin.min.js
│ │ ├── directionality
│ │ │ └── plugin.min.js
│ │ ├── emoticons
│ │ │ ├── img
│ │ │ │ ├── smiley-cool.gif
│ │ │ │ ├── smiley-cry.gif
│ │ │ │ ├── smiley-embarassed.gif
│ │ │ │ ├── smiley-foot-in-mouth.gif
│ │ │ │ ├── smiley-frown.gif
│ │ │ │ ├── smiley-innocent.gif
│ │ │ │ ├── smiley-kiss.gif
│ │ │ │ ├── smiley-laughing.gif
│ │ │ │ ├── smiley-money-mouth.gif
│ │ │ │ ├── smiley-sealed.gif
│ │ │ │ ├── smiley-smile.gif
│ │ │ │ ├── smiley-surprised.gif
│ │ │ │ ├── smiley-tongue-out.gif
│ │ │ │ ├── smiley-undecided.gif
│ │ │ │ ├── smiley-wink.gif
│ │ │ │ └── smiley-yell.gif
│ │ │ └── plugin.min.js
│ │ ├── example
│ │ │ ├── dialog.html
│ │ │ └── plugin.min.js
│ │ ├── example_dependency
│ │ │ └── plugin.min.js
│ │ ├── fullpage
│ │ │ └── plugin.min.js
│ │ ├── fullscreen
│ │ │ └── plugin.min.js
│ │ ├── hr
│ │ │ └── plugin.min.js
│ │ ├── image
│ │ │ └── plugin.min.js
│ │ ├── importcss
│ │ │ └── plugin.min.js
│ │ ├── insertdatetime
│ │ │ └── plugin.min.js
│ │ ├── layer
│ │ │ └── plugin.min.js
│ │ ├── legacyoutput
│ │ │ └── plugin.min.js
│ │ ├── link
│ │ │ └── plugin.min.js
│ │ ├── lists
│ │ │ └── plugin.min.js
│ │ ├── media
│ │ │ ├── moxieplayer.swf
│ │ │ └── plugin.min.js
│ │ ├── nonbreaking
│ │ │ └── plugin.min.js
│ │ ├── noneditable
│ │ │ └── plugin.min.js
│ │ ├── pagebreak
│ │ │ └── plugin.min.js
│ │ ├── paste
│ │ │ └── plugin.min.js
│ │ ├── preview
│ │ │ └── plugin.min.js
│ │ ├── print
│ │ │ └── plugin.min.js
│ │ ├── save
│ │ │ └── plugin.min.js
│ │ ├── searchreplace
│ │ │ └── plugin.min.js
│ │ ├── spellchecker
│ │ │ └── plugin.min.js
│ │ ├── tabfocus
│ │ │ └── plugin.min.js
│ │ ├── table
│ │ │ └── plugin.min.js
│ │ ├── template
│ │ │ └── plugin.min.js
│ │ ├── textcolor
│ │ │ └── plugin.min.js
│ │ ├── textpattern
│ │ │ └── plugin.min.js
│ │ ├── visualblocks
│ │ │ ├── css
│ │ │ │ └── visualblocks.css
│ │ │ └── plugin.min.js
│ │ ├── visualchars
│ │ │ └── plugin.min.js
│ │ └── wordcount
│ │ │ └── plugin.min.js
│ │ ├── skins
│ │ └── lightgray
│ │ │ ├── content.inline.min.css
│ │ │ ├── content.min.css
│ │ │ ├── fonts
│ │ │ ├── tinymce-small.eot
│ │ │ ├── tinymce-small.svg
│ │ │ ├── tinymce-small.ttf
│ │ │ ├── tinymce-small.woff
│ │ │ ├── tinymce.eot
│ │ │ ├── tinymce.svg
│ │ │ ├── tinymce.ttf
│ │ │ └── tinymce.woff
│ │ │ ├── img
│ │ │ ├── anchor.gif
│ │ │ ├── loader.gif
│ │ │ ├── object.gif
│ │ │ └── trans.gif
│ │ │ ├── skin.ie7.min.css
│ │ │ └── skin.min.css
│ │ ├── themes
│ │ └── modern
│ │ │ └── theme.min.js
│ │ └── tinymce.min.js
├── robots.txt
└── templates
│ └── template.xlsx
├── scripts
├── PHPMailer
│ ├── PHPMailerAutoload.php
│ ├── VERSION
│ ├── class.phpmailer.php
│ ├── class.pop3.php
│ ├── class.smtp.php
│ ├── extras
│ │ ├── EasyPeasyICS.php
│ │ ├── README.md
│ │ ├── htmlfilter.php
│ │ └── ntlm_sasl_client.php
│ └── language
│ │ ├── phpmailer.lang-am.php
│ │ ├── phpmailer.lang-ar.php
│ │ ├── phpmailer.lang-az.php
│ │ ├── phpmailer.lang-be.php
│ │ ├── phpmailer.lang-bg.php
│ │ ├── phpmailer.lang-br.php
│ │ ├── phpmailer.lang-ca.php
│ │ ├── phpmailer.lang-ch.php
│ │ ├── phpmailer.lang-cz.php
│ │ ├── phpmailer.lang-de.php
│ │ ├── phpmailer.lang-dk.php
│ │ ├── phpmailer.lang-el.php
│ │ ├── phpmailer.lang-eo.php
│ │ ├── phpmailer.lang-es.php
│ │ ├── phpmailer.lang-et.php
│ │ ├── phpmailer.lang-fa.php
│ │ ├── phpmailer.lang-fi.php
│ │ ├── phpmailer.lang-fo.php
│ │ ├── phpmailer.lang-fr.php
│ │ ├── phpmailer.lang-gl.php
│ │ ├── phpmailer.lang-he.php
│ │ ├── phpmailer.lang-hr.php
│ │ ├── phpmailer.lang-hu.php
│ │ ├── phpmailer.lang-id.php
│ │ ├── phpmailer.lang-it.php
│ │ ├── phpmailer.lang-ja.php
│ │ ├── phpmailer.lang-ka.php
│ │ ├── phpmailer.lang-lt.php
│ │ ├── phpmailer.lang-lv.php
│ │ ├── phpmailer.lang-ms.php
│ │ ├── phpmailer.lang-nl.php
│ │ ├── phpmailer.lang-no.php
│ │ ├── phpmailer.lang-pl.php
│ │ ├── phpmailer.lang-pt.php
│ │ ├── phpmailer.lang-ro.php
│ │ ├── phpmailer.lang-ru.php
│ │ ├── phpmailer.lang-se.php
│ │ ├── phpmailer.lang-sk.php
│ │ ├── phpmailer.lang-sl.php
│ │ ├── phpmailer.lang-sr.php
│ │ ├── phpmailer.lang-tr.php
│ │ ├── phpmailer.lang-uk.php
│ │ ├── phpmailer.lang-vi.php
│ │ ├── phpmailer.lang-zh.php
│ │ └── phpmailer.lang-zh_cn.php
└── mailSender.php
├── server.php
└── templates
├── 000-Signature
└── 100-Template
/.gitignore:
--------------------------------------------------------------------------------
1 | /src/bootstrap/compiled.php
2 | /src/components
3 | /src/vendor
4 | composer.phar
5 | composer.lock
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | crm-laravel
2 | ===========
3 |
4 | Customer Relationship Management system based on Laravel 4 framework (PHP)
5 |
--------------------------------------------------------------------------------
/src/app/commands/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/app/commands/.gitkeep
--------------------------------------------------------------------------------
/src/app/config/compile.php:
--------------------------------------------------------------------------------
1 | true,
17 |
18 | );
19 |
--------------------------------------------------------------------------------
/src/app/config/local/database.php:
--------------------------------------------------------------------------------
1 | array(
22 |
23 | 'mysql' => array(
24 | 'driver' => 'mysql',
25 | 'host' => 'localhost',
26 | 'database' => 'homestead',
27 | 'username' => 'homestead',
28 | 'password' => 'secret',
29 | 'charset' => 'utf8',
30 | 'collation' => 'utf8_unicode_ci',
31 | 'prefix' => '',
32 | ),
33 |
34 | 'pgsql' => array(
35 | 'driver' => 'pgsql',
36 | 'host' => 'localhost',
37 | 'database' => 'homestead',
38 | 'username' => 'homestead',
39 | 'password' => 'secret',
40 | 'charset' => 'utf8',
41 | 'prefix' => '',
42 | 'schema' => 'public',
43 | ),
44 |
45 | ),
46 |
47 | );
48 |
--------------------------------------------------------------------------------
/src/app/config/packages/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/app/config/packages/.gitkeep
--------------------------------------------------------------------------------
/src/app/config/remote.php:
--------------------------------------------------------------------------------
1 | 'production',
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Remote Server Connections
21 | |--------------------------------------------------------------------------
22 | |
23 | | These are the servers that will be accessible via the SSH task runner
24 | | facilities of Laravel. This feature radically simplifies executing
25 | | tasks on your servers, such as deploying out these applications.
26 | |
27 | */
28 |
29 | 'connections' => array(
30 |
31 | 'production' => array(
32 | 'host' => '',
33 | 'username' => '',
34 | 'password' => '',
35 | 'key' => '',
36 | 'keyphrase' => '',
37 | 'root' => '/var/www',
38 | ),
39 |
40 | ),
41 |
42 | /*
43 | |--------------------------------------------------------------------------
44 | | Remote Server Groups
45 | |--------------------------------------------------------------------------
46 | |
47 | | Here you may list connections under a single group name, which allows
48 | | you to easily access all of the servers at once using a short name
49 | | that is extremely easy to remember, such as "web" or "database".
50 | |
51 | */
52 |
53 | 'groups' => array(
54 |
55 | 'web' => array('production')
56 |
57 | ),
58 |
59 | );
60 |
--------------------------------------------------------------------------------
/src/app/config/services.php:
--------------------------------------------------------------------------------
1 | array(
18 | 'domain' => '',
19 | 'secret' => '',
20 | ),
21 |
22 | 'mandrill' => array(
23 | 'secret' => '',
24 | ),
25 |
26 | 'stripe' => array(
27 | 'model' => 'User',
28 | 'secret' => '',
29 | ),
30 |
31 | );
32 |
--------------------------------------------------------------------------------
/src/app/config/testing/cache.php:
--------------------------------------------------------------------------------
1 | 'array',
19 |
20 | );
21 |
--------------------------------------------------------------------------------
/src/app/config/testing/session.php:
--------------------------------------------------------------------------------
1 | 'array',
20 |
21 | );
22 |
--------------------------------------------------------------------------------
/src/app/config/view.php:
--------------------------------------------------------------------------------
1 | array(__DIR__.'/../views'),
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Pagination View
21 | |--------------------------------------------------------------------------
22 | |
23 | | This view will be used to render the pagination link output, and can
24 | | be easily customized here to show any view you like. A clean view
25 | | compatible with Twitter's Bootstrap is given to you by default.
26 | |
27 | */
28 |
29 | 'pagination' => 'pagination::slider-3',
30 |
31 | );
32 |
--------------------------------------------------------------------------------
/src/app/config/workbench.php:
--------------------------------------------------------------------------------
1 | '',
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Workbench Author E-Mail Address
21 | |--------------------------------------------------------------------------
22 | |
23 | | Like the option above, your e-mail address is used when generating new
24 | | workbench packages. The e-mail is placed in your composer.json file
25 | | automatically after the package is created by the workbench tool.
26 | |
27 | */
28 |
29 | 'email' => '',
30 |
31 | );
32 |
--------------------------------------------------------------------------------
/src/app/controllers/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/app/controllers/.gitkeep
--------------------------------------------------------------------------------
/src/app/controllers/BaseController.php:
--------------------------------------------------------------------------------
1 | layout))
13 | {
14 | $this->layout = View::make($this->layout);
15 | }
16 | }
17 |
18 | protected function HasOriginalUserAdminRole()
19 | {
20 | return Session::get('user.original')->admin;
21 | }
22 |
23 | protected function HasAdminRole()
24 | {
25 | return Auth::user()->admin;
26 | }
27 |
28 | protected function RedirectToLoginPage() {
29 | return Redirect::to('users/login')
30 | ->with('message', trans('general.permission.access.denied'))
31 | ->with('message-type', 'danger');
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/src/app/database/.gitignore:
--------------------------------------------------------------------------------
1 | *.sqlite
2 |
--------------------------------------------------------------------------------
/src/app/database/migrations/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/app/database/migrations/.gitkeep
--------------------------------------------------------------------------------
/src/app/database/migrations/2014_11_18_001138_create-users-table.php:
--------------------------------------------------------------------------------
1 | increments('id')->unsigned();
18 | $table->string('login', 128)->unique();
19 | $table->string('password', 128);
20 | $table->string('fullname', 255);
21 | $table->string('phone', 15)->nullable();
22 | $table->string('address', 255)->nullable();
23 | $table->boolean('admin');
24 | $table->boolean('lock');
25 | $table->string('email', 128)->nullable();
26 | $table->dateTime('last_authentication')->nullable();
27 | $table->rememberToken();
28 | $table->timestamps();
29 | });
30 | }
31 |
32 | /**
33 | * Reverse the migrations.
34 | *
35 | * @return void
36 | */
37 | public function down()
38 | {
39 | Schema::drop('users');
40 | }
41 |
42 | }
43 |
--------------------------------------------------------------------------------
/src/app/database/migrations/2015_01_07_212316_create-sectors-table.php:
--------------------------------------------------------------------------------
1 | increments('id')->unsigned();
18 | $table->string('label', 32);
19 | $table->timestamps();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::drop('sectors');
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/src/app/database/migrations/2015_01_07_213802_create-activities-table.php:
--------------------------------------------------------------------------------
1 | increments('id')->unsigned();
18 | $table->string('label', 64);
19 | $table->timestamps();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::drop('activities');
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/src/app/database/migrations/2015_01_07_223554_create-clients-activities-table.php:
--------------------------------------------------------------------------------
1 | increments('id')->unsigned();
17 | $table->integer('client_id')->unsigned();
18 | $table->integer('activity_id')->unsigned();
19 | $table->timestamps();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::drop('clients_activities');
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/src/app/database/migrations/2015_01_07_223600_create-clients-sectors-table.php:
--------------------------------------------------------------------------------
1 | increments('id')->unsigned();
17 | $table->integer('client_id')->unsigned();
18 | $table->integer('sector_id')->unsigned();
19 | $table->timestamps();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::drop('clients_sectors');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/app/database/migrations/2015_01_11_050001_create-histories-table.php:
--------------------------------------------------------------------------------
1 | increments('id')->unsigned();
18 | $table->integer('user_id')->unsigned();
19 | $table->integer('client_id')->unsigned();
20 | $table->string('message', 4096);
21 | $table->timestamps();
22 | });
23 | }
24 |
25 | /**
26 | * Reverse the migrations.
27 | *
28 | * @return void
29 | */
30 | public function down()
31 | {
32 | Schema::drop('histories');
33 | }
34 |
35 | }
36 |
--------------------------------------------------------------------------------
/src/app/database/migrations/2015_01_11_050733_create-mailings-table.php:
--------------------------------------------------------------------------------
1 | increments('id')->unsigned();
18 | $table->integer('user_id')->unsigned();
19 | $table->integer('client_id')->unsigned();
20 | $table->string('operation', 64);
21 | $table->string('subject', 1024);
22 | $table->text('message');
23 | $table->enum('state', array('Todo', 'InProgress', 'Success', 'Error'));
24 | $table->string('reference', 32);
25 | $table->timestamps();
26 | });
27 | }
28 |
29 | /**
30 | * Reverse the migrations.
31 | *
32 | * @return void
33 | */
34 | public function down()
35 | {
36 | Schema::drop('mailings');
37 | }
38 |
39 | }
40 |
--------------------------------------------------------------------------------
/src/app/database/migrations/2015_03_26_121645_create-uploads-table.php:
--------------------------------------------------------------------------------
1 | increments('id')->unsigned();
18 | $table->string('path', 256);
19 | $table->timestamps();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::drop('uploads');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/app/database/migrations/2015_03_26_121716_create-mailings-uploads-table.php:
--------------------------------------------------------------------------------
1 | increments('id')->unsigned();
17 | $table->integer('mailing_id')->unsigned();
18 | $table->integer('upload_id')->unsigned();
19 | $table->timestamps();
20 | });
21 | }
22 |
23 | /**
24 | * Reverse the migrations.
25 | *
26 | * @return void
27 | */
28 | public function down()
29 | {
30 | Schema::drop('mailings_uploads');
31 | }
32 |
33 | }
34 |
--------------------------------------------------------------------------------
/src/app/database/seeds/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/app/database/seeds/.gitkeep
--------------------------------------------------------------------------------
/src/app/database/seeds/ActivityTableSeeder.php:
--------------------------------------------------------------------------------
1 | delete();
8 |
9 | Activity::create(array('label' => 'Bar'));
10 | Activity::create(array('label' => 'Hotel'));
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/src/app/database/seeds/ClientTableSeeder.php:
--------------------------------------------------------------------------------
1 | delete();
8 |
9 | Client::create(array(
10 | 'user_id' => '1',
11 | 'prix_from' => '10',
12 | 'prix_to' => '20',
13 | 'loyer_from' => '30',
14 | 'loyer_to' => '40',
15 | 'surface_from' => '50',
16 | 'surface_to' => '60',
17 | 'surface_sell_from' => '70',
18 | 'surface_sell_to' => '80',
19 | 'terrace' => '1',
20 | 'extraction' => '1',
21 | 'apartment' => '1',
22 | 'licenseII' => '1',
23 | 'licenseIII' => '1',
24 | 'licenseIV' => '1',
25 | 'lastname' => 'Seed',
26 | 'firstname' => 'User',
27 | 'phone' => '0123456789',
28 | 'mail' => 'xxx@xxx.xxx',
29 | 'last_relance' => '2014-10-10 10:10:10',
30 | 'next_relance' => '2015-10-10 10:10:10',
31 | 'state' => 'ActiveBuyer',
32 | 'company' => 'IBM',
33 | 'mandat' => '2C574FR256CN',
34 | 'address_number' => '10',
35 | 'address_street' => 'rue de la soif',
36 | 'address_zipcode' => '75000',
37 | 'address_city' => 'Paris'
38 | ));
39 | }
40 | }
41 |
--------------------------------------------------------------------------------
/src/app/database/seeds/DatabaseSeeder.php:
--------------------------------------------------------------------------------
1 | call('ClientTableSeeder');
15 | $this->call('UserTableSeeder');
16 | $this->call('SectorTableSeeder');
17 | $this->call('ActivityTableSeeder');
18 | $this->call('MailingTableSeeder');
19 | $this->call('HistoryTableSeeder');
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/src/app/database/seeds/HistoryTableSeeder.php:
--------------------------------------------------------------------------------
1 | delete();
8 |
9 | History::create(array(
10 | 'user_id' => '1',
11 | 'client_id' => '1',
12 | 'message' => 'Petit message'
13 | ));
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/app/database/seeds/MailingTableSeeder.php:
--------------------------------------------------------------------------------
1 | delete();
8 |
9 | Mailing::create(array(
10 | 'user_id' => '1',
11 | 'client_id' => '1',
12 | 'operation' => 'BaissePrix',
13 | 'subject' => 'sujet',
14 | 'message' => 'Petit message',
15 | 'state' => 'Todo',
16 | 'reference' => 'REF5H4FD420SZ'
17 | ));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/app/database/seeds/SectorTableSeeder.php:
--------------------------------------------------------------------------------
1 | delete();
8 |
9 | Sector::create(array('label' => '75001'));
10 | Sector::create(array('label' => '75002'));
11 | Sector::create(array('label' => '75003'));
12 | Sector::create(array('label' => '75004'));
13 | Sector::create(array('label' => '75005'));
14 | Sector::create(array('label' => '75006'));
15 | Sector::create(array('label' => '75007'));
16 | Sector::create(array('label' => '75008'));
17 | Sector::create(array('label' => '75009'));
18 | Sector::create(array('label' => '75010'));
19 | Sector::create(array('label' => '75011'));
20 | Sector::create(array('label' => '75012'));
21 | Sector::create(array('label' => '75013'));
22 | Sector::create(array('label' => '75014'));
23 | Sector::create(array('label' => '75015'));
24 | Sector::create(array('label' => '75016'));
25 | Sector::create(array('label' => '75017'));
26 | Sector::create(array('label' => '75018'));
27 | Sector::create(array('label' => '75019'));
28 | Sector::create(array('label' => '75020'));
29 | Sector::create(array('label' => '77'));
30 | Sector::create(array('label' => '78'));
31 | Sector::create(array('label' => '91'));
32 | Sector::create(array('label' => '92'));
33 | Sector::create(array('label' => '93'));
34 | Sector::create(array('label' => '94'));
35 | Sector::create(array('label' => '95'));
36 | Sector::create(array('label' => 'France'));
37 | Sector::create(array('label' => 'Province'));
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/app/database/seeds/UserTableSeeder.php:
--------------------------------------------------------------------------------
1 | delete();
8 |
9 | User::create(array(
10 | 'login' => 'admin',
11 | 'password' => '$2y$10$zsrlg.3JEykG4IyzfUrdj.c19JtUjdd88zcFou7Gn8nZkGgomPGHm',
12 | 'fullname' => 'Administrator',
13 | 'phone' => '00112233',
14 | 'address' => 'address',
15 | 'admin' => '1',
16 | 'lock' => '0'
17 | ));
18 |
19 | User::create(array(
20 | 'login' => 'user',
21 | 'password' => '$2y$10$zsrlg.3JEykG4IyzfUrdj.c19JtUjdd88zcFou7Gn8nZkGgomPGHm',
22 | 'fullname' => 'User',
23 | 'phone' => '00112233',
24 | 'address' => 'address',
25 | 'admin' => '0',
26 | 'lock' => '0'
27 | ));
28 |
29 | User::create(array(
30 | 'login' => 'locked',
31 | 'password' => '$2y$10$zsrlg.3JEykG4IyzfUrdj.c19JtUjdd88zcFou7Gn8nZkGgomPGHm',
32 | 'fullname' => 'Locked User',
33 | 'phone' => '00112233',
34 | 'address' => 'address',
35 | 'admin' => '0',
36 | 'lock' => '1'
37 | ));
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/src/app/lang/en/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 |
18 | 'next' => 'Next »',
19 |
20 | );
21 |
--------------------------------------------------------------------------------
/src/app/lang/en/reminders.php:
--------------------------------------------------------------------------------
1 | "Passwords must be at least six characters and match the confirmation.",
17 |
18 | "user" => "We can't find a user with that e-mail address.",
19 |
20 | "token" => "This password reset token is invalid.",
21 |
22 | "sent" => "Password reminder sent!",
23 |
24 | "reset" => "Password has been reset!",
25 |
26 | );
27 |
--------------------------------------------------------------------------------
/src/app/lang/fr/general.php:
--------------------------------------------------------------------------------
1 | 'Access Denied.',
5 |
6 | 'errors.occured' => 'The following errors occurred',
7 | 'errors.occured.excel' => 'An error occured while processing Excel file.'
8 | );
9 |
--------------------------------------------------------------------------------
/src/app/lang/fr/import.php:
--------------------------------------------------------------------------------
1 | 'Import de donnée',
5 | 'form.import.fields.file' => 'Fichier à importer',
6 | 'form.import.fields.template' => 'Télécharger le template de fichier',
7 | 'form.import.submit' => 'Importer',
8 | 'form.result.title' => "Résultat de l'import",
9 |
10 | 'validation.error.sector' => "Sector value does not match possible values.",
11 | 'validation.error.activity' => "Activity value does not match possible values",
12 |
13 | 'grid.columns.firstname' => "Prénom",
14 | 'grid.columns.lastname' => "Nom",
15 | 'grid.columns.company' => "Société",
16 | 'grid.columns.errors' => "Erreurs",
17 |
18 | 'comment.default' => "Fichier importé :file."
19 | );
20 |
--------------------------------------------------------------------------------
/src/app/lang/fr/mailings.php:
--------------------------------------------------------------------------------
1 | 'Mailing',
5 |
6 | 'grid.columns.client' => 'Client',
7 | 'grid.columns.email' => 'Email',
8 | 'grid.columns.state' => 'Status',
9 | 'grid.columns.date' => 'Date',
10 | 'grid.columns.action' => 'Action',
11 |
12 | 'grid.actions.retry' => 'Renvoyer',
13 | 'grid.actions.retry.description' => "Une erreur est survenue lors de l'envoie, cliquez pour l'envoyer de nouveau.",
14 | 'grid.actions.delete' => 'Supprimer',
15 | 'grid.actions.delete.description' => "Une erreur est survenue lors de l'envoie, cliquez pour supprimer ce mailing.",
16 |
17 | 'form.create.fields.subject' => 'Sujet',
18 | 'form.create.fields.subject.default' => 'Sujet',
19 | 'form.create.fields.operation' => "Type d'opération",
20 | 'form.create.fields.operation.default' => "Type d'opération",
21 | 'form.create.fields.reference' => 'Reference',
22 | 'form.create.fields.reference.default' => 'Reference',
23 | 'form.create.fields.message' => 'Message',
24 | 'form.create.fields.message.default' => 'Message',
25 |
26 | 'form.create.fields.operations.100-Template' => 'Template',
27 |
28 | 'form.create.fields.file' => 'Ajouter un fichier',
29 |
30 | 'form.create.action.close' => 'Annuler',
31 | 'form.create.action.send' => 'Envoyer',
32 |
33 | 'form.delete.title' => 'Suppression',
34 | 'form.delete.label' => 'Êtes-vous certain de vouloir supprimer cet envoi ?',
35 | 'form.delete.submit' => 'Supprimer',
36 |
37 | 'validation.send.success' => 'Mailing had been created successfully.',
38 | 'validation.retry.success' => "L'envoi a été mis à jour avec succès.",
39 | 'validation.delete.success' => "L'envoi a supprimé avec succès.",
40 | );
41 |
--------------------------------------------------------------------------------
/src/app/lang/fr/main.php:
--------------------------------------------------------------------------------
1 | 'BRAND',
5 | 'menu.brand.tooltip' => 'Gestion de la relation client',
6 |
7 | 'menu.client' => 'Clients',
8 |
9 | 'menu.import' => 'Import',
10 |
11 | 'menu.mailing' => 'Mailing',
12 |
13 | 'menu.profile' => 'Profile',
14 |
15 | 'menu.register' => 'Inscription',
16 |
17 | 'menu.login' => 'Connexion',
18 | 'menu.logout' => 'Déconnecter'
19 | );
20 |
--------------------------------------------------------------------------------
/src/app/lang/fr/pagination.php:
--------------------------------------------------------------------------------
1 | '« Previous',
17 |
18 | 'next' => 'Next »',
19 |
20 | );
21 |
--------------------------------------------------------------------------------
/src/app/lang/fr/profile.php:
--------------------------------------------------------------------------------
1 | 'Profile',
5 | 'form.profile.fields.fullname' => 'Nom & Prénom',
6 | 'form.profile.fields.fullname.default' => 'Nom & Prénom',
7 | 'form.profile.fields.email' => 'Email',
8 | 'form.profile.fields.email.default' => 'Email',
9 | 'form.profile.fields.phone' => 'Téléphone',
10 | 'form.profile.fields.phone.default' => 'Téléphone',
11 | 'form.profile.fields.address' => 'Addresse',
12 | 'form.profile.fields.address.default' => 'Addresse',
13 | 'form.profile.fields.created_at' => 'Date de création',
14 | 'form.profile.fields.last_authentication' => 'Date de dernière connexion',
15 | 'form.profile.submit' => 'Enregistrer',
16 |
17 | 'form.password.title' => 'Changer de mot de passe',
18 | 'form.password.fields.password_old' => 'Ancien mot de passe',
19 | 'form.password.fields.password_old.default' => 'Ancien mot de passe',
20 | 'form.password.fields.password' => 'Nouveau mot de passe',
21 | 'form.password.fields.password.default' => 'Nouveau mot de passe',
22 | 'form.password.fields.password_confirmation' => 'Confirmation du nouveau mot de passe',
23 | 'form.password.fields.password_confirmation.default' => 'Confirmation du nouveau mot de passe',
24 | 'form.password.submit' => 'Modifier le mot de passe',
25 |
26 | 'grid.profile.title' => 'Selection du profile',
27 | 'grid.columns.login' => 'Identifiant',
28 | 'grid.columns.fullname' => 'Nom & Prénom',
29 | 'grid.columns.email' => 'Email',
30 | 'grid.columns.last_authentication' => 'Dernière connexion',
31 | 'grid.columns.admin' => 'Administrateur',
32 | 'grid.columns.lock' => 'Bloqué',
33 | 'grid.columns.action' => 'Action',
34 | 'grid.actions.edit' => 'Editer',
35 | 'grid.actions.edit.description' => "Editer les informations de l'utilisateur.",
36 | 'grid.actions.delete' => 'Supprimer',
37 | 'grid.actions.delete.description' => "Supprimer cet utilisateur.",
38 |
39 | 'validation.edit.success' => 'User profile had been updated successfully.',
40 | 'validation.delete.success' => 'User profile had been removed successfully.'
41 | );
42 |
--------------------------------------------------------------------------------
/src/app/lang/fr/reminders.php:
--------------------------------------------------------------------------------
1 | "Passwords must be at least six characters and match the confirmation.",
17 |
18 | "user" => "We can't find a user with that e-mail address.",
19 |
20 | "token" => "This password reset token is invalid.",
21 |
22 | "sent" => "Password reminder sent!",
23 |
24 | "reset" => "Password has been reset!",
25 |
26 | );
27 |
--------------------------------------------------------------------------------
/src/app/models/Activity.php:
--------------------------------------------------------------------------------
1 | hasOne('user', 'id', 'user_id');
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/src/app/models/Mailing.php:
--------------------------------------------------------------------------------
1 | array(
13 | 'subject' => 'required|max:1024',
14 | 'reference' => 'required|max:32',
15 | 'message' => 'required',
16 | ),
17 | );
18 |
19 | public function user()
20 | {
21 | return $this->hasOne('user', 'id', 'user_id');
22 | }
23 |
24 | public function Client()
25 | {
26 | return $this->hasOne('clients', 'id', 'client_id');
27 | }
28 |
29 | public function Uploads() {
30 | return $this->belongsToMany('Upload', 'mailings_uploads');
31 | }
32 | }
33 |
--------------------------------------------------------------------------------
/src/app/models/Sector.php:
--------------------------------------------------------------------------------
1 | array(
10 | 'login' => 'required|between:2,12',
11 | 'password' => 'required|alpha_num|between:6,12|confirmed',
12 | 'password_confirmation' => 'required|alpha_num|between:6,12',
13 | 'fullname' => 'required|between:2,25',
14 | 'phone' => 'numeric',
15 | 'address' => ''
16 | ),
17 | 'profile' => array(
18 | 'fullname' => 'required|between:2,25',
19 | 'phone' => 'numeric',
20 | 'address' => ''
21 | ),
22 | 'password' => array(
23 | 'password_old' => 'required|alpha_num|between:6,12',
24 | 'password' => 'required|alpha_num|between:6,12|confirmed',
25 | 'password_confirmation' => 'required|alpha_num|between:6,12',
26 | )
27 | );
28 |
29 | /**
30 | * The database table used by the model.
31 | *
32 | * @var string
33 | */
34 | protected $table = 'users';
35 |
36 | /**
37 | * The attributes excluded from the model's JSON form.
38 | *
39 | * @var array
40 | */
41 | protected $hidden = array('password');
42 |
43 | public function clients() {
44 | return $this->hasMany('Client');
45 | }
46 |
47 | /**
48 | * Get the unique identifier for the user.
49 | *
50 | * @return mixed
51 | */
52 | public function getAuthIdentifier()
53 | {
54 | return $this->getKey();
55 | }
56 | /**
57 | * Get the password for the user.
58 | *
59 | * @return string
60 | */
61 | public function getAuthPassword()
62 | {
63 | return $this->password;
64 | }
65 | /**
66 | * Get the e-mail address where password reminders are sent.
67 | *
68 | * @return string
69 | */
70 | public function getReminderEmail()
71 | {
72 | return $this->email;
73 | }
74 |
75 | public function getRememberToken(){ return $this->remember_token; }
76 | public function setRememberToken($value){ $this->remember_token = $value; }
77 | public function getRememberTokenName(){ return 'remember_token'; }
78 | }
79 |
--------------------------------------------------------------------------------
/src/app/routes.php:
--------------------------------------------------------------------------------
1 | client->request('GET', '/');
13 |
14 | $this->assertTrue($this->client->getResponse()->isOk());
15 | }
16 |
17 | }
18 |
--------------------------------------------------------------------------------
/src/app/tests/TestCase.php:
--------------------------------------------------------------------------------
1 |
5 |
6 |
9 |
10 |
11 |
12 |
13 |
14 | {{ Form::open(array('url' => 'clients/delete?client_id=' . $client->id, 'class' => 'form-delete', 'role' => 'form')) }}
15 |
16 | {{ Form::label('file', trans('clients.form.delete.label')) }}
17 |
18 |
19 | {{ Form::submit(trans('clients.form.delete.submit'), array('class'=>'btn btn-large btn-danger btn-block'))}}
20 |
21 | {{ Form::hidden('_token', csrf_token(), array()) }}
22 | {{ Form::close() }}
23 |
24 |
25 | @stop
26 |
--------------------------------------------------------------------------------
/src/app/views/import/import.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.standard')
2 |
3 | @section('content')
4 |
11 |
12 |
13 |
14 | {{ Form::open(array('url' => 'import/data', 'class' => 'form-signin', 'role' => 'form', 'files' => true)) }}
15 |
16 | {{ Form::label('file', trans('import.form.import.fields.file')) }}
17 | {{ Form::file('file') }}
18 |
19 | {{ HTML::link('templates/template.xlsx', trans('import.form.import.fields.template')) }}
20 |
21 |
22 | {{ Form::submit(trans('import.form.import.submit'), array('class'=>'btn btn-large btn-primary btn-block'))}}
23 |
24 | {{ Form::hidden('_token', csrf_token(), array()) }}
25 | {{ Form::close() }}
26 |
27 |
28 | @stop
29 |
--------------------------------------------------------------------------------
/src/app/views/layouts/alerts.blade.php:
--------------------------------------------------------------------------------
1 |
2 | @if(Session::has('message') && Session::has('message-type'))
3 |
4 |
5 | ×
6 | Close
7 |
8 | {{ Session::get('message') }}
9 |
10 | @endif
11 |
--------------------------------------------------------------------------------
/src/app/views/layouts/errors.blade.php:
--------------------------------------------------------------------------------
1 | @if (!empty($errors->count()))
2 |
3 | @foreach($errors->all() as $error)
4 | {{ $error }}
5 | @endforeach
6 |
7 | @endif
--------------------------------------------------------------------------------
/src/app/views/layouts/modal.blade.php:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 | {{ trans('main.menu.brand') }}
14 |
15 |
16 | {{ HTML::style('packages/bootstrap/css/bootstrap.min.css') }}
17 | {{ HTML::style('packages/bootstrap-datetimepicker/bootstrap-datetimepicker.min.css') }}
18 |
19 |
20 |
21 |
22 |
23 | {{ HTML::style('css/sb-admin-2.css')}} {{ HTML::style('css/main.css')}}
24 |
25 |
26 | {{ HTML::style('font-awesome/css/font-awesome.min.css') }}
27 |
28 |
29 |
30 |
34 |
35 |
36 |
37 |
38 |
39 | @include('layouts.alerts')
40 |
41 | @yield('content')
42 |
43 |
44 |
45 | {{ HTML::script('packages/jquery/jquery.min.js') }}
46 | {{ HTML::script('packages/jquery-loader/jquery-loader.js') }}
47 |
48 |
49 | {{ HTML::script('packages/bootstrap/js/bootstrap.min.js') }}
50 |
51 |
52 | {{ HTML::script('packages/moment/moment.js') }}
53 |
54 | {{ HTML::script('packages/bootstrap-datetimepicker/bootstrap-datetimepicker.min.js') }}
55 |
56 |
57 |
58 |
59 |
60 | {{ HTML::script('js/bootstrap.ext.js') }}
61 | {{ HTML::script('js/sb-admin-2.js') }}
62 |
63 |
64 |
65 |
--------------------------------------------------------------------------------
/src/app/views/mailings/delete.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.standard')
2 |
3 | @section('content')
4 |
11 |
12 |
13 |
14 | {{ Form::open(array('url' => 'mailings/delete?mailing_id=' . $mailing->id, 'class' => 'form-delete', 'role' => 'form')) }}
15 |
16 | {{ Form::label('file', trans('mailings.form.delete.label')) }}
17 |
18 |
19 | {{ Form::submit(trans('mailings.form.delete.submit'), array('class'=>'btn btn-large btn-danger btn-block'))}}
20 |
21 | {{ Form::hidden('_token', csrf_token(), array()) }}
22 | {{ Form::close() }}
23 |
24 |
25 | @stop
26 |
--------------------------------------------------------------------------------
/src/app/views/mailings/list.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.standard')
2 |
3 | @section('content')
4 |
10 |
11 |
12 |
13 |
14 | @stop
15 |
16 | @section('script')
17 |
20 |
21 | {{ HTML::script('js/mailings/list.js') }}
22 | @stop
23 |
--------------------------------------------------------------------------------
/src/app/views/translation.php:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/app/views/translation.php
--------------------------------------------------------------------------------
/src/app/views/users/authentication.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.modal')
2 |
3 | @section('content')
4 |
5 |
6 |
7 |
8 |
{{ trans('users.form.authenticate.title') }}
9 |
10 |
11 | {{ Form::open(array('url' => 'users/impersonate', 'role' => 'form')) }}
12 |
13 |
32 |
33 | {{ Form::submit(trans('users.form.authenticate.submit'), array('class' => 'btn btn-lg btn-success btn-block')) }}
34 |
35 | {{ Form::hidden('_token', csrf_token(), array()) }}
36 |
37 | {{ Form::close() }}
38 |
39 |
40 |
41 |
42 | @stop
43 |
--------------------------------------------------------------------------------
/src/app/views/users/login.blade.php:
--------------------------------------------------------------------------------
1 | @extends('layouts.modal')
2 |
3 | @section('content')
4 |
5 |
6 |
7 |
8 |
{{ trans('users.form.login.title') }}
9 |
10 |
11 | {{ Form::open(array('url' => 'users/signin', 'role' => 'form')) }}
12 |
13 |
14 | {{ Form::label('login', trans('users.form.login.fields.login')) }}
15 | {{ Form::text('login', null, array('class' => 'form-control', 'placeholder' => trans('users.form.login.fields.login.default'), 'required' => 'required', 'autofocus' => 'autofocus' )) }}
16 |
17 |
18 |
19 | {{ Form::label('password', trans('users.form.login.fields.password')) }}
20 | {{ Form::password('password', array('class'=>'form-control', 'placeholder' => trans('users.form.login.fields.password.default'), 'required' => 'required' )) }}
21 |
22 |
23 | {{ Form::submit(trans('users.form.login.submit'), array('class'=>'btn btn-lg btn-success btn-block'))}}
24 |
25 | {{ HTML::link('users/register', trans('users.form.login.register')) }}
26 |
27 | {{ Form::hidden('_token', csrf_token(), array()) }}
28 |
29 | {{ Form::close() }}
30 |
31 |
32 |
33 |
34 | @stop
35 |
--------------------------------------------------------------------------------
/src/bootstrap/paths.php:
--------------------------------------------------------------------------------
1 | __DIR__.'/../app',
17 |
18 | /*
19 | |--------------------------------------------------------------------------
20 | | Public Path
21 | |--------------------------------------------------------------------------
22 | |
23 | | The public path contains the assets for your web application, such as
24 | | your JavaScript and CSS files, and also contains the primary entry
25 | | point for web requests into these applications from the outside.
26 | |
27 | */
28 |
29 | 'public' => __DIR__.'/../public',
30 |
31 | /*
32 | |--------------------------------------------------------------------------
33 | | Base Path
34 | |--------------------------------------------------------------------------
35 | |
36 | | The base path is the root of the Laravel installation. Most likely you
37 | | will not need to change this value. But, if for some wild reason it
38 | | is necessary you will do so here, just proceed with some caution.
39 | |
40 | */
41 |
42 | 'base' => __DIR__.'/..',
43 |
44 | /*
45 | |--------------------------------------------------------------------------
46 | | Storage Path
47 | |--------------------------------------------------------------------------
48 | |
49 | | The storage path is used by Laravel to store cached Blade views, logs
50 | | and other pieces of information. You may modify the path here when
51 | | you want to change the location of this directory for your apps.
52 | |
53 | */
54 |
55 | 'storage' => __DIR__.'/../app/storage',
56 |
57 | );
58 |
--------------------------------------------------------------------------------
/src/composer.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "laravel/laravel",
3 | "description": "The Laravel Framework.",
4 | "keywords": ["framework", "laravel"],
5 | "license": "MIT",
6 | "type": "project",
7 | "require": {
8 | "laravel/framework": "4.2.*",
9 | "twitter/bootstrap": "*",
10 | "phpoffice/phpexcel": "*"
11 | },
12 | "autoload": {
13 | "classmap": [
14 | "app/commands",
15 | "app/controllers",
16 | "app/models",
17 | "app/database/migrations",
18 | "app/database/seeds",
19 | "app/tests/TestCase.php"
20 | ]
21 | },
22 | "scripts": {
23 | "post-install-cmd": [
24 | "php artisan clear-compiled",
25 | "php artisan optimize"
26 | ],
27 | "post-update-cmd": [
28 | "php artisan clear-compiled",
29 | "php artisan optimize"
30 | ],
31 | "post-create-project-cmd": [
32 | "php artisan key:generate"
33 | ]
34 | },
35 | "config": {
36 | "preferred-install": "dist"
37 | },
38 | "minimum-stability": "stable"
39 | }
40 |
--------------------------------------------------------------------------------
/src/phpunit.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
15 | ./app/tests/
16 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/src/public/.htaccess:
--------------------------------------------------------------------------------
1 |
2 |
3 | Options -MultiViews
4 |
5 |
6 | Options +FollowSymLinks
7 |
8 | RewriteEngine On
9 |
10 | # Redirect Trailing Slashes...
11 | RewriteRule ^(.*)/$ /$1 [L,R=301]
12 |
13 | # Handle Front Controller...
14 | RewriteCond %{REQUEST_FILENAME} !-d
15 | RewriteCond %{REQUEST_FILENAME} !-f
16 | RewriteRule ^ index.php [L]
17 |
18 |
--------------------------------------------------------------------------------
/src/public/css/main.css:
--------------------------------------------------------------------------------
1 | .table-hover-selection tbody tr {
2 | cursor: pointer;
3 | }
4 |
5 | #loader {
6 | position: absolute;
7 | left: 50%;
8 | margin-left: -16px;
9 | }
10 |
11 | .margin-5 {
12 | margin: 5px;
13 | }
14 |
15 | .margin-right-10 {
16 | margin-right: 10px;
17 | }
18 |
19 | .margin-10 {
20 | margin: 10px;
21 | }
22 |
23 | .row-footer {
24 | margin: 0px 5px 25px 5px;
25 | }
26 |
27 | .import.fa-download {
28 | color: #337ab7;
29 | margin: 10px 5px 0px 0px;
30 | }
31 |
32 | .template {
33 | display: none;
34 | }
35 |
36 | /* Clients */
37 | .state-ActiveBuyer, .state-ActiveSeller {
38 | font-weight: bold;
39 | }
40 |
41 | .state-PassiveBuyer, .state-PassiveSeller {
42 | font-style: italic;
43 | }
44 |
45 | .state-ActiveBuyer, .state-PassiveBuyer {
46 | color: red;
47 | }
48 |
49 | .state-ActiveSeller, .state-PassiveSeller {
50 | color: green;
51 | }
--------------------------------------------------------------------------------
/src/public/css/plugins/metisMenu/metisMenu.css:
--------------------------------------------------------------------------------
1 | /*
2 | * metismenu - v1.0.3
3 | * Easy menu jQuery plugin for Twitter Bootstrap 3
4 | * https://github.com/onokumus/metisMenu
5 | *
6 | * Made by Osman Nuri Okumuş
7 | * Under MIT License
8 | */
9 | .arrow {
10 | float: right;
11 | }
12 |
13 | .glyphicon.arrow:before {
14 | content: "\e079";
15 | }
16 |
17 | .active > a > .glyphicon.arrow:before {
18 | content: "\e114";
19 | }
20 |
21 |
22 | /*
23 | * Require Font-Awesome
24 | * http://fortawesome.github.io/Font-Awesome/
25 | */
26 |
27 |
28 | .fa.arrow:before {
29 | content: "\f104";
30 | }
31 |
32 | .active > a > .fa.arrow:before {
33 | content: "\f107";
34 | }
35 |
36 | .plus-times {
37 | float: right;
38 | }
39 |
40 | .fa.plus-times:before {
41 | content: "\f067";
42 | }
43 |
44 | .active > a > .fa.plus-times {
45 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=1);
46 | -webkit-transform: rotate(45deg);
47 | -moz-transform: rotate(45deg);
48 | -ms-transform: rotate(45deg);
49 | -o-transform: rotate(45deg);
50 | transform: rotate(45deg);
51 | }
52 |
53 | .plus-minus {
54 | float: right;
55 | }
56 |
57 | .fa.plus-minus:before {
58 | content: "\f067";
59 | }
60 |
61 | .active > a > .fa.plus-minus:before {
62 | content: "\f068";
63 | }
--------------------------------------------------------------------------------
/src/public/css/plugins/metisMenu/metisMenu.min.css:
--------------------------------------------------------------------------------
1 | .arrow{float:right}.glyphicon.arrow:before{content:"\e079"}.active>a>.glyphicon.arrow:before{content:"\e114"}.fa.arrow:before{content:"\f104"}.active>a>.fa.arrow:before{content:"\f107"}.plus-times{float:right}.fa.plus-times:before{content:"\f067"}.active>a>.fa.plus-times{filter:progid:DXImageTransform.Microsoft.BasicImage(rotation=1);-webkit-transform:rotate(45deg);-moz-transform:rotate(45deg);-ms-transform:rotate(45deg);-o-transform:rotate(45deg);transform:rotate(45deg)}.plus-minus{float:right}.fa.plus-minus:before{content:"\f067"}.active>a>.fa.plus-minus:before{content:"\f068"}
--------------------------------------------------------------------------------
/src/public/css/plugins/morris.css:
--------------------------------------------------------------------------------
1 | .morris-hover{position:absolute;z-index:1000}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255,255,255,0.8);border:solid 2px rgba(230,230,230,0.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0}
2 | .morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0}
3 |
--------------------------------------------------------------------------------
/src/public/favicon.ico:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/favicon.ico
--------------------------------------------------------------------------------
/src/public/images/Company.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/images/Company.png
--------------------------------------------------------------------------------
/src/public/images/Loyer.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/images/Loyer.png
--------------------------------------------------------------------------------
/src/public/images/Prix.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/images/Prix.png
--------------------------------------------------------------------------------
/src/public/images/Surface.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/images/Surface.png
--------------------------------------------------------------------------------
/src/public/images/loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/images/loader.gif
--------------------------------------------------------------------------------
/src/public/index.php:
--------------------------------------------------------------------------------
1 |
7 | */
8 |
9 | /*
10 | |--------------------------------------------------------------------------
11 | | Register The Auto Loader
12 | |--------------------------------------------------------------------------
13 | |
14 | | Composer provides a convenient, automatically generated class loader
15 | | for our application. We just need to utilize it! We'll require it
16 | | into the script here so that we do not have to worry about the
17 | | loading of any our classes "manually". Feels great 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's 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 these users.
32 | |
33 | */
34 |
35 | $app = require_once __DIR__.'/../bootstrap/start.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 whipped up for them.
46 | |
47 | */
48 |
49 | $app->run();
50 |
--------------------------------------------------------------------------------
/src/public/js/clients/edit.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function() {
2 | });
--------------------------------------------------------------------------------
/src/public/js/loader.jquery.js:
--------------------------------------------------------------------------------
1 | (function ( $ ) {
2 | $.fn.loader = function() {
3 | this.html(' ');
4 | return this;
5 |
6 | };
7 | }( jQuery ));
8 |
--------------------------------------------------------------------------------
/src/public/js/mailings/list.js:
--------------------------------------------------------------------------------
1 | $(document).ready(function() {
2 | function loadResult(url, dataString)
3 | {
4 | $("#mailing-result").loader();
5 |
6 | $.ajax({
7 | type: "GET",
8 | url: url,
9 | data: dataString
10 | })
11 | .done(function(data) {
12 | $("#mailing-result").html(data);
13 | })
14 | .fail(function(request, error) {
15 | $("#mailing-result").html(data);
16 | });
17 | }
18 |
19 | function processSubmitSearch(event, form, url) {
20 |
21 | event.preventDefault();
22 |
23 | dataString = $(form).serialize();
24 |
25 | loadResult(url, dataString);
26 | }
27 |
28 | // page navigation
29 | $('#mailing-result').on('click', '.pagination li a', function (event) {
30 | processSubmitSearch(event, lastSubmitedForm, this.href);
31 | });
32 |
33 | loadResult(resultUrl);
34 | });
--------------------------------------------------------------------------------
/src/public/js/plugins/metisMenu/metisMenu.min.js:
--------------------------------------------------------------------------------
1 | /*
2 | * metismenu - v1.0.3
3 | * Easy menu jQuery plugin for Twitter Bootstrap 3
4 | * https://github.com/onokumus/metisMenu
5 | *
6 | * Made by Osman Nuri Okumuş
7 | * Under MIT License
8 | */
9 | !function(a,b,c){function d(b,c){this.element=b,this.settings=a.extend({},f,c),this._defaults=f,this._name=e,this.init()}var e="metisMenu",f={toggle:!0};d.prototype={init:function(){var b=a(this.element),c=this.settings.toggle;this.isIE()<=9?(b.find("li.active").has("ul").children("ul").collapse("show"),b.find("li").not(".active").has("ul").children("ul").collapse("hide")):(b.find("li.active").has("ul").children("ul").addClass("collapse in"),b.find("li").not(".active").has("ul").children("ul").addClass("collapse")),b.find("li").has("ul").children("a").on("click",function(b){b.preventDefault(),a(this).parent("li").toggleClass("active").children("ul").collapse("toggle"),c&&a(this).parent("li").siblings().removeClass("active").children("ul.in").collapse("hide")})},isIE:function(){for(var a,b=3,d=c.createElement("div"),e=d.getElementsByTagName("i");d.innerHTML="",e[0];)return b>4?b:a}},a.fn[e]=function(b){return this.each(function(){a.data(this,"plugin_"+e)||a.data(this,"plugin_"+e,new d(this,b))})}}(jQuery,window,document);
--------------------------------------------------------------------------------
/src/public/js/sb-admin-2.js:
--------------------------------------------------------------------------------
1 | $(function() {
2 | $('#side-menu').metisMenu();
3 | });
4 |
5 | //Loads the correct sidebar on window load,
6 | //collapses the sidebar on window resize.
7 | // Sets the min-height of #page-wrapper to window size
8 | $(function() {
9 | $(window).bind("load resize", function() {
10 | topOffset = 50;
11 | width = (this.window.innerWidth > 0) ? this.window.innerWidth : this.screen.width;
12 | if (width < 768) {
13 | $('div.navbar-collapse').addClass('collapse')
14 | topOffset = 100; // 2-row-menu
15 | } else {
16 | $('div.navbar-collapse').removeClass('collapse')
17 | }
18 |
19 | height = (this.window.innerHeight > 0) ? this.window.innerHeight : this.screen.height;
20 | height = height - topOffset;
21 | if (height < 1) height = 1;
22 | if (height > topOffset) {
23 | $("#page-wrapper").css("min-height", (height) + "px");
24 | }
25 | })
26 | });
27 |
28 | // Array Remove - By John Resig (MIT Licensed)
29 | if (!Array.prototype.filter)
30 | {
31 | Array.prototype.filter = function(fun /*, thisp*/)
32 | {
33 | var len = this.length;
34 | if (typeof fun != "function")
35 | throw new TypeError();
36 |
37 | var res = new Array();
38 | var thisp = arguments[1];
39 | for (var i = 0; i < len; i++)
40 | {
41 | if (i in this)
42 | {
43 | var val = this[i]; // in case fun mutates this
44 | if (fun.call(thisp, val, i, this))
45 | res.push(val);
46 | }
47 | }
48 |
49 | return res;
50 | };
51 | }
--------------------------------------------------------------------------------
/src/public/packages/.gitkeep:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/.gitkeep
--------------------------------------------------------------------------------
/src/public/packages/bootstrap/fonts/glyphicons-halflings-regular.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/bootstrap/fonts/glyphicons-halflings-regular.eot
--------------------------------------------------------------------------------
/src/public/packages/bootstrap/fonts/glyphicons-halflings-regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/bootstrap/fonts/glyphicons-halflings-regular.ttf
--------------------------------------------------------------------------------
/src/public/packages/bootstrap/fonts/glyphicons-halflings-regular.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/bootstrap/fonts/glyphicons-halflings-regular.woff
--------------------------------------------------------------------------------
/src/public/packages/bootstrap/js/npm.js:
--------------------------------------------------------------------------------
1 | // This file is autogenerated via the `commonjs` Grunt task. You can require() this file in a CommonJS environment.
2 | require('../../js/transition.js')
3 | require('../../js/alert.js')
4 | require('../../js/button.js')
5 | require('../../js/carousel.js')
6 | require('../../js/collapse.js')
7 | require('../../js/dropdown.js')
8 | require('../../js/modal.js')
9 | require('../../js/tooltip.js')
10 | require('../../js/popover.js')
11 | require('../../js/scrollspy.js')
12 | require('../../js/tab.js')
13 | require('../../js/affix.js')
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/fonts/FontAwesome.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/font-awesome/fonts/FontAwesome.otf
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/fonts/fontawesome-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/font-awesome/fonts/fontawesome-webfont.eot
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/fonts/fontawesome-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/font-awesome/fonts/fontawesome-webfont.ttf
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/fonts/fontawesome-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/font-awesome/fonts/fontawesome-webfont.woff
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/less/bordered-pulled.less:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em @fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .@{fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/less/core.less:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .@{fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | }
12 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/less/fixed-width.less:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .@{fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/less/font-awesome.less:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables.less";
7 | @import "mixins.less";
8 | @import "path.less";
9 | @import "core.less";
10 | @import "larger.less";
11 | @import "fixed-width.less";
12 | @import "list.less";
13 | @import "bordered-pulled.less";
14 | @import "spinning.less";
15 | @import "rotated-flipped.less";
16 | @import "stacked.less";
17 | @import "icons.less";
18 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/less/larger.less:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .@{fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .@{fa-css-prefix}-2x { font-size: 2em; }
11 | .@{fa-css-prefix}-3x { font-size: 3em; }
12 | .@{fa-css-prefix}-4x { font-size: 4em; }
13 | .@{fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/less/list.less:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: @fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .@{fa-css-prefix}-li {
11 | position: absolute;
12 | left: -@fa-li-width;
13 | width: @fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.@{fa-css-prefix}-lg {
17 | left: (-@fa-li-width + (4em / 14));
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/less/mixins.less:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | .fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | }
12 |
13 | .fa-icon-rotate(@degrees, @rotation) {
14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation);
15 | -webkit-transform: rotate(@degrees);
16 | -ms-transform: rotate(@degrees);
17 | transform: rotate(@degrees);
18 | }
19 |
20 | .fa-icon-flip(@horiz, @vert, @rotation) {
21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=@rotation, mirror=1);
22 | -webkit-transform: scale(@horiz, @vert);
23 | -ms-transform: scale(@horiz, @vert);
24 | transform: scale(@horiz, @vert);
25 | }
26 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/less/path.less:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('@{fa-font-path}/fontawesome-webfont.eot?v=@{fa-version}');
7 | src: url('@{fa-font-path}/fontawesome-webfont.eot?#iefix&v=@{fa-version}') format('embedded-opentype'),
8 | url('@{fa-font-path}/fontawesome-webfont.woff?v=@{fa-version}') format('woff'),
9 | url('@{fa-font-path}/fontawesome-webfont.ttf?v=@{fa-version}') format('truetype'),
10 | url('@{fa-font-path}/fontawesome-webfont.svg?v=@{fa-version}#fontawesomeregular') format('svg');
11 | // src: url('@{fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
12 | font-weight: normal;
13 | font-style: normal;
14 | }
15 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/less/rotated-flipped.less:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-rotate-90 { .fa-icon-rotate(90deg, 1); }
5 | .@{fa-css-prefix}-rotate-180 { .fa-icon-rotate(180deg, 2); }
6 | .@{fa-css-prefix}-rotate-270 { .fa-icon-rotate(270deg, 3); }
7 |
8 | .@{fa-css-prefix}-flip-horizontal { .fa-icon-flip(-1, 1, 0); }
9 | .@{fa-css-prefix}-flip-vertical { .fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .@{fa-css-prefix}-rotate-90,
15 | :root .@{fa-css-prefix}-rotate-180,
16 | :root .@{fa-css-prefix}-rotate-270,
17 | :root .@{fa-css-prefix}-flip-horizontal,
18 | :root .@{fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/less/spinning.less:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .@{fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | @-webkit-keyframes fa-spin {
10 | 0% {
11 | -webkit-transform: rotate(0deg);
12 | transform: rotate(0deg);
13 | }
14 | 100% {
15 | -webkit-transform: rotate(359deg);
16 | transform: rotate(359deg);
17 | }
18 | }
19 |
20 | @keyframes fa-spin {
21 | 0% {
22 | -webkit-transform: rotate(0deg);
23 | transform: rotate(0deg);
24 | }
25 | 100% {
26 | -webkit-transform: rotate(359deg);
27 | transform: rotate(359deg);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/less/stacked.less:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .@{fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .@{fa-css-prefix}-stack-1x, .@{fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .@{fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .@{fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .@{fa-css-prefix}-inverse { color: @fa-inverse; }
21 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/scss/_bordered-pulled.scss:
--------------------------------------------------------------------------------
1 | // Bordered & Pulled
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-border {
5 | padding: .2em .25em .15em;
6 | border: solid .08em $fa-border-color;
7 | border-radius: .1em;
8 | }
9 |
10 | .pull-right { float: right; }
11 | .pull-left { float: left; }
12 |
13 | .#{$fa-css-prefix} {
14 | &.pull-left { margin-right: .3em; }
15 | &.pull-right { margin-left: .3em; }
16 | }
17 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/scss/_core.scss:
--------------------------------------------------------------------------------
1 | // Base Class Definition
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix} {
5 | display: inline-block;
6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | }
12 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/scss/_fixed-width.scss:
--------------------------------------------------------------------------------
1 | // Fixed Width Icons
2 | // -------------------------
3 | .#{$fa-css-prefix}-fw {
4 | width: (18em / 14);
5 | text-align: center;
6 | }
7 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/scss/_larger.scss:
--------------------------------------------------------------------------------
1 | // Icon Sizes
2 | // -------------------------
3 |
4 | /* makes the font 33% larger relative to the icon container */
5 | .#{$fa-css-prefix}-lg {
6 | font-size: (4em / 3);
7 | line-height: (3em / 4);
8 | vertical-align: -15%;
9 | }
10 | .#{$fa-css-prefix}-2x { font-size: 2em; }
11 | .#{$fa-css-prefix}-3x { font-size: 3em; }
12 | .#{$fa-css-prefix}-4x { font-size: 4em; }
13 | .#{$fa-css-prefix}-5x { font-size: 5em; }
14 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/scss/_list.scss:
--------------------------------------------------------------------------------
1 | // List Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-ul {
5 | padding-left: 0;
6 | margin-left: $fa-li-width;
7 | list-style-type: none;
8 | > li { position: relative; }
9 | }
10 | .#{$fa-css-prefix}-li {
11 | position: absolute;
12 | left: -$fa-li-width;
13 | width: $fa-li-width;
14 | top: (2em / 14);
15 | text-align: center;
16 | &.#{$fa-css-prefix}-lg {
17 | left: -$fa-li-width + (4em / 14);
18 | }
19 | }
20 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/scss/_mixins.scss:
--------------------------------------------------------------------------------
1 | // Mixins
2 | // --------------------------
3 |
4 | @mixin fa-icon() {
5 | display: inline-block;
6 | font: normal normal normal 14px/1 FontAwesome; // shortening font declaration
7 | font-size: inherit; // can't have font-size inherit on line above, so need to override
8 | text-rendering: auto; // optimizelegibility throws things off #1094
9 | -webkit-font-smoothing: antialiased;
10 | -moz-osx-font-smoothing: grayscale;
11 | }
12 |
13 | @mixin fa-icon-rotate($degrees, $rotation) {
14 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
15 | -webkit-transform: rotate($degrees);
16 | -ms-transform: rotate($degrees);
17 | transform: rotate($degrees);
18 | }
19 |
20 | @mixin fa-icon-flip($horiz, $vert, $rotation) {
21 | filter: progid:DXImageTransform.Microsoft.BasicImage(rotation=#{$rotation});
22 | -webkit-transform: scale($horiz, $vert);
23 | -ms-transform: scale($horiz, $vert);
24 | transform: scale($horiz, $vert);
25 | }
26 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/scss/_path.scss:
--------------------------------------------------------------------------------
1 | /* FONT PATH
2 | * -------------------------- */
3 |
4 | @font-face {
5 | font-family: 'FontAwesome';
6 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?v=#{$fa-version}');
7 | src: url('#{$fa-font-path}/fontawesome-webfont.eot?#iefix&v=#{$fa-version}') format('embedded-opentype'),
8 | url('#{$fa-font-path}/fontawesome-webfont.woff?v=#{$fa-version}') format('woff'),
9 | url('#{$fa-font-path}/fontawesome-webfont.ttf?v=#{$fa-version}') format('truetype'),
10 | url('#{$fa-font-path}/fontawesome-webfont.svg?v=#{$fa-version}#fontawesomeregular') format('svg');
11 | //src: url('#{$fa-font-path}/FontAwesome.otf') format('opentype'); // used when developing fonts
12 | font-weight: normal;
13 | font-style: normal;
14 | }
15 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/scss/_rotated-flipped.scss:
--------------------------------------------------------------------------------
1 | // Rotated & Flipped Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-rotate-90 { @include fa-icon-rotate(90deg, 1); }
5 | .#{$fa-css-prefix}-rotate-180 { @include fa-icon-rotate(180deg, 2); }
6 | .#{$fa-css-prefix}-rotate-270 { @include fa-icon-rotate(270deg, 3); }
7 |
8 | .#{$fa-css-prefix}-flip-horizontal { @include fa-icon-flip(-1, 1, 0); }
9 | .#{$fa-css-prefix}-flip-vertical { @include fa-icon-flip(1, -1, 2); }
10 |
11 | // Hook for IE8-9
12 | // -------------------------
13 |
14 | :root .#{$fa-css-prefix}-rotate-90,
15 | :root .#{$fa-css-prefix}-rotate-180,
16 | :root .#{$fa-css-prefix}-rotate-270,
17 | :root .#{$fa-css-prefix}-flip-horizontal,
18 | :root .#{$fa-css-prefix}-flip-vertical {
19 | filter: none;
20 | }
21 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/scss/_spinning.scss:
--------------------------------------------------------------------------------
1 | // Spinning Icons
2 | // --------------------------
3 |
4 | .#{$fa-css-prefix}-spin {
5 | -webkit-animation: fa-spin 2s infinite linear;
6 | animation: fa-spin 2s infinite linear;
7 | }
8 |
9 | @-webkit-keyframes fa-spin {
10 | 0% {
11 | -webkit-transform: rotate(0deg);
12 | transform: rotate(0deg);
13 | }
14 | 100% {
15 | -webkit-transform: rotate(359deg);
16 | transform: rotate(359deg);
17 | }
18 | }
19 |
20 | @keyframes fa-spin {
21 | 0% {
22 | -webkit-transform: rotate(0deg);
23 | transform: rotate(0deg);
24 | }
25 | 100% {
26 | -webkit-transform: rotate(359deg);
27 | transform: rotate(359deg);
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/scss/_stacked.scss:
--------------------------------------------------------------------------------
1 | // Stacked Icons
2 | // -------------------------
3 |
4 | .#{$fa-css-prefix}-stack {
5 | position: relative;
6 | display: inline-block;
7 | width: 2em;
8 | height: 2em;
9 | line-height: 2em;
10 | vertical-align: middle;
11 | }
12 | .#{$fa-css-prefix}-stack-1x, .#{$fa-css-prefix}-stack-2x {
13 | position: absolute;
14 | left: 0;
15 | width: 100%;
16 | text-align: center;
17 | }
18 | .#{$fa-css-prefix}-stack-1x { line-height: inherit; }
19 | .#{$fa-css-prefix}-stack-2x { font-size: 2em; }
20 | .#{$fa-css-prefix}-inverse { color: $fa-inverse; }
21 |
--------------------------------------------------------------------------------
/src/public/packages/font-awesome/scss/font-awesome.scss:
--------------------------------------------------------------------------------
1 | /*!
2 | * Font Awesome 4.2.0 by @davegandy - http://fontawesome.io - @fontawesome
3 | * License - http://fontawesome.io/license (Font: SIL OFL 1.1, CSS: MIT License)
4 | */
5 |
6 | @import "variables";
7 | @import "mixins";
8 | @import "path";
9 | @import "core";
10 | @import "larger";
11 | @import "fixed-width";
12 | @import "list";
13 | @import "bordered-pulled";
14 | @import "spinning";
15 | @import "rotated-flipped";
16 | @import "stacked";
17 | @import "icons";
18 |
--------------------------------------------------------------------------------
/src/public/packages/jquery-loader/jquery-loader.js:
--------------------------------------------------------------------------------
1 | (function ( $ ) {
2 | $.fn.loader = function() {
3 | this.html(' ');
4 | return this;
5 |
6 | };
7 | }( jQuery ));
8 |
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/langs/readme.md:
--------------------------------------------------------------------------------
1 | This is where language files should be placed.
2 |
3 | Please DO NOT translate these directly use this service: https://www.transifex.com/projects/p/tinymce/
4 |
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/advlist/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("advlist",function(a){function b(a,b){var c=[];return tinymce.each(b.split(/[ ,]/),function(a){c.push({text:a.replace(/\-/g," ").replace(/\b\w/g,function(a){return a.toUpperCase()}),data:"default"==a?"":a})}),c}function c(b,c){a.undoManager.transact(function(){var d,e=a.dom,f=a.selection;d=e.getParent(f.getNode(),"ol,ul"),d&&d.nodeName==b&&c!==!1||a.execCommand("UL"==b?"InsertUnorderedList":"InsertOrderedList"),c=c===!1?g[b]:c,g[b]=c,d=e.getParent(f.getNode(),"ol,ul"),d&&(e.setStyle(d,"listStyleType",c?c:null),d.removeAttribute("data-mce-style")),a.focus()})}function d(b){var c=a.dom.getStyle(a.dom.getParent(a.selection.getNode(),"ol,ul"),"listStyleType")||"";b.control.items().each(function(a){a.active(a.settings.data===c)})}var e,f,g={};e=b("OL",a.getParam("advlist_number_styles","default,lower-alpha,lower-greek,lower-roman,upper-alpha,upper-roman")),f=b("UL",a.getParam("advlist_bullet_styles","default,circle,disc,square")),a.addButton("numlist",{type:"splitbutton",tooltip:"Numbered list",menu:e,onshow:d,onselect:function(a){c("OL",a.control.settings.data)},onclick:function(){c("OL",!1)}}),a.addButton("bullist",{type:"splitbutton",tooltip:"Bullet list",menu:f,onshow:d,onselect:function(a){c("UL",a.control.settings.data)},onclick:function(){c("UL",!1)}})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/anchor/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("anchor",function(a){function b(){var b=a.selection.getNode(),c="";"A"==b.tagName&&(c=b.name||b.id||""),a.windowManager.open({title:"Anchor",body:{type:"textbox",name:"name",size:40,label:"Name",value:c},onsubmit:function(b){a.execCommand("mceInsertContent",!1,a.dom.createHTML("a",{id:b.data.name}))}})}a.addButton("anchor",{icon:"anchor",tooltip:"Anchor",onclick:b,stateSelector:"a:not([href])"}),a.addMenuItem("anchor",{icon:"anchor",text:"Anchor",context:"insert",onclick:b})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/autolink/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("autolink",function(a){function b(a){e(a,-1,"(",!0)}function c(a){e(a,0,"",!0)}function d(a){e(a,-1,"",!1)}function e(a,b,c){function d(a,b){if(0>b&&(b=0),3==a.nodeType){var c=a.data.length;b>c&&(b=c)}return b}function e(a,b){1!=a.nodeType||a.hasChildNodes()?g.setStart(a,d(a,b)):g.setStartBefore(a)}function f(a,b){1!=a.nodeType||a.hasChildNodes()?g.setEnd(a,d(a,b)):g.setEndAfter(a)}var g,h,i,j,k,l,m,n,o,p;if(g=a.selection.getRng(!0).cloneRange(),g.startOffset<5){if(n=g.endContainer.previousSibling,!n){if(!g.endContainer.firstChild||!g.endContainer.firstChild.nextSibling)return;n=g.endContainer.firstChild.nextSibling}if(o=n.length,e(n,o),f(n,o),g.endOffset<5)return;h=g.endOffset,j=n}else{if(j=g.endContainer,3!=j.nodeType&&j.firstChild){for(;3!=j.nodeType&&j.firstChild;)j=j.firstChild;3==j.nodeType&&(e(j,0),f(j,j.nodeValue.length))}h=1==g.endOffset?2:g.endOffset-1-b}i=h;do e(j,h>=2?h-2:0),f(j,h>=1?h-1:0),h-=1,p=g.toString();while(" "!=p&&""!==p&&160!=p.charCodeAt(0)&&h-2>=0&&p!=c);g.toString()==c||160==g.toString().charCodeAt(0)?(e(j,h),f(j,i),h+=1):0===g.startOffset?(e(j,0),f(j,i)):(e(j,h),f(j,i)),l=g.toString(),"."==l.charAt(l.length-1)&&f(j,i-1),l=g.toString(),m=l.match(/^(https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.|(?:mailto:)?[A-Z0-9._%+\-]+@)(.+)$/i),m&&("www."==m[1]?m[1]="http://www.":/@$/.test(m[1])&&!/^mailto:/.test(m[1])&&(m[1]="mailto:"+m[1]),k=a.selection.getBookmark(),a.selection.setRng(g),a.execCommand("createlink",!1,m[1]+m[2]),a.selection.moveToBookmark(k),a.nodeChanged())}var f;return a.on("keydown",function(b){return 13==b.keyCode?d(a):void 0}),tinymce.Env.ie?void a.on("focus",function(){if(!f){f=!0;try{a.execCommand("AutoUrlDetect",!1,!0)}catch(b){}}}):(a.on("keypress",function(c){return 41==c.keyCode?b(a):void 0}),void a.on("keyup",function(b){return 32==b.keyCode?c(a):void 0}))});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/autoresize/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("autoresize",function(a){function b(){return a.plugins.fullscreen&&a.plugins.fullscreen.isFullscreen()}function c(d){var g,h,i,j,k,l,m,n,o,p,q,r,s=tinymce.DOM;if(h=a.getDoc()){if(i=h.body,j=h.documentElement,k=e.autoresize_min_height,!i||d&&"setcontent"===d.type&&d.initial||b())return void(i&&j&&(i.style.overflowY="auto",j.style.overflowY="auto"));m=a.dom.getStyle(i,"margin-top",!0),n=a.dom.getStyle(i,"margin-bottom",!0),o=a.dom.getStyle(i,"padding-top",!0),p=a.dom.getStyle(i,"padding-bottom",!0),q=a.dom.getStyle(i,"border-top-width",!0),r=a.dom.getStyle(i,"border-bottom-width",!0),l=i.offsetHeight+parseInt(m,10)+parseInt(n,10)+parseInt(o,10)+parseInt(p,10)+parseInt(q,10)+parseInt(r,10),(isNaN(l)||0>=l)&&(l=tinymce.Env.ie?i.scrollHeight:tinymce.Env.webkit&&0===i.clientHeight?0:i.offsetHeight),l>e.autoresize_min_height&&(k=l),e.autoresize_max_height&&l>e.autoresize_max_height?(k=e.autoresize_max_height,i.style.overflowY="auto",j.style.overflowY="auto"):(i.style.overflowY="hidden",j.style.overflowY="hidden",i.scrollTop=0),k!==f&&(g=k-f,s.setStyle(a.iframeElement,"height",k+"px"),f=k,tinymce.isWebKit&&0>g&&c(d))}}function d(a,b,e){setTimeout(function(){c({}),a--?d(a,b,e):e&&e()},b)}var e=a.settings,f=0;a.settings.inline||(e.autoresize_min_height=parseInt(a.getParam("autoresize_min_height",a.getElement().offsetHeight),10),e.autoresize_max_height=parseInt(a.getParam("autoresize_max_height",0),10),a.on("init",function(){var b=a.getParam("autoresize_overflow_padding",1);a.dom.setStyles(a.getBody(),{paddingBottom:a.getParam("autoresize_bottom_margin",50),paddingLeft:b,paddingRight:b})}),a.on("nodechange setcontent keyup FullscreenStateChanged",c),a.getParam("autoresize_on_init",!0)&&a.on("init",function(){d(20,100,function(){d(5,1e3)})}),a.addCommand("mceAutoResize",c))});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/autosave/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce._beforeUnloadHandler=function(){var a;return tinymce.each(tinymce.editors,function(b){b.plugins.autosave&&b.plugins.autosave.storeDraft(),!a&&b.isDirty()&&b.getParam("autosave_ask_before_unload",!0)&&(a=b.translate("You have unsaved changes are you sure you want to navigate away?"))}),a},tinymce.PluginManager.add("autosave",function(a){function b(a,b){var c={s:1e3,m:6e4};return a=/^(\d+)([ms]?)$/.exec(""+(a||b)),(a[2]?c[a[2]]:1)*parseInt(a,10)}function c(){var a=parseInt(n.getItem(k+"time"),10)||0;return(new Date).getTime()-a>m.autosave_retention?(d(!1),!1):!0}function d(b){n.removeItem(k+"draft"),n.removeItem(k+"time"),b!==!1&&a.fire("RemoveDraft")}function e(){!j()&&a.isDirty()&&(n.setItem(k+"draft",a.getContent({format:"raw",no_events:!0})),n.setItem(k+"time",(new Date).getTime()),a.fire("StoreDraft"))}function f(){c()&&(a.setContent(n.getItem(k+"draft"),{format:"raw"}),a.fire("RestoreDraft"))}function g(){l||(setInterval(function(){a.removed||e()},m.autosave_interval),l=!0)}function h(){var b=this;b.disabled(!c()),a.on("StoreDraft RestoreDraft RemoveDraft",function(){b.disabled(!c())}),g()}function i(){a.undoManager.beforeChange(),f(),d(),a.undoManager.add()}function j(b){var c=a.settings.forced_root_block;return b=tinymce.trim("undefined"==typeof b?a.getBody().innerHTML:b),""===b||new RegExp("^<"+c+"[^>]*>((\xa0| |[ ]| ]*>)+?|)"+c+">| $","i").test(b)}var k,l,m=a.settings,n=tinymce.util.LocalStorage;k=m.autosave_prefix||"tinymce-autosave-{path}{query}-{id}-",k=k.replace(/\{path\}/g,document.location.pathname),k=k.replace(/\{query\}/g,document.location.search),k=k.replace(/\{id\}/g,a.id),m.autosave_interval=b(m.autosave_interval,"30s"),m.autosave_retention=b(m.autosave_retention,"20m"),a.addButton("restoredraft",{title:"Restore last draft",onclick:i,onPostRender:h}),a.addMenuItem("restoredraft",{text:"Restore last draft",onclick:i,onPostRender:h,context:"file"}),a.settings.autosave_restore_when_empty!==!1&&(a.on("init",function(){c()&&j()&&f()}),a.on("saveContent",function(){d()})),window.onbeforeunload=tinymce._beforeUnloadHandler,this.hasDraft=c,this.storeDraft=e,this.restoreDraft=f,this.removeDraft=d,this.isEmpty=j});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/code/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("code",function(a){function b(){var b=a.windowManager.open({title:"Source code",body:{type:"textbox",name:"code",multiline:!0,minWidth:a.getParam("code_dialog_width",600),minHeight:a.getParam("code_dialog_height",Math.min(tinymce.DOM.getViewPort().h-200,500)),spellcheck:!1,style:"direction: ltr; text-align: left"},onSubmit:function(b){a.focus(),a.undoManager.transact(function(){a.setContent(b.data.code)}),a.selection.setCursorLocation(),a.nodeChanged()}});b.find("#code").value(a.getContent({source_view:!0}))}a.addCommand("mceCodeEditor",b),a.addButton("code",{icon:"code",tooltip:"Source code",onclick:b}),a.addMenuItem("code",{icon:"code",text:"Source code",context:"tools",onclick:b})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/colorpicker/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("colorpicker",function(a){function b(b,c){function d(a){var b=new tinymce.util.Color(a),c=b.toRgb();f.fromJSON({r:c.r,g:c.g,b:c.b,hex:b.toHex().substr(1)}),e(b.toHex())}function e(a){f.find("#preview")[0].getEl().style.background=a}var f=a.windowManager.open({title:"Color",items:{type:"container",layout:"flex",direction:"row",align:"stretch",padding:5,spacing:10,items:[{type:"colorpicker",value:c,onchange:function(){var a=this.rgb();f&&(f.find("#r").value(a.r),f.find("#g").value(a.g),f.find("#b").value(a.b),f.find("#hex").value(this.value().substr(1)),e(this.value()))}},{type:"form",padding:0,labelGap:5,defaults:{type:"textbox",size:7,value:"0",flex:1,spellcheck:!1,onchange:function(){var a,b,c=f.find("colorpicker")[0];return a=this.name(),b=this.value(),"hex"==a?(b="#"+b,d(b),void c.value(b)):(b={r:f.find("#r").value(),g:f.find("#g").value(),b:f.find("#b").value()},c.value(b),void d(b))}},items:[{name:"r",label:"R",autofocus:1},{name:"g",label:"G"},{name:"b",label:"B"},{name:"hex",label:"#",value:"000000"},{name:"preview",type:"container",border:1}]}]},onSubmit:function(){b("#"+this.toJSON().hex)}});d(c)}a.settings.color_picker_callback||(a.settings.color_picker_callback=b)});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/contextmenu/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("contextmenu",function(a){var b,c=a.settings.contextmenu_never_use_native;a.on("contextmenu",function(d){var e,f=a.getDoc();if(!d.ctrlKey||c){if(d.preventDefault(),tinymce.Env.mac&&tinymce.Env.webkit&&2==d.button&&f.caretRangeFromPoint&&a.selection.setRng(f.caretRangeFromPoint(d.x,d.y)),e=a.settings.contextmenu||"link image inserttable | cell row column deletetable",b)b.show();else{var g=[];tinymce.each(e.split(/[ ,]/),function(b){var c=a.menuItems[b];"|"==b&&(c={text:b}),c&&(c.shortcut="",g.push(c))});for(var h=0;h",tinymce.each(c,function(c){var d=b+"/img/smiley-"+c+".gif";a+=' '}),a+=""}),a+=""}var d=[["cool","cry","embarassed","foot-in-mouth"],["frown","innocent","kiss","laughing"],["money-mouth","sealed","smile","surprised"],["tongue-out","undecided","wink","yell"]];a.addButton("emoticons",{type:"panelbutton",panel:{role:"application",autohide:!0,html:c,onclick:function(b){var c=a.dom.getParent(b.target,"a");c&&(a.insertContent(' '),this.hide())}},tooltip:"Emoticons"})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/example/dialog.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Custom dialog
5 | Input some text:
6 | Close window
7 |
8 |
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/example/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("example",function(a,b){a.addButton("example",{text:"My button",icon:!1,onclick:function(){a.windowManager.open({title:"Example plugin",body:[{type:"textbox",name:"title",label:"Title"}],onsubmit:function(b){a.insertContent("Title: "+b.data.title)}})}}),a.addMenuItem("example",{text:"Example plugin",context:"tools",onclick:function(){a.windowManager.open({title:"TinyMCE site",url:b+"/dialog.html",width:600,height:400,buttons:[{text:"Insert",onclick:function(){var b=a.windowManager.getWindows()[0];a.insertContent(b.getContentWindow().document.getElementById("content").value),b.close()}},{text:"Close",onclick:"close"}]})}})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/example_dependency/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("example_dependency",function(){},["example"]);
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/fullscreen/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("fullscreen",function(a){function b(){var a,b,c=window,d=document,e=d.body;return e.offsetWidth&&(a=e.offsetWidth,b=e.offsetHeight),c.innerWidth&&c.innerHeight&&(a=c.innerWidth,b=c.innerHeight),{w:a,h:b}}function c(){function c(){j.setStyle(m,"height",b().h-(l.clientHeight-m.clientHeight))}var k,l,m,n,o=document.body,p=document.documentElement;i=!i,l=a.getContainer(),k=l.style,m=a.getContentAreaContainer().firstChild,n=m.style,i?(d=n.width,e=n.height,n.width=n.height="100%",g=k.width,h=k.height,k.width=k.height="",j.addClass(o,"mce-fullscreen"),j.addClass(p,"mce-fullscreen"),j.addClass(l,"mce-fullscreen"),j.bind(window,"resize",c),c(),f=c):(n.width=d,n.height=e,g&&(k.width=g),h&&(k.height=h),j.removeClass(o,"mce-fullscreen"),j.removeClass(p,"mce-fullscreen"),j.removeClass(l,"mce-fullscreen"),j.unbind(window,"resize",f)),a.fire("FullscreenStateChanged",{state:i})}var d,e,f,g,h,i=!1,j=tinymce.DOM;return a.settings.inline?void 0:(a.on("init",function(){a.addShortcut("Ctrl+Alt+F","",c)}),a.on("remove",function(){f&&j.unbind(window,"resize",f)}),a.addCommand("mceFullScreen",c),a.addMenuItem("fullscreen",{text:"Fullscreen",shortcut:"Ctrl+Alt+F",selectable:!0,onClick:c,onPostRender:function(){var b=this;a.on("FullscreenStateChanged",function(a){b.active(a.state)})},context:"view"}),a.addButton("fullscreen",{tooltip:"Fullscreen",shortcut:"Ctrl+Alt+F",onClick:c,onPostRender:function(){var b=this;a.on("FullscreenStateChanged",function(a){b.active(a.state)})}}),{isFullscreen:function(){return i}})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/hr/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("hr",function(a){a.addCommand("InsertHorizontalRule",function(){a.execCommand("mceInsertContent",!1," ")}),a.addButton("hr",{icon:"hr",tooltip:"Horizontal line",cmd:"InsertHorizontalRule"}),a.addMenuItem("hr",{icon:"hr",text:"Horizontal line",cmd:"InsertHorizontalRule",context:"insert"})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/importcss/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("importcss",function(a){function b(a){return"string"==typeof a?function(b){return-1!==b.indexOf(a)}:a instanceof RegExp?function(b){return a.test(b)}:a}function c(b,c){function d(a,b){var g,h=a.href;if(h&&c(h,b)){f(a.imports,function(a){d(a,!0)});try{g=a.cssRules||a.rules}catch(i){}f(g,function(a){a.styleSheet?d(a.styleSheet,!0):a.selectorText&&f(a.selectorText.split(","),function(a){e.push(tinymce.trim(a))})})}}var e=[],g={};f(a.contentCSS,function(a){g[a]=!0}),c||(c=function(a,b){return b||g[a]});try{f(b.styleSheets,function(a){d(a)})}catch(h){}return e}function d(b){var c,d=/^(?:([a-z0-9\-_]+))?(\.[a-z0-9_\-\.]+)$/i.exec(b);if(d){var e=d[1],f=d[2].substr(1).split(".").join(" "),g=tinymce.makeMap("a,img");return d[1]?(c={title:b},a.schema.getTextBlockElements()[e]?c.block=e:a.schema.getBlockElements()[e]||g[e.toLowerCase()]?c.selector=e:c.inline=e):d[2]&&(c={inline:"span",title:b.substr(1),classes:f}),a.settings.importcss_merge_classes!==!1?c.classes=f:c.attributes={"class":f},c}}var e=this,f=tinymce.each;a.on("renderFormatsMenu",function(g){var h=a.settings,i={},j=h.importcss_selector_converter||d,k=b(h.importcss_selector_filter),l=g.control;a.settings.importcss_append||l.items().remove();var m=[];tinymce.each(h.importcss_groups,function(a){a=tinymce.extend({},a),a.filter=b(a.filter),m.push(a)}),f(c(g.doc||a.getDoc(),b(h.importcss_file_filter)),function(b){if(-1===b.indexOf(".mce-")&&!i[b]&&(!k||k(b))){var c,d=j.call(e,b);if(d){var f=d.name||tinymce.DOM.uniqueId();if(m)for(var g=0;g'+d+"";var f=a.dom.getParent(a.selection.getStart(),"time");if(f)return void a.dom.setOuterHTML(f,d)}a.insertContent(d)}var d,e,f="Sun Mon Tue Wed Thu Fri Sat Sun".split(" "),g="Sunday Monday Tuesday Wednesday Thursday Friday Saturday Sunday".split(" "),h="Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec".split(" "),i="January February March April May June July August September October November December".split(" "),j=[];a.addCommand("mceInsertDate",function(){c(a.getParam("insertdatetime_dateformat",a.translate("%Y-%m-%d")))}),a.addCommand("mceInsertTime",function(){c(a.getParam("insertdatetime_timeformat",a.translate("%H:%M:%S")))}),a.addButton("insertdatetime",{type:"splitbutton",title:"Insert date/time",onclick:function(){c(d||e)},menu:j}),tinymce.each(a.settings.insertdatetime_formats||["%H:%M:%S","%Y-%m-%d","%I:%M:%S %p","%D"],function(a){e||(e=a),j.push({text:b(a),onclick:function(){d=a,c(a)}})}),a.addMenuItem("insertdatetime",{icon:"date",text:"Insert date/time",menu:j,context:"insert"})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/media/moxieplayer.swf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/tinymce/js/tinymce/plugins/media/moxieplayer.swf
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/nonbreaking/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("nonbreaking",function(a){var b=a.getParam("nonbreaking_force_tab");if(a.addCommand("mceNonBreaking",function(){a.insertContent(a.plugins.visualchars&&a.plugins.visualchars.state?' ':" "),a.dom.setAttrib(a.dom.select("span.mce-nbsp"),"data-mce-bogus","1")}),a.addButton("nonbreaking",{title:"Nonbreaking space",cmd:"mceNonBreaking"}),a.addMenuItem("nonbreaking",{text:"Nonbreaking space",cmd:"mceNonBreaking",context:"insert"}),b){var c=+b>1?+b:3;a.on("keydown",function(b){if(9==b.keyCode){if(b.shiftKey)return;b.preventDefault();for(var d=0;c>d;d++)a.execCommand("mceNonBreaking")}})}});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/pagebreak/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("pagebreak",function(a){var b="mce-pagebreak",c=a.getParam("pagebreak_separator",""),d=new RegExp(c.replace(/[\?\.\*\[\]\(\)\{\}\+\^\$\:]/g,function(a){return"\\"+a}),"gi"),e=' ';a.addCommand("mcePageBreak",function(){a.insertContent(a.settings.pagebreak_split_block?""+e+"
":e)}),a.addButton("pagebreak",{title:"Page break",cmd:"mcePageBreak"}),a.addMenuItem("pagebreak",{text:"Page break",icon:"pagebreak",cmd:"mcePageBreak",context:"insert"}),a.on("ResolveName",function(c){"IMG"==c.target.nodeName&&a.dom.hasClass(c.target,b)&&(c.name="pagebreak")}),a.on("click",function(c){c=c.target,"IMG"===c.nodeName&&a.dom.hasClass(c,b)&&a.selection.select(c)}),a.on("BeforeSetContent",function(a){a.content=a.content.replace(d,e)}),a.on("PreInit",function(){a.serializer.addNodeFilter("img",function(b){for(var d,e,f=b.length;f--;)if(d=b[f],e=d.attr("class"),e&&-1!==e.indexOf("mce-pagebreak")){var g=d.parent;if(a.schema.getBlockElements()[g.name]&&a.settings.pagebreak_split_block){g.type=3,g.value=c,g.raw=!0,d.remove();continue}d.type=3,d.value=c,d.raw=!0}})})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/preview/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("preview",function(a){var b=a.settings,c=!tinymce.Env.ie;a.addCommand("mcePreview",function(){a.windowManager.open({title:"Preview",width:parseInt(a.getParam("plugin_preview_width","650"),10),height:parseInt(a.getParam("plugin_preview_height","500"),10),html:'",buttons:{text:"Close",onclick:function(){this.parent().parent().close()}},onPostRender:function(){var d,e="";e+=' ',tinymce.each(a.contentCSS,function(b){e+=' '});var f=b.body_id||"tinymce";-1!=f.indexOf("=")&&(f=a.getParam("body_id","","hash"),f=f[a.id]||f);var g=b.body_class||"";-1!=g.indexOf("=")&&(g=a.getParam("body_class","","hash"),g=g[a.id]||"");var h=a.settings.directionality?' dir="'+a.settings.directionality+'"':"";if(d=""+e+'"+a.getContent()+"",c)this.getEl("body").firstChild.src="data:text/html;charset=utf-8,"+encodeURIComponent(d);else{var i=this.getEl("body").firstChild.contentWindow.document;i.open(),i.write(d),i.close()}}})}),a.addButton("preview",{title:"Preview",cmd:"mcePreview"}),a.addMenuItem("preview",{text:"Preview",cmd:"mcePreview",context:"view"})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/print/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("print",function(a){a.addCommand("mcePrint",function(){a.getWin().print()}),a.addButton("print",{title:"Print",cmd:"mcePrint"}),a.addShortcut("Ctrl+P","","mcePrint"),a.addMenuItem("print",{text:"Print",cmd:"mcePrint",icon:"print",shortcut:"Ctrl+P",context:"file"})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/save/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("save",function(a){function b(){var b;return b=tinymce.DOM.getParent(a.id,"form"),!a.getParam("save_enablewhendirty",!0)||a.isDirty()?(tinymce.triggerSave(),a.getParam("save_onsavecallback")?void(a.execCallback("save_onsavecallback",a)&&(a.startContent=tinymce.trim(a.getContent({format:"raw"})),a.nodeChanged())):void(b?(a.isNotDirty=!0,(!b.onsubmit||b.onsubmit())&&("function"==typeof b.submit?b.submit():a.windowManager.alert("Error: Form submit field collision.")),a.nodeChanged()):a.windowManager.alert("Error: No form element found."))):void 0}function c(){var b=tinymce.trim(a.startContent);return a.getParam("save_oncancelcallback")?void a.execCallback("save_oncancelcallback",a):(a.setContent(b),a.undoManager.clear(),void a.nodeChanged())}function d(){var b=this;a.on("nodeChange",function(){b.disabled(a.getParam("save_enablewhendirty",!0)&&!a.isDirty())})}a.addCommand("mceSave",b),a.addCommand("mceCancel",c),a.addButton("save",{icon:"save",text:"Save",cmd:"mceSave",disabled:!0,onPostRender:d}),a.addButton("cancel",{text:"Cancel",icon:!1,cmd:"mceCancel",disabled:!0,onPostRender:d}),a.addShortcut("ctrl+s","","mceSave")});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/tabfocus/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("tabfocus",function(a){function b(a){9!==a.keyCode||a.ctrlKey||a.altKey||a.metaKey||a.preventDefault()}function c(b){function c(c){function f(a){return"BODY"===a.nodeName||"hidden"!=a.type&&"none"!=a.style.display&&"hidden"!=a.style.visibility&&f(a.parentNode)}function i(a){return/INPUT|TEXTAREA|BUTTON/.test(a.tagName)&&tinymce.get(b.id)&&-1!=a.tabIndex&&f(a)}if(h=d.select(":input:enabled,*[tabindex]:not(iframe)"),e(h,function(b,c){return b.id==a.id?(g=c,!1):void 0}),c>0){for(j=g+1;j=0;j--)if(i(h[j]))return h[j];return null}var g,h,i,j;if(!(9!==b.keyCode||b.ctrlKey||b.altKey||b.metaKey||b.isDefaultPrevented())&&(i=f(a.getParam("tab_focus",a.getParam("tabfocus_elements",":prev,:next"))),1==i.length&&(i[1]=i[0],i[0]=":prev"),h=b.shiftKey?":prev"==i[0]?c(-1):d.get(i[0]):":next"==i[1]?c(1):d.get(i[1]))){var k=tinymce.get(h.id||h.name);h.id&&k?k.focus():window.setTimeout(function(){tinymce.Env.webkit||window.focus(),h.focus()},10),b.preventDefault()}}var d=tinymce.DOM,e=tinymce.each,f=tinymce.explode;a.on("init",function(){a.inline&&tinymce.DOM.setAttrib(a.getBody(),"tabIndex",null),a.on("keyup",b),tinymce.Env.gecko?a.on("keypress keydown",c):a.on("keydown",c)})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/visualblocks/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("visualblocks",function(a,b){function c(){var b=this;b.active(f),a.on("VisualBlocks",function(){b.active(a.dom.hasClass(a.getBody(),"mce-visualblocks"))})}var d,e,f;window.NodeList&&(a.addCommand("mceVisualBlocks",function(){var c,g=a.dom;d||(d=g.uniqueId(),c=g.create("link",{id:d,rel:"stylesheet",href:b+"/css/visualblocks.css"}),a.getDoc().getElementsByTagName("head")[0].appendChild(c)),a.on("PreviewFormats AfterPreviewFormats",function(b){f&&g.toggleClass(a.getBody(),"mce-visualblocks","afterpreviewformats"==b.type)}),g.toggleClass(a.getBody(),"mce-visualblocks"),f=a.dom.hasClass(a.getBody(),"mce-visualblocks"),e&&e.active(g.hasClass(a.getBody(),"mce-visualblocks")),a.fire("VisualBlocks")}),a.addButton("visualblocks",{title:"Show blocks",cmd:"mceVisualBlocks",onPostRender:c}),a.addMenuItem("visualblocks",{text:"Show blocks",cmd:"mceVisualBlocks",onPostRender:c,selectable:!0,context:"view",prependToContext:!0}),a.on("init",function(){a.settings.visualblocks_default_state&&a.execCommand("mceVisualBlocks",!1,null,{skip_focus:!0})}),a.on("remove",function(){a.dom.removeClass(a.getBody(),"mce-visualblocks")}))});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/visualchars/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("visualchars",function(a){function b(b){var c,f,g,h,i,j,k=a.getBody(),l=a.selection;if(d=!d,e.state=d,a.fire("VisualChars",{state:d}),b&&(j=l.getBookmark()),d)for(f=[],tinymce.walk(k,function(a){3==a.nodeType&&a.nodeValue&&-1!=a.nodeValue.indexOf("\xa0")&&f.push(a)},"childNodes"),g=0;g$1'),i=a.dom.create("div",null,h);c=i.lastChild;)a.dom.insertAfter(c,f[g]);a.dom.remove(f[g])}else for(f=a.dom.select("span.mce-nbsp",k),g=f.length-1;g>=0;g--)a.dom.remove(f[g],1);l.moveToBookmark(j)}function c(){var b=this;a.on("VisualChars",function(a){b.active(a.state)})}var d,e=this;a.addCommand("mceVisualChars",b),a.addButton("visualchars",{title:"Show invisible characters",cmd:"mceVisualChars",onPostRender:c}),a.addMenuItem("visualchars",{text:"Show invisible characters",cmd:"mceVisualChars",onPostRender:c,selectable:!0,context:"view",prependToContext:!0}),a.on("beforegetcontent",function(a){d&&"raw"!=a.format&&!a.draft&&(d=!0,b(!1))})});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/plugins/wordcount/plugin.min.js:
--------------------------------------------------------------------------------
1 | tinymce.PluginManager.add("wordcount",function(a){function b(){a.theme.panel.find("#wordcount").text(["Words: {0}",e.getCount()])}var c,d,e=this;c=a.getParam("wordcount_countregex",/[\w\u2019\x27\-\u00C0-\u1FFF]+/g),d=a.getParam("wordcount_cleanregex",/[0-9.(),;:!?%#$?\x27\x22_+=\\\/\-]*/g),a.on("init",function(){var c=a.theme.panel&&a.theme.panel.find("#statusbar")[0];c&&window.setTimeout(function(){c.insert({type:"label",name:"wordcount",text:["Words: {0}",e.getCount()],classes:"wordcount",disabled:a.settings.readonly},0),a.on("setcontent beforeaddundo",b),a.on("keyup",function(a){32==a.keyCode&&b()})},0)}),e.getCount=function(){var b=a.getContent({format:"raw"}),e=0;if(b){b=b.replace(/\.\.\./g," "),b=b.replace(/<.[^<>]*?>/g," ").replace(/ | /gi," "),b=b.replace(/(\w+)(?[a-z0-9]+;)+(\w+)/i,"$1$3").replace(/&.+?;/g," "),b=b.replace(d,"");var f=b.match(c);f&&(e=f.length)}return e}});
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/content.inline.min.css:
--------------------------------------------------------------------------------
1 | .mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid red;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid green;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#39f!important}.mce-edit-focus{outline:1px dotted #333}
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/content.min.css:
--------------------------------------------------------------------------------
1 | body{background-color:#FFF;color:#000;font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px;scrollbar-3dlight-color:#F0F0EE;scrollbar-arrow-color:#676662;scrollbar-base-color:#F0F0EE;scrollbar-darkshadow-color:#DDD;scrollbar-face-color:#E0E0DD;scrollbar-highlight-color:#F0F0EE;scrollbar-shadow-color:#F0F0EE;scrollbar-track-color:#F5F5F5}td,th{font-family:Verdana,Arial,Helvetica,sans-serif;font-size:11px}.mce-object{border:1px dotted #3A3A3A;background:#d5d5d5 url(img/object.gif) no-repeat center}.mce-pagebreak{cursor:default;display:block;border:0;width:100%;height:5px;border:1px dashed #666;margin-top:15px;page-break-before:always}@media print{.mce-pagebreak{border:0}}.mce-item-anchor{cursor:default;display:inline-block;-webkit-user-select:all;-webkit-user-modify:read-only;-moz-user-select:all;-moz-user-modify:read-only;user-select:all;user-modify:read-only;width:9px!important;height:9px!important;border:1px dotted #3A3A3A;background:#d5d5d5 url(img/anchor.gif) no-repeat center}.mce-nbsp{background:#AAA}hr{cursor:default}.mce-match-marker{background:#AAA;color:#fff}.mce-match-marker-selected{background:#39f;color:#fff}.mce-spellchecker-word{border-bottom:2px solid red;cursor:default}.mce-spellchecker-grammar{border-bottom:2px solid green;cursor:default}.mce-item-table,.mce-item-table td,.mce-item-table th,.mce-item-table caption{border:1px dashed #BBB}td.mce-item-selected,th.mce-item-selected{background-color:#39f!important}.mce-edit-focus{outline:1px dotted #333}
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.eot
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.ttf
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce-small.woff
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.eot
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.ttf
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/tinymce/js/tinymce/skins/lightgray/fonts/tinymce.woff
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/img/anchor.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/tinymce/js/tinymce/skins/lightgray/img/anchor.gif
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/img/loader.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/tinymce/js/tinymce/skins/lightgray/img/loader.gif
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/img/object.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/tinymce/js/tinymce/skins/lightgray/img/object.gif
--------------------------------------------------------------------------------
/src/public/packages/tinymce/js/tinymce/skins/lightgray/img/trans.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/packages/tinymce/js/tinymce/skins/lightgray/img/trans.gif
--------------------------------------------------------------------------------
/src/public/robots.txt:
--------------------------------------------------------------------------------
1 | User-agent: *
2 | Disallow:
3 |
--------------------------------------------------------------------------------
/src/public/templates/template.xlsx:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/julien-amar/crm-laravel/63bcb3c9108de813f3e9e763521486f2551c755a/src/public/templates/template.xlsx
--------------------------------------------------------------------------------
/src/scripts/PHPMailer/PHPMailerAutoload.php:
--------------------------------------------------------------------------------
1 |
8 | * @author Jim Jagielski (jimjag)
9 | * @author Andy Prevost (codeworxtech)
10 | * @author Brent R. Matzelle (original founder)
11 | * @copyright 2012 - 2014 Marcus Bointon
12 | * @copyright 2010 - 2012 Jim Jagielski
13 | * @copyright 2004 - 2009 Andy Prevost
14 | * @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
15 | * @note This program is distributed in the hope that it will be useful - WITHOUT
16 | * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
17 | * FITNESS FOR A PARTICULAR PURPOSE.
18 | */
19 |
20 | /**
21 | * PHPMailer SPL autoloader.
22 | * @param string $classname The name of the class to load
23 | */
24 | function PHPMailerAutoload($classname)
25 | {
26 | //Can't use __DIR__ as it's only in PHP 5.3+
27 | $filename = dirname(__FILE__).DIRECTORY_SEPARATOR.'class.'.strtolower($classname).'.php';
28 | if (is_readable($filename)) {
29 | require $filename;
30 | }
31 | }
32 |
33 | if (version_compare(PHP_VERSION, '5.1.2', '>=')) {
34 | //SPL autoloading was introduced in PHP 5.1.2
35 | if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
36 | spl_autoload_register('PHPMailerAutoload', true, true);
37 | } else {
38 | spl_autoload_register('PHPMailerAutoload');
39 | }
40 | } else {
41 | /**
42 | * Fall back to traditional autoload for old PHP versions
43 | * @param string $classname The name of the class to load
44 | */
45 | function __autoload($classname)
46 | {
47 | PHPMailerAutoload($classname);
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/src/scripts/PHPMailer/VERSION:
--------------------------------------------------------------------------------
1 | 5.2.9
--------------------------------------------------------------------------------
/src/scripts/PHPMailer/extras/README.md:
--------------------------------------------------------------------------------
1 | #PHPMailer Extras
2 |
3 | These classes provide optional additional functions to PHPMailer.
4 |
5 | These are not loaded by the PHPMailer autoloader, so in some cases you may need to `require` them yourself before using them.
6 |
7 | ##EasyPeasyICS
8 |
9 | This class was originally written by Manuel Reinhard and provides a simple means of generating ICS/vCal files that are used in sending calendar events. PHPMailer does not use it directly, but you can use it to generate content appropriate for placing in the `Ical` property of PHPMailer. The PHPMailer project is now its official home as Manuel has given permission for that and is no longer maintaining it himself.
10 |
11 | ##htmlfilter
12 |
13 | This class by Konstantin Riabitsev and Jim Jagielski implements HTML filtering to remove potentially malicious tags, such as `