*/ public $payload = array(); /** * GMT datetime the row was inserted. * * @var string */ public $created_at = ''; /** * Builds a job from a database row. * * @param array $row Row as returned by `$wpdb->get_row( …, ARRAY_A )`. * @return Job */ public static function from_row( array $row ): self { $job = new self(); $job->id = isset( $row['id'] ) ? (int) $row['id'] : 0; $job->attachment_id = isset( $row['attachment_id'] ) ? (int) $row['attachment_id'] : 0; $job->job_type = isset( $row['job_type'] ) ? (string) $row['job_type'] : ''; $job->status = isset( $row['status'] ) ? (string) $row['status'] : self::STATUS_PENDING; $job->priority = isset( $row['priority'] ) ? (int) $row['priority'] : 10; $job->attempts = isset( $row['attempts'] ) ? (int) $row['attempts'] : 0; $job->available_at = isset( $row['available_at'] ) ? (string) $row['available_at'] : ''; $job->claimed_at = isset( $row['claimed_at'] ) && null !== $row['claimed_at'] ? (string) $row['claimed_at'] : null; $job->finished_at = isset( $row['finished_at'] ) && null !== $row['finished_at'] ? (string) $row['finished_at'] : null; $job->last_error = isset( $row['last_error'] ) && null !== $row['last_error'] ? (string) $row['last_error'] : ''; $job->created_at = isset( $row['created_at'] ) ? (string) $row['created_at'] : ''; $payload = array(); if ( isset( $row['payload'] ) && is_string( $row['payload'] ) && '' !== $row['payload'] ) { $decoded = json_decode( $row['payload'], true ); if ( is_array( $decoded ) ) { $payload = $decoded; } } $job->payload = $payload; return $job; } /** * Returns a payload value. * * @param string $key Payload key. * @param mixed $default_value Value returned when the key is absent. * @return mixed */ public function get( $key, $default_value = null ) { return array_key_exists( $key, $this->payload ) ? $this->payload[ $key ] : $default_value; } /** * Every recognised job type. * * @return string[] */ public static function types(): array { $core_types = array( self::TYPE_OFFLOAD, self::TYPE_DELETE, self::TYPE_PURGE, self::TYPE_PULLBACK, self::TYPE_CONVERT, self::TYPE_CLEANUP, self::TYPE_MIGRATE_COPY, self::TYPE_MIGRATE_POLL, self::TYPE_MIGRATE_VERIFY, ); $types = $core_types; /** * Filters registered queue job types. * * @param string[] $types Job type slugs. */ $types = apply_filters( 'r2clouder_job_types', $types ); if ( ! is_array( $types ) ) { return array(); } $types = array_merge( $core_types, array_map( 'sanitize_key', $types ) ); return array_values( array_unique( array_filter( $types ) ) ); } /** * Every recognised status. * * @return string[] */ public static function statuses(): array { return array( self::STATUS_PENDING, self::STATUS_CLAIMED, self::STATUS_DONE, self::STATUS_FAILED, ); } }