update manager.dat correctly on install. closes #704

This commit is contained in:
Andreas Gohr 2014-05-13 19:42:05 +02:00
parent c0d17c851c
commit 59d6be9544
1 changed files with 37 additions and 2 deletions

View File

@ -292,7 +292,7 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
*/
public function getUpdateDate() {
if (!empty($this->managerData['updated'])) return $this->managerData['updated'];
return false;
return $this->getInstallDate();
}
/**
@ -577,6 +577,7 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
try {
$installed = $this->installArchive("$tmp/upload.archive", true, $basename);
$this->updateManagerData('', $installed);
// purge cache
$this->purgeCache();
}catch (Exception $e){
@ -596,6 +597,7 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
try {
$path = $this->download($url);
$installed = $this->installArchive($path, true);
$this->updateManagerData($url, $installed);
// purge cache
$this->purgeCache();
@ -612,8 +614,10 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
* @return array The list of installed extensions
*/
public function installOrUpdate() {
$path = $this->download($this->getDownloadURL());
$url = $this->getDownloadURL();
$path = $this->download($url);
$installed = $this->installArchive($path, $this->isInstalled(), $this->getBase());
$this->updateManagerData($url, $installed);
// refresh extension information
if (!isset($installed[$this->getID()])) {
@ -727,6 +731,37 @@ class helper_plugin_extension_extension extends DokuWiki_Plugin {
}
}
/**
* Save the given URL and current datetime in the manager.dat file of all installed extensions
*
* @param string $url Where the extension was downloaded from. (empty for manual installs via upload)
* @param array $installed Optional list of installed plugins
*/
protected function updateManagerData($url = '', $installed = null) {
$origID = $this->getID();
if(is_null($installed)) {
$installed = array($origID);
}
foreach($installed as $ext => $info) {
if($this->getID() != $ext) $this->setExtension($ext);
if($url) {
$this->managerData['downloadurl'] = $url;
} elseif(isset($this->managerData['downloadurl'])) {
unset($this->managerData['downloadurl']);
}
if(isset($this->managerData['installed'])) {
$this->managerData['updated'] = date('r');
} else {
$this->managerData['installed'] = date('r');
}
$this->writeManagerData();
}
if($this->getID() != $origID) $this->setExtension($origID);
}
/**
* Read the manager.dat file
*/