<?php /** * Broker expansion * @package Broker * @subpackage Expansion */ namespace BrokerExpansion; /** * ExplodeExpansion */ class ExplodeExpansion implements \Broker\Expansion { /** * Value * @var array|string */ private $value; /** * Split string * @var string */ private $split = ","; /** * Escape string * @var string */ private $escape = "\\"; /** * Trim * @var boolean */ private $trim = true; /** * Explode expansion * * @param string|array $value * @param object $expansionConfiguration * @param object $brokerConfiguration * @param object $solrConfiguration */ public function __construct($value, $expansionConfiguration, $brokerConfiguration, $solrConfiguration) { $this->value = $value; if ($expansionConfiguration && is_object ( $expansionConfiguration )) { if (isset ( $expansionConfiguration->parameters ) && is_object ( $expansionConfiguration->parameters )) { if (isset ( $expansionConfiguration->parameters->split ) && is_string ( $expansionConfiguration->parameters->split )) { $this->split = $expansionConfiguration->parameters->split; } if (isset ( $expansionConfiguration->parameters->trim )) { if ($expansionConfiguration->parameters->trim) { $this->trim = true; } else { $this->trim = false; } } } } } /** * {@inheritDoc} * @see \Broker\Expansion::cached() */ public static function cached() { return false; } /** * {@inheritDoc} * @see \Broker\Expansion::description() */ public static function description() { return "split value"; } /** * {@inheritDoc} * @see \Broker\Expansion::parameters() */ public static function parameters() { return array ( "split" => "optional, default using \",\"", "trim" => "optional, default true" ); } /** * {@inheritDoc} * @see \Broker\Expansion::getValues() */ public function getValues() { $partlist = explode($this->escape.$this->split, $this->value); $list = array(); for($i=0; $i<count($partlist); $i++) { $sublist = explode ( $this->split, $partlist[$i] ); if($i>0) { $list[count($list)-1] = $list[count($list)-1].$this->escape.$this->split.$sublist[0]; for($j=1; $j<count($sublist); $j++) { $list[] = $sublist[$j]; } } else { $list = $sublist; } } $list = array_map(function($item) {return str_replace("\\\\","\\",str_replace("\\,",",",$item));},$list); if ($this->trim) { $list = array_map ( "trim", $list ); } return $list; } /** * * {@inheritDoc} * @see \Broker\Expansion::getErrors() */ public function getErrors() { return null; } } ?>