/**
  * Führt ein SELECT aus
  *
  * @param 	string 		$what 		requested columns
  * @param 	string 		$from 		either the name of on table or an array with index 0 the from clause
  *              					and index 1 the requested tablename and optional index 2 a table alias to use.
  * @param 	array 		$arr 		the options array
  * @param 	boolean 	$debug = 0 	Set to 1 to debug sql-String
  * @return 	array
  */
 public static function doSelect($what, $from, $arr, $debug = 0)
 {
     return parent::doSelect($what, $from, $arr, $debug);
 }
 public static function getAddLocalizationLinks(tx_rnbase_model_base $item, tx_rnbase_mod_BaseModule $mod = NULL)
 {
     if ($item->getUid() != $item->getProperty('uid') || $item->getSysLanguageUid() !== 0) {
         return '';
     }
     $out = '';
     foreach (self::getLangRecords($item->getPid()) as $lang) {
         // skip, if the be user hase no access to for the language!
         if (!$GLOBALS['BE_USER']->checkLanguageAccess($lang['uid'])) {
             continue;
         }
         // skip, if a overlay for this language allready exists
         tx_rnbase::load('tx_rnbase_util_TCA');
         $parentField = tx_rnbase_util_TCA::getTransOrigPointerFieldForTable($item->getTableName());
         $sysLanguageUidField = tx_rnbase_util_TCA::getLanguageFieldForTable($item->getTableName());
         $overlays = tx_rnbase_util_DB::doSelect('uid', $item->getTableName(), array('where' => implode(' AND ', array($parentField . '=' . $item->getUid(), $sysLanguageUidField . '=' . (int) $lang['uid'])), 'limit' => 1));
         if (!empty($overlays)) {
             continue;
         }
         /* @var $mod tx_rnbase_mod_BaseModule */
         if (!$mod instanceof tx_rnbase_mod_BaseModule) {
             $mod = $GLOBALS['SOBE'];
         }
         $onclick = $mod->getDoc()->issueCommand('&cmd[' . $item->getTableName() . '][' . $item->getUid() . '][localize]=' . $lang['uid']);
         $onclick = 'window.location.href=\'' . $onclick . '\'; return false;';
         $out .= sprintf('<a href="#" onclick="%1$s">%2$s</a>', htmlspecialchars($onclick), self::getLangSpriteIcon($lang, array('show_title' => FALSE)));
     }
     return $out;
 }
 /**
  * Get picture usage count
  *
  * @param int $mediaUid
  * @return int
  */
 public static function getReferencesCount($mediaUid)
 {
     $options['where'] = 'uid_local = ' . (int) $mediaUid;
     $options['count'] = 1;
     $options['enablefieldsoff'] = 1;
     $ret = tx_rnbase_util_DB::doSelect('count(*) AS \'cnt\'', 'tx_dam_mm_ref', $options, 0);
     $cnt = count($ret) ? intval($ret[0]['cnt']) : 0;
     return $cnt;
 }
 /**
  * gets the last run time
  *
  * @return DateTime|null
  */
 protected function getLastRunTime()
 {
     if ($this->lastRun === FALSE) {
         $options = array();
         $options['enablefieldsoff'] = 1;
         $options['where'] = 'uid=' . (int) $this->getTaskUid();
         $options['limit'] = 1;
         try {
             $ret = @tx_rnbase_util_DB::doSelect('tx_mklib_lastrun', 'tx_scheduler_task', $options);
         } catch (Exception $e) {
             $ret = NULL;
         }
         $this->lastRun = empty($ret) || empty($ret[0]['tx_mklib_lastrun']) || $ret[0]['tx_mklib_lastrun'] === '0000-00-00 00:00:00' ? NULL : new DateTime($ret[0]['tx_mklib_lastrun']);
     }
     return $this->lastRun;
 }
 /**
  * Die Bildanzahl auslesen
  *
  * @param string 		$sTableName
  * @param string 		$sFieldName
  * @param int 			$iItemId
  * @return int
  */
 public static function getImageCount($sTableName, $sFieldName, $iItemId)
 {
     if (!self::isLoaded()) {
         return 0;
     }
     $aOptions['where'] = 'tablenames=\'' . $sTableName . '\' AND ident=\'' . $sFieldName . '\' AND uid_foreign=' . $iItemId;
     $aOptions['count'] = 1;
     $aOptions['enablefieldsoff'] = 1;
     $ret = tx_rnbase_util_DB::doSelect('count(*) AS \'cnt\'', 'tx_dam_mm_ref', $aOptions, 0);
     return count($ret) ? intval($ret[0]['cnt']) : 0;
 }
 /**
  * returns all language overlays.
  *
  * @param Tx_Rnbase_Domain_Model_Base $entry
  * @return array[Tx_Rnbase_Domain_Model_Base]
  */
 private static function getLangOverlayEntries(Tx_Rnbase_Domain_Model_RecordInterface $entry)
 {
     tx_rnbase::load('tx_rnbase_util_TCA');
     $parentField = tx_rnbase_util_TCA::getTransOrigPointerFieldForTable($entry->getTableName());
     $overlays = tx_rnbase_util_DB::doSelect('*', $entry->getTableName(), array('where' => $parentField . '=' . $entry->getUid(), 'wrapperclass' => get_class($entry)));
     return $overlays;
 }
 /**
  * Wurden die ZipRules geladen?
  */
 private static function checkStaticCountries()
 {
     $cnt = tx_rnbase_util_DB::doSelect('COUNT(uid) as cnt', 'static_countries', array('enablefieldsoff' => 1, 'where' => 'zipcode_rule > 0'));
     $loaded = intval($cnt[0]['cnt']) > 0;
     if (!$loaded) {
         // zur Sicherheit die Zip Code Rules einfügen
         $sqlFilename = t3lib_div::getFileAbsFileName(t3lib_extMgm::extPath('mklib', 'ext_tables_static_update.sql'));
         if (@is_file($sqlFilename)) {
             tx_mklib_tests_Util::queryDB($sqlFilename, false, true);
             //alle statements importieren
         }
     }
 }
 /**
  * @param int $taskId
  * @return DateTime
  */
 protected function getLastRunTime($taskId)
 {
     $options = array();
     $options['enablefieldsoff'] = 1;
     $options['where'] = 'uid=' . intval($taskId);
     $ret = tx_rnbase_util_DB::doSelect('tx_mklog_lastrun', 'tx_scheduler_task', $options);
     $lastrun = new DateTime();
     if (count($ret)) {
         $lastrun = new DateTime($ret[0]['tx_mklog_lastrun']);
     }
     return $lastrun;
 }
 /**
  * Pagebrowser vorbereiten. Wir im Plugin nach dem init() des Filters aufgerufen:
  *
  * 		// Soll ein PageBrowser verwendet werden
  *		tx_rnbase_filter_BaseFilter::handlePageBrowser($configurations,
  *			$this->getConfId().'myitem.pagebrowser', $viewdata, $fields, $options, array(
  *			'searchcallback'=> array($service, 'search'),
  *			'pbid' => 'mt'.$configurations->getPluginId(),
  *			)
  *		);
  *
  * @param tx_rnbase_configurations $configurations
  * @param string $confid Die Confid des PageBrowsers. z.B. myview.org.pagebrowser ohne Punkt!
  * @param ArrayObject $viewdata
  * @param array $fields
  * @param array $options
  * @param array $cfg You have to set 'searchcallback' and optional 'pbid'
  */
 public static function handlePageBrowser(&$configurations, $confid, &$viewdata, &$fields, &$options, $cfg = array())
 {
     $confid .= '.';
     if (is_array($configurations->get($confid))) {
         $searchCallback = $cfg['searchcallback'];
         if (!$searchCallback) {
             throw new Exception('No search callback defined!');
         }
         // Die Gesamtzahl der Items ist entweder im Limit gesetzt oder muss ermittelt werden
         $listSize = intval($options['limit']);
         if (!$listSize) {
             // Mit Pagebrowser benötigen wir zwei Zugriffe, um die Gesamtanzahl der Items zu ermitteln
             $pageBrowserOptions = $options;
             $pageBrowserOptions['count'] = 1;
             // eigenes what?
             if ($configurations->get($confid . 'what')) {
                 $pageBrowserOptions['what'] = $configurations->get($confid . 'what');
                 // wir brauchen keinen countwrap wenn sich das what selbst darum
                 // kümmert
                 if (strpos(strtoupper($pageBrowserOptions['what']), 'COUNT(') !== FALSE) {
                     $pageBrowserOptions['disableCountWrap'] = TRUE;
                 }
             }
             $listSize = call_user_func($searchCallback, $fields, $pageBrowserOptions);
             //$listSize = $service->search($fields, $options);
             unset($options['count']);
         }
         // PageBrowser initialisieren
         $pbId = $cfg['pbid'] ? $cfg['pbid'] : 'pb';
         /**
          * @var tx_rnbase_util_PageBrowser $pageBrowser
          */
         $pageBrowser = tx_rnbase::makeInstance('tx_rnbase_util_PageBrowser', $pbId);
         $pageSize = intval($configurations->get($confid . 'limit'));
         $pageBrowser->setState($configurations->getParameters(), $listSize, $pageSize);
         // Nach dem Item nur suchen wenn über die Parameter kein Pointer gesetzt wurde.
         if (is_array($cfg['pointerFromItem']) && !$configurations->getParameters()->offsetExists($pageBrowser->getParamName('pointer')) && ($itemId = $configurations->getParameters()->get($cfg['pointerFromItem']['param']))) {
             // Wir erzeugen uns das SQl der eigentlichen Abfrage.
             // Dabei wollen wir auch die rownum haben!
             $sql = call_user_func($searchCallback, $fields, array_merge($options, array('sqlonly' => 1, 'rownum' => 1)));
             // Jetzt besorgen wir uns die Position des aktuellen Eintrages
             $res = tx_rnbase_util_DB::doSelect('ROW.rownum', '(' . $sql . ') as ROW', array('where' => 'ROW.' . $cfg['pointerFromItem']['field'] . '=' . $GLOBALS['TYPO3_DB']->fullQuoteStr($itemId, ''), 'enablefieldsoff' => TRUE));
             // Jetzt haben wir ein Ergebnis, mit der Zeilennummer des Datensatzes.
             if (!empty($res)) {
                 $rownum = intval($res[0]['rownum']);
                 // Wir berechnen die Seite, auf der sich der aktuelle Eintrag befindet.
                 // intval schneidet die Dezimalzahlen ab, erspart uns das runden.
                 // -1, weil Bei 10 Einträgen pro Seite rownum 20 auf seite 2 ist,
                 // 20/10 allerdings 2 (für seite 3) ergibt.
                 $pageBrowser->setPointer(intval(($rownum - 1) / $pageSize));
             }
         }
         $limit = $pageBrowser->getState();
         $options = array_merge($options, $limit);
         if ($viewdata) {
             $viewdata->offsetSet('pagebrowser', $pageBrowser);
         }
     }
 }
    /**
     * möglicherweise hängen geblibene tasks
     * @return array
     */
    protected function getPossiblyFrozenTasks()
    {
        $selectFields = tx_rnbase_util_TYPO3::isTYPO62OrHigher() ? 'uid,serialized_task_object' : 'uid,classname';
        return tx_rnbase_util_DB::doSelect($selectFields, 'tx_scheduler_task', array('enablefieldsoff' => true, 'where' => '
					uid != ' . intval($this->taskUid) . ' AND
					LENGTH(serialized_executions) > 0 AND
					freezedetected = 0 AND
					lastexecution_time < ' . ($GLOBALS['EXEC_TIME'] - $this->getOption('threshold'))));
    }
 /**
  * prüfen ob alles gelöscht wird, auch die bilder da sie keine
  * verwendung mehr haben
  * @group integration
  */
 public function testHandleDeleteWhenNoReference()
 {
     $this->importDataSet(tx_mklib_tests_Util::getFixturePath('db/wordlist.xml'));
     //wir müssen nachträglich noch die richtige pid in die dam datensätze einfügen damit
     //diese auch gefunden werden über tx_mklib_util_DAM::getRecords
     require_once PATH_txdam . 'lib/class.tx_dam_db.php';
     tx_rnbase_util_DB::doUpdate('tx_dam', '', array('pid' => tx_dam_db::getPidList()));
     $result = tx_mklib_util_DAM::handleDelete('tx_mklib_wordlist', 2, 'blacklisted', 1, true);
     //richtige Anzahl gelöscht?
     $this->assertEquals(0, $result['deletedReferences'], 'deletedReferences ist falsch!');
     $this->assertEquals(0, $result['deletedRecords'], 'deletedRecords ist falsch!');
     //bild nicht gelöscht?
     $this->assertFileExists($this->sAbsoluteImagePath, 'Das Bild der tempoäreren Anzeigen 4 und 20 wurde nicht gelöscht!');
     //eintrag in dam auf hidden gesetzt?
     $res = tx_rnbase_util_DB::doSelect('*', 'tx_dam', array('enablefieldsoff' => true));
     $this->assertEquals(1, count($res), 'Es wurde nicht die korrekte Anzahl von DAM Einträgen gefunden!');
     $this->assertEquals(1, $res[0]['uid'], 'Es wurde scheinbar eine falscher DAM Eintrag gelöscht!!');
     $this->assertEquals(0, $res[0]['hidden'], 'hidden falsch!');
     $this->assertEquals(0, $res[0]['deleted'], 'deleted falsch!');
 }
 /**
  * Anzahl aller Meldungen für alle Log-Level laden
  * @param DateTime $lastRun
  */
 protected function getSummary(DateTime $lastRun)
 {
     $what = 'severity, count(uid) As cnt';
     $from = Tx_Mklog_Utility_Devlog::getTableName();
     $options = array();
     $options['groupby'] = 'severity';
     $options['enablefieldsoff'] = '1';
     $options['where'] = 'crdate>=' . $lastRun->format('U');
     $result = tx_rnbase_util_DB::doSelect($what, $from, $options);
     return $result;
 }