Skip to content
Snippets Groups Projects
Commit 299fc291 authored by Tibo's avatar Tibo
Browse files

Add user to organization

parent e73e5bb1
No related branches found
No related tags found
No related merge requests found
<?php
namespace App\Http\Controllers;
use App\Organization;
use App\User;
use App\Mail\OrganizationUserInvitation;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Mail;
use Illuminate\Support\Facades\Validator;
use Illuminate\Support\Facades\Auth;
class OrganizationUserController extends Controller {
public function __construct() {
$this->middleware('auth');
}
public function index() {
}
/** Show form **/
public function create(Organization $organization) {
return view("organization.user.create", ["organization" => $organization]);
}
protected function validator(array $data) {
return Validator::make($data, [
'email' => 'required|string|email|max:255|unique:users',
]);
}
/** add user to organization **/
public function store(Organization $organization, Request $request) {
$current_user = Auth::user();
if (! $current_user->ownsOrganization($organization)) {
return redirect(route("dashboard"));
}
$user = User::findByEmail($request->input("email"));
if ($user == null) {
// create user
$this->validator($request->all())->validate();
$user = User::create([
'name' => $request->input("email"),
'email' => $request->input("email"),
'password' => bcrypt(str_random()),
]);
}
if ($user->ownsOrganization($organization)) {
// user is already part of organization...
return redirect(route("dashboard"));
}
Mail::to($user->email)->send(new OrganizationUserInvitation($organization, $user));
$organization->users()->attach($user->id);
return redirect(route("dashboard"));
}
public function show($id) {
}
public function edit($id) {
}
public function update($id) {
}
public function destroy($id) {
}
}
\ No newline at end of file
<?php
namespace App\Mail;
use App\Organization;
use App\User;
use Illuminate\Bus\Queueable;
use Illuminate\Mail\Mailable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Contracts\Queue\ShouldQueue;
class OrganizationUserInvitation extends Mailable
{
use Queueable, SerializesModels;
private $organization;
private $user;
/**
* Create a new message instance.
*
* @return void
*/
public function __construct(Organization $organization, User $user)
{
$this->organization = $organization;
$this->user = $user;
}
/**
* Build the message.
*
* @return $this
*/
public function build()
{
return $this->markdown('emails.organization.invitation', [
"organization" => $this->organization,
"user" => $this->user
])->subject("Join " . $this->organization->name);
}
}
\ No newline at end of file
......@@ -31,4 +31,19 @@ class User extends Authenticatable
{
return $this->belongsToMany('App\Organization');
}
public function ownsOrganization(Organization $organization) {
foreach ($this->organizations as $o) {
if ($o->id == $organization->id) {
return true;
}
}
return false;
}
public static function findByEmail($email) {
return self::where("email", $email)->first();
}
}
@component('mail::message')
Dear,
You were invited to join the organization **{{ $organization->name }}**.
@component('mail::button', ['url' => route("dashboard")])
Login
@endcomponent
Best regards,
@endcomponent
\ No newline at end of file
......@@ -15,6 +15,13 @@
<li>{{ $user->name }}</li>
@endforeach
</ul>
<p>
<a class="btn btn-primary btn-sm"
href="{{ action("OrganizationUserController@create", ["organization" => $organization]) }}">
Invite user to organization
</a>
</p>
</div>
</div>
......
@extends('layouts.app')
@section('content')
<div class="container">
<div class="row justify-content-md-center">
<div class="col-md-6">
<div class="card">
<div class="card-header">
Invite a user to your organization
</div>
<div class="card-body">
<form class="form" method="POST"
action="{{ action('OrganizationUserController@store', ["organization" => $organization]) }}">
{{ csrf_field() }}
<div class="form-group">
<label for="name">Organization</label>
<p class="form-control">{{ $organization->name }}</p>
</div>
<div class="form-group{{ $errors->has('email') ? ' has-error' : '' }}">
<label for="email">E-Mail Address</label>
<input id="email" type="email" class="form-control"
name="email" value="{{ old('email') }}" autofocus required>
@if ($errors->has('email'))
<span class="help-block">
<strong>{{ $errors->first('email') }}</strong>
</span>
@endif
</div>
<div class="form-group">
<button type="submit" class="btn btn-primary">
Invite user
</button>
</div>
</form>
</div>
</div>
</div>
</div>
</div>
@endsection
......@@ -21,4 +21,5 @@ Route::get('app/dashboard', function() {
return view("dashboard");
})->name('dashboard');
Route::resource('app/organizations', 'OrganizationController');
Route::resource("app/organizations.user", "OrganizationUserController");
Route::resource('app/servers', 'ServerController');
\ No newline at end of file
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment