TYPO3 CMS  TYPO3_6-2
ListUtility.php
Go to the documentation of this file.
1 <?php
3 
21 
33 
38  protected $emConfUtility;
39 
45 
50  protected $installUtility;
51 
56  protected $packageManager;
57 
63 
70  public function getAvailableExtensions() {
72  $extensions = array();
73  foreach ($this->packageManager->getAvailablePackages() as $package) {
74  // Only TYPO3 related packages could be handled by the extension manager
75  // Composer packages from "Packages" folder will be instantiated as \TYPO3\Flow\Package\Package
76  if (!($package instanceof \TYPO3\CMS\Core\Package\PackageInterface)) {
77  continue;
78  }
79  $installationType = $this->getInstallTypeForPackage($package);
80  $extensions[$package->getPackageKey()] = array(
81  'siteRelPath' => str_replace(PATH_site, '', $package->getPackagePath()),
82  'type' => $installationType,
83  'key' => $package->getPackageKey(),
84  'ext_icon' => ExtensionManagementUtility::getExtensionIcon($package->getPackagePath()),
85  );
86  }
87  return $extensions;
88  }
89 
95  public function getExtension($extensionKey) {
96  return $this->packageManager->getPackage($extensionKey);
97  }
98 
102  protected function emitPackagesMayHaveChangedSignal() {
103  $this->signalSlotDispatcher->dispatch('PackageManagement', 'packagesMayHaveChanged');
104  }
105 
112  protected function getInstallTypeForPackage(PackageInterface $package) {
113  foreach (Extension::returnInstallPaths() as $installType => $installPath) {
114  if (GeneralUtility::isFirstPartOfStr($package->getPackagePath(), $installPath)) {
115  return $installType;
116  }
117  }
118  return '';
119  }
120 
127  public function getAvailableAndInstalledExtensions(array $availableExtensions) {
128  foreach ($this->packageManager->getActivePackages() as $extKey => $_) {
129  if (isset($availableExtensions[$extKey])) {
130  $availableExtensions[$extKey]['installed'] = TRUE;
131  }
132  }
133  return $availableExtensions;
134  }
135 
142  public function enrichExtensionsWithEmConfInformation(array $extensions) {
143  foreach ($extensions as $extensionKey => $properties) {
144  $emconf = $this->emConfUtility->includeEmConf($properties);
145  if ($emconf) {
146  $extensions[$extensionKey] = array_merge($emconf, $properties);
147  } else {
148  unset($extensions[$extensionKey]);
149  }
150  }
151  return $extensions;
152  }
153 
160  public function enrichExtensionsWithEmConfAndTerInformation(array $extensions) {
161  $extensions = $this->enrichExtensionsWithEmConfInformation($extensions);
162  foreach ($extensions as $extensionKey => $properties) {
163  $terObject = $this->getExtensionTerData($extensionKey, $extensions[$extensionKey]['version']);
164  if ($terObject !== null) {
165  $extensions[$extensionKey]['terObject'] = $terObject;
166  $extensions[$extensionKey]['updateAvailable'] = FALSE;
167  $extensions[$extensionKey]['updateToVersion'] = NULL;
168  $extensionToUpdate = $this->installUtility->getUpdateableVersion($terObject);
169  if ($extensionToUpdate !== false) {
170  $extensions[$extensionKey]['updateAvailable'] = TRUE;
171  $extensions[$extensionKey]['updateToVersion'] = $extensionToUpdate;
172  }
173  }
174  }
175  return $extensions;
176  }
177 
187  protected function getExtensionTerData($extensionKey, $version) {
188  $terObject = $this->extensionRepository->findOneByExtensionKeyAndVersion($extensionKey, $version);
189  if (!$terObject instanceof Extension) {
190  // Version unknown in TER data, try to find extension
191  $terObject = $this->extensionRepository->findHighestAvailableVersion($extensionKey);
192  if ($terObject instanceof Extension) {
193  // Found in TER now, set version information to the known ones, so we can look if there is a newer one
194  // Use a cloned object, otherwise wrong information is stored in persistenceManager
195  $terObject = clone $terObject;
196  $terObject->setVersion($version);
197  $terObject->setIntegerVersion(
199  );
200  } else {
201  $terObject = NULL;
202  }
203  }
204 
205  return $terObject;
206  }
207 
214  public function enrichExtensionsWithIconInformation(array $extensions) {
215  foreach ($extensions as &$properties) {
216  $iInfo = @getimagesize(PATH_site . $properties['siteRelPath'] . $properties['ext_icon']);
217  if ($iInfo !== FALSE) {
218  $properties['ext_icon_width'] = $iInfo[0];
219  $properties['ext_icon_height'] = $iInfo[1];
220  } else {
221  $properties['ext_icon_width'] = 0;
222  $properties['ext_icon_height'] = 0;
223  }
224  }
225  unset($properties);
226  return $extensions;
227  }
228 
236  $availableExtensions = $this->getAvailableExtensions();
237  $availableAndInstalledExtensions = $this->getAvailableAndInstalledExtensions($availableExtensions);
238  return $this->enrichExtensionsWithEmConfAndTerInformation($availableAndInstalledExtensions);
239  }
240 }
static getExtensionIcon($extensionPath, $returnFullPath=FALSE)
getInstallTypeForPackage(PackageInterface $package)
static isFirstPartOfStr($str, $partStr)
getAvailableAndInstalledExtensions(array $availableExtensions)
enrichExtensionsWithEmConfAndTerInformation(array $extensions)