/** * Method collects and stores extension version details into the database. * * @access protected * @param SplSubject $subject a subject notifying this observer * @return void */ protected function loadIntoDB(SplSubject &$subject) { // flush every 50 rows to database if ($this->sumRecords !== 0 && $this->sumRecords % 50 === 0) { $GLOBALS['TYPO3_DB']->exec_INSERTmultipleRows('cache_extensions', self::$fieldNames, $this->arrRows, self::$fieldIndicesNoQuote); $this->arrRows = array(); } // order must match that of self::$fieldNamses! $this->arrRows[] = array($subject->getExtkey(), $subject->getVersion(), tx_em_Tools::makeVersion($subject->getVersion(), 'int'), intval($subject->getAlldownloadcounter()), intval($subject->getDownloadcounter()), !is_null($subject->getTitle()) ? $subject->getTitle() : '', $subject->getOwnerusername(), !is_null($subject->getAuthorname()) ? $subject->getAuthorname() : '', !is_null($subject->getAuthoremail()) ? $subject->getAuthoremail() : '', !is_null($subject->getAuthorcompany()) ? $subject->getAuthorcompany() : '', intval($subject->getLastuploaddate()), $subject->getT3xfilemd5(), $this->repositoryUID, tx_em_Tools::getDefaultState($subject->getState() ? $subject->getState() : ''), intval($subject->getReviewstate()), tx_em_Tools::getDefaultCategory($subject->getCategory() ? $subject->getCategory() : ''), $subject->getDescription() ? $subject->getDescription() : '', $subject->getDependencies() ? $subject->getDependencies() : '', $subject->getUploadcomment() ? $subject->getUploadcomment() : ''); ++$this->sumRecords; }
/** * Render remote extension list * * @param object $parameters * @return string $content */ public function getRemoteExtensionList($parameters) { $repositoryId = $parameters->repository; $mirrorUrl = $this->getMirrorUrl($repositoryId); $list = $this->getFlatExtensionList(); $localList = $list['data']; $search = htmlspecialchars($parameters->query); $limit = htmlspecialchars($parameters->start . ', ' . $parameters->limit); $orderBy = htmlspecialchars($parameters->sort); $orderDir = htmlspecialchars($parameters->dir); if ($orderBy == '') { $orderBy = 'relevance'; $orderDir = 'ASC'; } if ($orderBy === 'statevalue') { $orderBy = 'cache_extensions.state ' . $orderDir; } elseif ($orderBy === 'relevance') { $orderBy = 'relevance ' . $orderDir . ', cache_extensions.title ' . $orderDir; } else { $orderBy = 'cache_extensions.' . $orderBy . ' ' . $orderDir; } $installedOnly = $parameters->installedOnly; $where = $addFields = ''; if ($search === '' && !$installedOnly) { return array('length' => 0, 'data' => array()); } elseif ($search === '*') { } else { $quotedSearch = $GLOBALS['TYPO3_DB']->escapeStrForLike($GLOBALS['TYPO3_DB']->quoteStr($search, 'cache_extensions'), 'cache_extensions'); $addFields = ' (CASE WHEN cache_extensions.extkey = "' . $search . '" THEN 100 ELSE 5 END) + (CASE WHEN cache_extensions.title = "' . $search . '" THEN 80 ELSE 5 END) + (CASE WHEN cache_extensions.extkey LIKE \'%' . $quotedSearch . '%\' THEN 60 ELSE 5 END) + (CASE WHEN cache_extensions.title LIKE \'%' . $quotedSearch . '%\' THEN 40 ELSE 5 END) AS relevance'; if (t3lib_extMgm::isLoaded('dbal')) { // as dbal can't use the sum, make it more easy for dbal $addFields = 'CASE WHEN cache_extensions.extkey = \'' . $search . '\' THEN 100 ELSE 10 END AS relevance'; } $where = ' AND (cache_extensions.extkey LIKE \'%' . $quotedSearch . '%\' OR cache_extensions.title LIKE \'%' . $quotedSearch . '%\')'; } // check for filter $where .= $this->makeFilterQuery(get_object_vars($parameters)); if ($installedOnly) { $temp = array(); foreach ($localList as $key => $value) { if ($value['installed']) { $temp[] = '"' . $key . '"'; } } $where .= ' AND cache_extensions.extkey IN(' . implode(',', $temp) . ')'; $limit = ''; } $list = tx_em_Database::getExtensionListFromRepository($repositoryId, $addFields, $where, $orderBy, $limit); $updateKeys = array(); // transform array foreach ($list['results'] as $key => $value) { $list['results'][$key]['dependencies'] = unserialize($value['dependencies']); $extPath = t3lib_div::strtolower($value['extkey']); $list['results'][$key]['statevalue'] = $value['state']; $list['results'][$key]['state'] = tx_em_Tools::getDefaultState(intval($value['state'])); $list['results'][$key]['version'] = tx_em_Tools::versionFromInt($value['maxintversion']); $list['results'][$key]['icon'] = '<img alt="" src="' . $mirrorUrl . $extPath[0] . '/' . $extPath[1] . '/' . $extPath . '_' . $list['results'][$key]['version'] . '.gif" />'; $list['results'][$key]['exists'] = 0; $list['results'][$key]['installed'] = 0; $list['results'][$key]['versionislower'] = 0; $list['results'][$key]['existingVersion'] = ''; if (isset($localList[$value['extkey']])) { $isUpdatable = $localList[$value['extkey']]['intversion'] < $value['maxintversion']; $list['results'][$key]['exists'] = 1; $list['results'][$key]['installed'] = $localList[$value['extkey']]['installed']; $list['results'][$key]['versionislower'] = $isUpdatable; $list['results'][$key]['existingVersion'] = $localList[$value['extkey']]['version']; if ($isUpdatable) { $updateKeys[] = $key; } } } // updatable only if ($installedOnly == 2) { $temp = array(); if (count($updateKeys)) { foreach ($updateKeys as $key) { $temp[] = $list['results'][$key]; } } $list['results'] = $temp; $list['count'] -= count($updateKeys); } return array('length' => $list['count'], 'data' => $list['results']); }