# packeta/1.4/src/Packetery/Module/Log/DbLogger.php

Packeta, version 1.4. 130 lines.

- Page: https://pluginprobe.com/plugins/packeta/1.4/code/src/Packetery/Module/Log/DbLogger.php
- Raw: https://pluginprobe.com/plugins/packeta/1.4/raw/src/Packetery/Module/Log/DbLogger.php
- Modified: 2022-10-26T06:15:36+00:00

Line numbers below start at 1. Link to a line or a range by appending a fragment to the
page URL, for example `https://pluginprobe.com/plugins/packeta/1.4/code/src/Packetery/Module/Log/DbLogger.php#L10-L20`.

```php
<?php
/**
 * Class DbLogger
 *
 * @package Packetery\Module\Log
 */

declare( strict_types=1 );


namespace Packetery\Module\Log;

use Packetery\Core\Helper;
use Packetery\Core\Log\Record;

/**
 * Class DbLogger
 *
 * @package Packetery\Module\Log
 */
class DbLogger implements \Packetery\Core\Log\ILogger {

	/**
	 * Log repository.
	 *
	 * @var Repository
	 */
	private $logRepository;

	/**
	 * Constructor.
	 *
	 * @param Repository $logRepository Log repository.
	 */
	public function __construct( Repository $logRepository ) {
		$this->logRepository = $logRepository;
	}

	/**
	 * Registers logger.
	 *
	 * @return void
	 */
	public function register(): void {
	}

	/**
	 * Adds record.
	 *
	 * @param Record $record Record.
	 *
	 * @return void
	 * @throws \Exception From DateTimeImmutable.
	 */
	public function add( Record $record ): void {
		if ( null === $record->date ) {
			$record->date = Helper::now();
		}

		$this->logRepository->save( $record );
	}

	/**
	 * Gets records.
	 *
	 * @param mixed $orderId Order ID.
	 * @param array $sorting Sorting config.
	 * @param int   $limit   Limit.
	 *
	 * @return iterable|Record[]
	 * @throws \Exception From DateTimeImmutable.
	 */
	public function getRecords( $orderId, array $sorting = [], int $limit = 100 ): iterable {
		$arguments = [
			'orderby' => $sorting,
			'limit'   => $limit,
		];

		if ( is_numeric( $orderId ) ) {
			$arguments['order_id'] = $orderId;
		}

		$logs = $this->logRepository->find( $arguments );
		if ( ! $logs ) {
			return [];
		}

		return $logs;
	}

	/**
	 * Counts records.
	 *
	 * @param int|null $orderId Order ID.
	 *
	 * @return int
	 */
	public function countRecords( $orderId ): int {
		if ( is_numeric( $orderId ) ) {
			return $this->logRepository->countByOrderId( (int) $orderId );
		}

		if ( null === $orderId ) {
			return $this->logRepository->countAll();
		}
	}

	/**
	 * Gets logs for given period as array.
	 *
	 * @param array $dateQuery Date_query compatible array.
	 *
	 * @return array
	 * @throws \Exception From DateTimeImmutable.
	 */
	public function getForPeriodAsArray( array $dateQuery ): iterable {
		$arguments = [
			'orderby'    => [ 'date' => 'ASC' ],
			'date_query' => $dateQuery,
		];

		$logs = $this->logRepository->find( $arguments );
		if ( ! $logs ) {
			return [];
		}

		return $logs;
	}
}

```
