/**
  * Main function
  *
  * @return	string		HTML output
  */
 function main()
 {
     global $BE_USER, $LANG, $BACK_PATH, $TCA, $TYPO3_CONF_VARS;
     $content = '';
     $table = 'tx_dam';
     //
     // get records by query depending on option 'Show deselected only'
     //
     $origSel = $this->pObj->selection->sl->sel;
     if ($this->pObj->MOD_SETTINGS['tx_dam_list_list_onlyDeselected']) {
         if (is_array($this->pObj->selection->sl->sel['NOT']['txdamRecords'])) {
             $excludeUidList = array_keys($this->pObj->selection->sl->sel['NOT']['txdamRecords']);
         } else {
             $excludeUidList = array(0);
             //dummy
         }
         unset($this->pObj->selection->sl->sel['NOT']['txdamRecords']);
         $this->pObj->selection->addSelectionToQuery();
         if (is_array($excludeUidList)) {
             $this->pObj->selection->qg->query['WHERE']['WHERE']['NOT_txdamRecords'] = 'AND tx_dam.uid IN (' . $GLOBALS['TYPO3_DB']->cleanIntList(implode(',', $excludeUidList)) . ')';
         }
     } else {
         // will display deselected unset($this->pObj->selection->sl->sel['NOT']['txdamRecords']);
         $this->pObj->selection->addSelectionToQuery();
     }
     $this->pObj->selection->sl->sel = $origSel;
     //
     // set language query
     //
     $langRows = $this->pObj->getLanguages($this->pObj->defaultPid);
     $langCurrent = intval($this->pObj->MOD_SETTINGS['tx_dam_list_langSelector']);
     if (!isset($langRows[$langCurrent])) {
         $langCurrent = $this->pObj->MOD_SETTINGS['tx_dam_list_langSelector'] = key($langRows);
     }
     $langQuery = '';
     $languageField = $TCA[$table]['ctrl']['languageField'];
     if ($langCurrent && $this->pObj->MOD_SETTINGS['tx_dam_list_langOverlay'] === 'exclusive') {
         // if ($langCurrent) { This works but create NULL columns for non-translated records so we need to use language overlay anyway
         $lgOvlFields = tx_dam_db::getLanguageOverlayFields($table, 'tx_dam_lgovl');
         $languageField = $TCA[$table]['ctrl']['languageField'];
         $transOrigPointerField = $TCA[$table]['ctrl']['transOrigPointerField'];
         $this->pObj->selection->setSelectionLanguage($langCurrent);
         $this->pObj->selection->qg->query['SELECT']['tx_dam as tx_dam_lgovl'] = implode(', ', $lgOvlFields) . ', tx_dam.uid as _dlg_uid, tx_dam.title as _dlg_title';
         $this->pObj->selection->qg->query['LEFT_JOIN']['tx_dam as tx_dam_lgovl'] = 'tx_dam.uid=tx_dam_lgovl.' . $transOrigPointerField;
         if ($this->pObj->MOD_SETTINGS['tx_dam_list_langOverlay'] === 'exclusive') {
             $this->pObj->selection->qg->query['WHERE']['WHERE']['tx_dam_lgovl.' . $languageField] = 'AND tx_dam_lgovl.' . $languageField . '=' . $langCurrent;
             $this->pObj->selection->qg->query['WHERE']['WHERE']['tx_dam_lgovl.deleted'] = 'AND tx_dam_lgovl.deleted=0';
         } else {
             $this->pObj->selection->qg->query['WHERE']['WHERE']['tx_dam_lgovl.' . $languageField] = 'AND (tx_dam_lgovl.' . $languageField . ' IN (' . $langCurrent . ', 0, -1) )';
             $this->pObj->selection->qg->query['WHERE']['WHERE']['tx_dam_lgovl.deleted'] = 'AND (tx_dam_lgovl.sys_language_uid=1 OR tx_dam.sys_language_uid=0 )';
         }
     } else {
         $this->pObj->selection->qg->query['WHERE']['WHERE']['tx_dam.' . $languageField] = 'AND tx_dam.' . $languageField . ' IN (0,-1)';
     }
     //
     // Add the current selection to the query
     //
     #		$this->pObj->selection->addSelectionToQuery();
     //
     // Use the current selection to create a query and count selected records
     //
     $this->pObj->selection->execSelectionQuery(TRUE);
     //
     // output header: info bar, result browser, ....
     //
     $content .= $this->pObj->guiItems->getOutput('header');
     $content .= $this->pObj->doc->spacer(10);
     // any records found?
     if ($this->pObj->selection->pointer->countTotal) {
         //
         // init db list object
         //
         $dblist = t3lib_div::makeInstance('tx_dam_listrecords');
         $dblist->setParameterName('form', $this->pObj->formName);
         $dblist->init($table);
         $dblist->setActionsEnv(array('currentLanguage' => $langCurrent, 'allowedLanguages' => $langRows));
         //
         // process multi action if needed
         //
         if ($processAction = $dblist->getMultiActionCommand()) {
             if ($processAction['onItems'] === '_all') {
                 $uidList = array();
                 $res = $this->pObj->selection->execSelectionQuery();
                 while ($row = $GLOBALS['TYPO3_DB']->sql_fetch_assoc($res)) {
                     $uidList[] = $row['uid'];
                 }
                 $itemList = implode(',', $uidList);
             } else {
                 $itemList = $processAction['onItems'];
                 $uidList = t3lib_div::trimExplode(',', $itemList, true);
             }
             if ($uidList) {
                 switch ($processAction['actionType']) {
                     case 'url':
                         $url = str_replace('###ITEMLIST###', $itemList, $processAction['action']);
                         header('Location: ' . $url);
                         exit;
                         break;
                     case 'tce-data':
                         $params = '';
                         foreach ($uidList as $uid) {
                             $params .= str_replace('###UID###', $uid, $processAction['action']);
                         }
                         $url = $GLOBALS['SOBE']->doc->issueCommand($params, -1);
                         $url = $BACK_PATH . 'tce_db.php?&redirect=' . rawurlencode(t3lib_div::getIndpEnv('REQUEST_URI')) . '&vC=' . $BE_USER->veriCode() . '&prErr=1&uPT=1' . $params;
                         header('Location: ' . $url);
                         exit;
                         break;
                 }
             }
         }
         t3lib_div::loadTCA($table);
         //
         // set fields to display
         //
         $titleColumn = $TCA[$table]['ctrl']['label'];
         $allFields = tx_dam_db::getFieldListForUser($table);
         $selectedFields = t3lib_div::_GP('tx_dam_list_list_displayFields');
         $selectedFields = is_array($selectedFields) ? $selectedFields : explode(',', $this->pObj->MOD_SETTINGS['tx_dam_list_list_displayFields']);
         // remove fields that can not be selected
         if (is_array($selectedFields)) {
             $selectedFields = array_intersect($allFields, $selectedFields);
             $selectedFields = array_merge(array($titleColumn), $selectedFields);
         } else {
             $selectedFields = array();
             $selectedFields[] = $titleColumn;
         }
         // store field list
         $this->pObj->MOD_SETTINGS['tx_dam_list_list_displayFields'] = implode(',', $selectedFields);
         $GLOBALS['BE_USER']->pushModuleData($this->pObj->MCONF['name'], $this->pObj->MOD_SETTINGS);
         //
         // set query and sorting
         //
         $orderBy = $TCA[$table]['ctrl']['sortby'] ? 'tx_dam.' . $TCA[$table]['ctrl']['sortby'] : 'tx_dam.title';
         if ($this->pObj->MOD_SETTINGS['tx_dam_list_list_sortField']) {
             if (in_array($this->pObj->MOD_SETTINGS['tx_dam_list_list_sortField'], $allFields)) {
                 $orderBy = 'tx_dam.' . $this->pObj->MOD_SETTINGS['tx_dam_list_list_sortField'];
                 if ($this->pObj->MOD_SETTINGS['tx_dam_list_list_sortRev']) {
                     $orderBy .= ' DESC';
                 }
             }
         }
         $queryFieldList = tx_dam_db::getMetaInfoFieldList(false, $selectedFields);
         $this->pObj->selection->qg->addSelectFields($queryFieldList);
         $this->pObj->selection->qg->addOrderBy($orderBy);
         //
         // exec query
         //
         $this->pObj->selection->addLimitToQuery();
         $res = $this->pObj->selection->execSelectionQuery();
         //
         // init iterator for query
         //
         $conf = array('table' => 'tx_dam', 'countTotal' => $this->pObj->selection->pointer->countTotal);
         if ($langCurrent > 0 and $this->pObj->MOD_SETTINGS['tx_dam_list_langOverlay'] !== 'exclusive') {
             $dbIterator = new tx_dam_iterator_db_lang_ovl($res, $conf);
             $dbIterator->initLanguageOverlay($table, $this->pObj->MOD_SETTINGS['tx_dam_list_langSelector']);
         } else {
             $dbIterator = new tx_dam_iterator_db($res, $conf);
         }
         //
         // make db list
         //
         $dblist->setDataObject($dbIterator);
         // add columns to list
         $dblist->clearColumns();
         $cc = 0;
         foreach ($selectedFields as $field) {
             $fieldLabel = is_array($TCA[$table]['columns'][$field]) ? preg_replace('#:$#', '', $LANG->sL($TCA[$table]['columns'][$field]['label'])) : '[' . $field . ']';
             $dblist->addColumn($field, $fieldLabel);
             $cc++;
             if ($cc == 1) {
                 // add control at second column
                 $dblist->addColumn('_CONTROL_', '');
                 $cc++;
             }
         }
         // enable display of action column
         $dblist->showActions = true;
         // enable display of multi actions
         $dblist->showMultiActions = $this->pObj->MOD_SETTINGS['tx_dam_list_list_showMultiActions'];
         // enable context menus
         $dblist->enableContextMenus = $this->pObj->config_checkValueEnabled('contextMenuOnListItems', true);
         // Enable/disable display of thumbnails
         $dblist->showThumbs = $this->pObj->MOD_SETTINGS['tx_dam_list_list_showThumb'];
         // Enable/disable display of AlternateBgColors
         $dblist->showAlternateBgColors = $this->pObj->config_checkValueEnabled('alternateBgColors', true);
         $dblist->setPointer($this->pObj->selection->pointer);
         $dblist->setCurrentSorting($this->pObj->MOD_SETTINGS['tx_dam_list_list_sortField'], $this->pObj->MOD_SETTINGS['tx_dam_list_list_sortRev']);
         $dblist->setParameterName('sortField', 'SET[tx_dam_list_list_sortField]');
         $dblist->setParameterName('sortRev', 'SET[tx_dam_list_list_sortRev]');
         $this->pObj->doc->JScodeArray['dblist-JsCode'] = $dblist->getJsCode();
         // todo Clipboard
         // It is set, if the clickmenu-layer is active AND the extended view is not enabled.
         #			$dblist->dontShowClipControlPanels = $CLIENT['FORMSTYLE'] && !$BE_USER->uc['disableCMlayers'];
         #$content.= '<form action="'.htmlspecialchars(t3lib_div::linkThisScript()).'" method="post" name="'.$dblist->paramName['form'].'">';
         // get all avalibale languages for the page
         if ($languageSwitch = $this->pObj->languageSwitch($langRows, intval($this->pObj->MOD_SETTINGS['tx_dam_list_langSelector']))) {
             $this->pObj->markers['LANGUAGE_SELECT'] = '<div class="languageSwitch">' . $languageSwitch . '</div>';
         } else {
             $this->pObj->markers['LANGUAGE_SELECT'] = '';
         }
         // wraps the list table with the form
         $content .= tx_dam_SCbase::getFormTag();
         $content .= $dblist->getListTable();
         $content .= '</form>';
         $fieldSelectBoxContent = $this->fieldSelectBox($table, $allFields, $selectedFields);
         $content .= $this->pObj->buttonToggleDisplay('fieldselector', $LANG->getLL('field_selector'), $fieldSelectBoxContent);
     } else {
         // no search result: showing selection box
         if ($languageSwitch = $this->pObj->languageSwitch($langRows, intval($this->pObj->MOD_SETTINGS['tx_dam_list_langSelector']))) {
             $this->pObj->markers['LANGUAGE_SELECT'] = '<div class="languageSwitch">' . $languageSwitch . '</div>';
         } else {
             $this->pObj->markers['LANGUAGE_SELECT'] = '';
         }
         // is in footer now $content .= $this->pObj->getCurrentSelectionBox();
     }
     return $content;
 }
 /**
  * Main function
  *
  * @return	string		HTML output
  */
 function main()
 {
     global $BE_USER, $LANG, $BACK_PATH, $TCA;
     $content = '';
     $table = 'tx_dam';
     t3lib_div::loadTCA($table);
     //
     // set language query
     //
     $this->langRows = $this->pObj->getLanguages($this->pObj->defaultPid);
     $this->langCurrent = intval($this->pObj->MOD_SETTINGS['tx_dam_list_langSelector']);
     if (!isset($this->langRows[$this->langCurrent])) {
         $this->langCurrent = $this->pObj->MOD_SETTINGS['tx_dam_list_langSelector'] = key($this->langRows);
     }
     $langQuery = '';
     $languageField = $TCA[$table]['ctrl']['languageField'];
     if ($this->langCurrent and $this->pObj->MOD_SETTINGS['tx_dam_list_langOverlay'] === 'exclusive') {
         // if ($this->langCurrent) { This works but create NULL columns for non-translated records so we need to use language overlay anyway
         $lgOvlFields = tx_dam_db::getLanguageOverlayFields($table, 'tx_dam_lgovl');
         $languageField = $TCA[$table]['ctrl']['languageField'];
         $transOrigPointerField = $TCA[$table]['ctrl']['transOrigPointerField'];
         $this->pObj->selection->setSelectionLanguage($this->langCurrent);
         $this->pObj->selection->qg->query['SELECT']['tx_dam as tx_dam_lgovl'] = implode(', ', $lgOvlFields) . ', tx_dam.uid as _dlg_uid, tx_dam.title as _dlg_title';
         $this->pObj->selection->qg->query['LEFT_JOIN']['tx_dam as tx_dam_lgovl'] = 'tx_dam.uid=tx_dam_lgovl.' . $transOrigPointerField;
         if ($this->pObj->MOD_SETTINGS['tx_dam_list_langOverlay'] === 'exclusive') {
             $this->pObj->selection->qg->query['WHERE']['WHERE']['tx_dam_lgovl.' . $languageField] = 'AND tx_dam_lgovl.' . $languageField . '=' . $this->langCurrent;
             $this->pObj->selection->qg->query['WHERE']['WHERE']['tx_dam_lgovl.deleted'] = 'AND tx_dam_lgovl.deleted=0';
         } else {
             $this->pObj->selection->qg->query['WHERE']['WHERE']['tx_dam_lgovl.' . $languageField] = 'AND (tx_dam_lgovl.' . $languageField . ' IN (' . $this->langCurrent . ',0,-1) )';
             $this->pObj->selection->qg->query['WHERE']['WHERE']['tx_dam_lgovl.deleted'] = 'AND (tx_dam_lgovl.sys_language_uid=1 OR tx_dam.sys_language_uid=0 )';
         }
     } else {
         $this->pObj->selection->qg->query['WHERE']['WHERE']['tx_dam.' . $languageField] = 'AND tx_dam.' . $languageField . ' IN (0,-1)';
     }
     //
     // set query and sorting
     //
     $allFields = tx_dam_db::getFieldListForUser($table);
     if ($this->pObj->MOD_SETTINGS['tx_dam_list_thumbs_sortField']) {
         if (in_array($this->pObj->MOD_SETTINGS['tx_dam_list_thumbs_sortField'], $allFields)) {
             $orderBy = 'tx_dam.' . $this->pObj->MOD_SETTINGS['tx_dam_list_thumbs_sortField'];
         }
     } else {
         $orderBy = $TCA[$table]['ctrl']['sortby'] ? $TCA[$table]['ctrl']['sortby'] : $TCA[$table]['ctrl']['default_sortby'];
         $orderBy = $GLOBALS['TYPO3_DB']->stripOrderBy($orderBy);
         $this->pObj->MOD_SETTINGS['tx_dam_list_thumbs_sortField'] = $orderBy;
     }
     if ($this->pObj->MOD_SETTINGS['tx_dam_list_thumbs_sortRev']) {
         $orderBy .= ' DESC';
     }
     $this->pObj->selection->qg->addOrderBy($orderBy);
     //
     // Use the current selection to create a query and count selected records
     //
     $this->pObj->selection->addSelectionToQuery();
     $this->pObj->selection->execSelectionQuery(TRUE);
     //
     // output header: info bar, result browser, ....
     //
     $content .= $this->pObj->guiItems->getOutput('header');
     $content .= $this->pObj->doc->spacer(10);
     // any records found?
     if ($this->pObj->selection->pointer->countTotal) {
         // TODO move to scbase (see tx_dam_browser too)
         if (is_array($allFields) && count($allFields)) {
             $fieldsSelItems = array();
             foreach ($allFields as $field => $title) {
                 $fL = is_array($TCA[$table]['columns'][$field]) ? preg_replace('#:$#', '', $GLOBALS['LANG']->sL($TCA[$table]['columns'][$field]['label'])) : '[' . $field . ']';
                 $fieldsSelItems[$field] = t3lib_div::fixed_lgd_cs($fL, 15);
             }
             $sortingSelector = $GLOBALS['LANG']->sL('LLL:EXT:dam/lib/locallang.xml:labelSorting', 1) . ' ';
             $sortingSelector .= t3lib_befunc::getFuncMenu('', 'SET[tx_dam_list_thumbs_sortField]', $this->pObj->MOD_SETTINGS['tx_dam_list_thumbs_sortField'], $fieldsSelItems);
             if ($this->pObj->MOD_SETTINGS['tx_dam_list_thumbs_sortRev']) {
                 $href = t3lib_div::linkThisScript(array('SET[tx_dam_list_thumbs_sortRev]' => '0'));
                 $sortingSelector .= '<button name="SET[tx_dam_list_thumbs_sortRev]" type="button" onclick="self.location.href=\'' . htmlspecialchars($href) . '\'">' . '<img' . t3lib_iconWorks::skinImg($BACK_PATH, 'gfx/pil2up.gif', 'width="12" height="7"') . ' alt="" />' . '</button>';
             } else {
                 $href = t3lib_div::linkThisScript(array('SET[tx_dam_list_thumbs_sortRev]' => '1'));
                 $sortingSelector .= '<button name="SET[tx_dam_list_thumbs_sortRev]" type="button" onclick="self.location.href=\'' . htmlspecialchars($href) . '\'">' . '<img' . t3lib_iconWorks::skinImg($BACK_PATH, 'gfx/pil2down.gif', 'width="12" height="7"') . ' alt="" />' . '</button>';
             }
             $sortingSelector = '<form action="' . htmlspecialchars(t3lib_div::linkThisScript()) . '" method="post">' . $sortingSelector . '</form>';
         }
         $this->pObj->markers['LANGUAGE_SELECT'] = $this->pObj->languageSwitch($this->langRows, intval($this->pObj->MOD_SETTINGS['tx_dam_list_langSelector']));
         $content .= $this->pObj->contentLeftRight($sortingSelector, '');
         $content .= $this->pObj->doc->spacer(10);
         //
         // creates thumbnail list
         //
         // limit query for browsing
         $this->pObj->selection->addLimitToQuery();
         $res = $this->pObj->selection->execSelectionQuery();
         $showElements = array();
         if ($this->pObj->MOD_SETTINGS['tx_dam_list_thumbs_showTitle']) {
             $showElements[] = 'title';
         }
         if ($this->pObj->MOD_SETTINGS['tx_dam_list_thumbs_showInfo']) {
             $showElements[] = 'info';
         }
         if ($this->pObj->MOD_SETTINGS['tx_dam_list_thumbs_showIcons']) {
             $showElements[] = 'actions';
         }
         // extra CSS code for HTML header
         $this->pObj->doc->inDocStylesArray['tx_dam_SCbase_dia'] = tx_dam_guiFunc::getDiaStyles($this->diaSize, $this->diaMargin, 5);
         $code = '';
         //
         // init iterator for query
         //
         $conf = array('table' => 'tx_dam', 'countTotal' => $this->pObj->selection->pointer->countTotal);
         if ($this->langCurrent > 0 and $this->pObj->MOD_SETTINGS['tx_dam_list_langOverlay'] !== 'exclusive') {
             $dbIterator = new tx_dam_iterator_db_lang_ovl($res, $conf);
             $dbIterator->initLanguageOverlay($table, $this->pObj->MOD_SETTINGS['tx_dam_list_langSelector']);
         } else {
             $dbIterator = new tx_dam_iterator_db($res, $conf);
         }
         if ($dbIterator->count()) {
             while ($dbIterator->valid() and $dbIterator->currentPointer < $this->pObj->selection->pointer->itemsPerPage) {
                 $row = $dbIterator->current();
                 $onClick = $this->pObj->doc->wrapClickMenuOnIcon('', $table, $row['uid'], $listFr = 1, $addParams = '', $enDisItems = '', $returnOnClick = TRUE);
                 $actions = $this->getItemControl($row);
                 $code .= tx_dam_guiFunc::getDia($row, $this->diaSize, $this->diaMargin, $showElements, $onClick, true, $actions);
                 $dbIterator->next();
             }
         }
         $content .= $this->pObj->doc->spacer(5);
         $content .= $this->pObj->doc->section('', '<div style="line-height:' . ($this->diaSize + 7 + 8) . 'px;">' . $code . '</div><br style="clear:left" />', 0, 1);
     }
     return $content;
 }