/**
  *
  * @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;
 }