/**
  * Executes a global search in multiple types.
  *
  * @param mixed $searchKeys
  * @param string|array $type A type or array of types to be searched for.
  * @param bool $trashcan
  * @param int $limit
  * @param bool $restrictToPermission
  * @access public
  * @return void
  */
 public function &globalSearch($searchKeys, $type = '', $trashcan = false, $limit = 0, $restrictToPermission = InnoworkItem::SEARCH_RESTRICT_NONE)
 {
     $result = array();
     if ($this->container->getState() == \Innomatic\Core\InnomaticContainer::STATE_DEBUG) {
         $this->container->getLoadTimer()->mark('InnoworkCore: start global search');
     }
     $result['result'] = array();
     $result['founditems'] = 0;
     while (list($key, $value) = each($this->summary)) {
         if ($value['searchable'] and ($type == '' or $type != '' and (!is_array($type) and $type == $key or is_array($type) and in_array($key, $type)))) {
             $class_name = $this->summary[$key]['classname'];
             if (!class_exists($class_name)) {
                 continue;
             }
             $tmp_class = new $class_name($this->rootDA, $this->domainDA);
             if (!$trashcan or $trashcan and $tmp_class->mNoTrash == false) {
                 $result['result'][$key] = $tmp_class->search($searchKeys, '', false, $trashcan, (int) $limit, 0, $restrictToPermission);
                 $result['founditems'] += count($result['result'][$key]);
                 //$tmp_locale = new LocaleCatalog( $itemtype_query->getFields( 'catalog' ), $this->container->getCurrentUser()->getLanguage() );
             }
         }
     }
     reset($this->summary);
     if ($this->container->getState() == \Innomatic\Core\InnomaticContainer::STATE_DEBUG) {
         $this->container->getLoadTimer()->mark('InnoworkCore: end global search');
     }
     return $result;
 }