├── .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 |
5 |
6 | 9 |
10 |
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 | 10 | @endif 11 |
-------------------------------------------------------------------------------- /src/app/views/layouts/errors.blade.php: -------------------------------------------------------------------------------- 1 | @if (!empty($errors->count())) 2 | 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 |
5 |
6 | 9 |
10 |
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 |
5 |
6 |

{{ trans('mailings.form.mailing.title') }}

7 |
8 | 9 |
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 | 40 |
41 |
42 | @stop 43 | -------------------------------------------------------------------------------- /src/app/views/users/login.blade.php: -------------------------------------------------------------------------------- 1 | @extends('layouts.modal') 2 | 3 | @section('content') 4 |
5 |
6 | 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('Loader'); 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('Loader'); 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| |[ ]|]*>)+?|)|
$","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'}),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(''+c.getAttribute('),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 | 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 `