System update (better installation)
This commit is contained in:
parent
5cabfcfed1
commit
b035c4838c
4 changed files with 70 additions and 35 deletions
|
@ -5,7 +5,7 @@
|
|||
// Command line plugin
|
||||
class YellowCommandline
|
||||
{
|
||||
const Version = "0.6.12";
|
||||
const Version = "0.6.13";
|
||||
var $yellow; //access to API
|
||||
var $files; //number of files
|
||||
var $errors; //number of errors
|
||||
|
@ -249,7 +249,7 @@ class YellowCommandline
|
|||
$path = rtrim(empty($path) ? $this->yellow->config->get("staticDir") : $path, '/');
|
||||
if(empty($location))
|
||||
{
|
||||
$statusCode = max($statusCode, $this->commandForward("clean"));
|
||||
$statusCode = max($statusCode, $this->commandBroadcast("clean", "all"));
|
||||
$statusCode = max($statusCode, $this->cleanStaticDirectory($path));
|
||||
} else {
|
||||
$statusCode = $this->cleanStaticFile($path, $location);
|
||||
|
@ -288,18 +288,18 @@ class YellowCommandline
|
|||
return $statusCode;
|
||||
}
|
||||
|
||||
// Forward command to other plugins
|
||||
function commandForward($args)
|
||||
// Broadcast command to other plugins
|
||||
function commandBroadcast($args)
|
||||
{
|
||||
$statusCode = 0;
|
||||
foreach($this->yellow->plugins->plugins as $key=>$value)
|
||||
{
|
||||
if(method_exists($value["obj"], "onCommand") && $found)
|
||||
if($key == "commandline") continue;
|
||||
if(method_exists($value["obj"], "onCommand"))
|
||||
{
|
||||
$statusCode = $value["obj"]->onCommand(func_get_args());
|
||||
if($statusCode != 0) break;
|
||||
}
|
||||
if($key == "commandline") $found = true;
|
||||
}
|
||||
return $statusCode;
|
||||
}
|
||||
|
@ -345,6 +345,7 @@ class YellowCommandline
|
|||
if(!empty($path))
|
||||
{
|
||||
if($path == rtrim($this->yellow->config->get("staticDir"), '/')) $ok = true;
|
||||
if($path == rtrim($this->yellow->config->get("trashDir"), '/')) $ok = true;
|
||||
if(is_file("$path/".$this->yellow->config->get("staticDefaultFile"))) $ok = true;
|
||||
if(is_file("$path/yellow.php")) $ok = false;
|
||||
}
|
||||
|
|
|
@ -261,13 +261,13 @@ class YellowCore
|
|||
if($statusCode != 0) break;
|
||||
}
|
||||
}
|
||||
$this->toolbox->timerStop($time);
|
||||
if($statusCode == 0)
|
||||
{
|
||||
$statusCode = 400;
|
||||
list($command) = func_get_args();
|
||||
echo "Yellow $command: Command not found\n";
|
||||
}
|
||||
$this->toolbox->timerStop($time);
|
||||
if(defined("DEBUG") && DEBUG>=1) echo "YellowCore::command time:$time ms<br/>\n";
|
||||
return $statusCode;
|
||||
}
|
||||
|
@ -1604,6 +1604,11 @@ class YellowPlugins
|
|||
global $yellow;
|
||||
require_once($entry);
|
||||
}
|
||||
$callback = function($a, $b)
|
||||
{
|
||||
return $a["priority"] - $b["priority"];
|
||||
};
|
||||
uasort($this->plugins, $callback);
|
||||
foreach($this->plugins as $key=>$value)
|
||||
{
|
||||
$this->plugins[$key]["obj"] = new $value["plugin"];
|
||||
|
@ -1613,13 +1618,15 @@ class YellowPlugins
|
|||
}
|
||||
|
||||
// Register plugin
|
||||
function register($name, $plugin, $version)
|
||||
function register($name, $plugin, $version, $priority = 0)
|
||||
{
|
||||
if(!$this->isExisting($name))
|
||||
{
|
||||
if($priority == 0) $priority = count($this->plugins) + 10;
|
||||
$this->plugins[$name] = array();
|
||||
$this->plugins[$name]["plugin"] = $plugin;
|
||||
$this->plugins[$name]["version"] = $version;
|
||||
$this->plugins[$name]["priority"] = $priority;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2713,7 +2720,7 @@ class YellowToolbox
|
|||
}
|
||||
}
|
||||
}
|
||||
if($sort) natsort($entries);
|
||||
if($sort) natcasesort($entries);
|
||||
closedir($dirHandle);
|
||||
}
|
||||
return $entries;
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
// Update plugin
|
||||
class YellowUpdate
|
||||
{
|
||||
const Version = "0.6.2";
|
||||
const Version = "0.6.3";
|
||||
var $yellow; //access to API
|
||||
|
||||
// Handle initialisation
|
||||
|
@ -38,7 +38,7 @@ class YellowUpdate
|
|||
switch($command)
|
||||
{
|
||||
case "update": $statusCode = $this->updateCommand($args); break;
|
||||
default: $statusCode = 0;
|
||||
default: $statusCode = $this->updateAutomaticCommand($args); break;
|
||||
}
|
||||
return $statusCode;
|
||||
}
|
||||
|
@ -72,22 +72,45 @@ class YellowUpdate
|
|||
}
|
||||
return $statusCode;
|
||||
}
|
||||
|
||||
// Update software automatically
|
||||
function updateAutomaticCommand($args)
|
||||
{
|
||||
$statusCode = $this->update();
|
||||
if($statusCode != 0)
|
||||
{
|
||||
if($statusCode == 500) echo "ERROR updating files: ".$this->yellow->page->getStatusCode(true)."\n";
|
||||
echo "Yellow has ".($statusCode!=200 ? "not " : "")."been updated: Please run command again\n";
|
||||
}
|
||||
return $statusCode;
|
||||
}
|
||||
|
||||
// Update software
|
||||
// Update downloaded software
|
||||
function update()
|
||||
{
|
||||
$statusCode = 0;
|
||||
$path = $this->yellow->config->get("pluginDir");
|
||||
foreach($this->yellow->toolbox->getDirectoryEntries($path, "/^.*\.zip$/", true, false) as $entry)
|
||||
foreach($this->yellow->plugins->plugins as $key=>$value)
|
||||
{
|
||||
if(defined("DEBUG") && DEBUG>=2) echo "YellowUpdate::update file:$entry<br/>\n";
|
||||
$statusCode = max($statusCode, $this->updateSoftwareArchive($entry));
|
||||
if(method_exists($value["obj"], "onUpdate"))
|
||||
{
|
||||
$statusCode = $value["obj"]->onUpdate($this->yellow->getRequestHandler());
|
||||
if($statusCode != 0) break;
|
||||
}
|
||||
}
|
||||
$path = $this->yellow->config->get("themeDir");
|
||||
foreach($this->yellow->toolbox->getDirectoryEntries($path, "/^.*\.zip$/", true, false) as $entry)
|
||||
if($statusCode == 0)
|
||||
{
|
||||
if(defined("DEBUG") && DEBUG>=2) echo "YellowUpdate::update file:$entry<br/>\n";
|
||||
$statusCode = max($statusCode, $this->updateSoftwareArchive($entry));
|
||||
$path = $this->yellow->config->get("pluginDir");
|
||||
foreach($this->yellow->toolbox->getDirectoryEntries($path, "/^.*\.zip$/", true, false) as $entry)
|
||||
{
|
||||
if(defined("DEBUG") && DEBUG>=2) echo "YellowUpdate::update file:$entry<br/>\n";
|
||||
$statusCode = max($statusCode, $this->updateSoftwareArchive($entry));
|
||||
}
|
||||
$path = $this->yellow->config->get("themeDir");
|
||||
foreach($this->yellow->toolbox->getDirectoryEntries($path, "/^.*\.zip$/", true, false) as $entry)
|
||||
{
|
||||
if(defined("DEBUG") && DEBUG>=2) echo "YellowUpdate::update file:$entry<br/>\n";
|
||||
$statusCode = max($statusCode, $this->updateSoftwareArchive($entry));
|
||||
}
|
||||
}
|
||||
return $statusCode;
|
||||
}
|
||||
|
@ -118,9 +141,10 @@ class YellowUpdate
|
|||
if(!empty($software) && !empty($matches[1]) && !empty($matches[2]))
|
||||
{
|
||||
list($fileName, $flags) = explode(',', $matches[2], 2);
|
||||
$metaData = $zip->statName($pathBase.$fileName);
|
||||
$rawData = $zip->getFromName($pathBase.$fileName);
|
||||
$statusCode = $this->updateSoftwareFile($matches[1], $metaData["mtime"], $rawData, $flags, $software);
|
||||
$metaData = $zip->statName($pathBase.$fileName);
|
||||
$modified = $metaData ? $metaData["mtime"] : 0;
|
||||
$statusCode = $this->updateSoftwareFile($matches[1], $rawData, $modified, $flags, $software);
|
||||
if($statusCode != 200) break;
|
||||
}
|
||||
}
|
||||
|
@ -129,25 +153,24 @@ class YellowUpdate
|
|||
{
|
||||
$statusCode = 500;
|
||||
$this->yellow->page->error($statusCode, "Can't delete file '$path'!");
|
||||
|
||||
}
|
||||
}
|
||||
return $statusCode;
|
||||
}
|
||||
|
||||
// Update software file
|
||||
function updateSoftwareFile($fileName, $modified, $rawData, $flags, $software)
|
||||
function updateSoftwareFile($fileName, $rawData, $modified, $flags, $software)
|
||||
{
|
||||
$statusCode = 200;
|
||||
$fileName = $this->yellow->toolbox->normaliseTokens($fileName);
|
||||
if($this->yellow->lookup->isValidFile($fileName) && !empty($flags))
|
||||
{
|
||||
$create = $update = $delete = false;
|
||||
if(preg_match("/create/i", $flags) && !empty($rawData)) $create = true;
|
||||
if(preg_match("/update/i", $flags) && !empty($rawData)) $update = true;
|
||||
if(preg_match("/delete/i", $flags)) $delete = true;
|
||||
if(preg_match("/create/i", $flags) && !is_file($fileName) && !empty($rawData)) $create = true;
|
||||
if(preg_match("/update/i", $flags) && is_file($fileName) && !empty($rawData)) $update = true;
|
||||
if(preg_match("/delete/i", $flags) && is_file($fileName)) $delete = true;
|
||||
if(preg_match("/optional/i", $flags) && $this->isSoftware($software)) $create = $update = $delete = false;
|
||||
if($create && !is_file($fileName))
|
||||
if($create)
|
||||
{
|
||||
if(!$this->yellow->toolbox->createFile($fileName, $rawData, true) ||
|
||||
!$this->yellow->toolbox->modifyFile($fileName, $modified))
|
||||
|
@ -156,7 +179,7 @@ class YellowUpdate
|
|||
$this->yellow->page->error($statusCode, "Can't create file '$fileName'!");
|
||||
}
|
||||
}
|
||||
if($update && is_file($fileName))
|
||||
if($update)
|
||||
{
|
||||
if(!$this->yellow->toolbox->deleteFile($fileName, $this->yellow->config->get("trashDir")) ||
|
||||
!$this->yellow->toolbox->createFile($fileName, $rawData) ||
|
||||
|
@ -166,7 +189,7 @@ class YellowUpdate
|
|||
$this->yellow->page->error($statusCode, "Can't update file '$fileName'!");
|
||||
}
|
||||
}
|
||||
if($delete && is_file($fileName))
|
||||
if($delete)
|
||||
{
|
||||
if(!$this->yellow->toolbox->deleteFile($fileName, $this->yellow->config->get("trashDir")))
|
||||
{
|
||||
|
@ -179,7 +202,7 @@ class YellowUpdate
|
|||
return $statusCode;
|
||||
}
|
||||
|
||||
// Process request to install updates
|
||||
// Process request to update software
|
||||
function processRequestUpdate($serverScheme, $serverName, $base, $location, $fileName)
|
||||
{
|
||||
$statusCode = 0;
|
||||
|
@ -388,5 +411,5 @@ class YellowUpdate
|
|||
}
|
||||
}
|
||||
|
||||
$yellow->plugins->register("update", "YellowUpdate", YellowUpdate::Version);
|
||||
$yellow->plugins->register("update", "YellowUpdate", YellowUpdate::Version, 1);
|
||||
?>
|
|
@ -125,9 +125,13 @@ class YellowWebinterface
|
|||
function cleanCommand($args)
|
||||
{
|
||||
$statusCode = 0;
|
||||
$fileNameUser = $this->yellow->config->get("configDir").$this->yellow->config->get("webinterfaceUserFile");
|
||||
if(!$this->users->clean($fileNameUser)) $statusCode = 500;
|
||||
if($statusCode == 500) echo "ERROR cleaning configuration: Can't write file '$fileNameUser'!\n";
|
||||
list($command, $path) = $args;
|
||||
if($path == "all")
|
||||
{
|
||||
$fileNameUser = $this->yellow->config->get("configDir").$this->yellow->config->get("webinterfaceUserFile");
|
||||
if(!$this->users->clean($fileNameUser)) $statusCode = 500;
|
||||
if($statusCode == 500) echo "ERROR cleaning configuration: Can't write file '$fileNameUser'!\n";
|
||||
}
|
||||
return $statusCode;
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue