/** * Builds the page ID checking statement * * @param string $tableName The database table name * @param array &$sql The query parts * @param array $storagePageIds list of storage page ids * @throws \TYPO3\CMS\Extbase\Persistence\Generic\Exception\InconsistentQuerySettingsException * @return void */ protected function addPageIdStatement($tableName, array &$sql, array $storagePageIds) { $tableColumns = $this->tableColumnCache->get($tableName); if ($tableColumns === FALSE) { $tableColumns = $this->databaseHandle->admin_get_fields($tableName); $this->tableColumnCache->set($tableName, $tableColumns); } if (is_array($GLOBALS['TCA'][$tableName]['ctrl']) && array_key_exists('pid', $tableColumns)) { $rootLevel = (int) $GLOBALS['TCA'][$tableName]['ctrl']['rootLevel']; if ($rootLevel) { if ($rootLevel === 1) { $sql['additionalWhereClause'][] = $tableName . '.pid = 0'; } } else { if (empty($storagePageIds)) { throw new \TYPO3\CMS\Extbase\Persistence\Generic\Exception\InconsistentQuerySettingsException('Missing storage page ids.', 1365779762); } $sql['additionalWhereClause'][] = $tableName . '.pid IN (' . implode(',', $this->databaseHandle->cleanIntArray($storagePageIds)) . ')'; } } }
/** * Builds the page ID checking statement * * @param string $tableName The database table name * @param string $tableAlias The table alias used in the query. * @param array $storagePageIds list of storage page ids * @throws InconsistentQuerySettingsException * @return string */ protected function getPageIdStatement($tableName, $tableAlias, array $storagePageIds) { $pageIdStatement = ''; $tableColumns = $this->tableColumnCache->get($tableName); if ($tableColumns === false) { $tableColumns = $this->databaseHandle->admin_get_fields($tableName); $this->tableColumnCache->set($tableName, $tableColumns); } if (is_array($GLOBALS['TCA'][$tableName]['ctrl']) && array_key_exists('pid', $tableColumns)) { $rootLevel = (int) $GLOBALS['TCA'][$tableName]['ctrl']['rootLevel']; switch ($rootLevel) { // Only in pid 0 case 1: return $tableAlias . '.pid = 0'; // Pid 0 and pagetree // Pid 0 and pagetree case -1: if (empty($storagePageIds)) { return $tableAlias . '.pid = 0'; } $storagePageIds[] = 0; break; // Only pagetree or not set // Only pagetree or not set case 0: if (empty($storagePageIds)) { throw new InconsistentQuerySettingsException('Missing storage page ids.', 1365779762); } break; // Invalid configuration // Invalid configuration default: return ''; } $pageIdStatement = $tableAlias . '.pid IN (' . implode(',', $this->databaseHandle->cleanIntArray($storagePageIds)) . ')'; } return $pageIdStatement; }
public function findAllByUid($onlyUids = null) { if ($cache = $this->cacheUtility->getRamCache(__METHOD__, $onlyUids)) { return $cache; } $onlyUidsArr = join(',', \TYPO3\CMS\Core\Database\DatabaseConnection::cleanIntArray($onlyUids)); $groups_by_uid = $this->feGroupsRepository->findAllByUid(); $users_by_uid = $GLOBALS['TYPO3_DB']->exec_SELECTgetRows("*", 'fe_users', '1=1 ' . $this->settingsUtility->getEnableFields('fe_users') . ($onlyUids ? ' AND uid IN(' . $onlyUidsArr . ')' : ''), '', '', '', 'uid'); foreach ($users_by_uid as $k => $item) { $ref =& $users_by_uid[$k]; if ($ref['usergroup'] && ($groups = explode(',', $ref['usergroup']))) { $tmp = array(); foreach ($groups as $uid) { if ($groups_by_uid[$uid]) { $tmp[] =& $groups_by_uid[$uid]; } } $ref['usergroup'] = $tmp; } } $this->cacheUtility->setRamCache($data, __METHOD__, $onlyUids); return $users_by_uid; }
/** * @test * @dataProvider cleanIntArrayDataProvider * @param array $exampleData The array to sanitize * @param array $expectedResult The expected result * @return void */ public function cleanIntArray($exampleData, $expectedResult) { $sanitizedArray = $this->subject->cleanIntArray($exampleData); $this->assertEquals($expectedResult, $sanitizedArray); }