From d86dde59d9659113c2f5eefd3939c6eb1ec01148 Mon Sep 17 00:00:00 2001 From: Rachel Sidney <13515124@std.stei.itb.ac.id> Date: Sun, 18 Mar 2018 22:48:09 +0700 Subject: [PATCH] add backend for add member and add member via csv --- app/Http/Controllers/AddMemberController.php | 140 ++++++ app/Member.php | 12 +- composer.json | 3 +- composer.lock | 423 ++++++++++++++++--- config/app.php | 3 +- config/excel.php | 86 ++++ resources/views/admin/addmember.blade.php | 48 +++ resources/views/admin/showmember.blade.php | 23 + routes/web.php | 6 +- 9 files changed, 681 insertions(+), 63 deletions(-) create mode 100644 app/Http/Controllers/AddMemberController.php create mode 100644 config/excel.php create mode 100644 resources/views/admin/addmember.blade.php create mode 100644 resources/views/admin/showmember.blade.php diff --git a/app/Http/Controllers/AddMemberController.php b/app/Http/Controllers/AddMemberController.php new file mode 100644 index 0000000..d873bdd --- /dev/null +++ b/app/Http/Controllers/AddMemberController.php @@ -0,0 +1,140 @@ +<?php + +namespace App\Http\Controllers; + +use Illuminate\Http\Request; +use Illuminate\Support\Facades\Storage; +use Illuminate\Support\Collection; +use Excel; +use DB; +use App\Member; + +class AddMemberController extends Controller +{ + /** + * Display a listing of the resource. + * + * @return \Illuminate\Http\Response + */ + public function index() + { + return view('admin.addmember'); + } + + /** + * Show the form for creating a new resource. + * + * @return \Illuminate\Http\Response + */ + public function create() + { + // + } + + /** + * Store a newly created resource in storage. + * + * @param \Illuminate\Http\Request $request + * @return \Illuminate\Http\Response + */ + public function importCSV(Request $request) + { + $array_members = collect(); + if ($request->hasFile('list_members')) { + $extension = $request->file('list_members')->getClientOriginalExtension(); + if ($extension === 'csv') { + $path = $request->file('list_members')->getRealPath(); + $data = Excel::load($path, function($reader) {})->get(); + if (!empty($data)) { + foreach ($data as $key=>$value) { + $member = Member::create([ + 'name' => $value->name, + 'email' => $value->email, + 'phone_number' => $value->phone_number, + 'interest' => 'none', + 'company' => 'none', + ]); + $member->save(); + + $member = Member::where('email', $value->email)->first(); + $array_members->push($member); + } + } + } + } + + return view('admin.showmember')->with('array_members', $array_members); + } + + public function importMember(Request $request) + { + $array_members = collect(); + $this->validate($request, [ + 'email' => + array( + 'required', + 'regex:/[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,6}/'), + 'phone_number' => 'required', + 'name' => 'required'/*, + 'nim' => 'required'*/ + ]); + + $member = Member::create([ + 'name' => $request->input('name'), + 'email' => $request->input('email'), + 'phone_number' => $request->input('phone_number'), + 'interest' => 'none', + 'company' => 'none', + ]); + $member->save(); + + $member = Member::where('email', $request->input('email'))->first(); + $array_members->push($member); + + return view('admin.showmember')->with('array_members', $array_members); + } + + /** + * Display the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function show($id) + { + + } + + /** + * Show the form for editing the specified resource. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function edit($id) + { + // + } + + /** + * Update the specified resource in storage. + * + * @param \Illuminate\Http\Request $request + * @param int $id + * @return \Illuminate\Http\Response + */ + public function update(Request $request, $id) + { + } + + /** + * Remove the specified resource from storage. + * + * @param int $id + * @return \Illuminate\Http\Response + */ + public function destroy($id) + { + // + } +} diff --git a/app/Member.php b/app/Member.php index e99ceff..8f61c2d 100644 --- a/app/Member.php +++ b/app/Member.php @@ -3,8 +3,18 @@ namespace App; use Illuminate\Database\Eloquent\Model; +use Illuminate\Notifications\Notifiable; class Member extends Model { - // + use Notifiable; + + /** + * The attributes that are mass assignable. + * + * @var array + */ + protected $fillable = [ + 'name', 'email', 'phone_number', 'interest', 'company', + ]; } diff --git a/composer.json b/composer.json index 46733f1..f8539e9 100644 --- a/composer.json +++ b/composer.json @@ -9,7 +9,8 @@ "fideloper/proxy": "~4.0", "laravel/framework": "5.6.*", "laravel/tinker": "~1.0", - "laravelcollective/html": "^5.4.0" + "laravelcollective/html": "^5.4.0", + "maatwebsite/excel": "~2.1.0" }, "require-dev": { "filp/whoops": "~2.0", diff --git a/composer.lock b/composer.lock index dbbf8b1..06ff48d 100644 --- a/composer.lock +++ b/composer.lock @@ -4,7 +4,7 @@ "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#composer-lock-the-lock-file", "This file is @generated automatically" ], - "content-hash": "eee47e5816da11290628da12a27d841e", + "content-hash": "5b6fb45a2bf8d6ef9c5af64b2ba04c5b", "packages": [ { "name": "dnoegel/php-xdg-base-dir", @@ -268,19 +268,20 @@ }, { "name": "erusev/parsedown", - "version": "1.7.0", + "version": "1.7.1", "source": { "type": "git", "url": "https://github.com/erusev/parsedown.git", - "reference": "6678d59be48c4be64eaca6ce70bea48a09488cc2" + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/erusev/parsedown/zipball/6678d59be48c4be64eaca6ce70bea48a09488cc2", - "reference": "6678d59be48c4be64eaca6ce70bea48a09488cc2", + "url": "https://api.github.com/repos/erusev/parsedown/zipball/92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", + "reference": "92e9c27ba0e74b8b028b111d1b6f956a15c01fc1", "shasum": "" }, "require": { + "ext-mbstring": "*", "php": ">=5.3.0" }, "require-dev": { @@ -309,7 +310,7 @@ "markdown", "parser" ], - "time": "2018-02-28T11:41:37+00:00" + "time": "2018-03-08T01:11:30+00:00" }, { "name": "fideloper/proxy", @@ -452,18 +453,76 @@ ], "time": "2015-04-20T18:58:01+00:00" }, + { + "name": "jeremeamia/SuperClosure", + "version": "2.3.0", + "source": { + "type": "git", + "url": "https://github.com/jeremeamia/super_closure.git", + "reference": "443c3df3207f176a1b41576ee2a66968a507b3db" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/jeremeamia/super_closure/zipball/443c3df3207f176a1b41576ee2a66968a507b3db", + "reference": "443c3df3207f176a1b41576ee2a66968a507b3db", + "shasum": "" + }, + "require": { + "nikic/php-parser": "^1.2|^2.0|^3.0", + "php": ">=5.4", + "symfony/polyfill-php56": "^1.0" + }, + "require-dev": { + "phpunit/phpunit": "^4.0|^5.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "2.3-dev" + } + }, + "autoload": { + "psr-4": { + "SuperClosure\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Jeremy Lindblom", + "email": "jeremeamia@gmail.com", + "homepage": "https://github.com/jeremeamia", + "role": "Developer" + } + ], + "description": "Serialize Closure objects, including their context and binding", + "homepage": "https://github.com/jeremeamia/super_closure", + "keywords": [ + "closure", + "function", + "lambda", + "parser", + "serializable", + "serialize", + "tokenizer" + ], + "time": "2016-12-07T09:37:55+00:00" + }, { "name": "laravel/framework", - "version": "v5.6.7", + "version": "v5.6.12", "source": { "type": "git", "url": "https://github.com/laravel/framework.git", - "reference": "18402cd4b83fd1d944f3baa0d8cc26d7dfcce333" + "reference": "82d8165d1ea86bdd81ddfa1db9343fa19e7d1450" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/framework/zipball/18402cd4b83fd1d944f3baa0d8cc26d7dfcce333", - "reference": "18402cd4b83fd1d944f3baa0d8cc26d7dfcce333", + "url": "https://api.github.com/repos/laravel/framework/zipball/82d8165d1ea86bdd81ddfa1db9343fa19e7d1450", + "reference": "82d8165d1ea86bdd81ddfa1db9343fa19e7d1450", "shasum": "" }, "require": { @@ -472,9 +531,9 @@ "erusev/parsedown": "~1.7", "ext-mbstring": "*", "ext-openssl": "*", - "league/flysystem": "~1.0", + "league/flysystem": "^1.0.8", "monolog/monolog": "~1.12", - "nesbot/carbon": "^1.22.1", + "nesbot/carbon": "^1.24.1", "php": "^7.1.3", "psr/container": "~1.0", "psr/simple-cache": "^1.0", @@ -491,6 +550,9 @@ "tijsverkoyen/css-to-inline-styles": "^2.2.1", "vlucas/phpdotenv": "~2.2" }, + "conflict": { + "tightenco/collect": "<5.5.33" + }, "replace": { "illuminate/auth": "self.version", "illuminate/broadcasting": "self.version", @@ -519,8 +581,7 @@ "illuminate/support": "self.version", "illuminate/translation": "self.version", "illuminate/validation": "self.version", - "illuminate/view": "self.version", - "tightenco/collect": "<5.5.33" + "illuminate/view": "self.version" }, "require-dev": { "aws/aws-sdk-php": "~3.0", @@ -586,20 +647,20 @@ "framework", "laravel" ], - "time": "2018-02-28T14:50:53+00:00" + "time": "2018-03-14T17:29:38+00:00" }, { "name": "laravel/tinker", - "version": "v1.0.3", + "version": "v1.0.5", "source": { "type": "git", "url": "https://github.com/laravel/tinker.git", - "reference": "852c2abe0b0991555a403f1c0583e64de6acb4a6" + "reference": "94f6daf2131508cebd11cd6f8632ba586d7ecc41" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/laravel/tinker/zipball/852c2abe0b0991555a403f1c0583e64de6acb4a6", - "reference": "852c2abe0b0991555a403f1c0583e64de6acb4a6", + "url": "https://api.github.com/repos/laravel/tinker/zipball/94f6daf2131508cebd11cd6f8632ba586d7ecc41", + "reference": "94f6daf2131508cebd11cd6f8632ba586d7ecc41", "shasum": "" }, "require": { @@ -649,7 +710,7 @@ "laravel", "psysh" ], - "time": "2017-12-18T16:25:11+00:00" + "time": "2018-03-06T17:34:36+00:00" }, { "name": "laravelcollective/html", @@ -803,6 +864,84 @@ ], "time": "2018-03-01T10:27:04+00:00" }, + { + "name": "maatwebsite/excel", + "version": "2.1.27", + "source": { + "type": "git", + "url": "https://github.com/Maatwebsite/Laravel-Excel.git", + "reference": "ea758fe5a9d33e0d88b40f099d1df652a0c99d38" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/Maatwebsite/Laravel-Excel/zipball/ea758fe5a9d33e0d88b40f099d1df652a0c99d38", + "reference": "ea758fe5a9d33e0d88b40f099d1df652a0c99d38", + "shasum": "" + }, + "require": { + "illuminate/cache": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/config": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/filesystem": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/support": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "jeremeamia/superclosure": "^2.3", + "nesbot/carbon": "~1.0", + "php": ">=5.5", + "phpoffice/phpexcel": "^1.8.1", + "tijsverkoyen/css-to-inline-styles": "~2.0" + }, + "require-dev": { + "mockery/mockery": "~1.0", + "orchestra/testbench": "3.1.*|3.2.*|3.3.*|3.4.*|3.5.*|3.6.*", + "phpseclib/phpseclib": "~1.0", + "phpunit/phpunit": "~4.0" + }, + "suggest": { + "illuminate/http": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/queue": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/routing": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*", + "illuminate/view": "5.0.*|5.1.*|5.2.*|5.3.*|5.4.*|5.5.*|5.6.*" + }, + "type": "library", + "extra": { + "laravel": { + "providers": [ + "Maatwebsite\\Excel\\ExcelServiceProvider" + ], + "aliases": { + "Excel": "Maatwebsite\\Excel\\Facades\\Excel" + } + } + }, + "autoload": { + "classmap": [ + "src/Maatwebsite/Excel" + ], + "psr-0": { + "Maatwebsite\\Excel\\": "src/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Maatwebsite.nl", + "email": "patrick@maatwebsite.nl" + } + ], + "description": "An eloquent way of importing and exporting Excel and CSV in Laravel 4 with the power of PHPExcel", + "keywords": [ + "PHPExcel", + "batch", + "csv", + "excel", + "export", + "import", + "laravel" + ], + "time": "2018-03-09T13:14:19+00:00" + }, { "name": "monolog/monolog", "version": "1.23.0", @@ -883,20 +1022,20 @@ }, { "name": "nesbot/carbon", - "version": "1.23.0", + "version": "1.24.2", "source": { "type": "git", "url": "https://github.com/briannesbitt/Carbon.git", - "reference": "4a874a39b2b00d7e0146cd46fab6f47c41ce9e65" + "reference": "bba6c6e410c6b4317e37a9474aeaa753808c3875" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/4a874a39b2b00d7e0146cd46fab6f47c41ce9e65", - "reference": "4a874a39b2b00d7e0146cd46fab6f47c41ce9e65", + "url": "https://api.github.com/repos/briannesbitt/Carbon/zipball/bba6c6e410c6b4317e37a9474aeaa753808c3875", + "reference": "bba6c6e410c6b4317e37a9474aeaa753808c3875", "shasum": "" }, "require": { - "php": ">=5.3.0", + "php": ">=5.3.9", "symfony/translation": "~2.6 || ~3.0 || ~4.0" }, "require-dev": { @@ -932,7 +1071,7 @@ "datetime", "time" ], - "time": "2018-02-28T09:22:05+00:00" + "time": "2018-03-10T10:10:14+00:00" }, { "name": "nikic/php-parser", @@ -1033,6 +1172,64 @@ ], "time": "2017-09-27T21:40:39+00:00" }, + { + "name": "phpoffice/phpexcel", + "version": "1.8.1", + "source": { + "type": "git", + "url": "https://github.com/PHPOffice/PHPExcel.git", + "reference": "372c7cbb695a6f6f1e62649381aeaa37e7e70b32" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/PHPOffice/PHPExcel/zipball/372c7cbb695a6f6f1e62649381aeaa37e7e70b32", + "reference": "372c7cbb695a6f6f1e62649381aeaa37e7e70b32", + "shasum": "" + }, + "require": { + "ext-xml": "*", + "ext-xmlwriter": "*", + "php": ">=5.2.0" + }, + "type": "library", + "autoload": { + "psr-0": { + "PHPExcel": "Classes/" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "LGPL" + ], + "authors": [ + { + "name": "Maarten Balliauw", + "homepage": "http://blog.maartenballiauw.be" + }, + { + "name": "Mark Baker" + }, + { + "name": "Franck Lefevre", + "homepage": "http://blog.rootslabs.net" + }, + { + "name": "Erik Tilt" + } + ], + "description": "PHPExcel - OpenXML - Read, Create and Write Spreadsheet documents in PHP - Spreadsheet engine", + "homepage": "http://phpexcel.codeplex.com", + "keywords": [ + "OpenXML", + "excel", + "php", + "spreadsheet", + "xls", + "xlsx" + ], + "abandoned": "phpoffice/phpspreadsheet", + "time": "2015-05-01T07:00:55+00:00" + }, { "name": "psr/container", "version": "1.0.0", @@ -1131,16 +1328,16 @@ }, { "name": "psr/simple-cache", - "version": "1.0.0", + "version": "1.0.1", "source": { "type": "git", "url": "https://github.com/php-fig/simple-cache.git", - "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24" + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/753fa598e8f3b9966c886fe13f370baa45ef0e24", - "reference": "753fa598e8f3b9966c886fe13f370baa45ef0e24", + "url": "https://api.github.com/repos/php-fig/simple-cache/zipball/408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", + "reference": "408d5eafb83c57f6365a3ca330ff23aa4a5fa39b", "shasum": "" }, "require": { @@ -1175,7 +1372,7 @@ "psr-16", "simple-cache" ], - "time": "2017-01-02T13:31:39+00:00" + "time": "2017-10-23T01:57:42+00:00" }, { "name": "psy/psysh", @@ -1386,7 +1583,7 @@ }, { "name": "symfony/console", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/console.git", @@ -1454,7 +1651,7 @@ }, { "name": "symfony/css-selector", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/css-selector.git", @@ -1507,7 +1704,7 @@ }, { "name": "symfony/debug", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/debug.git", @@ -1563,7 +1760,7 @@ }, { "name": "symfony/event-dispatcher", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/event-dispatcher.git", @@ -1626,16 +1823,16 @@ }, { "name": "symfony/finder", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/finder.git", - "reference": "552e244df10237f845a94fd64b194f848805e34b" + "reference": "44a796d2ecc2a16a5fc8f2956a34ee617934d55f" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/finder/zipball/552e244df10237f845a94fd64b194f848805e34b", - "reference": "552e244df10237f845a94fd64b194f848805e34b", + "url": "https://api.github.com/repos/symfony/finder/zipball/44a796d2ecc2a16a5fc8f2956a34ee617934d55f", + "reference": "44a796d2ecc2a16a5fc8f2956a34ee617934d55f", "shasum": "" }, "require": { @@ -1671,20 +1868,20 @@ ], "description": "Symfony Finder Component", "homepage": "https://symfony.com", - "time": "2018-02-11T17:17:44+00:00" + "time": "2018-03-05T18:28:26+00:00" }, { "name": "symfony/http-foundation", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/http-foundation.git", - "reference": "94139989e51193e62a46bc87741ae05c8e8390f5" + "reference": "6c181e81a3a9a7996c62ebd7803592536e729c5a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-foundation/zipball/94139989e51193e62a46bc87741ae05c8e8390f5", - "reference": "94139989e51193e62a46bc87741ae05c8e8390f5", + "url": "https://api.github.com/repos/symfony/http-foundation/zipball/6c181e81a3a9a7996c62ebd7803592536e729c5a", + "reference": "6c181e81a3a9a7996c62ebd7803592536e729c5a", "shasum": "" }, "require": { @@ -1724,20 +1921,20 @@ ], "description": "Symfony HttpFoundation Component", "homepage": "https://symfony.com", - "time": "2018-02-22T10:50:29+00:00" + "time": "2018-03-05T16:01:10+00:00" }, { "name": "symfony/http-kernel", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/http-kernel.git", - "reference": "77cf672c855f038b1b916201d00b1d55899ee8e7" + "reference": "2a1ebfe8c37240500befcb17bceb3893adacffa3" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/http-kernel/zipball/77cf672c855f038b1b916201d00b1d55899ee8e7", - "reference": "77cf672c855f038b1b916201d00b1d55899ee8e7", + "url": "https://api.github.com/repos/symfony/http-kernel/zipball/2a1ebfe8c37240500befcb17bceb3893adacffa3", + "reference": "2a1ebfe8c37240500befcb17bceb3893adacffa3", "shasum": "" }, "require": { @@ -1810,7 +2007,7 @@ ], "description": "Symfony HttpKernel Component", "homepage": "https://symfony.com", - "time": "2018-03-01T19:48:35+00:00" + "time": "2018-03-05T22:27:01+00:00" }, { "name": "symfony/polyfill-mbstring", @@ -1871,6 +2068,62 @@ ], "time": "2018-01-30T19:27:44+00:00" }, + { + "name": "symfony/polyfill-php56", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-php56.git", + "reference": "ebc999ce5f14204c5150b9bd15f8f04e621409d8" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-php56/zipball/ebc999ce5f14204c5150b9bd15f8f04e621409d8", + "reference": "ebc999ce5f14204c5150b9bd15f8f04e621409d8", + "shasum": "" + }, + "require": { + "php": ">=5.3.3", + "symfony/polyfill-util": "~1.0" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Php56\\": "" + }, + "files": [ + "bootstrap.php" + ] + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony polyfill backporting some PHP 5.6+ features to lower PHP versions", + "homepage": "https://symfony.com", + "keywords": [ + "compatibility", + "polyfill", + "portable", + "shim" + ], + "time": "2018-01-30T19:27:44+00:00" + }, { "name": "symfony/polyfill-php72", "version": "v1.7.0", @@ -1926,9 +2179,61 @@ ], "time": "2018-01-31T17:43:24+00:00" }, + { + "name": "symfony/polyfill-util", + "version": "v1.7.0", + "source": { + "type": "git", + "url": "https://github.com/symfony/polyfill-util.git", + "reference": "e17c808ec4228026d4f5a8832afa19be85979563" + }, + "dist": { + "type": "zip", + "url": "https://api.github.com/repos/symfony/polyfill-util/zipball/e17c808ec4228026d4f5a8832afa19be85979563", + "reference": "e17c808ec4228026d4f5a8832afa19be85979563", + "shasum": "" + }, + "require": { + "php": ">=5.3.3" + }, + "type": "library", + "extra": { + "branch-alias": { + "dev-master": "1.7-dev" + } + }, + "autoload": { + "psr-4": { + "Symfony\\Polyfill\\Util\\": "" + } + }, + "notification-url": "https://packagist.org/downloads/", + "license": [ + "MIT" + ], + "authors": [ + { + "name": "Nicolas Grekas", + "email": "p@tchwork.com" + }, + { + "name": "Symfony Community", + "homepage": "https://symfony.com/contributors" + } + ], + "description": "Symfony utilities for portability of PHP codes", + "homepage": "https://symfony.com", + "keywords": [ + "compat", + "compatibility", + "polyfill", + "shim" + ], + "time": "2018-01-31T18:08:44+00:00" + }, { "name": "symfony/process", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/process.git", @@ -1977,7 +2282,7 @@ }, { "name": "symfony/routing", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/routing.git", @@ -2055,7 +2360,7 @@ }, { "name": "symfony/translation", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/translation.git", @@ -2123,7 +2428,7 @@ }, { "name": "symfony/var-dumper", - "version": "v4.0.5", + "version": "v4.0.6", "source": { "type": "git", "url": "https://github.com/symfony/var-dumper.git", @@ -3940,16 +4245,16 @@ }, { "name": "symfony/thanks", - "version": "v1.0.6", + "version": "v1.0.7", "source": { "type": "git", "url": "https://github.com/symfony/thanks.git", - "reference": "9474ce305253c2f0bc20322ff8e9973cf25c9a94" + "reference": "bade4992c46ed722162694b4af8d72f84402819a" }, "dist": { "type": "zip", - "url": "https://api.github.com/repos/symfony/thanks/zipball/9474ce305253c2f0bc20322ff8e9973cf25c9a94", - "reference": "9474ce305253c2f0bc20322ff8e9973cf25c9a94", + "url": "https://api.github.com/repos/symfony/thanks/zipball/bade4992c46ed722162694b4af8d72f84402819a", + "reference": "bade4992c46ed722162694b4af8d72f84402819a", "shasum": "" }, "require": { @@ -3979,7 +4284,7 @@ } ], "description": "Give thanks (in the form of a GitHub â) to your fellow PHP package maintainers (not limited to Symfony components)!", - "time": "2018-02-02T13:47:40+00:00" + "time": "2018-03-14T21:51:39+00:00" }, { "name": "theseer/tokenizer", diff --git a/config/app.php b/config/app.php index 6644e8c..8cb8f71 100644 --- a/config/app.php +++ b/config/app.php @@ -151,7 +151,7 @@ return [ /* * Package Service Providers... */ - + 'Maatwebsite\Excel\ExcelServiceProvider', /* * Application Service Providers... */ @@ -189,6 +189,7 @@ return [ 'DB' => Illuminate\Support\Facades\DB::class, 'Eloquent' => Illuminate\Database\Eloquent\Model::class, 'Event' => Illuminate\Support\Facades\Event::class, + 'Excel' => 'Maatwebsite\Excel\Facades\Excel', 'File' => Illuminate\Support\Facades\File::class, 'Gate' => Illuminate\Support\Facades\Gate::class, 'Hash' => Illuminate\Support\Facades\Hash::class, diff --git a/config/excel.php b/config/excel.php new file mode 100644 index 0000000..de58e65 --- /dev/null +++ b/config/excel.php @@ -0,0 +1,86 @@ +<?php + +use Maatwebsite\Excel\Excel; + +return [ + 'exports' => [ + + /* + |-------------------------------------------------------------------------- + | Chunk size + |-------------------------------------------------------------------------- + | + | When using FromQuery, the query is automatically chunked. + | Here you can specify how big the chunk should be. + | + */ + 'chunk_size' => 1000, + + /* + |-------------------------------------------------------------------------- + | Temporary path + |-------------------------------------------------------------------------- + | + | When exporting files, we use a temporary file, before storing + | or downloading. Here you can customize that path. + | + */ + 'temp_path' => sys_get_temp_dir(), + + /* + |-------------------------------------------------------------------------- + | CSV Settings + |-------------------------------------------------------------------------- + | + | Configure e.g. delimiter, enclosure and line ending for CSV exports. + | + */ + 'csv' => [ + 'delimiter' => ',', + 'enclosure' => '"', + 'line_ending' => PHP_EOL, + 'use_bom' => false, + 'include_separator_line' => false, + 'excel_compatibility' => false, + ], + ], + + /* + |-------------------------------------------------------------------------- + | Extension detector + |-------------------------------------------------------------------------- + | + | Configure here which writer type should be used when + | the package needs to guess the correct type + | based on the extension alone. + | + */ + 'extension_detector' => [ + 'xlsx' => Excel::XLSX, + 'xlsm' => Excel::XLSX, + 'xltx' => Excel::XLSX, + 'xltm' => Excel::XLSX, + 'xls' => Excel::XLS, + 'xlt' => Excel::XLS, + 'ods' => Excel::ODS, + 'ots' => Excel::ODS, + 'slk' => Excel::SLK, + 'xml' => Excel::XML, + 'gnumeric' => Excel::GNUMERIC, + 'htm' => Excel::HTML, + 'html' => Excel::HTML, + 'csv' => Excel::CSV, + + /* + |-------------------------------------------------------------------------- + | PDF Extension + |-------------------------------------------------------------------------- + | + | Configure here which Pdf driver should be used by default. + | + | Available options: Excel::MPDF | Excel::TCPDF | Excel::DOMPDF + | + */ + 'pdf' => Excel::DOMPDF, + ], +]; diff --git a/resources/views/admin/addmember.blade.php b/resources/views/admin/addmember.blade.php new file mode 100644 index 0000000..779de12 --- /dev/null +++ b/resources/views/admin/addmember.blade.php @@ -0,0 +1,48 @@ +<!doctype html> +<html lang="{{ app()->getLocale() }}"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="stylesheet" href="{{asset('css/app.css')}}"> + <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> + <title>@yield('title')</title> + </head> + <body> + <div class="container"> + <h2 class="sub-title">Add Members</h2> + {!! Form::open(['action' => ['AddMemberController@importCSV'], 'method' => 'POST', 'enctype' => 'multipart/form-data']) !!} + <div class="form-group"> + {{Form::label('list_members','Members')}} + {{Form::file('list_members')}} + </div> + {{Form::hidden('_method', 'POST')}} + {{Form::submit('Submit', ['class' => 'btn btn-primary'])}} + {!! Form::close() !!} + <link rel="stylesheet" type="text/css" href="css/file-upload.css" /> + <script src="js/file-upload.js"></script> + <script type="text/javascript"> + $(document).ready(function() { + $('.file-upload').file_upload(); + }); + </script> + </div> + <div class="container"> + <h2 class="sub-title">Add Members</h2> + {!! Form::open(['action' => ['AddMemberController@importMember'], 'method' => 'POST']) !!} + <div class="form-group"> + {{Form::label('email','Email')}} + {{Form::text('email', '', ['class' => 'form-control'])}} + + {{Form::label('phone_number','Phone Number')}} + {{Form::text('phone_number', '', ['class' => 'form-control'])}} + + {{Form::label('name','name')}} + {{Form::text('name', '', ['class' => 'form-control'])}} + </div> + {{Form::hidden('_method', 'POST')}} + {{Form::submit('Submit', ['class' => 'btn btn-primary'])}} + {!! Form::close() !!} + </div> + </body> +</html> \ No newline at end of file diff --git a/resources/views/admin/showmember.blade.php b/resources/views/admin/showmember.blade.php new file mode 100644 index 0000000..d9ae8b1 --- /dev/null +++ b/resources/views/admin/showmember.blade.php @@ -0,0 +1,23 @@ +<!doctype html> +<html lang="{{ app()->getLocale() }}"> + <head> + <meta charset="utf-8"> + <meta http-equiv="X-UA-Compatible" content="IE=edge"> + <meta name="viewport" content="width=device-width, initial-scale=1"> + <link rel="stylesheet" href="{{asset('css/app.css')}}"> + <link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" id="bootstrap-css"> + <title>@yield('title')</title> + </head> + <body> + <div class="container"> + @if (count($array_members) > 0) + @foreach($array_members as $member) + {{$member->name}} {{$member->email}} {{$member->phone_number}} {{$member->id}} + <br> + @endforeach + @else + no member added + @endif + </div> + </body> +</html> \ No newline at end of file diff --git a/routes/web.php b/routes/web.php index 6fa3587..cd32de0 100644 --- a/routes/web.php +++ b/routes/web.php @@ -15,4 +15,8 @@ Route::get('/', function () { return '<h1>Under Construction</h1>'; }); -Route::resource('profile', 'MembersController'); \ No newline at end of file +Route::post('/importcsv','AddMemberController@importCSV'); +Route::post('/importmember','AddMemberController@importMember'); + +Route::resource('profile', 'MembersController'); +Route::resource('addmember', 'AddMemberController'); \ No newline at end of file -- GitLab