1:   2:   3:   4:   5:   6:   7:   8:   9:  10:  11:  12:  13:  14:  15:  16:  17:  18:  19:  20:  21:  22:  23:  24:  25:  26:  27:  28:  29:  30:  31:  32:  33:  34:  35:  36:  37:  38:  39:  40:  41:  42:  43:  44:  45:  46:  47:  48:  49:  50:  51:  52:  53:  54:  55:  56:  57:  58:  59:  60:  61:  62:  63:  64:  65:  66:  67:  68:  69:  70:  71:  72:  73:  74:  75:  76:  77:  78:  79:  80:  81:  82:  83:  84:  85:  86:  87:  88:  89:  90:  91:  92:  93:  94:  95:  96:  97:  98:  99: 100: 101: 102: 103: 104: 105: 106: 107: 108: 109: 110: 111: 112: 113: 114: 115: 116: 117: 118: 119: 120: 121: 122: 123: 124: 125: 126: 127: 128: 129: 130: 131: 132: 133: 134: 135: 136: 137: 138: 139: 140: 141: 142: 143: 144: 145: 146: 147: 148: 149: 150: 151: 152: 153: 154: 155: 156: 157: 158: 159: 160: 161: 162: 163: 164: 165: 166: 167: 168: 169: 170: 171: 172: 173: 174: 175: 176: 177: 
<?php
namespace Omeka\Entity;

use DateTime;
use Doctrine\ORM\Event\LifecycleEventArgs;

/**
 * @Entity
 * @HasLifecycleCallbacks
 */
class Job extends AbstractEntity
{
    /**#@+
     * Job statuses
     *
     * STATUS_STARTING:    The job was dispatched.
     * STATUS_STOPPING:    The job is currently stopping.
     * STATUS_IN_PROGRESS: The job was sent and is in progress.
     * STATUS_COMPLETED:   The job was performed and is sucessfully completed.
     * STATUS_STOPPED:     The job was stopped and most likely incomplete.
     * STATUS_ERROR:       There was an unrecoverable error during the job.
     */
    const STATUS_STARTING = 'starting'; // @translate
    const STATUS_STOPPING = 'stopping'; // @translate
    const STATUS_IN_PROGRESS = 'in_progress'; // @translate
    const STATUS_COMPLETED = 'completed'; // @translate
    const STATUS_STOPPED = 'stopped'; // @translate
    const STATUS_ERROR = 'error'; // @translate
    /**#@-*/

    /**
     * @Id
     * @Column(type="integer")
     * @GeneratedValue
     */
    protected $id;

    /**
     * @Column(nullable=true)
     */
    protected $pid;

    /**
     * @Column(nullable=true)
     */
    protected $status;

    /**
     * @Column
     */
    protected $class;

    /**
     * @Column(type="json_array", nullable=true)
     */
    protected $args;

    /**
     * @Column(type="text", nullable=true)
     */
    protected $log;

    /**
     * @ManyToOne(targetEntity="User")
     * @JoinColumn(onDelete="SET NULL")
     */
    protected $owner;

    /**
     * @Column(type="datetime")
     */
    protected $started;

    /**
     * @Column(type="datetime", nullable=true)
     */
    protected $ended;

    public function getId()
    {
        return $this->id;
    }

    public function setPid($pid)
    {
        $this->pid = is_null($pid) ? null : trim($pid);
    }

    public function getPid()
    {
        return $this->pid;
    }

    public function setStatus($status)
    {
        $this->status = $status;
    }

    public function getStatus()
    {
        return $this->status;
    }

    public function setClass($class)
    {
        $this->class = trim($class);
    }

    public function getClass()
    {
        return $this->class;
    }

    public function setArgs($args)
    {
        $this->args = $args;
    }

    public function getArgs()
    {
        return $this->args;
    }

    public function setLog($log)
    {
        $this->log = $log;
    }

    public function addLog($log)
    {
        $this->log .= $log . PHP_EOL;
    }

    public function getLog()
    {
        return $this->log;
    }

    public function setOwner(User $owner = null)
    {
        $this->owner = $owner;
    }

    public function getOwner()
    {
        return $this->owner;
    }

    public function setStarted(DateTime $started)
    {
        $this->started = $started;
    }

    public function getStarted()
    {
        return $this->started;
    }

    public function setEnded(DateTime $ended)
    {
        $this->ended = $ended;
    }

    public function getEnded()
    {
        return $this->ended;
    }

    /**
     * @PrePersist
     */
    public function prePersist(LifecycleEventArgs $eventArgs)
    {
        $this->started = new DateTime('now');
    }
}