Browse Source

Add set method on Option service

pull/1/head
Nafies Luthfi 8 years ago
parent
commit
5dee6628e4
  1. 32
      app/Http/Controllers/Users/AgencyController.php
  2. 18
      app/Services/Option.php
  3. 20
      resources/lang/id/agency.php
  4. 3
      resources/views/pages/partials/dashboard-nav-tabs.blade.php
  5. 13
      resources/views/users/agency/edit.blade.php
  6. 10
      resources/views/users/agency/show.blade.php
  7. 19
      routes/web/account.php
  8. 46
      tests/Feature/Users/UserProfileTest.php
  9. 37
      tests/Unit/Services/SiteOptionTest.php

32
app/Http/Controllers/Users/AgencyController.php

@ -0,0 +1,32 @@
<?php
namespace App\Http\Controllers\Users;
use App\Http\Controllers\Controller;
use Option;
class AgencyController extends Controller
{
public function show()
{
return view('users.agency.show');
}
public function edit()
{
return view('users.agency.edit');
}
public function update()
{
Option::set('agency_name', request('name'));
Option::set('agency_email', request('email'));
Option::set('agency_website', request('website'));
Option::set('agency_address', request('address'));
Option::set('agency_phone', request('phone'));
flash(trans('agency.updated'), 'success');
return redirect()->route('users.agency.show');
}
}

18
app/Services/Option.php

