Exemple #1
0
 /**
  * return list view
  * filter allowed
  */
 public function getEntities()
 {
     $strTableName = \Input::get('tablename');
     $strTableData = $strTableName . '_data';
     $strWrapperID = \Input::get('wrapperID');
     $dateFormat = \Input::get('dateFormat') ? \Input::get('dateFormat') : \Config::get('dateFormat');
     $timeFormat = \Input::get('timeFormat') ? \Input::get('timeFormat') : \Config::get('timeFormat');
     $strTemplate = \Input::get('template') ? \Input::get('template') : 'fmodule_teaser';
     $this->tablename = $strTableData;
     $arrResults = [];
     $arrModuleData = $this->getModule($strTableName, $strWrapperID);
     $arrFields = $arrModuleData['arrFields'];
     $fieldWidgets = $arrModuleData['arrWidgets'];
     $mapFields = $arrModuleData['mapFields'];
     $arrCleanOptions = $arrModuleData['arrCleanOptions'];
     if (!$strTableName || !$strWrapperID) {
         $this->sendFailState("no back end module found");
     }
     if (!$this->Database->tableExists($strTableName)) {
         $this->sendFailState("no table found");
     }
     // get wrapper
     $wrapperDB = $this->Database->prepare('SELECT * FROM ' . $strTableName . ' WHERE id = ?')->execute($strWrapperID)->row();
     // get fields and create query
     $qResult = HelperModel::generateSQLQueryFromFilterArray($arrFields);
     $qStr = $qResult['qStr'];
     $qTextSearch = $qResult['isFulltextSearch'] ? $qResult['$qTextSearch'] : '';
     //get text search results
     $textSearchResults = array();
     if ($qTextSearch) {
         $textSearchResults = QueryModel::getTextSearchResult($qTextSearch, $strTableName, $strWrapperID, $qResult['searchSettings']);
     }
     $addDetailPage = $wrapperDB['addDetailPage'];
     $rootDB = $this->Database->prepare('SELECT * FROM ' . $strTableName . ' JOIN tl_page ON tl_page.id = ' . $strTableName . '.rootPage WHERE ' . $strTableName . '.id = ?')->execute($strWrapperID)->row();
     $qOrderByStr = $this->getOrderBy();
     $qProtectedStr = ' AND published = "1"';
     // get list
     $objList = $this->Database->prepare('SELECT * FROM ' . $strTableData . ' WHERE pid = ' . $strWrapperID . $qProtectedStr . $qStr . $qOrderByStr)->query();
     $arrItems = array();
     while ($objList->next()) {
         $arrItem = $objList->row();
         if (HelperModel::sortOutProtected($arrItem, $this->User->groups)) {
             continue;
         }
         if (!HelperModel::outSideScope($arrItem['start'], $arrItem['stop'])) {
             continue;
         }
         // image
         $imagePath = $this->generateSingeSrc($objList);
         if ($imagePath) {
             $arrItem['singleSRC'] = $imagePath;
         }
         if ($arrItem['size']) {
             $arrItem['size'] = deserialize($arrItem['size']);
         }
         if ($arrItem['cssID']) {
             $arrItem['cssID'] = deserialize($arrItem['cssID']);
         }
         if ($arrItem['addGallery'] && $arrItem['multiSRC']) {
             $objGallery = new GalleryGenerator();
             $objGallery->id = $arrItem['id'];
             $objGallery->sortBy = $arrItem['sortBy'];
             $objGallery->orderSRC = $arrItem['orderSRC'];
             $objGallery->metaIgnore = $arrItem['metaIgnore'];
             $objGallery->numberOfItems = $arrItem['numberOfItems'];
             $objGallery->perPage = $arrItem['perPageGallery'];
             $objGallery->perRow = $arrItem['perRow'];
             $objGallery->size = $arrItem['size'];
             $objGallery->fullsize = $arrItem['fullsize'];
             $objGallery->galleryTpl = $arrItem['galleryTpl'];
             $objGallery->getAllImages($arrItem['multiSRC']);
             $arrItem['gallery'] = $objGallery->renderGallery();
         }
         // create href
         $arrItem['href'] = null;
         if ($addDetailPage == '1' && $objList->source == 'default') {
             // reset target
             $arrItem['target'] = '';
             $arrItem['href'] = $this->generateUrl($rootDB, $arrItem['alias']);
             // $listDB->alias
         }
         if ($arrItem['source'] == 'external') {
             $arrItem['href'] = $arrItem['url'];
         }
         if ($arrItem['source'] == 'internal') {
             // reset target
             $arrItem['target'] = '';
             $jumpToDB = $this->Database->prepare('SELECT * FROM tl_page WHERE id = ?')->execute($objList->jumpTo)->row();
             $strTaxonomyUrl = \Config::get('taxonomyDisable') ? '' : $this->generateTaxonomyUrl();
             $arrItem['href'] = $this->generateFrontendUrl($jumpToDB, $strTaxonomyUrl);
         }
         // check for text search
         if ($qTextSearch) {
             if (!$textSearchResults[$arrItem['id']]) {
                 continue;
             }
         }
         //
         $arrItems[] = $arrItem;
     }
     if (\Input::get('orderBy') && mb_strtoupper(\Input::get('orderBy'), 'UTF-8') == 'RAND') {
         shuffle($arrItems);
     }
     $total = count($arrItems);
     $this->listViewLimit = $total;
     $this->createPagination($total);
     $objTemplate = new \FrontendTemplate($strTemplate);
     $strResults = '';
     for ($i = $this->listViewOffset; $i < $this->listViewLimit; $i++) {
         $item = $arrItems[$i];
         // set css and id
         $item['cssID'] = deserialize($item['cssID']);
         $item['itemID'] = $item['cssID'][0];
         $item['itemCSS'] = $item['cssID'][1] ? ' ' . $item['cssID'][1] : '';
         // set date format
         $date = date('Y-m-d', $item['date']);
         $time = date('H:i', $item['time']);
         $dateTime = $time ? $date . ' ' . $time : $date;
         $item['dateTime'] = $dateTime;
         $item['date'] = $item['date'] ? date($dateFormat, $item['date']) : '';
         $item['time'] = $item['time'] ? date($timeFormat, $item['time']) : '';
         // set more
         $item['more'] = $GLOBALS['TL_LANG']['MSC']['more'];
         // get list view ce
         $objCte = ContentModelExtend::findPublishedByPidAndTable($item['id'], $strTableName . '_data', array('fview' => 'list'));
         $arrElements = array();
         if ($objCte !== null) {
             $intCount = 0;
             $intLast = $objCte->count() - 1;
             while ($objCte->next()) {
                 $arrCss = array();
                 $objRow = $objCte->current();
                 if ($intCount == 0 || $intCount == $intLast) {
                     if ($intCount == 0) {
                         $arrCss[] = 'first';
                     }
                     if ($intCount == $intLast) {
                         $arrCss[] = 'last';
                     }
                 }
                 $objRow->classes = $arrCss;
                 $arrElements[] = $this->getContentElement($objRow, $this->strColumn);
                 ++$intCount;
             }
         }
         $item['teaser'] = $arrElements;
         // set odd and even classes
         $item['cssClass'] = $i % 2 ? ' even' : ' odd';
         //field
         if (!empty($fieldWidgets)) {
             $arrayAsValue = array('list.blank', 'list.keyValue', 'table.blank');
             foreach ($fieldWidgets as $widget) {
                 $id = $widget['fieldID'];
                 $tplName = $widget['widgetTemplate'];
                 $type = $widget['widgetType'];
                 $value = $item[$id];
                 if (in_array($type, $arrayAsValue)) {
                     $value = deserialize($value);
                 }
                 // unserialize
                 $objFieldTemplate = new \FrontendTemplate($tplName);
                 $objFieldTemplate->setData(array('value' => $value, 'type' => $type, 'item' => $item));
                 $item[$id] = $objFieldTemplate->parse();
             }
         }
         // set last first classes
         if ($i == 0) {
             $item['cssClass'] .= ' first';
         }
         if ($i == $this->listViewLimit - 1) {
             $item['cssClass'] .= ' last';
         }
         // create marker path
         if ($item['addMarker'] && $item['markerSRC']) {
             if ($this->markerCache[$item['markerSRC']]) {
                 $item['markerSRC'] = $this->markerCache[$item['markerSRC']];
             } else {
                 $markerDB = $this->Database->prepare('SELECT * FROM tl_files WHERE uuid = ?')->execute($item['markerSRC']);
                 if ($markerDB->count()) {
                     $pathInfo = $markerDB->row()['path'];
                     if ($pathInfo) {
                         $this->markerCache[$item['markerSRC']] = $pathInfo;
                         $item['markerSRC'] = $pathInfo;
                     }
                 }
             }
         }
         // map settings from field
         if (!empty($mapFields)) {
             foreach ($mapFields as $map) {
                 $objMapTemplate = new \FrontendTemplate($map['template']);
                 $item['mapSettings'] = $map;
                 $objMapTemplate->setData($item);
                 $item[$map['fieldID']] = $objMapTemplate->parse();
             }
         }
         // mapSettings
         if (!empty($mapSettings)) {
             $item['mapSettings'] = $mapSettings;
         }
         // set clean options
         if (!empty($arrCleanOptions)) {
             $item['cleanOptions'] = $arrCleanOptions;
             // overwrite clean options
             foreach ($arrCleanOptions as $fieldID => $options) {
                 if ($item[$fieldID] && is_string($item[$fieldID])) {
                     $arrValues = explode(',', $item[$fieldID]);
                     $arrValuesAsString = array();
                     $arrValuesAsArray = array();
                     if (is_array($arrValues)) {
                         foreach ($arrValues as $val) {
                             $arrValuesAsArray[$val] = $options[$val];
                             $arrValuesAsString[] = $options[$val];
                         }
                     }
                     $item[$fieldID . 'AsArray'] = $arrValuesAsArray;
                     $item[$fieldID] = implode(', ', $arrValuesAsString);
                 }
             }
         }
         //set data
         $objTemplate->setData($item);
         //set image
         if ($item['addImage']) {
             $this->addImageToTemplate($objTemplate, array('singleSRC' => $item['singleSRC'], 'alt' => $item['alt'], 'size' => $item['size'], 'fullsize' => $item['fullsize'], 'caption' => $item['caption'], 'title' => $item['title']));
         }
         // set enclosure
         $objTemplate->enclosure = array();
         if ($item['addEnclosure']) {
             $this->addEnclosuresToTemplate($objTemplate, $item);
         }
         $arrResults[] = $item;
         $strResults .= $objTemplate->parse();
     }
     $arrData = array('arrData' => $arrResults, 'strTemplate' => $strResults, 'arrFields' => $arrModuleData, 'arrWrapper' => $wrapperDB, 'arrLabels' => array('noResults' => $GLOBALS['TL_LANG']['MSC']['noResult']));
     header('Content-type: application/json');
     echo json_encode($arrData, 512);
     exit;
 }