Status

Summary

No summary available.

Source

File: src/BigCommerce/Import/Runner/Status.php

class Status {
	use No_Cache_Options;

	const NOT_STARTED              = 'not_started';
	const STARTED                  = 'started';
	const FETCHING_LISTINGS        = 'fetching_listings';
	const FETCHED_LISTINGS         = 'fetched_listings';
	const INITIALIZING_CHANNEL     = 'initializing_channel';
	const INITIALIZED_CHANNEL      = 'initialized_channel';
	const FETCHING_PRODUCTS        = 'fetching_products';
	const FETCHED_PRODUCTS         = 'fetched_products';
	const MARKING_DELETED_PRODUCTS = 'marking_deleted_products';
	const MARKED_DELETED_PRODUCTS  = 'marked_deleted_products';
	const PROCESSING_QUEUE         = 'processing_queue';
	const PROCESSED_QUEUE          = 'processed_queue';
	const FETCHING_STORE           = 'fetching_store';
	const FETCHED_STORE            = 'fetched_store';
	const FETCHING_CURRENCIES      = 'fetching_currencies';
	const FETCHED_CURRENCIES       = 'fetched_currencies';
	const CLEANING                 = 'cleaning';
	const COMPLETED                = 'completed';
	const FAILED                   = 'failed';
	const UPDATING_CATEGORIES      = 'updating_categories';
	const UPDATED_CATEGORIES       = 'updated_categories';
	const UPDATING_BRANDS          = 'updating_brands';
	const UPDATED_BRANDS           = 'updated_brands';
	const PURGING_CATEGORIES       = 'purging_categories';
	const PURGED_CATEGORIES        = 'purged_categories';
	const PURGING_BRANDS           = 'purging_brands';
	const PURGED_BRANDS            = 'purged_brands';
	const RESIZING_IMAGES          = 'resizing_images';
	const RESIZED_IMAGES           = 'resized_images';

	const CURRENT_LOG  = 'bigcommerce_current_import_status_log';
	const PREVIOUS_LOG = 'bigcommerce_previous_import_status_log';

	/**
	 * @return array The `timestamp` and `status` of the last update to the current import
	 */
	public function current_status() {
		return $this->get_status( self::CURRENT_LOG );
	}

	/**
	 * @return array The `timestamp` and `status` of the last update to the previous import
	 */
	public function previous_status() {
		return $this->get_status( self::PREVIOUS_LOG );
	}

	/**
	 * Add a status to the log for the current import. The status will be
	 * appended to the log, even if it is the same as the current status.
	 *
	 * @param string $status
	 *
	 * @return void
	 */
	public function set_status( $status ) {
		$log = $this->current_log();

		// cast timestamp to string to preserve microtime
		$log[ (string) microtime( true ) ] = $status;
		$this->update_option( self::CURRENT_LOG, $log, false );
		do_action( 'bigcommerce/import/set_status', $status );
	}

	/**
	 * Overwrite the previous log with the current log and empty the current log
	 *
	 * @return void
	 */
	public function rotate_logs() {
		$log = $this->current_log();
		/**
		 * Rotate out the current log into the previous log slot
		 *
		 * @param array $log The current log
		 */
		do_action( 'bigcommerce/import/logs/rotate', $log );
		$this->update_option( self::PREVIOUS_LOG, $log, false );
		$this->update_option( self::CURRENT_LOG, [], false );
		/**
		 * Logs have been rotated
		 *
		 * @param array $log The previous log
		 */
		do_action( 'bigcommerce/import/logs/rotated', $log );
	}

	/**
	 * @return array
	 */
	private function current_log() {
		return $this->get_log( self::CURRENT_LOG );
	}

	/**
	 * @return array
	 */
	private function previous_log() {
		return $this->get_log( self::PREVIOUS_LOG );
	}


	/**
	 * @param string $which Log to get the status from
	 *
	 * @return array The `timestamp` and `status` of the last update
	 *               to the indicated log
	 */
	private function get_status( $which ) {
		$log = $this->get_log( $which );
		if ( empty( $log ) ) {
			return [
				'timestamp' => 0,
				'status'    => self::NOT_STARTED,
			];
		}
		$status    = end( $log );
		$timestamp = key( $log );

		return [
			'timestamp' => floatval( $timestamp ),
			'status'    => $status,
		];
	}

	/**
	 * @param string $which The name of the option storing the log.
	 *
	 * @return array
	 */
	private function get_log( $which ) {
		$log = $this->get_option( $which, [] );
		if ( ! is_array( $log ) ) {
			$log = [];
		}
		ksort( $log );

		return $log;
	}
}

Methods

  • current_status
  • previous_status
  • rotate_logs — Overwrite the previous log with the current log and empty the current log
  • set_status — Add a status to the log for the current import. The status will be appended to the log, even if it is the same as the current status.

User Contributed Notes

You must log in before being able to contribute a note or feedback.