/** * * @param tx_rnbase_IParameters $parameters * @param tx_rnbase_configurations $configurations * @param ArrayObject $viewData * @return string error msg or null * @throws RuntimeException */ public function handleRequest(&$parameters, &$configurations, &$viewData) { $confId = $this->getConfId(); $srv = $this->getService(); //@todo interface für die services bereitstellen um nicht prüfen zu müssen ob es die Such methode gibt! // mw: // eventuell einfach auf tx_rnbase_sv1_Base prüfen !? // die methode getSearchCallback ist überflüssig, // da es auch bei einem interface immer eine fest definierte sein muss > search! $sSearchCallback = $this->getSearchCallback(); if (!method_exists($srv, $sSearchCallback)) { throw new RuntimeException('Der Service ' . $srv . ' muss die Methode ' . $sSearchCallback . ' unterstützen!', $GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['mklib']['baseExceptionCode'] . '1'); } //Filter setzen $filter = tx_rnbase_filter_BaseFilter::createFilter($parameters, $configurations, $viewData, $confId . ($this->isOldFilterMode() ? '' : 'filter.')); $fields = array(); $options = array(); //suche initialisieren if ($filter->init($fields, $options)) { // @TODO: charbrowser integrieren // @TODO: pagebrowser und charbrowser sollte endlich filter übernehmen! $filter->handlePageBrowser($configurations, $confId . $this->getTsPathPageBrowser(), $viewData, $fields, $options, array('searchcallback' => array($srv, $sSearchCallback))); $items = $srv->{$sSearchCallback}($fields, $options); } $viewData->offsetSet($this->getItemsDesignator(), $items); return; }
/** * * @param tx_rnbase_IParameters $parameters * @param tx_rnbase_configurations $configurations * @param ArrayObject $viewData * @return string error msg or null */ public function handleRequest(&$parameters, &$configurations, &$viewData) { // confIdExtended setzen $this->confIdExtended = $configurations->get($this->getConfId() . 'extendedConfId'); $this->confIdExtended = $this->confIdExtended ? $this->confIdExtended : 'default'; $confId = $this->getExtendedConfId(); // Filter erstellen. /* @var $filter tx_rnbase_filter_BaseFilter */ $filter = tx_rnbase_filter_BaseFilter::createFilter($parameters, $configurations, $viewData, $confId . 'filter.'); $fields = $options = array(); // Searcher instanzieren. Konfiguriert wird er über die options['searchdef'] /* @var $searcher tx_rnbase_util_SearchGeneric */ tx_rnbase::load('tx_rnbase_util_SearchBase'); $searcher = tx_rnbase_util_SearchBase::getInstance('tx_rnbase_util_SearchGeneric'); // Dem Filter den Searcher übergeben, fall er diese Möglichkeit bietet. if (method_exists($filter, 'setSearcher')) { $filter->setSearcher($searcher); } // Suche initialisieren und nur ausführen wenn der Filter es erlaubt. if ($doSearch = $filter->init($fields, $options)) { // Soll ein PageBrowser verwendet werden? if ($configurations->get($confId . 'pagebrowser')) { $pbOptions = array('searchcallback' => array($searcher, 'search')); $cbOptions['pbid'] = ($var = $configurations->get($confId . 'pagebrowser.cbid')) ? $var : 'pb' . $this->confIdExtended; $filter->handlePageBrowser($configurations, $confId . 'pagebrowser', $viewData, $fields, $options, $pbOptions); } // Soll ein CharBrowser verwendet werden? if ($configurations->get($confId . 'charbrowser')) { // optionen sammeln $cbOptions = array('searchcallback' => array($searcher, 'search')); $cbOptions['colname'] = ($var = $configurations->get($confId . 'charbrowser.colname')) ? $var : 'title'; $cbOptions['specials'] = ($var = $configurations->get($confId . 'charbrowser.specials')) ? $var : 'last'; $cbOptions['cbid'] = ($var = $configurations->get($confId . 'charbrowser.cbid')) ? $var : 'cb' . $this->confIdExtended; $filter->handleCharBrowser($configurations, $confId . 'charbrowser', $viewData, $fields, $options, $cbOptions); } // items besorgen. $items = $searcher->search($fields, $options); } else { $items = array(); } $viewData->offsetSet('items', $items); $viewData->offsetSet('searched', $doSearch); return null; }
/** * searches for the items to show in list * * @throws RuntimeException * @return array|FALSE */ protected function getItems() { // get the repo $repo = $this->getRepository(); // check the repo interface if (!$repo instanceof tx_mklib_interface_Repository) { throw new RuntimeException('the repository "' . get_class($repo) . '" ' . 'has to implement the interface "tx_mklib_interface_Repository"!', intval(ERROR_CODE_MKLIB . '1')); } // create filter $filter = tx_rnbase_filter_BaseFilter::createFilter($this->getParameters(), $this->getConfigurations(), $this->getViewData(), $this->getConfId() . 'filter.'); $fields = $options = array(); // let the filter fill the fields end options if ($this->prepareFieldsAndOptions($fields, $options) && $filter->init($fields, $options)) { // we search for the items $items = $repo->search($fields, $options); } else { // it was not carried out search return FALSE; } return empty($items) ? array() : $items; }