* @owner University of Latvia * @version 3.0.0 * @since 29.06.2018 * * @package Lu\LuContacts\Models */ class Alphabet { /** * Currently active item name * * @var string */ private $active = ''; /** * Pre-set uri builder * * @var \TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder */ private $uriBuilder; /** * Settings * * @var array */ private $settings; /** * Define alphabet * * @param bool $count * * @return array */ private function alphabet($count = false): array { // Pre-set full alphabet list $luisContacts = new LuisContacts(); $DataHelper = new DataHelper(); $fullList = [ 'a' => 'A, Ā', 'b' => 'B', 'c' => 'C, Č', 'd' => 'D', 'e' => 'E, Ē', 'f' => 'F', 'g' => 'G, Ģ', 'h' => 'H', 'i' => 'I, Ī', 'j' => 'J', 'k' => 'K, Ķ', 'l' => 'L, Ļ', 'm' => 'M', 'n' => 'N, Ņ', 'o' => 'O', 'p' => 'P', 'q' => 'Q', 'r' => 'R', 's' => 'S, Š', 't' => 'T', 'u' => 'U, Ū', 'v' => 'V', 'w' => 'W', 'x' => 'X', 'y' => 'Y', 'z' => 'Z, Ž', ]; // Set request $luisContacts->setRequestType('person'); $luisContacts->setUnitParentId($this->settings['parentId']); $luisContacts->setUnitSubParents(); if ($this->settings['addressId']) { $luisContacts->setUnitAddressId(@SOLR_PREFIX_ADDRESS.$this->settings['addressId']); } foreach ($fullList as $letter => $letterCombo) { $jsonData = $luisContacts->fetchLettersCount(explode(",", $letterCombo)); $data = $DataHelper->APIDecode($jsonData); if (!$data['data']) { unset($fullList[$letter]); } else if ($count) { // Check if count requested $fullList[$letter] = $data['data'].":".$fullList[$letter]; } } // Return final list return $fullList; } /** * Alphabet constructor. * * @param null $settings */ public function __construct($settings = null) { $this->settings = $settings; } /** * Set active item name * * @param $active */ public function setActive($active) { $this->active = $active; } /** * Retrieve active item name * * @return string */ public function getActive() { return $this->active; } /** * Sets uri builder * * @param \TYPO3\CMS\Extbase\Mvc\Web\Routing\UriBuilder $uriBuilder */ public function setUriBuilder(UriBuilder $uriBuilder) { $this->uriBuilder = $uriBuilder; } /** * Return letter full values * * @param $letter * * @return mixed */ public function getValuesByLetter($letter) { // Set navigation options $alphabet = $this->alphabet(); return @$alphabet[$letter]; } /** * Create alphabet navigation * * @return array */ public function getAlphabet(): array { // Set navigation options $alphabet = $this->alphabet(true); // Build navigation $nav = []; $activeSet = false; foreach ($alphabet as $letter => $display) { $tmp = []; $tmp['id'] = $letter; $expl = explode(":", $display); $tmp['count'] = $expl[0]; $tmp['name'] = $expl[1]; // If uri builder provided, add urls if ($this->uriBuilder) { $arguments = [ 'tx_lucontacts_pi1[action]' => 'list', 'tx_lucontacts_pi1[listType]' => 'surname', 'tx_lucontacts_pi1[letter]' => $letter, ]; $tmp['url'] = $this->uriBuilder->setArguments($arguments)->buildFrontendUri(); } // Check active request if ($this->active) { if ($letter == $this->active) { $this->assignActive($tmp); $activeSet = true; } } $nav[] = $tmp; } // Check if any active set and assign first, if none if (!$activeSet) { $this->assignActive($nav[0]); } // Return finished array return $nav; } /** * Assign active status to provided element * * @param $element */ private function assignActive(&$element) { $element['active'] = true; } }