@ -3,7 +3,6 @@
namespace App\Services;
use App\Entities\Options\Option as SiteOption;
use Cache;
/**
* Option Class (Site Option Service)
@ -32,4 +31,21 @@ class Option
}
return $default;
}
public function set($key, string $value)
{
$option = $this->option->where('key', $key)->first();
if ($option) {
$option->value = $value;
$option->save();
} else {
$option = new SiteOption;
$option->key = $key;
$option->value = $value;
$option->save();
}
return $value;
}
}

20
resources/lang/id/agency.php

@ -0,0 +1,20 @@
<?php
return [
// Labels
'agency' => 'Agensi',
'not_found' => 'Agensi tidak ditemukan',
'detail' => 'Detail Agensi',
// Actions
'edit' => 'Edit Agensi',
'update' => 'Update Agensi',
'updated' => 'Update data Agensi telah berhasil.',
// Attributes
'name' => 'Nama Agensi',
'email' => 'Email Agensi',
'website' => 'Website Agensi',
'address' => 'Alamat Agensi',
'phone' => 'Telp. Agensi',
];

3
resources/views/pages/partials/dashboard-nav-tabs.blade.php

@ -7,6 +7,9 @@
{!! link_to_route('users.profile.show', trans('auth.profile')) !!}
</li>
@can('manage_agency')
<li class="{{ Request::segment(1) == 'agency' ? 'active' : '' }}">
{!! link_to_route('users.agency.show', trans('nav_menu.agency')) !!}
</li>
<li class="{{ Request::segment(1) == 'users' ? 'active' : '' }}">
{!! link_to_route('users.index', trans('user.list')) !!}
</li>

13
resources/views/users/agency/edit.blade.php

@ -5,13 +5,12 @@
@section('content-dashboard')
<div class="row">
<div class="col-md-6 col-lg-offset-2">
<?php $agency = auth()->user()->agency;?>
{{ Form::model($agency, ['route' => 'users.agency.update', 'method' => 'patch']) }}
{!! FormField::text('name') !!}
{!! FormField::email('email') !!}
{!! FormField::text('website') !!}
{!! FormField::textarea('address') !!}
{!! FormField::text('phone') !!}
{{ Form::open(['route' => 'users.agency.update', 'method' => 'patch']) }}
{!! FormField::text('name', ['value' => Option::get('agency_name')]) !!}
{!! FormField::email('email', ['value' => Option::get('agency_email')]) !!}
{!! FormField::text('website', ['value' => Option::get('agency_phone')]) !!}
{!! FormField::textarea('address', ['value' => Option::get('agency_address')]) !!}
{!! FormField::text('phone', ['value' => Option::get('agency_website')]) !!}
{{ Form::submit(trans('agency.update'), ['class' => 'btn btn-info']) }}
{{ link_to_route('users.agency.show', trans('app.cancel'), [], ['class' => 'btn btn-default']) }}
{{ Form::close() }}

10
resources/views/users/agency/show.blade.php

@ -7,11 +7,11 @@
<div class="col-md-8 col-md-offset-2">
<div class="panel panel-default">
<table class="table">
<tr><th class="col-xs-4">{{ trans('agency.name') }}</th><td>{{ $agency->name }}</td></tr>
<tr><th>{{ trans('agency.email') }}</th><td>{{ $agency->email }}</td></tr>
<tr><th>{{ trans('agency.phone') }}</th><td>{{ $agency->phone }}</td></tr>
<tr><th>{{ trans('agency.address') }}</th><td>{!! nl2br($agency->address) !!}</td></tr>
<tr><th>{{ trans('agency.website') }}</th><td>{{ $agency->website }}</td></tr>
<tr><th class="col-xs-4">{{ trans('agency.name') }}</th><td>{{ Option::get('agency_name') }}</td></tr>
<tr><th>{{ trans('agency.email') }}</th><td>{{ Option::get('agency_email') }}</td></tr>
<tr><th>{{ trans('agency.phone') }}</th><td>{{ Option::get('agency_phone') }}</td></tr>
<tr><th>{{ trans('agency.address') }}</th><td>{!! nl2br(Option::get('agency_address')) !!}</td></tr>
<tr><th>{{ trans('agency.website') }}</th><td>{{ Option::get('agency_website') }}</td></tr>
</table>
<div class="panel-footer">
{{ link_to_route('users.agency.edit', trans('agency.edit'), [], ['class' => 'btn btn-info']) }}

19
routes/web/account.php

@ -40,3 +40,22 @@ Route::patch('profile/update', [
'uses' => 'Users\ProfileController@update',
'middleware' => ['web', 'auth'],
]);
// User's Agency routes
Route::get('agency', [
'as' => 'users.agency.show',
'uses' => 'Users\AgencyController@show',
'middleware' => ['web', 'auth'],
]);
Route::get('agency/edit', [
'as' => 'users.agency.edit',
'uses' => 'Users\AgencyController@edit',
'middleware' => ['web', 'auth'],
]);
Route::patch('agency/update', [
'as' => 'users.agency.update',
'uses' => 'Users\AgencyController@update',
'middleware' => ['web', 'auth'],
]);

46
tests/Feature/Users/UserProfileTest.php

@ -42,4 +42,50 @@ class UserProfileTest extends TestCase
'email' => 'me@domain.com',
]);
}
/** @test */
public function a_user_can_visit_their_agency_page()
{
$user = $this->adminUserSigningIn();
$this->visit(route('users.agency.show'));
$this->seePageIs(route('users.agency.show'));
}
/** @test */
public function a_user_can_update_their_agency_data()
{
$user = $this->adminUserSigningIn();
$this->visit(route('users.agency.edit'));
$this->submitForm(trans('agency.update'), [
'name' => 'Nama Agensi Saya',
'email' => 'nama_agensi@domain.com',
'address' => 'Jln. Kalimantan, No. 20, Kota',
'phone' => '081234567890',
'website' => 'https://example.com',
]);
$this->see(trans('agency.updated'));
$this->seePageIs(route('users.agency.show'));
$this->seeInDatabase('site_options', [
'key' => 'agency_name',
'value' => 'Nama Agensi Saya',
]);
$this->seeInDatabase('site_options', [
'key' => 'agency_email',
'value' => 'nama_agensi@domain.com',
]);
$this->seeInDatabase('site_options', [
'key' => 'agency_address',
'value' => 'Jln. Kalimantan, No. 20, Kota',
]);
$this->seeInDatabase('site_options', [
'key' => 'agency_phone',
'value' => '081234567890',
]);
$this->seeInDatabase('site_options', [
'key' => 'agency_website',
'value' => 'https://example.com',
]);
}
}

37
tests/Unit/Services/SiteOptionTest.php

@ -0,0 +1,37 @@
<?php
namespace Tests\Unit\Services;
use Option;
use Tests\TestCase;
class SiteOptionTest extends TestCase
{
/** @test */
public function option_can_be_set()
{
Option::set('testing_key', 'testing_value');
$this->seeInDatabase('site_options', [
'key' => 'testing_key',
'value' => 'testing_value',
]);
}
/** @test */
public function option_can_be_get()
{
\DB::table('site_options')->insert([
'key' => 'testing_key',
'value' => 'testing_value',
]);
$this->assertEquals('testing_value', Option::get('testing_key'));
}
/** @test */
public function option_can_has_default_value_if_value_not_exists()
{
$this->assertEquals('testing_value', Option::get('testing_key', 'testing_value'));
}
}
Loading…
Cancel
Save