|
<?php
|
|
/*
|
|
** Job Arranger Manager
|
|
** Copyright (C) 2023 Daiwa Institute of Research Ltd. All Rights Reserved.
|
|
**
|
|
** Licensed to the Apache Software Foundation (ASF) under one or more
|
|
** contributor license agreements. See the NOTICE file distributed with
|
|
** this work for additional information regarding copyright ownership.
|
|
** The ASF licenses this file to you under the Apache License, Version 2.0
|
|
** (the "License"); you may not use this file except in compliance with
|
|
** the License. You may obtain a copy of the License at
|
|
**
|
|
** http://www.apache.org/licenses/LICENSE-2.0
|
|
**
|
|
** Unless required by applicable law or agreed to in writing, software
|
|
** distributed under the License is distributed on an "AS IS" BASIS,
|
|
** WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
** See the License for the specific language governing permissions and
|
|
** limitations under the License.
|
|
**
|
|
**/
|
|
|
|
namespace App\Controllers;
|
|
|
|
use Rakit\Validation\Validator;
|
|
use App\Services\ObjectLockService;
|
|
use App\Services\ObjectDetailService;
|
|
use App\Models\JobnetModel;
|
|
use App\Models\UserModel;
|
|
use App\Models\IndexModel;
|
|
use App\Models\HostModel;
|
|
use App\Models\DefineValueJobControlModel;
|
|
use App\Models\DefineExtendedJobModel;
|
|
use App\Models\FlowModel;
|
|
use App\Models\RunJobnetModel;
|
|
use App\Exceptions\JobnetNotExecutableException;
|
|
use App\Models\CalendarModel;
|
|
use App\Models\ObjectLockModel;
|
|
use App\Utils\Controller;
|
|
use App\Utils\Core;
|
|
use App\Utils\Constants;
|
|
use App\Utils\Util;
|
|
use Exception;
|
|
use PDOException;
|
|
|
|
/**
|
|
* This controller is used to manage the jobnet.
|
|
*
|
|
* @version 6.1.0
|
|
* @since Class available since version 6.1.0
|
|
*/
|
|
class Jobnet extends Controller
|
|
{
|
|
|
|
/**
|
|
* @var ObjectLockService
|
|
*/
|
|
private $objectLockService;
|
|
/**
|
|
* @var ObjectDetailService
|
|
*/
|
|
private $objectDetailService;
|
|
/**
|
|
* @var JobnetModel
|
|
*/
|
|
private $jobnetModel;
|
|
/**
|
|
* @var CalendarModel
|
|
*/
|
|
private $calendarModel;
|
|
/**
|
|
* @var UserModel
|
|
*/
|
|
private $userModel;
|
|
/**
|
|
* @var IndexModel
|
|
*/
|
|
private $indexModel;
|
|
/**
|
|
* @var HostModel
|
|
*/
|
|
private $hostModel;
|
|
/**
|
|
* @var DefineValueJobControlModel
|
|
*/
|
|
private $defineValueJobControlModel;
|
|
/**
|
|
* @var DefineExtendedJobModel
|
|
*/
|
|
private $defineExtendedJobModel;
|
|
/**
|
|
* @var ObjectLockModel
|
|
*/
|
|
private $objectLockModel;
|
|
/**
|
|
* @var FlowModel
|
|
*/
|
|
private $flowModel;
|
|
/**
|
|
* @var RunJobnetModel
|
|
*/
|
|
private $runJobnetModel;
|
|
/**
|
|
* @var Util
|
|
*/
|
|
private $util;
|
|
|
|
/**
|
|
* @var Validator
|
|
*/
|
|
|
|
|
|
public function __construct()
|
|
{
|
|
parent::__construct();
|
|
$this->objectLockService = new ObjectLockService();
|
|
$this->objectDetailService = new ObjectDetailService();
|
|
$this->jobnetModel = new JobnetModel();
|
|
$this->calendarModel = new CalendarModel();
|
|
$this->userModel = new UserModel();
|
|
$this->indexModel = new IndexModel();
|
|
$this->hostModel = new HostModel();
|
|
$this->defineValueJobControlModel = new DefineValueJobControlModel();
|
|
$this->defineExtendedJobModel = new DefineExtendedJobModel();
|
|
$this->objectLockModel = new ObjectLockModel();
|
|
$this->flowModel = new FlowModel();
|
|
$this->runJobnetModel = new RunJobnetModel();
|
|
$this->objectLockService->changeServiceLevel(Constants::SUB_SERVICE);
|
|
$this->objectDetailService->changeServiceLevel(Constants::SUB_SERVICE);
|
|
$this->util = new Util();
|
|
$this->logger = Core::logger();
|
|
$this->validator = new Validator();
|
|
}
|
|
|
|
/**
|
|
* api endpoint that retrieves init data to create jobnet.
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function initCreate(): void
|
|
{
|
|
$this->logger->info('Jobnet create initialization process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
try {
|
|
$json = file_get_contents('php://input');
|
|
$params = Util::jsonDecode($json)["params"];
|
|
$validation = $this->validator->validate($params, [
|
|
'type' => 'required'
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, [Constants::API_RESPONSE_MESSAGE => $errors->firstOfAll()]);
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . implode(", ", $errors->firstOfAll()), ['controller' => __METHOD__]);
|
|
} else {
|
|
$lastid = $this->indexModel->getNextIdAndIncrease(Constants::COUNT_ID_JOBNET);
|
|
$response = [
|
|
'lastid' => $lastid->nextid,
|
|
'type' => 'create',
|
|
'editable' => 1
|
|
];
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $response]);
|
|
}
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
$this->logger->info('Jobnet create initialization process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that retrieves init data for edit/new object/new version.
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function initEdit(): void
|
|
{
|
|
$this->logger->info('Jobnet edit initialization process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
try {
|
|
$json = file_get_contents('php://input');
|
|
$params = Util::jsonDecode($json)["params"];
|
|
$validator = $this->validator;
|
|
$validation = $this->validator->validate($params, [
|
|
'type' => [
|
|
'required',
|
|
$validator('in', [Constants::OBJECT_FORM_CREATE, Constants::OBJECT_FORM_EDIT, Constants::OBJECT_FORM_NEW_OBJECT, Constants::OBJECT_FORM_NEW_VERSION, Constants::OBJECT_TYPE_SCHEDULE_STRING])
|
|
],
|
|
'id' => 'required',
|
|
'date' => 'required',
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, [Constants::API_RESPONSE_MESSAGE => $errors->firstOfAll()]);
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . implode(", ", $errors->firstOfAll()), ['controller' => __METHOD__]);
|
|
} else {
|
|
$id = $params['id'];
|
|
$updateDate = $params['date'];
|
|
$detail = null;
|
|
if ($params['type'] == Constants::OBJECT_TYPE_SCHEDULE_STRING) {
|
|
$detail = $this->jobnetModel->GetValidORMaxUpdateDateJobnetById($params['id']);
|
|
$updateDate = $detail->update_date;
|
|
} else {
|
|
// $this->logger->info("type edit", $id);
|
|
$detail = $this->objectDetailService->getSingleObject($id, Constants::OBJECT_TYPE_JOBNET, $updateDate);
|
|
}
|
|
// $this->logger->info("Detail for init edit", $detail);
|
|
if ($detail == Constants::SERVICE_MESSAGE_ITEM_NOT_FOUND) {
|
|
$this->logger->info("Editing data is not found", ['controller' => __METHOD__]);
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, $this->util->createResponseJson(Constants::DETAIL_OBJECT_NOT_FOUND));
|
|
return;
|
|
}
|
|
$graphData = $this->graphData($id, $updateDate);
|
|
if ($params["type"] == Constants::OBJECT_FORM_NEW_OBJECT) {
|
|
$editable = 1;
|
|
$authrority = true;
|
|
$tmplastid = $id . "_NEW_OBJECT_" . $this->indexModel->getNextNewObjectId($id, Constants::COUNT_ID_JOBNET);
|
|
if (!$this->checkValid($detail, Constants::OBJ_VALID_PROC)) {
|
|
$authrority = false;
|
|
$editable = 0;
|
|
}
|
|
|
|
$response = [
|
|
'lastid' => $tmplastid,
|
|
'urlid' => $id,
|
|
'type' => $params["type"],
|
|
'detail' => $detail,
|
|
'editable' => $editable,
|
|
'authority' => $authrority,
|
|
'isLocked' => 0,
|
|
];
|
|
} elseif ($params["type"] == Constants::OBJECT_FORM_EDIT || $params["type"] == Constants::OBJECT_FORM_NEW_VERSION || $params["type"] == Constants::OBJECT_FORM_NEW_VERSION || $params["type"] == Constants::OBJECT_FORM_SCHEDULE) {
|
|
$editable = $this->objectLockService->isEditable($detail, Constants::OBJECT_TYPE_JOBNET, ($params["type"] == Constants::OBJECT_FORM_NEW_VERSION)) == Constants::SERVICE_MESSAGE_EDITABLE ? 1 : 0;
|
|
$this->logger->info('#3805 => editable in [initEdit]'. print_r($editable, true));
|
|
$this->logger->info('#3805 => detail in [initEdit]'. print_r($detail, true));
|
|
$authrority = $this->checkValid($detail, Constants::OBJ_VALID_PROC) ? true : false;
|
|
$isLocked = 0;
|
|
$isLock = $this->objectLockService->process((object) ["objectId" => $id, "objectType" => Constants::OBJECT_TYPE_JOBNET, "attemptIp" => $this->objectLockService->getClientIpAddress()], Constants::SERVICE_TYPE_CHECK, true);
|
|
if ($isLock != Constants::SERVICE_MESSAGE_OBJ_NOT_LOCK && $params["type"] != Constants::OBJECT_FORM_NEW_OBJECT && $isLock != Constants::SERVICE_MESSAGE_OBJ_LOCK_USER_SAME) {
|
|
$isLocked = 1;
|
|
}
|
|
|
|
$response = [
|
|
'detail' => $detail,
|
|
'type' => $params["type"],
|
|
'editable' => $editable,
|
|
'isLocked' => $isLocked,
|
|
'authority' => $authrority,
|
|
];
|
|
}
|
|
|
|
$response = array_merge($response, $graphData);
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $response]);
|
|
}
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
$this->logger->info('Jobnet edit initialization process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that retrieves init data for sub jobnet
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function initSubJobnet(): void
|
|
{
|
|
$this->logger->info('Sub jobnet initialization process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
try {
|
|
$json = file_get_contents('php://input');
|
|
|
|
$params = Util::jsonDecode($json)["params"];
|
|
|
|
$validation = $this->validator->validate($params, [
|
|
'id' => 'required',
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, [Constants::API_RESPONSE_MESSAGE => $errors->firstOfAll()]);
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . implode(", ", $errors->firstOfAll()), ['controller' => __METHOD__]);
|
|
} else {
|
|
|
|
$id = $params['id'];
|
|
$detail = $this->getValidORMaxUpdateDateEntityById($id);
|
|
if ($detail == false) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_MESSAGE_ITEM_NOT_FOUND]);
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_ITEM_NOT_FOUND, ['controller' => __METHOD__]);
|
|
return;
|
|
}
|
|
|
|
$graphData = $this->graphData($id, $detail->update_date);
|
|
|
|
$editable = $this->objectLockService->isEditable($detail, Constants::OBJECT_TYPE_JOBNET) == Constants::SERVICE_MESSAGE_EDITABLE ? 1 : 0;
|
|
|
|
$locked = $this->objectLockService->process((object) ["objectId" => $id, "objectType" => Constants::OBJECT_TYPE_JOBNET, "attemptIp" => $this->objectLockService->getClientIpAddress()], Constants::SERVICE_TYPE_CHECK, true);
|
|
|
|
$isLocked = 0;
|
|
if ($locked != Constants::SERVICE_MESSAGE_OBJ_LOCK_USER_SAME && $locked != Constants::SERVICE_MESSAGE_OBJ_NOT_LOCK) {
|
|
$isLocked = 1;
|
|
}
|
|
|
|
$authrority = $this->checkValid($detail, Constants::OBJ_VALID_PROC) ? true : false;
|
|
|
|
$response = [
|
|
'detail' => $detail,
|
|
'type' => Constants::OBJECT_FORM_EDIT,
|
|
'editable' => $editable,
|
|
'authority' => $authrority,
|
|
'isLocked' => $isLocked
|
|
];
|
|
|
|
$response = array_merge($response, $graphData);
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $response]);
|
|
}
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
$this->logger->info('Sub jobnet initialization process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* It checks the object is valid or not.
|
|
*
|
|
* @return bool|string could be an bool if it is success, could be a string if not.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
private function checkValid(object $detail, string $action)
|
|
{
|
|
try {
|
|
$this->logger->info('#3805 => start to call isValid method of objectLockService');
|
|
$valid = $this->objectLockService->isValid($detail, $action);
|
|
$this->logger->info('#3805 => passed to call isValid method of objectLockService : '. print_r($valid, true));
|
|
return $valid;
|
|
} catch (PDOException $e) {
|
|
$this->logger->info('#3805 => PDOException in isValid method of ObjectLockService : ' . $e->getMessage());
|
|
throw new PDOException($e->getMessage());
|
|
}
|
|
$this->logger->info('Check jobnet valid process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* It redirects to object_version screen.
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function version()
|
|
{
|
|
$this->logger->info('Select jobnet version process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
if (!isset($_GET['id'])) {
|
|
$responseData = $this->util->createResponseJson(Constants::DETAIL_BAD_REQUEST, "");
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, $responseData);
|
|
exit;
|
|
}
|
|
try {
|
|
$detail = $this->jobnetModel->detail($_GET['id'], null);
|
|
$editable = 0;
|
|
if (sizeof($detail) <= 0) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, Constants::API_RESPONSE_NOT_FOUND);
|
|
exit;
|
|
}
|
|
if ($this->objectLockService->isEditable($detail[0], Constants::OBJECT_TYPE_JOBNET, true) == Constants::SERVICE_MESSAGE_EDITABLE) {
|
|
$editable = 1;
|
|
}
|
|
|
|
$data = [
|
|
'datas' => $detail,
|
|
'page_type' => "jobnet",
|
|
'edit' => $editable
|
|
];
|
|
if (!is_array($data)) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, Constants::API_RESPONSE_NOT_FOUND);
|
|
exit;
|
|
} else {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, $data);
|
|
}
|
|
} catch (PDOException $e) {
|
|
$responseData = $this->util->createResponseJson(Constants::DETAIL_SERVER_ERROR, $_GET['id']);
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, Constants::API_RESPONSE_NOT_FOUND);
|
|
}
|
|
$this->logger->info('Select jobnet version process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that retrieves available host
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function getAvailableHosts()
|
|
{
|
|
$this->logger->info('Get host data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
try {
|
|
if ($_SESSION['userInfo']['userType'] == Constants::USER_TYPE_SUPER) {
|
|
$hosts = $this->hostModel->getHostDataSuper();
|
|
} else {
|
|
$hosts = $this->hostModel->getHostData($_SESSION['userInfo']['userName']);
|
|
}
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $hosts]);
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
$this->logger->info('Get host data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that retrieves define value job control
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function getDefineValueJobControl()
|
|
{
|
|
$this->logger->info('Get define value job control process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
try {
|
|
$defineValueJobControl = $this->defineValueJobControlModel->getDefineValueJobControlVariable();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $defineValueJobControl]);
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
$this->logger->info('Get define value job control process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that retrieves define extended job
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function getDefineExtendedJob()
|
|
{
|
|
$this->logger->info('Get define extended job data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
try {
|
|
$defineExtendJob = $this->defineExtendedJobModel->getDefineExtendedJob($_SESSION['userInfo']['userLangFull']);
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $defineExtendJob]);
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
$this->logger->info('Get define extended job data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that retrieves jobnet list for task icon
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function getJobnetList()
|
|
{
|
|
$this->logger->info('Get jobnet list process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
try {
|
|
if ($_SESSION['userInfo']['userType'] == Constants::USER_TYPE_SUPER) {
|
|
$jobnetList = $this->jobnetModel->getInfoByUserIdSuper();
|
|
} else {
|
|
$jobnetList = $this->jobnetModel->getInfoByUserId($_SESSION['userInfo']['userId']);
|
|
}
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $jobnetList]);
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
$this->logger->info('Get jobnet list process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that retrieves host group
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function getHostGroup()
|
|
{
|
|
$this->logger->info('Get host group process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
try {
|
|
if ($_SESSION['userInfo']['userType'] == Constants::USER_TYPE_SUPER) {
|
|
$hostGroup = $this->hostModel->getHostGroup();
|
|
} else {
|
|
$hostGroup = $this->hostModel->getHostGroupByUserName($_SESSION['userInfo']['userName']);
|
|
}
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $hostGroup]);
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
$this->logger->info('Get host group process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* It retrieves the valid object or maximum updated date object
|
|
*
|
|
* @throws PDOException
|
|
* @return object | string
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
private function getValidORMaxUpdateDateEntityById(string $jobnetId)
|
|
{
|
|
try {
|
|
$data = $this->jobnetModel->getValidEntityById($jobnetId);
|
|
if ($data) {
|
|
return $data;
|
|
}
|
|
$data = $this->jobnetModel->GetMaxUpdateDateEntityById($jobnetId);
|
|
return $data;
|
|
} catch (PDOException $e) {
|
|
throw new PDOException($e->getMessage());
|
|
}
|
|
$this->logger->info('Get valid jobnet or max updated date jobnet process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* It retrieves the data for jobnet graph of opened jobnet.
|
|
*
|
|
* @throws PDOException
|
|
* @return array | string
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
private function graphData(string $id, string $updateDate)
|
|
{
|
|
try {
|
|
$jobControlData = $this->jobnetModel->getJobControlData($id, $updateDate);
|
|
$flowData = $this->jobnetModel->getFlowData($id, $updateDate);
|
|
$iconData = array();
|
|
foreach ($jobControlData as $key => $job) {
|
|
$icon = null;
|
|
switch ($job->job_type) {
|
|
case Constants::ICON_TYPE_END:
|
|
$endIconSetting = $this->jobnetModel->getEndIconData($id, $job->job_id, $updateDate);
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $endIconSetting ? $endIconSetting[0] : null
|
|
];
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_CONDITIONAL_START:
|
|
$startIconSetting = $this->jobnetModel->getConditionalBranchIconData($id, $job->job_id, $updateDate);
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $startIconSetting ? $startIconSetting[0] : null
|
|
];
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_JOB_CONTROL_VARIABLE:
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $this->jobnetModel->getJobControlValueIconData($id, $job->job_id, $updateDate)
|
|
];
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_JOB:
|
|
$jobIconSetting = $this->jobnetModel->getJobIconData($id, $job->job_id, $updateDate);
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $jobIconSetting ? $jobIconSetting[0] : null,
|
|
'valueJob' => $this->jobnetModel->getValueJobData($id, $job->job_id, $updateDate),
|
|
'valueJobControl' => $this->jobnetModel->getValueJobControlData($id, $job->job_id, $updateDate),
|
|
'jobCommand' => $this->jobnetModel->getJobCommandData($id, $job->job_id, $updateDate)
|
|
];
|
|
|
|
if (!$this->util->IsNullOrEmptyString($icon['jobData']->run_user_password)) {
|
|
if (!$this->util->startsWith($icon['jobData']->run_user_password, '2')) {
|
|
$icon['jobData']->run_user_password = $this ->util->getStringFromPass($icon['jobData']->run_user_password);
|
|
} else {
|
|
$icon['jobData']->run_user_password = $this->util->decryptPassword($icon['jobData']->run_user_password);
|
|
}
|
|
}
|
|
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_JOBNET:
|
|
$jobnetIconSetting = $this->jobnetModel->getJobnetIconData($id, $job->job_id, $updateDate);
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $jobnetIconSetting ? $jobnetIconSetting[0] : null
|
|
];
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_EXTENDED_JOB:
|
|
$extendedIconSetting = $this->jobnetModel->getExtendedIcon($id, $job->job_id, $updateDate);
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $extendedIconSetting ? $extendedIconSetting[0] : null
|
|
];
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_CALCULATION:
|
|
$calIconSetting = $this->jobnetModel->getCalculationIcon($id, $job->job_id, $updateDate);
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $calIconSetting ? $calIconSetting[0] : null
|
|
];
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_TASK:
|
|
$taskIconSetting = $this->jobnetModel->getTaskIcon($id, $job->job_id, $updateDate);
|
|
$jobnetInfo = $this->getValidORMaxUpdateDateEntityById($taskIconSetting[0]->submit_jobnet_id);
|
|
$taskIconSetting[0]->jobnet_name = $jobnetInfo->jobnet_name;
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $taskIconSetting ? $taskIconSetting[0] : null
|
|
];
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_INFO:
|
|
$infoIconSetting = $this->jobnetModel->getInfoIcon($id, $job->job_id, $updateDate);
|
|
if (count($infoIconSetting) > 0) {
|
|
$infoIconSetting = json_decode(json_encode($infoIconSetting[0]), true);
|
|
if ($infoIconSetting["info_flag"] == 0) {
|
|
$infoIconSetting["calendar_name"] = null;
|
|
} else {
|
|
$calendarData = $this->calendarModel->getValidORMaxUpdateDateEntityById($infoIconSetting["get_calendar_id"]);
|
|
if($calendarData != false){
|
|
$infoIconSetting["calendar_name"] = $calendarData->calendar_name;
|
|
}
|
|
}
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $infoIconSetting ? $infoIconSetting : null
|
|
];
|
|
} else {
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => null
|
|
];
|
|
}
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_FILE_COPY:
|
|
$fileCopyIconSetting = $this->jobnetModel->getFileTransferIcon($id, $job->job_id, $updateDate);
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $fileCopyIconSetting ? $fileCopyIconSetting[0] : null
|
|
];
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_FILE_WAIT:
|
|
$fileWaitIconSetting = $this->jobnetModel->getFileWaitIcon($id, $job->job_id, $updateDate);
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $fileWaitIconSetting ? $fileWaitIconSetting[0] : null
|
|
];
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_REBOOT:
|
|
$rebootIconSetting = $this->jobnetModel->getRebootIcon($id, $job->job_id, $updateDate);
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $rebootIconSetting ? $rebootIconSetting[0] : null
|
|
];
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_RELEASE:
|
|
$releaseIconSetting = $this->jobnetModel->getReleaseHoldIcon($id, $job->job_id, $updateDate);
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $releaseIconSetting ? $releaseIconSetting[0] : null
|
|
];
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_AGENT_LESS:
|
|
$agentLessIconSetting = $this->jobnetModel->getAgentLessIcon($id, $job->job_id, $updateDate);
|
|
if (count($agentLessIconSetting) > 0) {
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $agentLessIconSetting ? $agentLessIconSetting[0] : null
|
|
];
|
|
|
|
if (!$this->util->IsNullOrEmptyString($icon['iconSetting']->login_password)) {
|
|
if (!$this->util->startsWith($icon['iconSetting']->login_password, '2')) {
|
|
$loginPW = $this ->util->getStringFromPass($icon['iconSetting']->login_password);
|
|
} else {
|
|
$loginPW = $this->util->decryptPassword($icon['iconSetting']->login_password);
|
|
}
|
|
|
|
if(strpos($loginPW, '|') != false){
|
|
$strPass = explode("|", $loginPW);
|
|
$loginPW = $strPass[1];
|
|
}
|
|
$icon['iconSetting']->login_password = $loginPW;
|
|
}
|
|
} else {
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => null
|
|
];
|
|
}
|
|
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_ZABBIX:
|
|
$zabbixIconSetting = $this->jobnetModel->getzabbixIcon($id, $job->job_id, $updateDate);
|
|
$icon = [
|
|
'jobData' => $job,
|
|
'iconSetting' => $zabbixIconSetting ? $zabbixIconSetting[0] : null
|
|
];
|
|
break;
|
|
|
|
default:
|
|
$icon = [
|
|
'jobData' => $job,
|
|
];
|
|
}
|
|
array_push($iconData, $icon);
|
|
}
|
|
$data = [
|
|
'jobs' => $iconData,
|
|
'flows' => $flowData
|
|
];
|
|
$this->logger->info('Get graph data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return $data;
|
|
} catch (PDOException $e) {
|
|
throw new PDOException($e->getMessage());
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* api endpoint that retrieves host names
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function selectHostName()
|
|
{
|
|
$this->logger->info('Select host names process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
$json = file_get_contents('php://input');
|
|
$params = Util::jsonDecode($json)["params"];
|
|
$validation = $this->validator->validate($params, [
|
|
'groupid' => 'required',
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, [Constants::API_RESPONSE_MESSAGE => $errors->firstOfAll()]);
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . implode(", ", $errors->firstOfAll()), ['controller' => __METHOD__]);
|
|
} else {
|
|
// get host data by zabbix api
|
|
// $method = "host.get";
|
|
// if ($params['groupid'] == 0) {
|
|
// $param = [
|
|
// 'output' => ["host"]
|
|
// ];
|
|
// } else {
|
|
// $param = [
|
|
// 'output' => ["host"],
|
|
// 'groupids' => $params['groupid']
|
|
// ];
|
|
// }
|
|
// $result = json_decode(ZabbixApi::RequestApi($method, $param));
|
|
// if (isset($result->error)) {
|
|
// if ($result->error->data == Constants::ZABBIX_SESSION_EXPIRED_ERROR) {
|
|
// echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, [Constants::API_RESPONSE_MESSAGE => "[Zabbix] " . Constants::ZABBIX_SESSION_EXPIRED_ERROR]);
|
|
// } else {
|
|
// echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => $result->error->data]);
|
|
// }
|
|
// } else {
|
|
// echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $result->result]);
|
|
// }
|
|
|
|
if ($params['groupid'] == 0) {
|
|
$hostGroup = $this->hostModel->getHostGroup();
|
|
$hostGroupCount = count($hostGroup);
|
|
$hostNameResult = [];
|
|
$tmpHostArray = [];
|
|
for ($i = 0; $i < $hostGroupCount; $i++) {
|
|
$hostNameData = $this->getHostName($hostGroup[$i]->groupid);
|
|
$hostNameCount = count($hostNameData);
|
|
if ($hostNameCount > 0) {
|
|
for ($j = 0; $j < $hostNameCount; $j++) {
|
|
if(!in_array($hostNameData[$j]->host, $tmpHostArray)){
|
|
array_push($hostNameResult, $hostNameData[$j]);
|
|
array_push($tmpHostArray, $hostNameData[$j]->host);
|
|
}
|
|
|
|
}
|
|
}
|
|
}
|
|
} else {
|
|
$hostNameResult = $this->getHostName($params['groupid']);
|
|
}
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $hostNameResult]);
|
|
}
|
|
$this->logger->info('Select host name process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* It changes the valid flag of the object_version
|
|
*
|
|
* @param object $para send data from the browser.
|
|
* @return array|string could be an array if it is success, could be a string if not.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
private function getHostName($groupdId)
|
|
{
|
|
|
|
try {
|
|
if ($_SESSION['userInfo']['userType'] == Constants::USER_TYPE_SUPER) {
|
|
$hostGroup = $this->hostModel->getHostNameByGroupIdForSuper($groupdId);
|
|
} else {
|
|
$hostGroup = $this->hostModel->getHostNameByGroupId($groupdId, $_SESSION['userInfo']['userName']);
|
|
}
|
|
return $hostGroup;
|
|
} catch (PDOException $e) {
|
|
return Constants::SERVICE_INTERNAL_SERVER_ERROR;
|
|
}
|
|
$this->logger->info('jobnet version Disable process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that retrieves items
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function selectItem()
|
|
{
|
|
$this->logger->info('Select Items process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
$json = file_get_contents('php://input');
|
|
$params = Util::jsonDecode($json)["params"];
|
|
$validation = $this->validator->validate($params, [
|
|
'hostid' => 'required',
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, [Constants::API_RESPONSE_MESSAGE => $errors->firstOfAll()]);
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . implode(", ", $errors->firstOfAll()), ['controller' => __METHOD__]);
|
|
} else {
|
|
// $method = "item.get";
|
|
// $param = [
|
|
// 'output' => ["itemid", "name"],
|
|
// "sortfield" => "itemid",
|
|
// 'hostids' => $params['hostid']
|
|
// ];
|
|
|
|
// $result = json_decode(ZabbixApi::RequestApi($method, $param));
|
|
|
|
// if (isset($result->error)) {
|
|
// if ($result->error->data == Constants::ZABBIX_SESSION_EXPIRED_ERROR) {
|
|
// echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, [Constants::API_RESPONSE_MESSAGE => "[Zabbix] " . Constants::ZABBIX_SESSION_EXPIRED_ERROR]);
|
|
// } else {
|
|
// echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => $result->error->data]);
|
|
// }
|
|
// } else {
|
|
// echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $result->result]);
|
|
// }
|
|
|
|
$items = $this->jobnetModel->getItem($params['hostid']);
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $items]);
|
|
}
|
|
$this->logger->info('Select items process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that retrieves triggers
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function selectTrigger()
|
|
{
|
|
$this->logger->info('Select triggers process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
$json = file_get_contents('php://input');
|
|
$params = Util::jsonDecode($json)["params"];
|
|
$validation = $this->validator->validate($params, [
|
|
'hostid' => 'required',
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, [Constants::API_RESPONSE_MESSAGE => $errors->firstOfAll()]);
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . implode(", ", $errors->firstOfAll()), ['controller' => __METHOD__]);
|
|
} else {
|
|
// $method = "trigger.get";
|
|
// $param = [
|
|
// "output" => ["triggerid", "expression", "description"],
|
|
// "hostids" => $params['hostid'],
|
|
// "selectFunctions" => "extend",
|
|
// "selectItems" => ["key_"],
|
|
// "sortfield" => "triggerid",
|
|
// ];
|
|
|
|
// $result = json_decode(ZabbixApi::RequestApi($method, $param));
|
|
|
|
// if (isset($result->error)) {
|
|
// if ($result->error->data == Constants::ZABBIX_SESSION_EXPIRED_ERROR) {
|
|
// echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, [Constants::API_RESPONSE_MESSAGE => "[Zabbix] " . Constants::ZABBIX_SESSION_EXPIRED_ERROR]);
|
|
// } else {
|
|
// echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => $result->error->data]);
|
|
// }
|
|
// } else {
|
|
// echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $result->result]);
|
|
// }
|
|
|
|
$triggers = $this->jobnetModel->getTrigger($params['hostid']);
|
|
$triggerCount = count($triggers);
|
|
$newTriggers = $this->setConditionalExpression($triggers);
|
|
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $newTriggers]);
|
|
}
|
|
$this->logger->info('Select triggers process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* It set the conditional exprssion for trigger
|
|
*
|
|
* @param array $triggers
|
|
* @return array|string could be an array if it is success, could be a string if not.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
private function setConditionalExpression($triggers)
|
|
{
|
|
|
|
$triggerCount = count($triggers);
|
|
for ($i = 0; $i < $triggerCount; $i++) {
|
|
|
|
$strExpression = $triggers[$i]->expression;
|
|
$strWkExpression = $strExpression;
|
|
|
|
$foundIndex = strpos($strWkExpression, '{');
|
|
while (!is_bool($foundIndex)) {
|
|
$strFunctionid = substr($strWkExpression, $foundIndex, strpos($strWkExpression, "}") - $foundIndex + 1);
|
|
$strWkFunctionid = $strFunctionid;
|
|
|
|
$strFuncArr = str_split($strFunctionid, 1);
|
|
if (is_numeric($strFuncArr[1])) {
|
|
$strWkFunctionid = substr($strWkFunctionid, 1, strlen($strWkFunctionid) - 2);
|
|
$triggerExpressionResult = $this->jobnetModel->getTriggerExpression($strWkFunctionid);
|
|
$strHost = $triggerExpressionResult[0]->host;
|
|
$strKey = $triggerExpressionResult[0]->key_;
|
|
$strFunction = $triggerExpressionResult[0]->name;
|
|
$strParameter = $triggerExpressionResult[0]->parameter;
|
|
|
|
$strConditionalExpression = "{" . $strHost . ":" . $strKey . "." . $strFunction . "(" . $strParameter . ")" . "}";
|
|
|
|
$strExpression = str_replace($strFunctionid, $strConditionalExpression, $strExpression);
|
|
}
|
|
|
|
$strWkExpression = str_replace($strFunctionid, "AA22", $strWkExpression);
|
|
$foundIndex = strpos($strWkExpression, '{');
|
|
}
|
|
$triggerArr = json_decode(json_encode($triggers[$i]), true);
|
|
$triggerArr["conditonalExpression"] = $triggers[$i]->description . "(" . $strExpression . ")";
|
|
$triggers[$i] = json_decode(json_encode($triggerArr), false);
|
|
}
|
|
$this->logger->info('Set conditional expression process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return $triggers;
|
|
}
|
|
|
|
/**
|
|
* api endpoint that retrieves available jobnet options to create sub jobnet
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function getJobnetOption()
|
|
{
|
|
$this->logger->info('Get jobnet option process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
try {
|
|
$json = file_get_contents('php://input');
|
|
|
|
$params = Util::jsonDecode($json)["params"];
|
|
|
|
$jobnetId = isset($params["ignoreJobnetId"]) ? $params["ignoreJobnetId"] : null;
|
|
$publicJobnet = $this->jobnetModel->getData(Constants::PUBLIC_FLAG, "", $jobnetId);
|
|
$privateJobnet = $this->jobnetModel->getData(Constants::PRIVATE_FLAG, "", $jobnetId);
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => ['public' => $publicJobnet, 'private' => $privateJobnet]]);
|
|
} catch (PDOException $e) {
|
|
echo $this->response->errorInternalError(Constants::SERVICE_INTERNAL_SERVER_ERROR);
|
|
}
|
|
|
|
$this->logger->info('Get jobnet option process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that change valid status of the jobnet object version
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function changeValidVersion()
|
|
{
|
|
$this->logger->info('Change valid version process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$json = file_get_contents('php://input');
|
|
$request = json_decode($json);
|
|
$validationReq = (array)$request;
|
|
$validation = $this->validator->validate((array)$validationReq["params"], [
|
|
'updatedDate' => 'required',
|
|
'category' => 'required',
|
|
'validFlag' => 'required',
|
|
'objectId' => 'required',
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
$responseData = $this->util->createResponseJson(Constants::DETAIL_BAD_REQUEST, "", $errors->firstOfAll());
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, $responseData);
|
|
exit;
|
|
}
|
|
$this->logger->info('#3805 => start to call changeValidVersionService');
|
|
$result = $this->changeValidVersionService($request);
|
|
if (!is_array($result)) {
|
|
//resultstring->json
|
|
//get data from json -> error
|
|
//
|
|
$this->logger->info('#3805 => failed to call changeValidVersionService');
|
|
$data = $this->util->createResponseJson(Constants::DETAIL_SERVER_ERROR, "");
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, $data);
|
|
} else {
|
|
if ($result[Constants::AJAX_MESSAGE_DETAIL] == Constants::DETAIL_SUCCESS) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, $result);
|
|
} else if ($result[Constants::AJAX_MESSAGE_DETAIL] == Constants::DETAIL_SERVER_ERROR) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, $result);
|
|
} else {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, $result);
|
|
}
|
|
}
|
|
$this->logger->info('Change valid version process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
|
|
/**
|
|
* It changes the valid flag of the object_version
|
|
*
|
|
* @param object $para send data from the browser.
|
|
* @return array|string could be an array if it is success, could be a string if not.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
private function changeValidVersionService($para)
|
|
{
|
|
try {
|
|
$this->beginTransaction();
|
|
$objectId = $para->params->objectId;
|
|
$updateDate = $para->params->updatedDate;
|
|
$curValidFlag = $para->params->validFlag;
|
|
$detail = $this->jobnetModel->each($objectId, $updateDate);
|
|
|
|
if ($detail == false) {
|
|
$this->rollback();
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_DB_LOCK, $objectId);
|
|
return $data;
|
|
} else {
|
|
if ($this->checkLatest($objectId, $updateDate, $detail) == false) {
|
|
$this->rollback();
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_NOT_LAST_UPDATED, $objectId);
|
|
return $data;
|
|
}
|
|
}
|
|
$isLock = $this->objectLockService->process((object) ["objectId" => $objectId, "objectType" => Constants::OBJECT_TYPE_JOBNET, "attemptIp" => $this->objectLockService->getClientIpAddress()], Constants::SERVICE_TYPE_CHECK, true);
|
|
|
|
$this->logger->info('#3805 => start to call checkValid method');
|
|
if (!$this->checkValid($detail, Constants::OBJ_VALID_PROC)) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_PERMIT, $objectId);
|
|
$this->logger->info('#3805 => failded to check Validation : '. print_r($data, true));
|
|
$this->rollback();
|
|
return $data;
|
|
} else if ($isLock == Constants::SERVICE_MESSAGE_OBJ_LOCK_BY_OTHERS) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_LOCK, $objectId);
|
|
$this->rollback();
|
|
return $data;
|
|
} else if ($isLock == Constants::SERVICE_INTERNAL_SERVER_ERROR) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_SERVER_ERROR, $objectId);
|
|
$this->rollback();
|
|
return $data;
|
|
}
|
|
//check for related data
|
|
if ($curValidFlag == "1") {
|
|
//disable
|
|
$usingSchedule = $this->jobnetModel->checkJonbetRelatedParentSchedule($objectId, "disable");
|
|
$usingJobnet = $this->jobnetModel->checkJonbetRelatedParentJobnet($objectId, "disable");
|
|
if (count((array)$usingJobnet) > 0 || count((array)$usingSchedule) > 0) {
|
|
$returnItemData = [
|
|
'objectId' => $objectId,
|
|
'scheduleData' => (array)$usingSchedule,
|
|
'jobnetData' => (array)$usingJobnet,
|
|
];
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_REL_ERROR, $objectId, (array)$returnItemData);
|
|
return $data;
|
|
}
|
|
} else {
|
|
//enable
|
|
$usingJobnet = $this->jobnetModel->checkJonbetChildForEnable($objectId, $updateDate);
|
|
if (count((array)$usingJobnet) > 0) {
|
|
$returnItemData = [
|
|
'objectId' => $objectId,
|
|
'jobnetData' => (array)$usingJobnet,
|
|
];
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_REL_ERROR, $objectId, (array)$returnItemData);
|
|
return $data;
|
|
}
|
|
}
|
|
if ($curValidFlag == "1") {
|
|
$data = $this->disable($objectId, $updateDate);
|
|
} else {
|
|
$data = $this->enable($objectId, $updateDate);
|
|
}
|
|
if ($data[Constants::AJAX_MESSAGE_DETAIL] != Constants::DETAIL_SUCCESS) {
|
|
$this->rollback();
|
|
return $data;
|
|
}
|
|
$this->commit();
|
|
$this->logger->info('Change valid version service is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return $data;
|
|
} catch (PDOException $e) {
|
|
if ($this->db->inTransaction()) {
|
|
$this->rollback();
|
|
}
|
|
return Constants::SERVICE_INTERNAL_SERVER_ERROR;
|
|
} catch (JobnetNotExecutableException $e) {
|
|
if ($this->db->inTransaction()) {
|
|
$this->rollback();
|
|
return $e->getMessage();
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
/**
|
|
* It changes the valid flag of jobnet list.
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function changeValidList()
|
|
{
|
|
$this->logger->info('Change valid list process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$req_raw = file_get_contents('php://input');
|
|
$para = json_decode($req_raw, true)['params'];
|
|
$result = $this->changeValidListService($para);
|
|
if (!is_array($result)) {
|
|
$result = (array)$this->util->createResponseJson(Constants::DETAIL_SERVER_ERROR, "");
|
|
}
|
|
$this->logger->info('Change valid list process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return $result;
|
|
}
|
|
/**
|
|
* It changes the valid flag of the object_list
|
|
*
|
|
* @param object $para send data from the browser.
|
|
* @return array|string could be an array if it is success, could be a string if not.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function changeValidListService($para)
|
|
{
|
|
try {
|
|
$selectRows = $para['datas']['selectedRows'];
|
|
$actionType = $para['datas']['actionType'];
|
|
$modelValid = 'enable';
|
|
if ($actionType == "disable") {
|
|
$modelValid = 'disable';
|
|
}
|
|
// $this->logger->info('Multiple jobnet ' . $actionType . ' process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
foreach ($selectRows as $value) {
|
|
$objectId = $value["id"];
|
|
$update_date = $value["update"];
|
|
$detail = $this->jobnetModel->each($objectId, $update_date);
|
|
if ($detail == false) {
|
|
// $data = (array)$this->util->createResponseJson(Constants::AJAX_MESSAGE_INCOMPLETE, "db-lock", $objectId);
|
|
// return $data;
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_OBJECT_NOT_FOUND, $objectId);
|
|
return $data;
|
|
} else {
|
|
// if ($this->checkLatest($objectId, $update_date, $detail) == false) {
|
|
// $data = (array)$this->util->createResponseJson(Constants::AJAX_MESSAGE_RELOAD, "err-msg-not-latest", $objectId);
|
|
// return $data;
|
|
// }
|
|
if ($this->checkLatest($objectId, $update_date, $detail) == false) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_NOT_LAST_UPDATED, $objectId);
|
|
return $data;
|
|
}
|
|
}
|
|
if (!$this->checkValid($detail, Constants::OBJ_VALID_PROC)) {
|
|
// $data = (array)$this->util->createResponseJson(Constants::AJAX_MESSAGE_INCOMPLETE, "alt-msg-permit", $objectId);
|
|
// return $data;
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_PERMIT, $objectId);
|
|
return $data;
|
|
}
|
|
$isLock = $this->objectLockService->process((object) ["objectId" => $objectId, "objectType" => Constants::OBJECT_TYPE_JOBNET, "attemptIp" => $this->objectLockService->getClientIpAddress()], Constants::SERVICE_TYPE_CHECK, true);
|
|
if ($isLock == Constants::SERVICE_MESSAGE_UNEDITABLE) {
|
|
// $data = (array)$this->util->createResponseJson(Constants::AJAX_MESSAGE_INCOMPLETE, "alt-msg-permit", $objectId);
|
|
// return $data;
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_PERMIT, $objectId);
|
|
return $data;
|
|
} else if ($isLock == Constants::SERVICE_MESSAGE_OBJ_LOCK_BY_OTHERS) {
|
|
// $data = (array)$this->util->createResponseJson(Constants::AJAX_MESSAGE_INCOMPLETE, "alt-msg-lock", $objectId);
|
|
// return $data;
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_LOCK, $objectId);
|
|
return $data;
|
|
} else if ($isLock == Constants::SERVICE_INTERNAL_SERVER_ERROR) {
|
|
// $data = (array)$this->util->createResponseJson(Constants::AJAX_MESSAGE_INCOMPLETE, "lab-server-error", $objectId);
|
|
// return $data;
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_SERVER_ERROR, $objectId);
|
|
return $data;
|
|
}
|
|
//check for related data
|
|
if ($actionType == "disable") {
|
|
$usingSchedule = $this->jobnetModel->checkJonbetRelatedParentSchedule($objectId, $actionType);
|
|
$usingJobnet = $this->jobnetModel->checkJonbetRelatedParentJobnet($objectId, $actionType);
|
|
if (count((array)$usingJobnet) > 0 || count((array)$usingSchedule) > 0) {
|
|
$returnItemData = [
|
|
'objectId' => $objectId,
|
|
'scheduleData' => (array)$usingSchedule,
|
|
'jobnetData' => (array)$usingJobnet,
|
|
];
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_REL_ERROR, $objectId, (array)$returnItemData);
|
|
return $data;
|
|
}
|
|
} else {
|
|
$usingJobnet = $this->jobnetModel->checkJonbetChildForEnable($objectId, $update_date);
|
|
if (count((array)$usingJobnet) > 0) {
|
|
$returnItemData = [
|
|
'objectId' => $objectId,
|
|
'jobnetData' => (array)$usingJobnet,
|
|
];
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_REL_ERROR, $objectId, (array)$returnItemData);
|
|
return $data;
|
|
}
|
|
}
|
|
}
|
|
$this->beginTransaction();
|
|
foreach ($selectRows as $value) {
|
|
$objectId = $value["id"];
|
|
$update_date = $value["update"];
|
|
$data = $this->$modelValid($objectId, $update_date);
|
|
if ($data[Constants::AJAX_MESSAGE_DETAIL] != Constants::DETAIL_SUCCESS) {
|
|
$this->rollback();
|
|
return $data;
|
|
}
|
|
}
|
|
$this->commit();
|
|
$this->logger->info('Multiple jobnet ' . $actionType . ' process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return $data;
|
|
} catch (PDOException $e) {
|
|
if ($this->db->inTransaction()) {
|
|
$this->rollback();
|
|
}
|
|
return Constants::SERVICE_INTERNAL_SERVER_ERROR;
|
|
} catch (JobnetNotExecutableException $e) {
|
|
if ($this->db->inTransaction()) {
|
|
$this->rollback();
|
|
$this->logger->info('Multiple jobnet ' . $actionType . ' process error:' . $e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
return Constants::SERVICE_INTERNAL_SERVER_ERROR;
|
|
}
|
|
}
|
|
/**
|
|
* It manages the jobnet data such as create, update, new version, new object.
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function save()
|
|
{
|
|
$this->logger->info('Jobnet save process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
try {
|
|
$json = file_get_contents('php://input');
|
|
$params = Util::jsonDecode($json)["params"];
|
|
|
|
$validation = $this->validator->validate($params, [
|
|
'jobnetId' => 'required',
|
|
'multiple' => 'required|in:0,1,2',
|
|
'public' => 'required|in:0,1',
|
|
'jobnetName' => 'required',
|
|
'timeoutSec' => 'required',
|
|
'icon' => 'required',
|
|
'flow' => 'required',
|
|
'userName' => 'required',
|
|
'type' => 'required',
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, [Constants::API_RESPONSE_MESSAGE => $errors->firstOfAll()]);
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . implode(", ", $errors->firstOfAll()), ['controller' => __METHOD__]);
|
|
} else {
|
|
[$result, $err] = $this->validateIcons($params["icon"]);
|
|
if (!$result) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, [Constants::API_RESPONSE_MESSAGE => $err]);
|
|
return;
|
|
}
|
|
$data = json_decode(json_encode($params));
|
|
// $this->logger->info("Data : ", $data);
|
|
$this->logger->info("Data: ", (array) $data);
|
|
$updateDate = $this->util->getDate();
|
|
$createDate = $this->util->getDate();
|
|
if ($data->type == "create" || $data->type == Constants::OBJECT_FORM_NEW_OBJECT) {
|
|
$resultMessage = $this->checkID($data->jobnetId);
|
|
switch ($resultMessage) {
|
|
case Constants::SERVICE_MESSAGE_RECORD_EXIST:
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_MESSAGE_RECORD_EXIST]);
|
|
break;
|
|
case Constants::SERVICE_MESSAGE_RECORD_NOT_EXIST:
|
|
$result = $this->manage($data, $updateDate, $createDate);
|
|
if ($result == Constants::SERVICE_MESSAGE_SUCCESS) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [
|
|
Constants::API_RESPONSE_MESSAGE => Constants::API_RESPONSE_MESSAGE_OPERATION_SUCCESS,
|
|
Constants::API_RESPONSE_DATA => [
|
|
'jobnetId' => $data->jobnetId,
|
|
'formType' => $data->type,
|
|
'publicFlag' => $data->public,
|
|
'updateDate' => $updateDate,
|
|
'createDate' => $createDate
|
|
]
|
|
]);
|
|
} else {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, [Constants::API_RESPONSE_MESSAGE => Constants::API_RESPONSE_MESSAGE_OPERATION_FAIL]);
|
|
}
|
|
break;
|
|
}
|
|
} else {
|
|
$data = json_decode(json_encode($params));
|
|
// $this->logger->info("Data : ", $data);
|
|
$this->logger->info("Data: ".(array) $data);
|
|
|
|
//check data exist for update
|
|
$detail = $this->jobnetModel->each($data->jobnetId, $data->updateDate);
|
|
if ($detail == false) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_MESSAGE_RECORD_NOT_EXIST]);
|
|
return;
|
|
} else {
|
|
if ($this->checkLatest($data->jobnetId, $data->updateDate, $detail) == false) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, [Constants::API_RESPONSE_MESSAGE => Constants::MESSAGE[Constants::DETAIL_NOT_LAST_UPDATED], Constants::API_RESPONSE_MESSAGE_CODE => Constants::DETAIL_NOT_LAST_UPDATED]);
|
|
return;
|
|
}
|
|
}
|
|
|
|
$ipAddr = $this->objectLockService->getClientIpAddress();
|
|
$this->logger->info("ip addr : ". $ipAddr);
|
|
$this->logger->info("jobnet id :". $data->jobnetId);
|
|
$checkWhere = "object_id = '$data->jobnetId' AND object_type = " . Constants::OBJECT_TYPE_JOBNET . " AND attempt_ip = '$ipAddr'";
|
|
$this->logger->info("check query .". $checkWhere);
|
|
$checkResult = $this->objectLockModel->checkObjectLock($checkWhere);
|
|
if (!$checkResult) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, [Constants::API_RESPONSE_MESSAGE => Constants::API_RESPONSE_MESSAGE_NO_LOCK_SESSION]);
|
|
return;
|
|
}
|
|
|
|
$result = $this->manage($data, $updateDate, $createDate);
|
|
if ($result == Constants::SERVICE_MESSAGE_SUCCESS) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [
|
|
Constants::API_RESPONSE_MESSAGE => Constants::API_RESPONSE_MESSAGE_OPERATION_SUCCESS,
|
|
Constants::API_RESPONSE_DATA => [
|
|
'jobnetId' => $data->jobnetId,
|
|
'formType' => $data->type,
|
|
'publicFlag' => $data->public,
|
|
'updateDate' => $updateDate
|
|
]
|
|
]);
|
|
} else {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, [Constants::API_RESPONSE_MESSAGE => Constants::API_RESPONSE_MESSAGE_OPERATION_FAIL]);
|
|
}
|
|
}
|
|
}
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
} catch (JobnetNotExecutableException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, [Constants::API_RESPONSE_MESSAGE => $e->getMessage()]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
$this->logger->info('Jobnet save process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* It proceeds to create/edit/new version/new object the jobnet based on type.
|
|
*
|
|
* @param object $jobData jobnet object including icon and flow data.
|
|
* @return string
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
private function validateIcons($icons)
|
|
{
|
|
$parallel = false;
|
|
foreach ($icons as $icon) {
|
|
if (!isset($icon["iconType"])) {
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . "The icon type is required.", ['controller' => __METHOD__]);
|
|
return [false, ["iconType" => "The icon type is required."]];
|
|
}
|
|
|
|
$rules = [];
|
|
switch ($icon["iconType"]) {
|
|
case Constants::ICON_TYPE_INFO:
|
|
$rules = [
|
|
'methodFlag' => 'required|in:0,1,2,3,4',
|
|
'x' => 'required',
|
|
'y' => 'required',
|
|
'iconSetting' => 'array',
|
|
'iconSetting.infoFlag' => 'required|in:0,3',
|
|
'iconSetting.getJobId' => 'required_if:iconSetting.infoFlag,0',
|
|
'iconSetting.getCalendarId' => 'required_if:iconSetting.infoFlag,3'
|
|
];
|
|
break;
|
|
case Constants::ICON_TYPE_PARALLEL_START:
|
|
$rules = [
|
|
'methodFlag' => 'required|in:0,1,2,3,4',
|
|
'x' => 'required',
|
|
'y' => 'required',
|
|
];
|
|
$parallel=true;
|
|
break;
|
|
default:
|
|
$rules = [
|
|
'methodFlag' => 'required|in:0,1,2,3,4',
|
|
'x' => 'required',
|
|
'y' => 'required',
|
|
];
|
|
break;
|
|
}
|
|
if($parallel){
|
|
foreach($icons as $ico){
|
|
if (!isset($ico['iconType'])) {
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . "The icon type is required.", ['controller' => __METHOD__]);
|
|
return [false, ["iconType" => "The icon type is required."]];
|
|
}
|
|
if($ico['iconType'] == Constants::ICON_TYPE_PARALLEL_END){
|
|
$parallel = false;
|
|
break;
|
|
}
|
|
}
|
|
if($parallel){
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . "Parallel end icon is required.", ['controller' => __METHOD__]);
|
|
return [false, ["iconType" => "Parallel end icon is required."]];
|
|
|
|
}
|
|
}
|
|
$iconValidation = $this->validator->validate($icon, $rules);
|
|
|
|
if ($iconValidation->fails()) {
|
|
$errors = $iconValidation->errors();
|
|
// $this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . implode(", ", $errors->firstOfAll()), ['controller' => __METHOD__]);
|
|
return [false, $errors->firstOfAll()];
|
|
}
|
|
}
|
|
$this->logger->info('Validate Icons process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return [true, null];
|
|
}
|
|
|
|
/**
|
|
* It checks the jobnet id is available or not.
|
|
*
|
|
* @param string $id id of the jobnet.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
private function checkID($id)
|
|
{
|
|
try {
|
|
if ($this->jobnetModel->checkID($id)) {
|
|
$this->logger->debug('[' . $id . '] is already inputted.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return Constants::SERVICE_MESSAGE_RECORD_EXIST;
|
|
} else {
|
|
return Constants::SERVICE_MESSAGE_RECORD_NOT_EXIST;
|
|
}
|
|
} catch (PDOException $e) {
|
|
throw new PDOException($e->getMessage(), $e->getCode());
|
|
}
|
|
$this->logger->debug('Check Jobnet exist process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* It proceeds to create/edit/new version/new object the jobnet based on type.
|
|
*
|
|
* @param object $jobData jobnet object including icon and flow data.
|
|
* @return string
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
private function manage($jobData, $updateDate, $createDate)
|
|
{
|
|
try {
|
|
$tmp_jobdata = json_encode($jobData);
|
|
$this->logger->info("JOB Data .". $tmp_jobdata);
|
|
$this->beginTransaction();
|
|
$isExecutable = $this->isExecutableJobnet($jobData->icon, $jobData->flow, true, $jobData->jobnetId);
|
|
if (is_array($isExecutable)) {
|
|
throw new JobnetNotExecutableException($isExecutable["message-detail-txt"]);
|
|
}
|
|
|
|
if ($jobData->type == Constants::OBJECT_FORM_CREATE || $jobData->type == Constants::OBJECT_FORM_NEW_OBJECT || $jobData->type == Constants::OBJECT_FORM_NEW_VERSION) {
|
|
$jobnetControlData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'valid_flag' => 0,
|
|
'public_flag' => $jobData->public,
|
|
'multiple_start_up' => $jobData->multiple,
|
|
'user_name' => $jobData->userName,
|
|
'jobnet_name' => $jobData->jobnetName,
|
|
'memo' => $jobData->description,
|
|
'jobnet_timeout' => $jobData->timeoutSec == null ? 0 : $jobData->timeoutSec,
|
|
'timeout_run_type' => $jobData->timeoutType,
|
|
];
|
|
|
|
$this->jobnetModel->insertJobNetControl($jobnetControlData);
|
|
}
|
|
|
|
if ($jobData->type == Constants::OBJECT_FORM_EDIT || $jobData->type == Constants::OBJECT_FORM_JOBNET_ICON_EDIT) {
|
|
$this->jobnetModel->deleteJobControl($jobData->jobnetId, $jobData->updateDate);
|
|
|
|
$jobnetControlUpdateData = [
|
|
'urlid' => $jobData->jobnetId,
|
|
'urldate' => $jobData->updateDate,
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'update_date' => $updateDate,
|
|
'valid_flag' => 0,
|
|
'public_flag' => $jobData->public,
|
|
'multiple_start_up' => $jobData->multiple,
|
|
'user_name' => $jobData->userName,
|
|
'jobnet_name' => $jobData->jobnetName,
|
|
'memo' => $jobData->description,
|
|
'jobnet_timeout' => $jobData->timeoutSec == null ? 0 : $jobData->timeoutSec,
|
|
'timeout_run_type' => $jobData->timeoutType,
|
|
];
|
|
|
|
$this->jobnetModel->updateJobnetControl($jobnetControlUpdateData);
|
|
}
|
|
$this->logger->info("Job Data : ". $jobData->icon);
|
|
if (count($jobData->icon) > 0) {
|
|
$this->insertIconData($jobData, $updateDate, $createDate);
|
|
}
|
|
|
|
if (count($jobData->flow) > 0) {
|
|
$this->insertFlowData($jobData, $updateDate, $createDate);
|
|
}
|
|
$this->logger->info('Jobnet ' . $jobData->type . ' process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$this->commit();
|
|
return Constants::SERVICE_MESSAGE_SUCCESS;
|
|
} catch (PDOException $e) {
|
|
if ($this->db->inTransaction()) {
|
|
$this->rollback();
|
|
}
|
|
throw new PDOException($e->getMessage(), $e->getCode());
|
|
} catch (JobnetNotExecutableException $e) {
|
|
if ($this->db->inTransaction()) {
|
|
$this->rollback();
|
|
}
|
|
throw new JobnetNotExecutableException($e->getMessage());
|
|
}
|
|
}
|
|
|
|
/**
|
|
* It inserts the icon data.
|
|
*
|
|
* @param object $jobData jobnet object including icon and flow data.
|
|
* @param string $updateDate updated date of the jobnet.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
private function insertIconData($jobData, $updateDate, $createDate)
|
|
{
|
|
$this->logger->debug('Save icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
foreach ($jobData->icon as $icon) {
|
|
|
|
$jobControlData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'job_type' => $icon->iconType,
|
|
'point_x' => intval($icon->x),
|
|
'point_y' => intval($icon->y),
|
|
'job_name' => $icon->iconSetting->jobName ?? null,
|
|
'method_flag' => $icon->methodFlag,
|
|
'force_flag' => isset($icon->iconSetting->forceFlag) ? $icon->iconSetting->forceFlag : 0,
|
|
'continue_flag' => isset($icon->iconSetting->continueFlag) ? $icon->iconSetting->continueFlag : 0,
|
|
'run_user' => isset($icon->iconSetting->runUser) ? (!$this->util->IsNullOrEmptyString($icon->iconSetting->runUser) ? $icon->iconSetting->runUser : null) : null,
|
|
'run_user_password' => isset($icon->iconSetting->runUserPassword) ? (!$this->util->IsNullOrEmptyString($icon->iconSetting->runUserPassword) ? $this->util->encryptPassword($icon->iconSetting->runUserPassword) : null) : null,
|
|
];
|
|
$this->logger->info("job control data .". json_encode($jobControlData));
|
|
$this->jobnetModel->insertJobControl($jobControlData);
|
|
|
|
switch ($icon->iconType) {
|
|
case Constants::ICON_TYPE_JOB:
|
|
$this->logger->debug('Save job icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$jobIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'host_flag' => $icon->iconSetting->hostFlag,
|
|
'stop_flag' => $icon->iconSetting->stopFlag,
|
|
'command_type' => 0,
|
|
'timeout' => $icon->iconSetting->timeout,
|
|
'host_name' => $icon->iconSetting->hostName,
|
|
'stop_code' => $icon->iconSetting->stopCode,
|
|
'timeout_run_type' => $icon->iconSetting->timeoutRunType,
|
|
];
|
|
|
|
$this->jobnetModel->insertJobIcon($jobIconData);
|
|
|
|
if (sizeof($icon->iconSetting->valueJob) > 0) {
|
|
$this->logger->debug('Save value job data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
foreach ($icon->iconSetting->valueJob as $valueJob) {
|
|
$valueJobData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'value_name' => $valueJob->valueName,
|
|
'value' => $valueJob->value,
|
|
];
|
|
|
|
$this->jobnetModel->insertValueJob($valueJobData);
|
|
}
|
|
$this->logger->debug('Save value job data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
if (sizeof($icon->iconSetting->valueJobCon) > 0) {
|
|
$this->logger->debug('Save value job control data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
foreach ($icon->iconSetting->valueJobCon as $valueJobCon) {
|
|
$valueJobConData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'value_name' => $valueJobCon,
|
|
];
|
|
|
|
$this->jobnetModel->insertValueJobControl($valueJobConData);
|
|
}
|
|
$this->logger->debug('Save value job control data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
$this->logger->debug('Save job command data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$jobExecCommandData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'command_cls' => 0,
|
|
'command' => $icon->iconSetting->exec,
|
|
];
|
|
|
|
$this->jobnetModel->insertJobCommand($jobExecCommandData);
|
|
|
|
if ($icon->iconSetting->stopFlag == 1) {
|
|
$jobStopCommandData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'command_cls' => 2,
|
|
'command' => $icon->iconSetting->stopCommand,
|
|
];
|
|
|
|
$this->jobnetModel->insertJobCommand($jobStopCommandData);
|
|
}
|
|
$this->logger->debug('Save job command data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_END:
|
|
$this->logger->debug('Save end icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$endIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'jobnet_stop_flag' => $icon->iconSetting->stopFlag ?? 0,
|
|
'jobnet_stop_code' => $icon->iconSetting->stopCode ?? 0,
|
|
];
|
|
$this->logger->info('End Icon Data : ', $endIconData);
|
|
$this->jobnetModel->insertEndIcon($endIconData);
|
|
$this->logger->debug('Save exit icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_CONDITIONAL_START:
|
|
$this->logger->debug('Save conditional branch icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$ifIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'hand_flag' => $icon->iconSetting->handFlag,
|
|
'value_name' => $icon->iconSetting->variable,
|
|
'comparison_value' => $icon->iconSetting->comparisonValue,
|
|
];
|
|
|
|
$this->jobnetModel->insertIfIcon($ifIconData);
|
|
$this->logger->debug('Save conditional branch icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_JOB_CONTROL_VARIABLE:
|
|
$this->logger->info("Created Date . ". $createDate);
|
|
$this->logger->info("Updated Date .". $updateDate);
|
|
$this->logger->debug('Save job control variable icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
if (sizeof($icon->iconSetting->valueJob) > 0) {
|
|
foreach ($icon->iconSetting->valueJob as $valueJob) {
|
|
$jobConVarIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'value_name' => $valueJob->valueName,
|
|
'value' => $valueJob->value,
|
|
];
|
|
$this->logger->info("JOBCon var icon data .". json_encode($jobConVarIconData));
|
|
$this->jobnetModel->insertValueIcon($jobConVarIconData);
|
|
}
|
|
$this->logger->debug('Save job control variable icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_EXTENDED_JOB:
|
|
$this->logger->debug('Save extended job icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$extendedIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'command_id' => $icon->iconSetting->commandId,
|
|
'value' => $icon->iconSetting->parameter,
|
|
];
|
|
|
|
$this->jobnetModel->insertExtendedIcon($extendedIconData);
|
|
$this->logger->debug('Save extended job icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
|
|
case Constants::ICON_TYPE_CALCULATION:
|
|
$this->logger->debug('Save calculation icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$calculationIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'hand_flag' => $icon->iconSetting->handFlag,
|
|
'formula' => $icon->iconSetting->formula,
|
|
'value_name' => $icon->iconSetting->valueName,
|
|
];
|
|
|
|
$this->jobnetModel->insertCalculationIcon($calculationIconData);
|
|
$this->logger->debug('Save calculation icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_TASK:
|
|
|
|
$this->logger->debug('Save task icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$checkJobnet = $this->checkID($icon->iconSetting->taskJobnetId);
|
|
if ($checkJobnet === Constants::SERVICE_MESSAGE_RECORD_NOT_EXIST) {
|
|
throw new PDOException(Constants::SERVICE_MESSAGE_RECORD_NOT_EXIST . ":" . $icon->iconSetting->taskJobnetId);
|
|
}
|
|
$taskIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'submit_jobnet_id' => $icon->iconSetting->taskJobnetId,
|
|
];
|
|
|
|
$this->jobnetModel->insertTaskIcon($taskIconData);
|
|
$this->logger->debug('Save task icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_INFO:
|
|
|
|
$this->logger->debug('Save info icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
$infoIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'info_flag' => $icon->iconSetting->infoFlag,
|
|
'get_job_id' => $icon->iconSetting->getJobId,
|
|
'get_calendar_id' => $icon->iconSetting->getCalendarId,
|
|
];
|
|
|
|
$this->jobnetModel->insertInfoIcon($infoIconData);
|
|
|
|
$this->logger->debug('Save info icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_FILE_COPY:
|
|
|
|
$this->logger->debug('Save file transfer icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
$fileTransferIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'from_host_flag' => $icon->iconSetting->fromHostFlag,
|
|
'to_host_flag' => $icon->iconSetting->toHostFlag,
|
|
'overwrite_flag' => $icon->iconSetting->overwriteFlag,
|
|
'from_host_name' => $icon->iconSetting->fromHostName,
|
|
'from_directory' => $icon->iconSetting->fromDirectory,
|
|
'from_file_name' => $icon->iconSetting->fromFileName,
|
|
'to_host_name' => $icon->iconSetting->toHostName,
|
|
'to_directory' => $icon->iconSetting->toDirectory,
|
|
];
|
|
|
|
$this->jobnetModel->insertFileTransferIcon($fileTransferIconData);
|
|
|
|
$this->logger->debug('Save file transfer icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_FILE_WAIT:
|
|
|
|
$this->logger->debug('Save file wait icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
$fileWaitIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'host_flag' => $icon->iconSetting->hostFlag,
|
|
'fwait_mode_flag' => $icon->iconSetting->fwaitModeFlag,
|
|
'file_delete_flag' => $icon->iconSetting->fileDeleteFlag,
|
|
'file_wait_time' => $icon->iconSetting->fileWaitTime,
|
|
'host_name' => $icon->iconSetting->hostName,
|
|
'file_name' => $icon->iconSetting->fileName,
|
|
];
|
|
|
|
$this->jobnetModel->insertFileWaitIcon($fileWaitIconData);
|
|
$this->logger->debug('Save file wait icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_REBOOT:
|
|
|
|
$this->logger->debug('Save reboot icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
$rebootIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'host_flag' => $icon->iconSetting->hostFlag,
|
|
'reboot_mode_flag' => $icon->iconSetting->rebootModeFlag,
|
|
'reboot_wait_time' => $icon->iconSetting->rebootWaitTime,
|
|
'host_name' => $icon->iconSetting->hostName,
|
|
'timeout' => $icon->iconSetting->timeout,
|
|
];
|
|
|
|
$this->jobnetModel->insertRebootIcon($rebootIconData);
|
|
$this->logger->debug('Save reboot icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_RELEASE:
|
|
$this->logger->debug('Save release hold icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
$releaseIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'release_job_id' => $icon->iconSetting->releaseUnholdJobId,
|
|
];
|
|
|
|
$this->jobnetModel->insertReleaseIcon($releaseIconData);
|
|
$this->logger->debug('Save release hold icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_AGENT_LESS:
|
|
$this->logger->debug('Save agentless icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$loginPW = null;
|
|
if(isset($icon->iconSetting->loginPassword)){
|
|
if(!$this->util->IsNullOrEmptyString($icon->iconSetting->loginPassword)){
|
|
$passLen = strlen($icon->iconSetting->loginPassword) . "|";
|
|
$loginPW = $this->util->encryptPassword( $passLen .$icon->iconSetting->loginPassword);
|
|
}
|
|
}
|
|
|
|
$agentLessIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'host_flag' => $icon->iconSetting->hostFlag,
|
|
'connection_method' => $icon->iconSetting->connectionMethod,
|
|
'session_flag' => $icon->iconSetting->sessionFlag,
|
|
'auth_method' => $icon->iconSetting->authMethod,
|
|
'run_mode' => $icon->iconSetting->runMode,
|
|
'line_feed_code' => $icon->iconSetting->lineFeedCode,
|
|
'timeout' => $icon->iconSetting->timeout,
|
|
'session_id' => $icon->iconSetting->sessionId,
|
|
'login_user' => $icon->iconSetting->loginUser,
|
|
'login_password' => $loginPW,
|
|
'public_key' => $icon->iconSetting->publicKey,
|
|
'private_key' => $icon->iconSetting->privateKey,
|
|
'passphrase' => $icon->iconSetting->passPhrase,
|
|
'host_name' => $icon->iconSetting->hostName,
|
|
'stop_code' => $icon->iconSetting->stopCode,
|
|
'terminal_type' => 'vanilla',
|
|
'character_code' => $icon->iconSetting->characterCode,
|
|
'prompt_string' => $icon->iconSetting->promptString,
|
|
'command' => $icon->iconSetting->command,
|
|
];
|
|
|
|
$this->jobnetModel->insertAgentLessIcon($agentLessIconData);
|
|
$this->logger->debug('Save agentless icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_ZABBIX:
|
|
$this->logger->debug('Save zabbix icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$zabbixIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'link_target' => $icon->iconSetting->linkTarget,
|
|
'link_operation' => $icon->iconSetting->linkOperation,
|
|
'groupid' => isset($icon->iconSetting->groupId) ? $icon->iconSetting->groupId : 0,
|
|
'hostid' => isset($icon->iconSetting->hostId) ? $icon->iconSetting->hostId : 0,
|
|
'itemid' => isset($icon->iconSetting->itemId) ? $icon->iconSetting->itemId : 0,
|
|
'triggerid' => isset($icon->iconSetting->triggerId) ? $icon->iconSetting->triggerId : 0,
|
|
];
|
|
|
|
$this->jobnetModel->insertZabbixIcon($zabbixIconData);
|
|
$this->logger->debug('Save zabbix icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_JOBNET:
|
|
$this->logger->debug('Save jobnet icon data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$jobnetIconData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'job_id' => $icon->iconSetting->jobId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createDate,
|
|
'link_jobnet_id' => $icon->iconSetting->linkJobnetId,
|
|
];
|
|
|
|
$this->jobnetModel->insertJobnetIcon($jobnetIconData);
|
|
$this->logger->debug('Save jobnet icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
break;
|
|
}
|
|
$this->logger->debug('Save icon data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* It inserts the flow data.
|
|
*
|
|
* @param object $jobData jobnet object including icon and flow data.
|
|
* @param string $updateDate updated date of the jobnet.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
private function insertFlowData($jobData, $updateDate, $createdDate)
|
|
{
|
|
$this->logger->debug('Save flow data process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
foreach ($jobData->flow as $flow) {
|
|
|
|
$flowData = [
|
|
'jobnet_id' => $jobData->jobnetId,
|
|
'update_date' => $updateDate,
|
|
'created_date' => $createdDate,
|
|
'start_job_id' => $flow->startJobId,
|
|
'end_job_id' => $flow->endJobId,
|
|
'flow_type' => $flow->flowType,
|
|
'flow_width' => 0,
|
|
'flow_style' => $flow->flowStyle
|
|
];
|
|
|
|
$this->flowModel->insertFlow($flowData);
|
|
}
|
|
|
|
$this->logger->debug('Save flow data process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* It checks the jobnet is execuatable or not
|
|
*
|
|
* @param array $jobInfo array of the icon.
|
|
* @param array $flowInfo array of the flow.
|
|
* @param bool $isCamel optional. Check object property is camel case. default value is false.
|
|
* @param string $objectId id of the jobnet.
|
|
* @throws PDOException
|
|
* @throws JobnetNotExecutableException if the jobnet is not executable.
|
|
* @return void|string could be an void if it is executable, could be a string if not.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function isExecutableJobnet($jobInfo, $flowInfo, $isCamel = false, $objectId)
|
|
{
|
|
$this->logger->debug('check executable jobnet process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
try {
|
|
|
|
$parallelEndValid = $this->enableCheckParallelEnd($jobInfo, $isCamel);
|
|
// $tmp_parallelEndValid = json_encode($parallelEndValid);
|
|
// $this->logger->info("Parallel End Valid .". $tmp_parallelEndValid);
|
|
if (is_array($parallelEndValid)) {
|
|
$this->logger->info('Parallel job icon check failed.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return $parallelEndValid;
|
|
}
|
|
$confirmJobnetCheckValid = $this->confirmJobnetCheck($jobInfo, $flowInfo, $isCamel, $objectId);
|
|
// $tmp_confirmJobnetCheckValid = json_encode($confirmJobnetCheckValid);
|
|
// $this->logger->info("Confirm Jobnet Check Valid .". $tmp_confirmJobnetCheckValid);
|
|
if (is_array($confirmJobnetCheckValid)) {
|
|
$this->logger->info('Job icon valid check failed.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return $confirmJobnetCheckValid;
|
|
}
|
|
return true;
|
|
} catch (PDOException $e) {
|
|
throw new PDOException($e->getMessage(), $e->getCode());
|
|
} catch (Exception $e) {
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
$this->logger->debug('check executable jobnet process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* It checks the parallel flow of jobnet is correct or not.
|
|
*
|
|
* @param array $jobs array of the icon.
|
|
* @param bool $isCamel optional. Check object property is camel case. default value is false.
|
|
* @throws JobnetNotExecutableException if the jobnet is not executable.
|
|
* @return bool|string could be an bool if it is correct, could be a string if not.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function enableCheckParallelEnd($jobs, $isCamel = false)
|
|
{
|
|
|
|
$this->logger->debug('check parallel end process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$parallelStartCount = 0;
|
|
$parallelEndCount = 0;
|
|
|
|
foreach ($jobs as $job) {
|
|
if ($isCamel) {
|
|
$jobType = $job->iconType;
|
|
} else {
|
|
$jobType = $job->job_type;
|
|
}
|
|
|
|
if ($jobType == Constants::ICON_TYPE_PARALLEL_START) {
|
|
$parallelStartCount++;
|
|
}
|
|
if ($jobType == Constants::ICON_TYPE_PARALLEL_END) {
|
|
$parallelEndCount++;
|
|
}
|
|
|
|
}
|
|
|
|
if ($parallelStartCount != $parallelEndCount) {
|
|
if ($parallelStartCount > $parallelEndCount) {
|
|
$data = (array) $this->util->createResponseJson(Constants::DETAIL_ERR_JOBEDIT_16, "");
|
|
return $data;
|
|
} else {
|
|
$data = (array) $this->util->createResponseJson(Constants::DETAIL_ERR_JOBEDIT_16, "");
|
|
return $data;
|
|
}
|
|
}
|
|
|
|
$this->logger->debug('check parallel end process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return true;
|
|
}
|
|
|
|
/**
|
|
* It checks the icon and flow are correctly connected or not.
|
|
* It also checks require icons are existed or not.
|
|
*
|
|
* @param array $jobs array of the icon.
|
|
* @param array $flows array of the flow.
|
|
* @param bool $isCamel optional. Check object property is camel case. default value is false.
|
|
* @throws JobnetNotExecutableException if the jobnet is not executable.
|
|
* @return bool|string could be an bool if it is correct, could be a string if not.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function confirmJobnetCheck($jobs, $flows, $isCamel = false, $objectId)
|
|
{
|
|
|
|
$this->logger->debug('Check jobnet flow process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
$result = true;
|
|
$startIconCount = 0;
|
|
$endIconCount = 0;
|
|
|
|
foreach ($jobs as $job) {
|
|
$inFlowNum = 0;
|
|
$outFlowNum = 0;
|
|
$trueFlowNum = 0;
|
|
$falseFlowNum = 0;
|
|
|
|
if ($isCamel) {
|
|
$jobId = $job->iconSetting->jobId;
|
|
$jobType = $job->iconType;
|
|
} else {
|
|
$jobId = $job->job_id;
|
|
$jobType = $job->job_type;
|
|
}
|
|
|
|
$flow = array_filter($flows, function ($flow) use ($jobId, $isCamel) {
|
|
if ($isCamel) {
|
|
if ($flow->endJobId == $jobId) {
|
|
return true;
|
|
}
|
|
} else {
|
|
if ($flow->end_job_id == $jobId) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
});
|
|
|
|
if ($flow != null) {
|
|
$inFlowNum = count($flow);
|
|
}
|
|
|
|
$flow = array_filter($flows, function ($flow) use ($jobId, $isCamel) {
|
|
if ($isCamel) {
|
|
if ($flow->startJobId == $jobId) {
|
|
return true;
|
|
}
|
|
} else {
|
|
if ($flow->start_job_id == $jobId) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
});
|
|
|
|
if ($flow != null) {
|
|
$outFlowNum = count($flow);
|
|
}
|
|
|
|
switch ($jobType) {
|
|
case Constants::ICON_TYPE_JOB:
|
|
case Constants::ICON_TYPE_JOB_CONTROL_VARIABLE:
|
|
case Constants::ICON_TYPE_EXTENDED_JOB:
|
|
case Constants::ICON_TYPE_JOBNET:
|
|
case Constants::ICON_TYPE_CALCULATION:
|
|
case Constants::ICON_TYPE_TASK:
|
|
case Constants::ICON_TYPE_INFO:
|
|
case Constants::ICON_TYPE_FILE_COPY:
|
|
case Constants::ICON_TYPE_FILE_WAIT:
|
|
case Constants::ICON_TYPE_REBOOT:
|
|
case Constants::ICON_TYPE_RELEASE:
|
|
case Constants::ICON_TYPE_ZABBIX:
|
|
case Constants::ICON_TYPE_AGENT_LESS:
|
|
if ($inFlowNum != 1 || $outFlowNum != 1)
|
|
$result = false;
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_START:
|
|
$startIconCount++;
|
|
// INフローの本数≠0、またはOUTフローの本数≠1の場合
|
|
if ($inFlowNum != 0 || $outFlowNum != 1)
|
|
$result = false;
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_END:
|
|
$endIconCount++;
|
|
// INフローの本数≠1、またはOUTフローの本数≠0の場合
|
|
if ($inFlowNum != 1 || $outFlowNum != 0)
|
|
$result = false;
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_CONDITIONAL_START:
|
|
|
|
$flow = array_filter($flows, function ($flow) use ($jobId, $isCamel) {
|
|
if ($isCamel) {
|
|
if ($flow->startJobId == $jobId && $flow->flowType == 1) {
|
|
return true;
|
|
}
|
|
} else {
|
|
if ($flow->start_job_id == $jobId && $flow->flow_type == 1) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
});
|
|
|
|
if ($flow != null) {
|
|
$trueFlowNum = count($flow);
|
|
}
|
|
|
|
$flow = array_filter($flows, function ($flow) use ($jobId, $isCamel) {
|
|
if ($isCamel) {
|
|
if ($flow->startJobId == $jobId && $flow->flowType == 2) {
|
|
return true;
|
|
}
|
|
} else {
|
|
if ($flow->start_job_id == $jobId && $flow->flow_type == 2) {
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
});
|
|
if ($flow != null) {
|
|
$falseFlowNum = count($flow);
|
|
}
|
|
|
|
// INフローの本数≠1、TRUEフローの本数≠1
|
|
// またはFALSEフローの本数≠1の場合
|
|
if ($inFlowNum != 1 || $trueFlowNum != 1 || $falseFlowNum != 1)
|
|
$result = false;
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_CONDITIONAL_END:
|
|
if ($inFlowNum < 1 || $outFlowNum != 1)
|
|
$result = false;
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_PARALLEL_START:
|
|
if ($inFlowNum != 1 || $outFlowNum < 1)
|
|
$result = false;
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_PARALLEL_END:
|
|
if ($inFlowNum < 1 || $outFlowNum != 1)
|
|
$result = false;
|
|
break;
|
|
|
|
case Constants::ICON_TYPE_LOOP:
|
|
if ($inFlowNum != 2 || $outFlowNum != 1)
|
|
$result = false;
|
|
break;
|
|
}
|
|
|
|
if ($result == false) {
|
|
//throw new JobnetNotExecutableException(Constants::ERROR_FLOW_001 . $jobId . Constants::ERROR_FLOW_002);
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_ERR_FLOW, $objectId, $jobId);
|
|
return $data;
|
|
}
|
|
}
|
|
|
|
if ($result == true && ($startIconCount != 1 || $endIconCount < 1)) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_ERR_JOBEDIT_12, "");
|
|
return $data;
|
|
}
|
|
|
|
return $result;
|
|
|
|
$this->logger->debug('Check jobnet flow process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* It deletes the jobnet list from object_list screen.
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function deleteList()
|
|
{
|
|
$this->logger->info('Multiple jobnet delete process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$json = file_get_contents('php://input');
|
|
$para = json_decode($json, true);
|
|
$request = $para["params"]["datas"];
|
|
$result = $this->deleteListService($request);
|
|
if (!is_array($result)) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_SERVER_ERROR, "");
|
|
return $data;
|
|
} else {
|
|
$this->logger->info('Multiple calendar version delete process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return $result;
|
|
}
|
|
}
|
|
/**
|
|
* It deletes the jobnet from object_list
|
|
*
|
|
* @param object $para send data from the browser.
|
|
* @return array|string could be an array if it is success, could be a string if not.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function deleteListService($para)
|
|
{
|
|
$this->logger->info('jobnet change valid process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
try {
|
|
$selectRows = $para['selectedRows'];
|
|
|
|
foreach ($selectRows as $value) {
|
|
$objectId = $value["id"];
|
|
$update_date = $value["update"];
|
|
$objectDetail = $this->jobnetModel->each($objectId);
|
|
if ($objectDetail == false) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_OBJECT_NOT_FOUND, $objectId);
|
|
return $data;
|
|
}
|
|
|
|
$detail = $this->jobnetModel->each($objectId, $update_date);
|
|
if ($detail == false) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_NOT_LAST_UPDATED, $objectId);
|
|
return $data;
|
|
}
|
|
if (!$this->checkValid($detail, Constants::OBJ_DELETE_PROC)) {
|
|
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_PERMIT, $objectId);
|
|
return $data;
|
|
}
|
|
//check if valid. Do
|
|
if ($detail->valid_flag == 1) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_DEL, $objectId);
|
|
return $data;
|
|
}
|
|
$isLock = $this->objectLockService->process((object) ["objectId" => $objectId, "objectType" => Constants::OBJECT_TYPE_JOBNET, "attemptIp" => $this->objectLockService->getClientIpAddress()], Constants::SERVICE_TYPE_CHECK, true);
|
|
if ($isLock == Constants::SERVICE_MESSAGE_UNEDITABLE) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_PERMIT, $objectId);
|
|
return $data;
|
|
} else if ($isLock == Constants::SERVICE_MESSAGE_OBJ_LOCK_BY_OTHERS) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_LOCK, $objectId);
|
|
return $data;
|
|
} else if ($isLock == Constants::SERVICE_INTERNAL_SERVER_ERROR) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_SERVER_ERROR, $objectId);
|
|
return $data;
|
|
}
|
|
$jobnetData = $this->jobnetModel->checkJobnetForDelete($objectId);
|
|
$scheduleData = $this->jobnetModel->checkScheduleForDelete($objectId);
|
|
if (!empty($jobnetData) || !empty($scheduleData)) {
|
|
$returnItemData = [
|
|
'objectId' => $objectId,
|
|
'jobnetData' => $jobnetData,
|
|
'scheduleData' => $scheduleData
|
|
];
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_REL_ERROR, $objectId, $returnItemData);
|
|
return $data;
|
|
}
|
|
//check if valid. Do
|
|
if ($detail->valid_flag == 1) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_DEL, $objectId);
|
|
return $data;
|
|
}
|
|
}
|
|
|
|
$this->beginTransaction();
|
|
$breakFlag = 0;
|
|
foreach ($selectRows as $value) {
|
|
$objectId = $value["id"];
|
|
if ($this->jobnetModel->deleteAllVer($objectId) == true) {
|
|
$this->logger->info('[' . $objectId . '] jobnet has been deleted.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
} else {
|
|
$breakFlag = 1;
|
|
}
|
|
}
|
|
if ($breakFlag == 1) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_FAIL, $objectId);
|
|
$this->rollback();
|
|
} else {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_SUCCESS, $objectId);
|
|
$this->commit();
|
|
}
|
|
$this->logger->info('jobnet version Disable process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return $data;
|
|
} catch (PDOException $e) {
|
|
if ($this->db->inTransaction()) {
|
|
$this->rollback();
|
|
}
|
|
return Constants::SERVICE_INTERNAL_SERVER_ERROR;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* It deletes the jobnet version from object_version screen.
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function delete()
|
|
{
|
|
$json = file_get_contents('php://input');
|
|
$para = json_decode($json);
|
|
$validationReq = (array)$para;
|
|
$validation = $this->validator->validate((array)$validationReq["params"], [
|
|
'data' => 'required',
|
|
'category' => 'required',
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
$responseData = $this->util->createResponseJson(Constants::DETAIL_BAD_REQUEST, "", $errors->firstOfAll());
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, $responseData);
|
|
exit;
|
|
}
|
|
$tmpValidationArray = (array)$validationReq["params"]->data;
|
|
$validation = $this->validator->validate((array)$tmpValidationArray['0'], [
|
|
'updateDate' => 'required',
|
|
'validState' => 'required',
|
|
'objectId' => 'required',
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
$responseData = $this->util->createResponseJson(Constants::DETAIL_BAD_REQUEST, "", $errors->firstOfAll());
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, $responseData);
|
|
exit;
|
|
}
|
|
$this->logger->info('jobnet delete process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
try {
|
|
$this->beginTransaction();
|
|
$deleteRows = $para->params->data;
|
|
foreach ($deleteRows as $selectRows) {
|
|
$objectId = $selectRows->objectId;
|
|
|
|
$detail = $this->jobnetModel->each($objectId, $selectRows->updateDate);
|
|
if ($detail == false) {
|
|
$data[Constants::AJAX_MESSAGE_TYPE] = Constants::AJAX_MESSAGE_RELOAD;
|
|
$data[Constants::AJAX_MESSAGE_DETAIL] = "db-lock";
|
|
$this->rollback();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, $data);
|
|
exit;
|
|
}
|
|
//check if valid. Do
|
|
if ($detail->valid_flag == 1) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_DEL, $objectId);
|
|
$this->rollback();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, $data);
|
|
exit;
|
|
}
|
|
|
|
$isLock = $this->objectLockService->process((object) ["objectId" => $objectId, "objectType" => Constants::OBJECT_TYPE_JOBNET, "attemptIp" => $this->objectLockService->getClientIpAddress()], Constants::SERVICE_TYPE_CHECK, true);
|
|
if ($isLock == Constants::SERVICE_MESSAGE_OBJ_LOCK_BY_OTHERS) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_LOCK, $objectId);
|
|
$this->rollback();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, $data);
|
|
exit;
|
|
} else if ($isLock == Constants::SERVICE_INTERNAL_SERVER_ERROR) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_SERVER_ERROR, $objectId);
|
|
$this->rollback();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, $data);
|
|
exit;
|
|
}
|
|
$totalRows = $this->jobnetModel->totalRows($objectId);
|
|
$breakflag = false;
|
|
if ($totalRows == count($deleteRows)) {
|
|
$jobnetData = $this->jobnetModel->checkJobnetForDelete($objectId);
|
|
$scheduleData = $this->jobnetModel->checkScheduleForDelete($objectId);
|
|
$this->logger->info("JOBNET DATA for delete .". json_encode($jobnetData));
|
|
$this->logger->info("Schedule Data for delete .". json_encode($scheduleData));
|
|
if (!empty($jobnetData) || !empty($scheduleData)) {
|
|
$returnItemData = [
|
|
'objectId' => $objectId,
|
|
'jobnetData' => $jobnetData,
|
|
'scheduleData' => $scheduleData
|
|
];
|
|
$tmp_returnItemData = json_encode($returnItemData);
|
|
|
|
$this->logger->info("Return Item Data .". $tmp_returnItemData);
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_REL_ERROR, $objectId, (array)$returnItemData);
|
|
$this->rollback();
|
|
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, $data);
|
|
exit;
|
|
}
|
|
}
|
|
}
|
|
if ($this->jobnetModel->deleteArr($objectId, $deleteRows) == true) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_SUCCESS, $objectId);
|
|
$this->commit();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, $data);
|
|
$this->logger->info('[' . $objectId . '] jobnet has been deleted.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
} else {
|
|
$breakflag = true;
|
|
}
|
|
|
|
if ($breakflag == true) {
|
|
$this->rollback();
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_FAIL, $objectId);
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_INCOMPLETE, $data);
|
|
}
|
|
// return $data;
|
|
} catch (PDOException $e) {
|
|
if ($this->db->inTransaction()) {
|
|
$this->rollback();
|
|
}
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_SERVER_ERROR, $objectId);
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, $data);
|
|
}
|
|
|
|
$this->logger->info('Jobnet delete process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
/**
|
|
* It checks the object data is latest or not.
|
|
*
|
|
* @param string $id id of the jobnet.
|
|
* @param string $date updated date of the jobnet.
|
|
* @param string $validstate valid flag of the jobnet.
|
|
* @param object $dbLatest object of the latest jobnet.
|
|
* @return bool
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function checkLatest($id, $date, $dbLatest)
|
|
{
|
|
$updated = false;
|
|
if ($id == $dbLatest->jobnet_id && $date == $dbLatest->update_date) {
|
|
$updated = true;
|
|
}
|
|
return $updated;
|
|
}
|
|
/**
|
|
* It enables the jobnet object. It means that change the valid flag of the jobnet to 1.
|
|
*
|
|
* @param object $objectId id of the jobnet.
|
|
* @param object $updateDate updated date of the jobnet.
|
|
* @throws JobnetNotExecutableException if the jobnet is not executable.
|
|
* @return array|string could be an array if it is success, could be a string if not.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function enable($objectId, $updateDate)
|
|
{
|
|
$this->logger->info("Update for enable .". $updateDate);
|
|
$this->logger->info('jobnet version enable process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
try {
|
|
$jobIcon = $this->jobnetModel->getJobControlData($objectId, $updateDate);
|
|
$flow = $this->jobnetModel->getFlowData($objectId, $updateDate);
|
|
|
|
$tmp_flow = json_encode($flow);
|
|
$this->logger->info("Job Icon . ". $jobIcon);
|
|
$this->logger->info("Flow for enable . ". $tmp_flow);
|
|
$isExecutable = $this->isExecutableJobnet($jobIcon, $flow, false, $objectId);
|
|
$this->logger->info("It is exec enable jobnet". $isExecutable);
|
|
if (is_array($isExecutable)) {
|
|
return $isExecutable;
|
|
}
|
|
|
|
$this->logger->info("After is executable.". $objectId);
|
|
$this->logger->info("After is executable.". $updateDate);
|
|
$this->jobnetModel->changeAllStatusToDisabled($objectId);
|
|
if ($this->jobnetModel->changeStatusToEnabled($objectId, $updateDate) == true) {
|
|
// $data = (array)$this->util->createResponseJson(Constants::DETAIL_SUCCESS, $objectId);
|
|
// $this->logger->debug('Jobnet version enable process is successful.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_SUCCESS, $objectId);
|
|
} else {
|
|
// $data = (array)$this->util->createResponseJson(Constants::DETAIL_FAIL, $objectId);
|
|
// $this->logger->info('Jobnet version enable failed for id:' . $objectId . ' updated date:' . $updateDate . '.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_FAIL, $objectId);
|
|
}
|
|
$this->logger->debug('jobnet enable process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return $data;
|
|
} catch (PDOException $e) {
|
|
return Constants::SERVICE_INTERNAL_SERVER_ERROR;
|
|
} catch (JobnetNotExecutableException $e) {
|
|
throw new JobnetNotExecutableException($e->getMessage(), $e->getCode());
|
|
}
|
|
}
|
|
/**
|
|
* It disables the jobnet object. It means that change the valid flag of the jobnet to 0.
|
|
*
|
|
* @param object $objectId id of the jobnet.
|
|
* @param object $updateDate updated date of the jobnet.
|
|
* @return array|string could be an array if it is success, could be a string if not.
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function disable($objectId, $updateDate)
|
|
{
|
|
|
|
try {
|
|
$enableSchedule = $this->jobnetModel->checkScheduleEnable($objectId);
|
|
if (!empty($enableSchedule)) {
|
|
$returnItemData = [
|
|
'objectId' => $objectId,
|
|
'scheduleData' => $enableSchedule
|
|
];
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_REL_ERROR, $objectId, (array)$returnItemData);
|
|
return $data;
|
|
}
|
|
if ($this->jobnetModel->changeStatusToDisabled($objectId, $updateDate) == true) {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_SUCCESS, $objectId);
|
|
} else {
|
|
$data = (array)$this->util->createResponseJson(Constants::DETAIL_FAIL, $objectId);
|
|
}
|
|
$this->logger->debug('jobnet disable process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
return $data;
|
|
} catch (PDOException $e) {
|
|
return Constants::SERVICE_INTERNAL_SERVER_ERROR;
|
|
}
|
|
}
|
|
|
|
/**
|
|
* api endpoint that checks jobnet exist
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function checkJobnetExist(): void
|
|
{
|
|
$this->logger->info('Check jobnet exist process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
try {
|
|
|
|
$json = file_get_contents('php://input');
|
|
|
|
$params = Util::jsonDecode($json)["params"];
|
|
|
|
$validation = $this->validator->validate($params, [
|
|
'jobnetId' => 'required'
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, [Constants::API_RESPONSE_MESSAGE => $errors->firstOfAll()]);
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . implode(", ", $errors->firstOfAll()), ['controller' => __METHOD__]);
|
|
} else {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_MESSAGE => $this->checkID($params["jobnetId"])]);
|
|
}
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
$this->logger->info('Check jobnet exist process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that checks job exist
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function checkJobExist(): void
|
|
{
|
|
$this->logger->info('Create job exist process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
try {
|
|
|
|
$json = file_get_contents('php://input');
|
|
$params = Util::jsonDecode($json)["params"];
|
|
|
|
$validation = $this->validator->validate($params, [
|
|
'jobnetId' => 'required',
|
|
'jobs' => 'required'
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, [Constants::API_RESPONSE_MESSAGE => $errors->firstOfAll()]);
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . implode(", ", $errors->firstOfAll()), ['controller' => __METHOD__]);
|
|
} else {
|
|
$linkJobnetId = $params["jobnetId"];
|
|
$isExist = true;
|
|
|
|
foreach ($params["jobs"] as $job) {
|
|
// Get the latest linkJobnetInfo
|
|
$linkJobnetInfo = $this->jobnetModel->GetMaxUpdateDateEntityById($linkJobnetId);
|
|
|
|
// Check job control data
|
|
$jobControlData = $this->jobnetModel->getJobControlData($linkJobnetInfo->jobnet_id, $linkJobnetInfo->update_date, $job);
|
|
|
|
if (empty($jobControlData)) {
|
|
$isExist = false;
|
|
break;
|
|
}
|
|
|
|
// Get jobnet icon data
|
|
$jobnetIconData = $this->jobnetModel->getJobnetIconData($linkJobnetInfo->jobnet_id, $job, $linkJobnetInfo->update_date);
|
|
|
|
if (!empty($jobnetIconData)) {
|
|
$linkJobnetId = $jobnetIconData[0]->link_jobnet_id;
|
|
}
|
|
}
|
|
if ($isExist) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_MESSAGE_RECORD_EXIST]);
|
|
} else {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_MESSAGE_RECORD_NOT_EXIST]);
|
|
}
|
|
}
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
$this->logger->info('Create job exist process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
/**
|
|
* api endpoint that checks jobnet exist
|
|
*
|
|
* @since Method available since version 6.1.0
|
|
*/
|
|
public function getJobnetInfo(): void
|
|
{
|
|
$this->logger->info('Check jobnet exist process is started.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
|
|
try {
|
|
|
|
$json = file_get_contents('php://input');
|
|
|
|
$params = Util::jsonDecode($json)["params"];
|
|
|
|
$validation = $this->validator->validate($params, [
|
|
'jobnetId' => 'required'
|
|
]);
|
|
|
|
if ($validation->fails()) {
|
|
$errors = $validation->errors();
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_BAD_REQUEST, [Constants::API_RESPONSE_MESSAGE => $errors->firstOfAll()]);
|
|
$this->logger->info(Constants::SERVICE_MESSAGE_VALIDATION_FAIL . implode(", ", $errors->firstOfAll()), ['controller' => __METHOD__]);
|
|
} else {
|
|
$jobnetInfo = $this->getValidORMaxUpdateDateEntityById($params["jobnetId"]);
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_OK, [Constants::API_RESPONSE_DATA => $jobnetInfo]);
|
|
}
|
|
} catch (PDOException $e) {
|
|
echo Util::response(Constants::API_RESPONSE_TYPE_500, [Constants::API_RESPONSE_MESSAGE => Constants::SERVICE_INTERNAL_SERVER_ERROR]);
|
|
$this->logger->error($e->getMessage(), ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
|
|
$this->logger->info('Check jobnet exist process is finished.', ['controller' => __METHOD__, 'user' => $_SESSION['userInfo']['userName']]);
|
|
}
|
|
}
|