295 lines
8.0 KiB
PHP
295 lines
8.0 KiB
PHP
|
<?php
|
||
|
|
||
|
/**
|
||
|
* This program is free software; you can redistribute it and/or
|
||
|
* modify it under the terms of the GNU General Public License
|
||
|
* as published by the Free Software Foundation; under version 2
|
||
|
* of the License (non-upgradable).
|
||
|
*
|
||
|
* This program is distributed in the hope that it will be useful,
|
||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||
|
* GNU General Public License for more details.
|
||
|
*
|
||
|
* You should have received a copy of the GNU General Public License
|
||
|
* along with this program; if not, write to the Free Software
|
||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||
|
*
|
||
|
* Copyright (c) 2017-2021 (original work) Open Assessment Technologies SA (under the project TAO-PRODUCT);
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
namespace oat\taoTaskQueue\model\Entity;
|
||
|
|
||
|
use common_exception_Error;
|
||
|
use common_report_Report as Report;
|
||
|
use DateTime;
|
||
|
use oat\oatbox\reporting\Report as NewReport;
|
||
|
use oat\tao\model\taskQueue\TaskLog\Entity\TaskLogEntity as BaseTaskLogEntity;
|
||
|
use oat\taoTaskQueue\model\TaskLogBroker\TaskLogBrokerInterface;
|
||
|
use oat\taoTaskQueue\model\ValueObjects\TaskLogCategorizedStatus;
|
||
|
|
||
|
/**
|
||
|
* @deprecated Use \oat\tao\model\taskQueue\TaskLog\Entity\TaskLogEntity
|
||
|
*/
|
||
|
class TaskLogEntity extends BaseTaskLogEntity implements TaskLogEntityInterface
|
||
|
{
|
||
|
/** @var string */
|
||
|
private $id;
|
||
|
|
||
|
/** @var string */
|
||
|
private $parentId;
|
||
|
|
||
|
/** @var string */
|
||
|
private $taskName;
|
||
|
|
||
|
/** @var array */
|
||
|
private $parameters;
|
||
|
|
||
|
/** @var string */
|
||
|
private $label;
|
||
|
|
||
|
/** @var TaskLogCategorizedStatus */
|
||
|
private $status;
|
||
|
|
||
|
/** @var bool */
|
||
|
private $masterStatus;
|
||
|
|
||
|
/** @var string */
|
||
|
private $owner;
|
||
|
|
||
|
/** @var Report */
|
||
|
private $report;
|
||
|
|
||
|
/** @var DateTime */
|
||
|
private $createdAt;
|
||
|
|
||
|
/** @var DateTime */
|
||
|
private $updatedAt;
|
||
|
|
||
|
/**
|
||
|
* TaskLogEntity constructor.
|
||
|
*
|
||
|
* @param string $id
|
||
|
* @param string $parentId
|
||
|
* @param string $taskName
|
||
|
* @param TaskLogCategorizedStatus $status
|
||
|
* @param boolean $masterStatus
|
||
|
* @param array $parameters
|
||
|
* @param string $label
|
||
|
* @param string $owner
|
||
|
* @param DateTime|null $createdAt
|
||
|
* @param DateTime|null $updatedAt
|
||
|
* @param Report|null $report
|
||
|
*/
|
||
|
public function __construct(
|
||
|
$id,
|
||
|
$parentId,
|
||
|
$taskName,
|
||
|
TaskLogCategorizedStatus $status,
|
||
|
array $parameters,
|
||
|
$label,
|
||
|
$owner,
|
||
|
DateTime $createdAt = null,
|
||
|
DateTime $updatedAt = null,
|
||
|
Report $report = null,
|
||
|
$masterStatus = false
|
||
|
) {
|
||
|
$this->id = $id;
|
||
|
$this->parentId = $parentId;
|
||
|
$this->taskName = $taskName;
|
||
|
$this->status = $status;
|
||
|
$this->parameters = $parameters;
|
||
|
$this->label = $label;
|
||
|
$this->owner = $owner;
|
||
|
$this->report = $report;
|
||
|
$this->createdAt = $createdAt;
|
||
|
$this->updatedAt = $updatedAt;
|
||
|
$this->masterStatus = $masterStatus;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @param array $row
|
||
|
* @param string $dateFormat
|
||
|
* @return TaskLogEntity
|
||
|
* @throws common_exception_Error
|
||
|
*/
|
||
|
public static function createFromArray(array $row, string $dateFormat = 'Y-m-d H:i:s')
|
||
|
{
|
||
|
return new self(
|
||
|
$row[TaskLogBrokerInterface::COLUMN_ID],
|
||
|
$row[TaskLogBrokerInterface::COLUMN_PARENT_ID],
|
||
|
$row[TaskLogBrokerInterface::COLUMN_TASK_NAME],
|
||
|
TaskLogCategorizedStatus::createFromString($row[TaskLogBrokerInterface::COLUMN_STATUS]),
|
||
|
isset($row[TaskLogBrokerInterface::COLUMN_PARAMETERS]) ? json_decode($row[TaskLogBrokerInterface::COLUMN_PARAMETERS], true) : [],
|
||
|
isset($row[TaskLogBrokerInterface::COLUMN_LABEL]) ? $row[TaskLogBrokerInterface::COLUMN_LABEL] : '',
|
||
|
isset($row[TaskLogBrokerInterface::COLUMN_OWNER]) ? $row[TaskLogBrokerInterface::COLUMN_OWNER] : '',
|
||
|
isset($row[TaskLogBrokerInterface::COLUMN_CREATED_AT]) ? DateTime::createFromFormat($dateFormat, $row[TaskLogBrokerInterface::COLUMN_CREATED_AT], new \DateTimeZone('UTC')) : null,
|
||
|
isset($row[TaskLogBrokerInterface::COLUMN_UPDATED_AT]) ? DateTime::createFromFormat($dateFormat, $row[TaskLogBrokerInterface::COLUMN_UPDATED_AT], new \DateTimeZone('UTC')) : null,
|
||
|
NewReport::jsonUnserialize($row[TaskLogBrokerInterface::COLUMN_REPORT]),
|
||
|
isset($row[TaskLogBrokerInterface::COLUMN_MASTER_STATUS]) ? $row[TaskLogBrokerInterface::COLUMN_MASTER_STATUS] : false
|
||
|
);
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getId()
|
||
|
{
|
||
|
return $this->id;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getParentId()
|
||
|
{
|
||
|
return $this->parentId;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getTaskName()
|
||
|
{
|
||
|
return $this->taskName;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function getParameters()
|
||
|
{
|
||
|
return $this->parameters;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getLabel()
|
||
|
{
|
||
|
return $this->label;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getOwner()
|
||
|
{
|
||
|
return $this->owner;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return Report|null
|
||
|
*/
|
||
|
public function getReport()
|
||
|
{
|
||
|
return $this->report;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return DateTime|null
|
||
|
*/
|
||
|
public function getCreatedAt()
|
||
|
{
|
||
|
return $this->createdAt;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return DateTime|null
|
||
|
*/
|
||
|
public function getUpdatedAt()
|
||
|
{
|
||
|
return $this->updatedAt;
|
||
|
}
|
||
|
|
||
|
|
||
|
/**
|
||
|
* @return TaskLogCategorizedStatus
|
||
|
*/
|
||
|
public function getStatus()
|
||
|
{
|
||
|
return $this->status;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return boolean
|
||
|
*/
|
||
|
public function isMasterStatus()
|
||
|
{
|
||
|
return (bool) $this->masterStatus;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* Returns the file name from the generated report.
|
||
|
*
|
||
|
* CAUTION: it is not 100% sure that the returned string is really a file name because different reports set different values as data.
|
||
|
* So this return value can be any kind of string. Please check the file whether it exist or not before usage.
|
||
|
*
|
||
|
* @return string
|
||
|
*/
|
||
|
public function getFileNameFromReport()
|
||
|
{
|
||
|
$filename = '';
|
||
|
|
||
|
if ($this->getStatus()->isFailed() || is_null($this->getReport())) {
|
||
|
return $filename;
|
||
|
}
|
||
|
|
||
|
/** @var Report $successReport */
|
||
|
foreach ($this->getReport()->getSuccesses() as $successReport) {
|
||
|
$data = $successReport->getData();
|
||
|
if (is_string($data)) {
|
||
|
$filename = $data;
|
||
|
break;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $filename;
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function jsonSerialize()
|
||
|
{
|
||
|
return $this->toArray();
|
||
|
}
|
||
|
|
||
|
/**
|
||
|
* @return array
|
||
|
*/
|
||
|
public function toArray()
|
||
|
{
|
||
|
// add basic fields which always have values
|
||
|
$rs = [
|
||
|
'id' => $this->id,
|
||
|
'taskName' => $this->taskName,
|
||
|
'status' => (string) $this->status,
|
||
|
'masterStatus' => (bool) $this->masterStatus,
|
||
|
'statusLabel' => $this->status->getLabel()
|
||
|
];
|
||
|
|
||
|
// add other fields only if they have values
|
||
|
if ($this->label) {
|
||
|
$rs['taskLabel'] = $this->label;
|
||
|
}
|
||
|
|
||
|
if ($this->createdAt instanceof \DateTime) {
|
||
|
$rs['createdAt'] = $this->createdAt->getTimestamp();
|
||
|
$rs['createdAtElapsed'] = (new \DateTime('now', new \DateTimeZone('UTC')))->getTimestamp() - $this->createdAt->getTimestamp();
|
||
|
}
|
||
|
|
||
|
if ($this->updatedAt instanceof \DateTime) {
|
||
|
$rs['updatedAt'] = $this->updatedAt->getTimestamp();
|
||
|
$rs['updatedAtElapsed'] = (new \DateTime('now', new \DateTimeZone('UTC')))->getTimestamp() - $this->updatedAt->getTimestamp();
|
||
|
}
|
||
|
|
||
|
if ($this->report instanceof Report) {
|
||
|
$rs['report'] = $this->report->toArray();
|
||
|
}
|
||
|
|
||
|
return $rs;
|
||
|
}
|
||
|
}
|