krgm.so-manager-dev.com/app/Http/Controllers/Admin/UserController.php
SongSong cf95babf8e
All checks were successful
Deploy previews (main_*) / preview (push) Successful in 10s
SWA-63駐輪車室マスタ作成
2025-08-21 20:50:27 +09:00

497 lines
21 KiB
PHP

<?php
namespace App\Http\Controllers\Admin;
use App\Models\City;
use App\Http\Requests\UserRequest;
use App\Models\Ope;
use App\Models\User;
use App\Models\Usertype;
use App\Utils;
use Illuminate\Http\Request;
use App\Http\Controllers\Controller;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Validator;
use Response;
class UserController extends Controller
{
/**
* Show the application dashboard.
*
* @return \Illuminate\Http\Response
*/
public function list(Request $request)
{
$inputs = [
'isMethodPost' => 0,
'isExport' => $request->input('isExport', 0) * 1,
'sort' => $request->input('sort', ''),
'sort_type' => $request->input('sort_type', ''),
'page' => $request->get('page', 1),
'user_id' => $request->input('user_id', ''),
'member_id' => $request->input('member_id', ''),
'user_tag_serial' => $request->input('user_tag_serial', ''),
'user_phonetic' => $request->input('user_phonetic', ''),
'phone' => $request->input('phone', ''),
'crime' => $request->input('crime', ''),
'black_list' => $request->input('black_list', ''),
'ward_residents' => $request->input('ward_residents', ''),
'user_tag_serial_64' => $request->input('user_tag_serial_64', ''),
'photo_filename1' => $request->file('photo_filename1'),
'photo_filename2' => $request->file('photo_filename2'),
];
$inputs['isMethodPost'] = $request->isMethod('post');
$inputs['list'] = User::search($inputs);
if ($inputs['list']->total() > 0 && $inputs['page'] > $inputs['list']->lastPage()) {
return redirect()->route('users');
}
return view('admin.users.list', $inputs);
}
public function add(Request $request)
{
$inputs = [
'user_id' => $request->input('user_id', ''),
'member_id' => $request->input('member_id', ''),
'user_pass' => $request->input('password', ''),
'user_manual_regist_flag' => $request->input('user_manual_regist_flag', 0),
'user_mailing_flag' => $request->input('user_mailing_flag', 0),
'contract_number' => $request->input('contract_number', ''),
'user_tag_serial' => $request->input('user_tag_serial', ''),
'user_tag_serial_64' => $request->input('user_tag_serial_64', ''),
'qr_code' => $request->input('qr_code', ''),
'tag_qr_flag' => $request->input('tag_qr_flag', ''),
'user_aid' => $request->input('user_aid', ''),
'user_park_number' => $request->input('user_park_number', ''),
'user_place_qrid' => $request->input('user_place_qrid', ''),
'user_categoryid' => $request->input('user_categoryid', ''),
'user_name' => $request->input('user_name', ''),
'user_phonetic' => $request->input('user_phonetic', ''),
'user_gender' => $request->input('user_gender', ''),
'user_birthdate' => $request->input('user_birthdate', ''),
'user_age' => $request->input('user_age', ''),
'ward_residents' => $request->input('ward_residents', ''),
'user_mobile' => $request->input('user_mobile', ''),
'user_homephone' => $request->input('user_homephone', ''),
'user_primemail' => $request->input('user_primemail', ''),
'user_submail' => $request->input('user_submail', ''),
'user_regident_zip' => $request->input('user_regident_zip', ''),
'user_regident_pre' => $request->input('user_regident_pre', ''),
'user_regident_city' => $request->input('user_regident_city', ''),
'user_regident_add' => $request->input('user_regident_add', ''),
'user_relate_zip' => $request->input('user_relate_zip', ''),
'user_relate_pre' => $request->input('user_relate_pre', ''),
'user_relate_city' => $request->input('user_relate_city', ''),
'user_relate_add' => $request->input('user_relate_add', ''),
'user_workplace' => $request->input('user_workplace', ''),
'user_school' => $request->input('user_school', ''),
'user_graduate' => $request->input('user_graduate', ''),
'user_reduction' => $request->input('user_reduction', ''),
'user_idcard' => $request->input('user_idcard', ''),
'user_idcard_chk_flag' => $request->input('user_idcard_chk_flag', 0),
'user_chk_day' => $request->input('user_chk_day', ''),
'user_chk_opeid' => $request->input('user_chk_opeid', ''),
'user_tag_issue' => $request->input('user_tag_issue', ''),
'issue_permission' => $request->input('issue_permission', 0),
'user_quit_flag' => $request->input('user_quit_flag', 0),
'user_quitday' => $request->input('user_quitday', ''),
'user_remarks' => $request->input('user_remarks', ''),
'photo_filename1' => $request->file('photo_filename1'),
'photo_filename2' => $request->file('photo_filename2'),
];
$dataList = $this->getDataDropList();
$inputs = array_merge($inputs, $dataList);
if ($request->isMethod('POST')) {
$type = false;
$validation = new UserRequest();
$rules = $validation->rules();
$rules['user_id'] = $rules['user_id'] . '|unique:user';
$rules['password'] = 'required|min:6|confirmed';
if(!empty($inputs['user_age']) ){
$rules['user_age'] = 'integer';
}
if(!empty($inputs['user_aid']) ){
$rules['user_aid'] = 'integer';
}
$validator = Validator::make($request->all(), $rules, $validation->messages());
if (!$validator->fails()) {
if ($request->hasFile('photo_filename1') && $inputs['photo_filename1']->isValid()) {
$inputs['image1'] = Utils::uploadFile($inputs['photo_filename1']);
} else {
$inputs['image1'] = '';
}
if ($request->hasFile('photo_filename2') && $inputs['photo_filename2']->isValid()) {
$inputs['image2'] = Utils::uploadFile($inputs['photo_filename2']);
} else {
$inputs['image2'] = '';
}
\DB::transaction(function () use ($inputs, &$type) {
$new = new User();
$new->fill($inputs);
if ($inputs['image1'] && $inputs['image1'] != '') {
$new->photo_filename2 = $inputs['image1'];
}
if ($inputs['image2'] && $inputs['image2'] != '') {
$new->photo_filename2 = $inputs['image2'];
}
if ($new->save()) {
$new->user_pass = Utils::getHashPassword($inputs['user_pass'], $new->user_seq);
$new->save();
}
$type = true;
});
if ($type) {
$request->session()->flash('success', __('新しい成功を創造する。'));
return redirect()->route('users');
} else {
$request->session()->flash('error', __('新しい作成に失敗しました'));
}
} else {
$inputs['errorMsg'] = $this->__buildErrorMessasges($validator);
$data['photo_filename1'] = '';
$data['photo_filename2'] = '';
}
}
return view('admin.users.add', $inputs);
}
public function edit(Request $request, $seq, $view = '')
{
$user = User::getUserBySeq($seq);
if (empty($seq) || empty($user)) {
abort('404');
}
$data = $user->getAttributes();
$filename1 = $data['photo_filename1'];
$filename2 = $data['photo_filename2'];
$dataList = $this->getDataDropList();
$data = array_merge($data, $dataList);
if ($request->isMethod('POST')) {
$type = false;
$validation = new UserRequest();
$inputs = $request->all();
$rules = $validation->rules();
if (!empty($inputs['password'])) {
$rules['password'] = 'required|min:6|confirmed';
}
if(!empty($inputs['user_age']) ){
$rules['user_age'] = 'integer';
}
if(!empty($inputs['user_aid']) ){
$rules['user_aid'] = 'integer';
}
$validator = Validator::make($inputs, $rules, $validation->messages());
$data = array_merge($data, $inputs);
if (!$validator->fails()) {
if ($request->hasFile('photo_filename1') && $data['photo_filename1']->isValid()) {
$data['image1'] = Utils::uploadFile($data['photo_filename1']);
} else {
$data['image1'] = '';
}
if ($request->hasFile('photo_filename2') && $data['photo_filename2']->isValid()) {
$data['image2'] = Utils::uploadFile($data['photo_filename2']);
} else {
$data['image2'] = '';
}
\DB::transaction(function () use ($data, &$type, $user, $inputs) {
$user->fill($data);
if (!empty($inputs['password'])) {
$user->user_pass = Utils::getHashPassword($data['password'], $user->user_seq);
}
if ($data['image1'] && $data['image1'] != '') {
$user->photo_filename1 = $data['image1'];
}
if ($data['image2'] && $data['image2'] != '') {
$user->photo_filename2 = $data['image2'];
}
$user->save();
$type = true;
});
if ($type) {
$request->session()->flash('success', __('更新に成功しました'));
return redirect()->route('users');
} else {
$request->session()->flash('error', __('更新に失敗しました'));
}
} else {
$data['errorMsg'] = $this->__buildErrorMessasges($validator);
$data['photo_filename1'] = $filename1;
$data['photo_filename2'] = $filename2;
}
}
if ($view != '') {
return view($view, $data);
}
return view('admin.users.edit', $data);
}
public function delete(Request $request)
{
$arr_seq = $request->get('seq');
if ($arr_seq) {
if (User::deleteUsersBySeq($arr_seq)) {
return redirect()->route('users')->with('success', __("削除が完了しました。"));
} else {
return redirect()->route('users')->with('error', __('削除に失敗しました。'));
}
}
return redirect()->route('users')->with('error', __('削除するユーザーを選択してください。'));
}
public function export(Request $request)
{
$headers = array(
"Content-type" => "text/csv;charset=UTF-8",
'Content-Encoding: UTF-8',
"Content-Disposition" => "attachment; filename=file.csv",
"Pragma" => "no-cache",
"Cache-Control" => "must-revalidate, post-check=0, pre-check=0",
"Expires" => "0"
);
$inputs = [
'isMethodPost' => 0,
'isExport' => 1,
'sort' => $request->input('sort', ''),
'sort_type' => $request->input('sort_type', ''),
];
$dataExport = User::search($inputs);
$columns = array(
__('利用者連番'),// 0
__('利用者ID'),// 1
__('会員ID'),// 2
__('パスワード'),// 3
__('手動登録フラグ'),// 4
__('手動登録フラグ'),
__('郵送必要フラグ'),// 5
__('郵送必要フラグ'),
__('旧定期契約番号'),// 6
__('タグシリアル'),// 7
__('タグシリアル64進'),// 8
__('QRコード'),// 9
__('タグ/QRフラグ'),// 10
__('タグ/QRフラグ'),
__('AID'),// 11
__('居場所通知用QRID'),// 12
__('利用者分類ID'),// 13
__('利用者分類'),
__('利用者名'),// 14
__('フリガナ'),// 15
__('性別'),// 16
__('生年月日'),// 17
__('年齢'),// 18
__('携帯電話番号'),// 19
__('自宅電話番号'),// 20
__('メールアドレス'),// 21
__('予備メールアドレス'),// 22
__('居住所:郵便番号'),// 23
__('居住所:都道府県'),// 24
__('居住所:市区群'),// 25
__('居住所:住所'),// 26
__('関連住所:郵便番号'),// 27
__('関連住所:都道府県'),// 28
__('関連住所:市区群'),// 29
__('関連住所:住所'),// 30
__('区民'),// 31
__('勤務先名'),// 32
__('学校'),// 33
__('卒業予定'),// 34
__('本人確認書類'),// 35
__('本人確認チェック済'),// 36
__('本人確認チェック済'),
__('本人確認日時'),// 37
__('本人確認オペレータID'),// 38
__('タグ発行数'),// 39
__('タグ発行許可'),// 40
__('退会フラグ'),// 41
__('退会フラグ'),
__('退会日'),// 42
__('備考'),// 43
);
$filename = "利用者マスタ.csv";
$file = fopen($filename, 'w+');
fputcsv($file, $columns);
foreach ($dataExport as $items) {
fputcsv($file, array(
$items->user_seq, // 0
$items->user_id, // 1
$items->member_id, // 2
'',//TODO パスワード not found in database specs
$items->user_manual_regist_flag, // 4
$items->user_manual_regist_flag ? __("はい") : __("いいえ"),
$items->user_mailing_flag, // 6
$items->user_mailing_flag ? __("はい") : __("いいえ"),
$items->contract_number, // 8
$items->user_tag_serial, // 9
$items->user_tag_serial_64, // 10
$items->qr_code, // 11
$items->tag_qr_flag, // 12
$items->tag_qr_flag ? __('QRコード') : __('タグ'),
$items->user_aid, // 14
$items->user_place_qrid, // 15
$items->user_categoryid, // 16
$items->getUserType()->print_name,
$items->user_name, // 18
$items->user_phonetic, // 19
$items->user_gender, // 20
$items->user_birthdate, // 21
$items->user_age, // 22
$items->user_mobile, // 23
$items->user_homephone, // 24
$items->user_primemail, // 25
$items->user_submail, // 26
$items->user_regident_zip, // 27
$items->user_regident_pre, // 28
$items->user_regident_city, // 29
$items->user_regident_add, // 30
$items->user_relate_zip, // 31
$items->user_relate_pre, // 32
$items->user_relate_city, // 33
$items->user_relate_add, // 34
$items->ward_residents, // 35
$items->user_workplace, // 36
$items->user_school, // 37
$items->user_graduate, // 38
$items->user_idcard, // 39
$items->user_idcard_chk_flag, // 40
\App\Models\User::USER_ID_CARD_CHK_FLG[$items->user_idcard_chk_flag],
$items->user_chk_day, // 42
$items->user_chk_opeid, // 43
$items->user_tag_issue, // 44
$items->issue_permission, // 45
$items->user_quit_flag, // 46
$items->user_quit_flag ? __("はい") : __("いいえ"),
$items->user_quitday, // 48
$items->user_remarks, // 49
));
}
fclose($file);
return Response::download($filename, $filename, $headers);
}
public function import(Request $request)
{
$file = $request->file('file');
if (!empty($file)) {
$data = Utils::csvToArray($file);
$type = 1;
$msg = '';
$record = 0;
DB::beginTransaction();
try {
User::query()->delete();
$col = 50;
foreach ($data as $key => $items) {
$record = $key + 2;
if (count($items) == $col) {
$row = new User();
$row->user_seq = $items[0];
$row->user_id = $items[1];
$row->member_id = $items[2];
//TODO パスワード not found in database specs_$items[3]
$row->user_manual_regist_flag = $items[4];
$row->user_mailing_flag = $items[6];
$row->contract_number = $items[8];
$row->user_tag_serial = $items[9];
$row->user_tag_serial_64 = $items[10];
$row->qr_code = $items[11];
$row->tag_qr_flag = $items[12];
$row->user_aid = $items[14];
$row->user_place_qrid = $items[15];
$row->user_categoryid = $items[16];
$row->user_name = $items[18];
$row->user_phonetic = $items[19];
$row->user_gender = $items[20];
$row->user_birthdate = $items[21];
$row->user_age = !empty($items[22]) ? $items[22] : null;
$row->user_mobile = $items[23];
$row->user_homephone = $items[24];
$row->user_primemail = $items[25];
$row->user_submail = $items[26];
$row->user_regident_zip = $items[27];
$row->user_regident_pre = $items[28];
$row->user_regident_city = $items[29];
$row->user_regident_add = $items[30];
$row->user_relate_zip = $items[31];
$row->user_relate_pre = $items[32];
$row->user_relate_city = $items[33];
$row->user_relate_add = $items[34];
$row->ward_residents = $items[35];
$row->user_workplace = $items[36];
$row->user_school = $items[37];
$row->user_graduate = $items[38];
$row->user_idcard = $items[39];
$row->user_idcard_chk_flag = $items[40];
$row->user_chk_day = $items[42];
$row->user_chk_opeid = $items[43];
$row->user_tag_issue = $items[44];
$row->issue_permission = $items[45];
$row->user_quit_flag = $items[46];
$row->user_quitday = $items[48];
$row->user_remarks = $items[49];
if (!$row->save()) {
$type = 0;
$msg = '行:record型が一致しません。';
break;
}
} else {
$type = 0;
$msg = '行:record列数が一致しません。';
break;
}
}
} catch (\Exception $e) {
$msg = '行:record型が一致しません。';
$type = 0;
}
if ($type) {
DB::commit();
return redirect()->route('users')->with('success', __('輸入成功'));
} else {
DB::rollBack();
return redirect()->route('users')->with('error', __($msg, ['record' => $record]));
}
} else {
return redirect()->route('users')->with('error', __('あなたはcsvファイルを選択していません。'));
}
}
public function info(Request $request, $seq)
{
return $this->edit($request, $seq, 'admin.users.info');
}
public function getDataDropList()
{
$data['cities'] = City::getList();
$data['listUserType'] = Usertype::getList();
$data['listOpe'] = Ope::getList();
return $data;
}
/**
* バリデーションエラーメッセージを構築
*/
private function __buildErrorMessasges($validator)
{
$messages = [];
foreach ($validator->errors()->all() as $message) {
$messages[] = $message;
}
return implode('<br>', $messages);
}
}