/**
  * @return array
  */
 protected function getValues()
 {
     if ($this->values === null) {
         $this->values = array();
         if ($this->contentClassAttribute->attribute('data_type_string') == 'ezobjectrelationlist') {
             //$field = ezfSolrDocumentFieldBase::generateSubattributeFieldName( $this->contentClassAttribute, 'name', 'string' );
             //@todo errore nella definzione del nome del sottoattributo? verifaicare vedi anche in self::buildFetch
             //$field = ezfSolrDocumentFieldBase::$DocumentFieldName->lookupSchemaName(
             //    ezfSolrDocumentFieldBase::SUBMETA_FIELD_PREFIX . $this->contentClassAttribute->attribute( 'identifier' ) . ezfSolrDocumentFieldBase::SUBATTR_FIELD_SEPARATOR . 'name',
             //    'string');
             $field = ezfSolrDocumentFieldBase::$DocumentFieldName->lookupSchemaName(ezfSolrDocumentFieldBase::SUBATTR_FIELD_PREFIX . $this->contentClassAttribute->attribute('identifier') . ezfSolrDocumentFieldBase::SUBATTR_FIELD_SEPARATOR . 'name' . ezfSolrDocumentFieldBase::SUBATTR_FIELD_SEPARATOR, 'string');
         } else {
             $field = ezfSolrDocumentFieldBase::generateAttributeFieldName($this->contentClassAttribute, 'string');
         }
         $facets = array('field' => $field, 'name' => $this->attributes['name'], 'limit' => 300, 'sort' => 'alpha');
         $fetchParameters = array('SearchContentClassID' => array($this->contentClassAttribute->attribute('contentclass_id')), 'Facet' => array($facets));
         $data = $this->client->fetchRemoteNavigationList($fetchParameters);
         if (isset($data[$this->attributes['name']])) {
             $this->values = $data[$this->attributes['name']];
             // setto i valori attivi e inietto il conto nel nome
             foreach ($this->values as $index => $value) {
                 $current = (array) $this->attributes['value'];
                 if (in_array($value['query'], $current)) {
                     $this->values[$index]['active'] = true;
                 }
                 $this->values[$index]['query'] = OCFacetNavgationHelper::encodeValue($this->values[$index]['query']);
                 if (isset($value['count']) && $value['count'] > 0) {
                     $this->values[$index]['name'] = $value['name'] . ' (' . $value['count'] . ')';
                 }
             }
         }
     }
     return $this->values;
 }
 protected function getValues()
 {
     if ($this->values === null) {
         $this->values = array();
         $field = ezfSolrDocumentFieldBase::generateAttributeFieldName($this->contentClassAttribute, ezfSolrDocumentFieldBase::getClassAttributeType($this->contentClassAttribute, null, 'search'));
         $facets = array('field' => $field, 'name' => $this->attributes['name'], 'limit' => 500, 'sort' => 'alpha');
         $currentParameters = $baseParameters = array_merge(OCClassSearchFormHelper::result()->getBaseParameters(), array('SearchContentClassID' => array($this->contentClassAttribute->attribute('contentclass_id')), 'Facet' => array($facets), 'SearchLimit' => 1));
         if (OCClassSearchFormHelper::result()->isFetch()) {
             $currentParameters = array_merge($currentParameters, OCClassSearchFormHelper::result()->getCurrentParameters());
         }
         $data = OCFacetNavgationHelper::navigationList($baseParameters, $currentParameters, OCClassSearchFormHelper::result()->searchText, OCClassSearchFormHelper::result()->isFetch());
         if (isset($data[$this->attributes['name']])) {
             $this->values = $data[$this->attributes['name']];
             // setto i valori attivi e inietto il conto nel nome
             foreach ($this->values as $index => $value) {
                 $current = (array) $this->attributes['value'];
                 if (in_array($value['query'], $current)) {
                     $this->values[$index]['active'] = true;
                 }
                 $this->values[$index]['query'] = OCFacetNavgationHelper::encodeValue($this->values[$index]['query']);
                 $this->values[$index]['raw_name'] = $value['name'];
                 if (isset($value['count']) && $value['count'] > 0) {
                     $this->values[$index]['name'] = $value['name'] . ' (' . $value['count'] . ')';
                     $this->values[$index]['count'] = $value['count'];
                 }
             }
         }
     }
     return $this->values;
 }
 protected function getBounds($includeCurrentParameters = false)
 {
     $start = $end = false;
     $sortField = ezfSolrDocumentFieldBase::getFieldName($this->contentClassAttribute, null, 'sort');
     $currentParameters = array();
     if ($includeCurrentParameters) {
         $currentParameters = OCClassSearchFormHelper::result()->getCurrentParameters();
     }
     $fieldName = ezfSolrDocumentFieldBase::getFieldName($this->contentClassAttribute, null, 'search');
     $params = array_merge(OCClassSearchFormHelper::result()->getBaseParameters(), $currentParameters, array('SearchContentClassID' => $this->contentClassAttribute->attribute('contentclass_id'), 'SearchLimit' => 1, 'SortBy' => array($sortField => 'asc')));
     $startSearch = OCFacetNavgationHelper::fetch($params, OCClassSearchFormHelper::result()->searchText);
     /** @var $startSearchResults eZFindResultNode[] */
     $startSearchResults = $startSearch['SearchResult'];
     if (isset($startSearchResults[0])) {
         $dataMap = $startSearchResults[0]->attribute('object')->attribute('data_map');
         $start = $dataMap[$this->contentClassAttribute->attribute('identifier')];
     }
     $params['SortBy'] = array($sortField => 'desc');
     $endSearch = OCFacetNavgationHelper::fetch($params, OCClassSearchFormHelper::result()->searchText);
     /** @var $endSearchResults eZFindResultNode[] */
     $endSearchResults = $endSearch['SearchResult'];
     if (isset($endSearchResults[0])) {
         $dataMap = $endSearchResults[0]->attribute('object')->attribute('data_map');
         $end = $dataMap[$this->contentClassAttribute->attribute('identifier')];
     }
     $className = $this->getBoundsClassName();
     /** @var OCClassSearchFormFieldBoundsInterface $bounds */
     $bounds = new $className();
     $bounds->setStart($start);
     $bounds->setEnd($end);
     return $bounds;
 }
 protected function getBounds($includeCurrentParameters = false)
 {
     $startTimestamp = $endTimestamp = 0;
     $currentParameters = array();
     if ($includeCurrentParameters) {
         $currentParameters = OCClassSearchFormHelper::result()->getCurrentParameters();
     }
     $params = array_merge(OCClassSearchFormHelper::result()->getBaseParameters(), $currentParameters, array('SearchContentClassID' => $this->currentClassId !== null ? array($this->currentClassId) : null, 'SearchLimit' => 1, 'SortBy' => array('published' => 'asc')));
     $startSearch = OCFacetNavgationHelper::fetch($params, OCClassSearchFormHelper::result()->searchText);
     if (isset($startSearch['SearchResult'][0])) {
         $startTimestamp = $startSearch['SearchResult'][0]->attribute('object')->attribute('published');
     }
     $params['SortBy'] = array('published' => 'desc');
     $endSearch = OCFacetNavgationHelper::fetch($params, OCClassSearchFormHelper::result()->searchText);
     if (isset($endSearch['SearchResult'][0])) {
         $endTimestamp = $endSearch['SearchResult'][0]->attribute('object')->attribute('published');
     }
     $data = new OCClassSearchFormPublishedFieldBounds();
     $data->setStart($startTimestamp);
     $data->setEnd($endTimestamp);
     return $data;
 }
 protected function getValues()
 {
     if ($this->values === null) {
         $this->values = array();
         //@todo filter per parent_node
         //$classContent = $this->contentClassAttribute->content();
         //$filters = isset( $classContent['default_placement']['node_id'] ) ?  array( $classContent['default_placement']['node_id'] ) : array( 1 );
         //@todo errore nella definzione del nome del sottoattributo? verifaicare vedi anche in self::buildFetch
         //$field = ezfSolrDocumentFieldBase::$DocumentFieldName->lookupSchemaName(
         //    ezfSolrDocumentFieldBase::SUBMETA_FIELD_PREFIX . $this->contentClassAttribute->attribute( 'identifier' ) . ezfSolrDocumentFieldBase::SUBATTR_FIELD_SEPARATOR . 'name',
         //    'string');
         $field = ezfSolrDocumentFieldBase::$DocumentFieldName->lookupSchemaName(ezfSolrDocumentFieldBase::SUBATTR_FIELD_PREFIX . $this->contentClassAttribute->attribute('identifier') . ezfSolrDocumentFieldBase::SUBATTR_FIELD_SEPARATOR . 'name' . ezfSolrDocumentFieldBase::SUBATTR_FIELD_SEPARATOR, 'string');
         $facets = array('field' => $field, 'name' => $this->attributes['name'], 'limit' => 300, 'sort' => 'alpha');
         $currentParameters = $baseParameters = array_merge(OCClassSearchFormHelper::result()->getBaseParameters(), array('SearchContentClassID' => array($this->contentClassAttribute->attribute('contentclass_id')), 'Facet' => array($facets), 'SearchLimit' => 1));
         if (OCClassSearchFormHelper::result()->isFetch()) {
             $currentParameters = array_merge($currentParameters, OCClassSearchFormHelper::result()->getCurrentParameters());
         }
         $data = OCFacetNavgationHelper::navigationList($baseParameters, $currentParameters, OCClassSearchFormHelper::result()->searchText, OCClassSearchFormHelper::result()->isFetch());
         if (isset($data[$this->attributes['name']])) {
             $this->values = $data[$this->attributes['name']];
             // setto i valori attivi e inietto il conto nel nome
             foreach ($this->values as $index => $value) {
                 $current = (array) $this->attributes['value'];
                 if (in_array($value['query'], $current)) {
                     $this->values[$index]['active'] = true;
                 }
                 $this->values[$index]['query'] = OCFacetNavgationHelper::encodeValue($this->values[$index]['query']);
                 $this->values[$index]['raw_name'] = $value['name'];
                 if (isset($value['count']) && $value['count'] > 0) {
                     $this->values[$index]['name'] = $value['name'] . ' (' . $value['count'] . ')';
                     $this->values[$index]['count'] = $value['count'];
                 }
             }
         }
     }
     return $this->values;
 }
 /**
  * @param array $parameters
  *
  * @return array
  */
 protected function navigationList($parameters)
 {
     return OCFacetNavgationHelper::navigationList($parameters, $this->baseSearchParameters);
 }
 protected function fetch()
 {
     if (self::$_result == null) {
         if ($this->isFetch()) {
             $params = OCFacetNavgationHelper::map(array_merge($this->baseParameters, $this->currentParameters));
             self::$_result = OCFacetNavgationHelper::fetch($params, $this->searchText);
             if (self::$_result['SearchCount'] == 0) {
                 eZDebug::writeNotice($params);
                 eZDebug::writeNotice(self::$_result['SearchExtras']);
             }
         } else {
             self::$_result = false;
         }
     }
     return self::$_result;
 }
 function modify(&$tpl, &$operatorName, &$operatorParameters, &$rootNamespace, &$currentNamespace, &$operatorValue, &$namedParameters)
 {
     switch ($operatorName) {
         case 'repository_list':
             $operatorValue = OCCrossSearch::listAvailableRepositories();
             break;
         case 'class_search_result':
             try {
                 $operatorValue = OCClassSearchFormHelper::result($namedParameters['parameters'], $namedParameters['fields'], true);
             } catch (Exception $e) {
                 eZDebug::writeError($e->getMessage(), $operatorName);
             }
             break;
         case 'attribute_search_form':
             try {
                 $operatorValue = OCClassSearchFormHelper::displayAttribute($namedParameters['helper'], $namedParameters['input_field']);
             } catch (Exception $e) {
                 eZDebug::writeError($e->getMessage(), $operatorName);
             }
             break;
         case 'class_search_form':
             try {
                 $operatorValue = OCClassSearchFormHelper::displayForm($namedParameters['class_identifier'], $namedParameters['parameters']);
             } catch (Exception $e) {
                 eZDebug::writeError($e->getMessage(), $operatorName);
             }
             break;
         case 'strtotime':
             $operatorValue = strtotime($operatorValue);
             break;
         case 'calendar':
             $data = new OCCalendarData($namedParameters['node']);
             $data->setParameters($namedParameters['parameters']);
             $data->fetch();
             $operatorValue = $data->data;
             break;
         case 'facet_navigation':
             $operatorValue = OCFacetNavgationHelper::data($namedParameters['base_query'], $namedParameters['override'], $namedParameters['base_uri']);
             break;
         case 'setFilterParameter':
             self::$filters[$namedParameters['name']][] = $namedParameters['value'];
             $this->log($namedParameters, 'setFilterParameter');
             $operatorValue = self::$filters[$namedParameters['name']];
             break;
         case 'getFilterParameter':
             $this->getAllFilters();
             if (isset(self::$query_filters[$namedParameters['name']])) {
                 $this->log($namedParameters['name'] . ': ' . var_export(self::$query_filters[$namedParameters['name']], true), 'getFilterParameter');
                 $operatorValue = is_array(self::$query_filters[$namedParameters['name']]) ? self::$query_filters[$namedParameters['name']] : array(self::$query_filters[$namedParameters['name']]);
                 return true;
             }
             $operatorValue = array();
             return false;
             break;
         case 'removeFilterParameter':
             $this->getAllFilters();
             if (isset(self::$query_filters[$namedParameters['name']])) {
                 self::$query_filters[$namedParameters['name']] = array();
                 return true;
             }
             return false;
             break;
         case 'getFilterParameters':
             $http = eZHTTPTool::instance();
             $this->getAllFilters();
             $filterList = self::$query_filters;
             if ($namedParameters['as_array']) {
                 $operatorValue = $filterList;
                 return;
             }
             $filterSearchHash = array();
             if ($namedParameters['cond']) {
                 $filterSearchHash[] = $namedParameters['cond'];
             }
             foreach ($filterList as $name => $value) {
                 if (count($value) > 1) {
                     $temp_array = array('or');
                     foreach ($value as $v) {
                         $temp_array[] = $name . ':' . $v;
                     }
                     $filterSearchHash[] = $temp_array;
                 } else {
                     $filterSearchHash[] = $name . ':' . $value[0];
                 }
             }
             $this->log($filterSearchHash, 'getFilterParameters');
             $operatorValue = $filterSearchHash;
             break;
         case 'getFilterUrlSuffix':
             $filterSearchHash = $operatorValue;
             $urlSuffix = '';
             $tempArray = array();
             foreach ($filterSearchHash as $filter) {
                 if (is_array($filter)) {
                     foreach ($filter as $f) {
                         if ('and' != $f and 'or' != $f) {
                             if (!in_array($f, $tempArray)) {
                                 $tempArray[] = $f;
                                 $urlSuffix .= '&filter[]=' . rawurlencode($f);
                             }
                         }
                     }
                 } else {
                     if (!in_array($filter, $tempArray)) {
                         $tempArray[] = $filter;
                         $urlSuffix .= '&filter[]=' . rawurlencode($filter);
                     }
                 }
             }
             $operatorValue = $urlSuffix;
             break;
         case 'getFilterHiddenInput':
             $filterSearchHash = $operatorValue;
             $input = array();
             $tempArray = array();
             foreach ($filterSearchHash as $filter) {
                 if (is_array($filter)) {
                     foreach ($filter as $f) {
                         if ('and' != $f and 'or' != $f) {
                             if (!in_array($f, $tempArray)) {
                                 $tempArray[] = $f;
                                 $input[] = $f;
                             }
                         }
                     }
                 } else {
                     if (!in_array($filter, $tempArray)) {
                         $tempArray[] = $filter;
                         $input[] = $filter;
                     }
                 }
             }
             $html = '';
             foreach ($input as $i) {
                 $html .= "<input type='hidden' name='filter[]' value='{$i}' />";
             }
             $operatorValue = $html;
             break;
         case 'addQuoteOnFilter':
             $tempVar = $operatorValue;
             list($name, $value) = explode(':', $tempVar);
             $operatorValue = $name . ':"' . $value . '"';
             break;
         case 'in_array_r':
             if ($this->recursiveArraySearch($namedParameters['needle'], $namedParameters['haystack']) !== false) {
                 $operatorValue = true;
                 return true;
             }
             $operatorValue = false;
             return false;
             break;
         case 'sort':
             sort($operatorValue);
             break;
         case 'asort':
             asort($operatorValue);
             break;
         case 'parsedate':
             $operatorValue = str_replace('"', '', $operatorValue);
             if (DateTime::createFromFormat("Y-m-d\\TH:i:sP", $operatorValue)) {
                 $operatorValue = DateTime::createFromFormat("Y-m-d\\TH:i:sP", $operatorValue)->format("U");
             } else {
                 eZDebug::writeError($operatorValue . ': ' . var_export(DateTime::getLastErrors(), 1), 'parsedate');
                 $operatorValue = 0;
             }
             break;
         default:
             break;
     }
 }
 public static function facetnavigation()
 {
     $http = eZHTTPTool::instance();
     $json = $http->postVariable('json', null);
     if (is_array($json)) {
         $fetchParams = $json;
     } else {
         $fetchParams = json_decode($json, true);
     }
     $userParameters = $http->postVariable('userParameters', null);
     foreach ($userParameters as $key => $value) {
         if (empty($value)) {
             unset($userParameters[$key]);
         }
     }
     $template = $http->postVariable('template', null);
     $data = OCFacetNavgationHelper::data($fetchParams, $userParameters, '', isset($userParameters['query']) ? $userParameters['query'] : '');
     $contentTpl = $template['content'];
     $navigationTpl = $template['navigation'];
     $tpl = eZTemplate::factory();
     $tpl->setVariable('data', $data);
     $tpl->setVariable('view_parameters', $userParameters);
     if (is_array($contentTpl)) {
         foreach ($contentTpl as $key => $value) {
             if ($key != 'name') {
                 $tpl->setVariable($key, $value);
             }
         }
         $content = $tpl->fetch('design:' . $contentTpl['name']);
     } else {
         $content = $tpl->fetch('design:' . $contentTpl);
     }
     $tpl = eZTemplate::factory();
     $tpl->setVariable('data', $data);
     if (is_array($navigationTpl)) {
         foreach ($navigationTpl as $key => $value) {
             if ($key != 'name') {
                 $tpl->setVariable($key, $value);
             }
         }
         $navigation = $tpl->fetch('design:' . $navigationTpl['name']);
     } else {
         $navigation = $tpl->fetch('design:' . $navigationTpl);
     }
     return array('content' => $content, 'navigation' => $navigation, 'fetch_paramters' => $data['fetch_parameters']);
 }