%PDF- %PDF-
Mini Shell

Mini Shell

Direktori : /home/bitrix/www/bitrix/modules/sender/lib/ui/
Upload File :
Create Path :
Current File : /home/bitrix/www/bitrix/modules/sender/lib/ui/tileview.php

<?php
/**
 * Bitrix Framework
 * @package bitrix
 * @subpackage sender
 * @copyright 2001-2012 Bitrix
 */
namespace Bitrix\Sender\UI;

use Bitrix\Main\Localization\Loc;
use Bitrix\Main\Type\DateTime;

Loc::loadMessages(__FILE__);

/**
 * Class TileView
 * @package Bitrix\Sender\UI
 */
class TileView
{
	const MAX_COUNT = 4;
	const COLOR_GREY = '#eef2f4';

	const SECTION_ALL = 'all';
	const SECTION_LAST = 'last';
	const SECTION_FREQ = 'freq';
	const SECTION_SYS = 'system';
	const SECTION_MY = 'my';

	/** @var array $tiles List of tiles. */
	protected $tiles = [];

	/** @var array $sections List of sections. */
	protected $sections = [];

	/**
	 * Create instance.
	 *
	 * @return static
	 */
	public static function create()
	{
		return new static();
	}

	/**
	 * Constructor.
	 */
	public function __construct()
	{

	}

	/**
	 * Add tile.
	 *
	 * @param string|null $id ID.
	 * @param string $name Name.
	 * @param array $data Data.
	 * @param string $bgColor Background color.
	 * @param string $color Color.
	 *
	 * @return $this
	 */
	public function addTile($id = null, $name, $data = [], $bgColor = null, $color = null)
	{
		$this->tiles[] = $this->getTile($id, $name, $data, $bgColor, $color);
		return $this;
	}

	/**
	 * Get tile.
	 *
	 * @param string|null $id ID.
	 * @param string $name Name.
	 * @param array $data Data.
	 * @param string $bgColor Background color.
	 * @param string $color Color.
	 *
	 * @return array
	 */
	public function getTile($id = null, $name, $data = [], $bgColor = null, $color = null)
	{
		return [
			'id' => $id,
			'name' => $name,
			'data' => $data,
			'bgcolor' => $bgColor,
			'color' => $color
		];
	}

	/**
	 * Get tiles.
	 *
	 * @return array
	 */
	public function getTiles()
	{
		return $this->tiles;
	}

	/**
	 * Remove tiles.
	 *
	 * @return $this
	 */
	public function removeTiles()
	{
		$this->tiles = [];
		return $this;
	}

	/**
	 * Add section.
	 *
	 * @param string $id ID.
	 * @param string $name Name.
	 *
	 * @return $this
	 */
	public function addSection($id, $name = null)
	{
		$name = $name ?: Loc::getMessage('SENDER_UI_TILEVIEW_SECTION_' . strtoupper($id));
		$name = $name ?: $id;

		$this->sections[$id] = [
			'id' => $id,
			'name' => $name,
			'items' => [],
		];
		return $this;
	}

	/**
	 * Get sections.
	 *
	 * @return array
	 */
	public function getSections()
	{
		return $this->sections;
	}

	/**
	 * Remove sections.
	 *
	 * @return $this
	 */
	public function removeSections()
	{
		$this->sections = [];
		return $this;
	}

	/**
	 * Get data for view.
	 *
	 * @return array
	 */
	public function get()
	{
		$list = $this->sections;
		$sections = array_keys($list);

		if (in_array(self::SECTION_ALL, $sections))
		{
			$list[self::SECTION_ALL]['items'] = $this->tiles;
		}

		foreach ($this->tiles as $tile)
		{
			foreach ($sections as $section)
			{
				if ($section === self::SECTION_ALL)
				{
					continue;
				}

				if (empty($tile['data'][$section]))
				{
					continue;
				}

				self::prepareTileForSorting($tile, $section);
				$list[$section]['items'][] = $tile;
			}
		}

		self::sortTiles($list);
		return array_values($list);
	}

	protected static function prepareTileForSorting(&$tile, $section)
	{
		if ($section === self::SECTION_LAST)
		{
			$last = $tile['data'][self::SECTION_LAST];
			if ($last instanceof DateTime)
			{
				$tile['data'][self::SECTION_LAST] = $last->getTimestamp();
			}
		}
	}

	protected static function sortTiles(&$list)
	{
		foreach ([self::SECTION_LAST, self::SECTION_FREQ] as $section)
		{
			if (!isset($list[$section]))
			{
				continue;
			}

			// sort & cut
			usort(
				$list[$section]['items'],
				function ($a, $b) use ($section)
				{
					return ($a['data'][$section] > $b['data'][$section]) ? -1 : 1;
				}
			);
			$list[$section]['items'] = array_slice($list[$section]['items'], 0, self::MAX_COUNT);
		}
	}
}

Zerion Mini Shell 1.0