/** * Update the JSON file. * * @param JsonFile $jsonFile * @param array $package */ private function updateComposerJson(JsonFile $jsonFile, array $package) { $composerJson = $jsonFile->parse(); $sortPackages = $this->getOptions()->sortPackages(); $requireKey = $this->getOptions()->dev() ? 'require-dev' : 'require'; $removeKey = $this->getOptions()->dev() ? 'require' : 'require-dev'; $baseRequirements = array_key_exists($requireKey, $composerJson) ? $composerJson[$requireKey] : []; if (!$this->updateFileCleanly($jsonFile, $package, $requireKey, $removeKey, $sortPackages)) { foreach ($package as $name => $version) { $baseRequirements[$name] = $version; if (isset($composerJson[$removeKey][$name])) { unset($composerJson[$removeKey][$name]); } } $composerJson[$requireKey] = $baseRequirements; $jsonFile->dump($composerJson); } }
/** * Attempt to load cached configuration files. * * @throws RuntimeException * * @return array|null */ protected function loadCache() { if ($this->isCacheValid() === false) { return null; } $data = null; try { $data = $this->cacheFile->parse(); } catch (ParseException $e) { // JSON is invalid, remove the file $this->invalidateCache(); } catch (IOException $e) { $part = Translator::__('Try logging in with your ftp-client and make the file readable. ' . 'Else try to go <a>back</a> to the last page.'); $message = '<p>' . Translator::__('general.phrase.file-not-readable-following-colon') . '</p>' . '<pre>' . htmlspecialchars($this->cacheFile->getFullPath()) . '</pre>' . '<p>' . str_replace('<a>', '<a href="javascript:history.go(-1)">', $part) . '</p>'; throw new RuntimeException(Translator::__('page.file-management.message.file-not-readable' . $message), $e->getCode(), $e); } // Check if we loaded actual data. if (count($data) < 4 || empty($data['general'])) { return null; } // Yup, all seems to be right. return $data; }