Add privatized version of name #656 (#658)

This commit is contained in:
Nabeel S
2020-04-06 12:03:19 -04:00
committed by GitHub
parent 3c0cd34071
commit 40a94cb9ad
8 changed files with 49 additions and 17 deletions
@@ -7,24 +7,19 @@ use App\Models\Enums\UserState;
use App\Repositories\Criteria\WhereCriteria; use App\Repositories\Criteria\WhereCriteria;
use App\Repositories\UserRepository; use App\Repositories\UserRepository;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Log; use Illuminate\Support\Facades\Log;
use League\ISO3166\ISO3166;
use Prettus\Repository\Exceptions\RepositoryException; use Prettus\Repository\Exceptions\RepositoryException;
/**
* Class UserController
*/
class UserController extends Controller class UserController extends Controller
{ {
private $userRepo; private $userRepo;
/** /**
* UserController constructor.
*
* @param UserRepository $userRepo * @param UserRepository $userRepo
*/ */
public function __construct( public function __construct(UserRepository $userRepo)
UserRepository $userRepo {
) {
$this->userRepo = $userRepo; $this->userRepo = $userRepo;
} }
@@ -49,11 +44,11 @@ class UserController extends Controller
$users = $this->userRepo $users = $this->userRepo
->with(['airline', 'current_airport']) ->with(['airline', 'current_airport'])
->orderBy('name', 'desc') ->orderBy('pilot_id', 'asc')
->paginate(); ->paginate();
return view('users.index', [ return view('users.index', [
'country' => new \League\ISO3166\ISO3166(), 'country' => new ISO3166(),
'users' => $users, 'users' => $users,
]); ]);
} }
+21 -1
View File
@@ -14,6 +14,7 @@ use Laratrust\Traits\LaratrustUserTrait;
* @property int pilot_id * @property int pilot_id
* @property int airline_id * @property int airline_id
* @property string name * @property string name
* @property string name_private Only first name, rest are initials
* @property string email * @property string email
* @property string password * @property string password
* @property string api_key * @property string api_key
@@ -110,13 +111,32 @@ class User extends Authenticatable
/** /**
* @return string * @return string
*/ */
public function getIdentAttribute() public function getIdentAttribute(): string
{ {
$length = setting('pilots.id_length'); $length = setting('pilots.id_length');
return $this->airline->icao.str_pad($this->pilot_id, $length, '0', STR_PAD_LEFT); return $this->airline->icao.str_pad($this->pilot_id, $length, '0', STR_PAD_LEFT);
} }
/**
* Return a "privatized" version of someones name - First name full, rest of the names are initials
*
* @return string
*/
public function getNamePrivateAttribute(): string
{
$name_parts = explode(' ', $this->attributes['name']);
$count = count($name_parts);
if ($count === 1) {
return $name_parts[0];
}
$first_name = $name_parts[0];
$last_name = $name_parts[$count - 1];
return $first_name.' '.$last_name[0];
}
/** /**
* Shorthand for getting the timezone * Shorthand for getting the timezone
* *
@@ -16,7 +16,7 @@
{{--</div>--}} {{--</div>--}}
<div class="header header-primary text-center blue-bg"> <div class="header header-primary text-center blue-bg">
<h3 class="title title-up text-white"> <h3 class="title title-up text-white">
<a href="{{ route('frontend.profile.show', [$user->id]) }}" class="text-white">{{ $user->name }}</a> <a href="{{ route('frontend.profile.show', [$user->id]) }}" class="text-white">{{ $user->name_private }}</a>
</h3> </h3>
<div class="photo-container"> <div class="photo-container">
@if ($user->avatar == null) @if ($user->avatar == null)
@@ -13,7 +13,7 @@
</div> </div>
<div><br/></div> <div><br/></div>
<div class="social-description"> <div class="social-description">
<h2>{{ $user->name }}</h2> <h2>{{ $user->name_private }}</h2>
<p>{{ $user->ident }}</p> <p>{{ $user->ident }}</p>
</div> </div>
<p class="description" style="color: #9A9A9A;"> <p class="description" style="color: #9A9A9A;">
@@ -23,7 +23,7 @@
</td> </td>
<td> <td>
<a href="{{ route('frontend.profile.show.public', [$user->id]) }}"> <a href="{{ route('frontend.profile.show.public', [$user->id]) }}">
{{ $user->name }} {{$user->ident}}&nbsp;{{ $user->name_private }}
</a> </a>
</td> </td>
<td align="center"> <td align="center">
@@ -11,7 +11,7 @@
@foreach($news as $item) @foreach($news as $item)
<h4 style="margin-top: 0px;">{{ $item->subject }}</h4> <h4 style="margin-top: 0px;">{{ $item->subject }}</h4>
<p class="category">{{ $item->user->name }} <p class="category">{{ $item->user->name_private }}
- {{ show_datetime($item->created_at) }}</p> - {{ show_datetime($item->created_at) }}</p>
{{ $item->body }} {{ $item->body }}
@@ -4,7 +4,7 @@
<td style="padding-right: 10px;"> <td style="padding-right: 10px;">
<span class="title">{{ $u->ident }}</span> <span class="title">{{ $u->ident }}</span>
</td> </td>
<td>{{ $u->name }}</td> <td>{{ $u->name_private }}</td>
</tr> </tr>
@endforeach @endforeach
</table> </table>
+17
View File
@@ -228,4 +228,21 @@ class UserTest extends TestCase
$user3 = factory(App\Models\User::class)->create(); $user3 = factory(App\Models\User::class)->create();
$this->assertEquals(4, $user3->pilot_id); $this->assertEquals(4, $user3->pilot_id);
} }
/**
* Test that a user's name is private
*/
public function testUserNamePrivate()
{
$vals = [
'Firstname' => 'Firstname',
'Firstname Lastname' => 'Firstname L',
'Firstname Middlename Lastname' => 'Firstname L',
];
foreach ($vals as $input => $expected) {
$user = new User(['name' => $input]);
$this->assertEquals($expected, $user->name_private);
}
}
} }