/**
  * This returns the full record of any list element
  *
  * @access	protected
  *
  * @param	mixed		$element: The list element
  *
  * @return	mixed		The element's full record
  */
 protected function getRecord($element)
 {
     if (is_array($element) && array_keys($element) == array('u', 'h', 's', 'p')) {
         // Return already processed record if possible.
         if (!empty($this->records[$element['u']])) {
             return $this->records[$element['u']];
         }
         $record = array('uid' => $element['u'], 'page' => 1, 'preview' => '', 'subparts' => $element['p']);
         // Check if it's a list of database records or Solr documents.
         if (!empty($this->metadata['options']['source']) && $this->metadata['options']['source'] == 'collection') {
             // Get document's thumbnail and metadata from database.
             $result = $GLOBALS['TYPO3_DB']->exec_SELECTquery('tx_dlf_documents.uid AS uid,tx_dlf_documents.thumbnail AS thumbnail,tx_dlf_documents.metadata AS metadata', 'tx_dlf_documents', '(tx_dlf_documents.uid=' . intval($record['uid']) . ' OR tx_dlf_documents.partof=' . intval($record['uid']) . ')' . tx_dlf_helper::whereClause('tx_dlf_documents'), '', '', '');
             // Process results.
             while ($resArray = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($result)) {
                 // Prepare document's metadata.
                 $metadata = unserialize($resArray['metadata']);
                 if (!empty($metadata['type'][0]) && \TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($metadata['type'][0])) {
                     $metadata['type'][0] = tx_dlf_helper::getIndexName($metadata['type'][0], 'tx_dlf_structures', $this->metadata['options']['pid']);
                 }
                 if (!empty($metadata['owner'][0]) && \TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($metadata['owner'][0])) {
                     $metadata['owner'][0] = tx_dlf_helper::getIndexName($metadata['owner'][0], 'tx_dlf_libraries', $this->metadata['options']['pid']);
                 }
                 if (!empty($metadata['collection']) && is_array($metadata['collection'])) {
                     foreach ($metadata['collection'] as $i => $collection) {
                         if (\TYPO3\CMS\Core\Utility\MathUtility::canBeInterpretedAsInteger($collection)) {
                             $metadata['collection'][$i] = tx_dlf_helper::getIndexName($metadata['collection'][$i], 'tx_dlf_collections', $this->metadata['options']['pid']);
                         }
                     }
                 }
                 // Add metadata to list element.
                 if ($resArray['uid'] == $record['uid']) {
                     $record['thumbnail'] = $resArray['thumbnail'];
                     $record['metadata'] = $metadata;
                 } elseif (($key = tx_dlf_helper::array_search_recursive($resArray['uid'], $record['subparts'], TRUE)) !== FALSE) {
                     $record['subparts'][$key] = array('uid' => $resArray['uid'], 'page' => 1, 'preview' => !empty($record['subparts'][$key]['h']) ? $record['subparts'][$key]['h'] : '', 'thumbnail' => $resArray['thumbnail'], 'metadata' => $metadata);
                 }
             }
         } elseif (!empty($this->metadata['options']['source']) && $this->metadata['options']['source'] == 'search') {
             if ($this->solrConnect()) {
                 // Get document's thumbnail and metadata from Solr index.
                 $result = $this->solr->service->search('uid:' . tx_dlf_solr::escapeQuery($record['uid']), 0, $this->solr->limit);
                 // Process results.
                 foreach ($result->response->docs as $resArray) {
                     // Prepare document's metadata.
                     $metadata = array();
                     foreach ($this->solrConfig as $index_name => $solr_name) {
                         if (!empty($resArray->{$solr_name})) {
                             $metadata[$index_name] = is_array($resArray->{$solr_name}) ? $resArray->{$solr_name} : array($resArray->{$solr_name});
                         }
                     }
                     // Add metadata to list elements.
                     if ($resArray->toplevel) {
                         $record['thumbnail'] = $resArray->thumbnail;
                         $record['metadata'] = $metadata;
                     } elseif (($key = tx_dlf_helper::array_search_recursive($resArray->id, $record['subparts'], TRUE)) !== FALSE) {
                         $record['subparts'][$key] = array('uid' => $resArray->uid, 'page' => $resArray->page, 'preview' => !empty($record['subparts'][$key]['h']) ? $record['subparts'][$key]['h'] : '', 'thumbnail' => $resArray->thumbnail, 'metadata' => $metadata);
                     }
                 }
             }
         }
         // Save record for later usage.
         $this->records[$element['u']] = $record;
     } else {
         if (TYPO3_DLOG) {
             \TYPO3\CMS\Core\Utility\GeneralUtility::devLog('[tx_dlf_list->getRecord([data])] No UID of list element to fetch full record', $this->extKey, SYSLOG_SEVERITY_NOTICE, $element);
         }
         $record = $element;
     }
     return $record;
 }