264 lines
10 KiB
PHP
Executable File
264 lines
10 KiB
PHP
Executable File
<?php
|
|
|
|
namespace Modules\M3\Http\Controllers;
|
|
|
|
use Config;
|
|
use DB;
|
|
use Illuminate\Http\Request;
|
|
use Illuminate\Support\Facades\Schema;
|
|
use Modules\M3\Models\ICM428M;
|
|
use Modules\M3\Services\PostgresProgramBridge;
|
|
|
|
class UserControlController extends Controller
|
|
{
|
|
|
|
|
|
|
|
|
|
|
|
public static function index(Request $request)
|
|
{
|
|
$connection = config('m3.connection', 'pgsql');
|
|
$profile = null;
|
|
if (Schema::connection($connection)->hasTable('icm428m')) {
|
|
$profile = DB::connection($connection)->table('icm428m')->where('R428US', strtoupper(m3_user()))->first();
|
|
}
|
|
$co = $profile->R428CO ?? '';
|
|
$whs = $profile->R428WH ?? '';
|
|
$iCM428M = Schema::connection($connection)->hasTable('icm428m')
|
|
? DB::connection($connection)->table('icm428m')->where('R428CO', $co)->where('R428WH', $whs)->get() : collect();
|
|
$uSER_INFO = Schema::connection($connection)->hasTable('icm428m')
|
|
? DB::connection($connection)->table('icm428m')->selectRaw('R428US as USERPRF, R428STS as STATUS, NULL as DATE_EXPIRED, NULL as EXPIRED')->get()->all() : [];
|
|
$power_user = [(object) ['R428PWRUSR' => $profile->R428PWRUSR ?? 'N', 'R428CO' => $co, 'R428PL' => $profile->R428PL ?? '', 'R428WH' => $whs]];
|
|
$iC670M = Schema::connection($connection)->hasTable('ic670m')
|
|
? DB::connection($connection)->table('ic670m')->get() : collect();
|
|
|
|
return view('m3::liberty-theme.pages.userControl', ['ICM428M' => $iCM428M, 'IC670M' => $iC670M, 'power_user' => $power_user, 'USER_INFO' => $uSER_INFO]);
|
|
}
|
|
|
|
//
|
|
// Process data from Add modal
|
|
//
|
|
public static function saveUserAdd(Request $request)
|
|
{
|
|
if ($request->R428EMPCDE == '') {
|
|
$request->R428EMPCDE = 0;
|
|
}
|
|
|
|
$connection = DB::connection(config('m3.connection', 'pgsql'));
|
|
$existing = $connection->select("select count(*) as COUNT1 from ICM428M where R428US='$request->R428US'");
|
|
if (($existing[0]->COUNT1 ?? 0) == '1') {
|
|
return 'error exists';
|
|
}
|
|
|
|
// PostgreSQL/Core owns M3 profiles; no QSYS2 lookup is currently available.
|
|
$profileExists = false;
|
|
if ($profileExists) {
|
|
self::insertUser($request, false);
|
|
return 'success';
|
|
}
|
|
|
|
return self::createSystemProfileAndUser($request);
|
|
}
|
|
|
|
private static function createSystemProfileAndUser(Request $request): string
|
|
{
|
|
try {
|
|
$conn = app(PostgresProgramBridge::class);
|
|
} catch (\Throwable $e) {
|
|
return self::programBridgeConnectionError($e);
|
|
}
|
|
|
|
$conn->setOptions([
|
|
'persistent' => false,
|
|
'stateless' => true,
|
|
'debug' => true,
|
|
'debugLogFile' => '/www/sentm3test/htdocs/M3/storage/logs/toolkit_debug.log',
|
|
]);
|
|
$params = [
|
|
$conn->AddParameterChar('in', 10, 'User profile', 'E#iUsrPrf', $request->R428US),
|
|
$conn->AddParameterChar('in', 20, 'First name', 'FIRST', $request->R428FIRST),
|
|
$conn->AddParameterChar('in', 30, 'Family name', 'FAMILY', $request->R428FAMILY),
|
|
];
|
|
|
|
if (! $conn->PgmCall('ICMUSRPRF', 'EWOBJ', $params, [], [])) {
|
|
return 'error profile2';
|
|
}
|
|
|
|
self::insertUser($request, true);
|
|
return 'success2';
|
|
}
|
|
|
|
private static function insertUser(Request $request, bool $includeR42821A): void
|
|
{
|
|
$values = [
|
|
'R428CO' => $request->R428CO,
|
|
'R428PL' => $request->R428PL,
|
|
'R428WH' => $request->R428WH,
|
|
'R428STS' => $request->R428STS,
|
|
'R428US' => $request->R428US,
|
|
'R428FIRST' => $request->R428FIRST,
|
|
'R428FAMILY' => $request->R428FAMILY,
|
|
'R428EMAIL' => $request->R428EMAIL,
|
|
'R428EMPCDE' => $request->R428EMPCDE,
|
|
'R428ADMUSR' => $request->R428ADMUSR,
|
|
'R428PWRUSR' => $request->R428PWRUSR,
|
|
'MENU2OPT' => 'NN' . $request->MENU2OPT3 . 'NNN' . $request->MENU2OPT7 . $request->MENU2OPT8 . 'N',
|
|
'MENU3OPT' => $request->MENU3OPT1 . $request->MENU3OPT2 . 'NNNNNNN',
|
|
'MENU4OPT' => $request->MENU4OPT1 . $request->MENU4OPT2 . $request->MENU4OPT3 . 'NNNNNN',
|
|
'MENU5OPT' => $request->MENU5OPT1 . $request->MENU5OPT2 . $request->MENU5OPT3 . 'N' . $request->MENU5OPT5 . 'NNNN',
|
|
'MENU6OPT' => $request->MENU6OPT1 . $request->MENU6OPT2 . $request->MENU6OPT3,
|
|
'R42811A' => $request->R42811A,
|
|
];
|
|
if ($includeR42821A) {
|
|
$values['R42821A'] = $request->R42821A;
|
|
}
|
|
|
|
DB::connection(config('m3.connection', 'pgsql'))->table('icm428m')->insert($values);
|
|
}
|
|
|
|
//
|
|
// Process data from Edit modal
|
|
//
|
|
public static function saveUserEdit(Request $request)
|
|
{
|
|
|
|
if ($request->R428EMPCDE == '') {
|
|
$request->R428EMPCDE = 0;
|
|
}
|
|
|
|
// Validate employee code exists in LBPF file
|
|
// dump($request->R428EMPCDE);
|
|
// if($request->R428EMPCDE>0) {
|
|
// $sqlstmt="select count(*) as COUNT from LBPF where EMPNO='$request->R428EMPCDE'";
|
|
// #echo "$sqlstmt<br>";
|
|
// $empcde=DB::connection(config('m3.connection', 'pgsql'))->select($sqlstmt);
|
|
// #dump($empcde);
|
|
// if($empcde[0]->COUNT=="0") {
|
|
// #echo "<script>alert('Employee code entered does not exist, please try again');</script>";
|
|
// return "error empcd";
|
|
// }
|
|
// }
|
|
|
|
// Update record to ICM428M
|
|
|
|
$iCM428M = DB::connection(config('m3.connection', 'pgsql'))->select("select * from ICM428M where R428US='$request->R428US'");
|
|
|
|
DB::connection(config('m3.connection', 'pgsql'))->update("update ICM428M
|
|
set R428CO='$request->R428CO', R428PL='$request->R428PL', R428WH='$request->R428WH', R428STS='$request->R428STS', R428FIRST='$request->R428FIRST',
|
|
R428FAMILY='$request->R428FAMILY', R428EMAIL='$request->R428EMAIL', R428EMPCDE=$request->R428EMPCDE, R428ADMUSR='$request->R428ADMUSR',
|
|
R428PWRUSR='$request->R428PWRUSR',
|
|
MENU2OPT='" . substr($iCM428M[0]->MENU2OPT, 0, 2) . $request->MENU2OPT3 . substr($iCM428M[0]->MENU2OPT, 3, 3) . $request->MENU2OPT7 . $request->MENU2OPT8 . "',
|
|
MENU3OPT='" . $request->MENU3OPT1 . $request->MENU3OPT2 . substr($iCM428M[0]->MENU3OPT, 2, -1) . "',
|
|
MENU4OPT='" . $request->MENU4OPT1 . $request->MENU4OPT2 . $request->MENU4OPT3 . substr($iCM428M[0]->MENU4OPT, 3, -1) . "',
|
|
MENU5OPT='" . $request->MENU5OPT1 . $request->MENU5OPT2 . $request->MENU5OPT3 . substr($iCM428M[0]->MENU5OPT, 3, 1) . $request->MENU5OPT5 . substr($iCM428M[0]->MENU5OPT, 5, -1) . "',
|
|
MENU6OPT='" . $request->MENU6OPT1 . $request->MENU6OPT2 . $request->MENU6OPT3 . substr($iCM428M[0]->MENU6OPT, 3, -1) . "',
|
|
R42811A='" . $request->R42811A . "',R42821A='" . $request->R42821A . "'
|
|
where R428US='$request->R428US'");
|
|
|
|
return 'success';
|
|
|
|
}
|
|
|
|
// 590
|
|
public static function callCL(Request $request)
|
|
{
|
|
|
|
// connect to toolkit using DB2 credentials (can also leave blank for default authority)
|
|
try {
|
|
$conn = app(PostgresProgramBridge::class);
|
|
} catch (\Throwable $e) {
|
|
// Determine reason for failure.
|
|
// Probably database authentication error or invalid or unreachable database.
|
|
return self::programBridgeConnectionError($e);
|
|
}
|
|
|
|
// Add LIB
|
|
// $result = $conn->CLCommand('ADDLIBLE LIB(MPDAT10)');
|
|
|
|
// define several input/output params
|
|
$params = [];
|
|
|
|
// AddParameterChar($io, $size, $comment, $varName, $value, $varying, $dimension)
|
|
// Add Warehouse Param
|
|
$params[] = $conn->AddParameterChar('in', 10, 'userid', 'USERID', $request->USERID);
|
|
$params[] = $conn->AddParameterChar('in', 1, 'action', 'ACTION', $request->ACTION);
|
|
|
|
// AddParameterPackDec($io, $length, $scale, $comment, $varName, $value,$dimension)
|
|
// Add Delivery Note Param
|
|
|
|
// Start Time Tracking
|
|
// $start = microtime(true);
|
|
|
|
// Config::get('eproconf.misc.PGM1'), Config::get('eproconf.misc.libname4')
|
|
// ICM700C EWOBJTST ICM700C ICM700CSBM
|
|
$result = $conn->PgmCall('ICMCHGPRF', 'EWOBJ', $params, [], []);
|
|
|
|
if (! $result) {
|
|
echo "<script>alert(" . json_encode($conn->getErrorMsg()) . ");</script>";
|
|
|
|
return 'error';
|
|
}
|
|
// Successful Call
|
|
else {
|
|
if ($request->ACTION == 'P') {
|
|
echo "<script>alert('The password has been reset to QAZ1WSX2 for '" . $request->USERID . "'. The user will need to enter a new password on next green screen connection.');</script>";
|
|
}
|
|
if ($request->ACTION == 'R') {
|
|
echo "<script>alert('User '" . $request->USERID . "' has been re-enabled successfully');</script>";
|
|
}
|
|
echo "<script>window.location.replace('.')</script>";
|
|
}
|
|
|
|
// if ($pGMERRORS!="") {
|
|
// // return back()->withMessage('Can not Create PR: '.$pGMERRORS);
|
|
// dump($pGMERRORS);
|
|
// }
|
|
// else{
|
|
// // return $AWREQN;
|
|
// }
|
|
}
|
|
|
|
// 765
|
|
public static function savePassword(Request $request)
|
|
{
|
|
|
|
ini_set('max_execution_time', Config::get('arrays.PHPTimeOut'));
|
|
ini_set('max_input_time', Config::get('arrays.PHPTimeOut'));
|
|
ini_set('default_socket_timeout', Config::get('arrays.PHPTimeOut'));
|
|
|
|
// echo "B3<br>";
|
|
// connect to toolkit using DB2 credentials (can also leave blank for default authority)
|
|
try {
|
|
$conn = app(PostgresProgramBridge::class);
|
|
} catch (\Throwable $e) {
|
|
return self::programBridgeConnectionError($e);
|
|
}
|
|
|
|
$result = $conn->CLCommand('QSYS/CHGUSRPRF USRPRF(' . $request->R428US_PWD . ') PASSWORD(' . $request->NEW_PASSWORD . ') STATUS(*ENABLED) PWDEXP(*NO)');
|
|
|
|
if (! $result) {
|
|
dump($conn->getErrorMsg());
|
|
echo "<script>alert(" . json_encode($conn->getErrorMsg()) . ");</script>";
|
|
|
|
return 'error pwd';
|
|
}
|
|
// Successful Call
|
|
else {
|
|
return 'success';
|
|
}
|
|
|
|
}
|
|
|
|
private static function programBridgeConnectionError(\Throwable $exception): string
|
|
{
|
|
$code = (int) $exception->getCode();
|
|
|
|
return match ($code) {
|
|
8001 => 'error profile3',
|
|
42705 => 'error profile4',
|
|
default => 'error profile5',
|
|
};
|
|
}
|
|
}
|