http://subversion.tigris.org/.');
$updateFile = 'configure/update.xml';
if (!file_exists ($updateFile))
throw new Exception ('Arquivos XML ['. $updateFile .'] não encontrado!');
$serverFile = 'update/update-server.xml';
if (!file_exists ($serverFile))
throw new Exception ('Arquivos XML ['. $serverFile .'] não encontrado!');
ob_start ();
system ('svn up '. $serverFile .' -q --non-interactive', $return);
ob_end_clean ();
if ($return)
throw new Exception ('Impossível atualizar o arquivo ['. $serverFile .'].');
$xml = new Xml ($updateFile);
$arrayUpdate = $xml->getArray ();
$xml = new Xml ($serverFile);
$arrayServer = $xml->getArray ();
if (!isset ($arrayUpdate ['update-mapping'][0]))
throw new Exception ('A tag <update-mapping></update-mapping> não foi encontrada no XML ['. $updateFile .']!');
if (!isset ($arrayServer ['version'][0]))
throw new Exception ('A tag <version></version> não foi encontrada no XML ['. $serverFile .']!');
$arrayServer = $arrayServer ['version'][0];
$arrayUpdate = $arrayUpdate ['update-mapping'][0];
if (!array_key_exists ('module', $arrayUpdate))
return array ();
$instance = Instance::singleton ();
$tag = array ('[core-path]', '[repos-path]');
$rep = array ($instance->getCorePath (), $instance->getReposPath ());
$actual = array ();
$arrayFinal = array ();
foreach ($arrayUpdate ['module'] as $trash => $module)
{
if (!array_key_exists ('name', $module) || !array_key_exists ('path', $module))
continue;
$name = $module ['name'];
$path = $module ['path'];
$path = str_replace ($tag, $rep, $path);
if ($name == 'INSTANCE')
$forUp [$name] = array ('./', 'update/update-client.xml');
else
$forUp [$name] = array ($path, $path .'update.xml');
$xmlPath = $forUp [$name][1];
$actual [$name] = 0;
$arrayFinal [$name] = array ( 'name' => $name,
'version' => 0,
'changelog' => '');
if (!file_exists ($xmlPath))
continue;
$xml = new Xml ($xmlPath);
$array = $xml->getArray ();
if (!isset ($array ['version'][0]['module']))
continue;
$array = $array ['version'][0]['module'];
foreach ($array as $trash => $aux)
if (isset ($aux ['name']) && $aux ['name'] == $name)
{
$actual [$name] = (int) $aux ['version'];
$arrayFinal [$name] = $aux;
}
}
if (!array_key_exists ('module', $arrayServer) || !is_array ($arrayServer ['module']))
throw new Exception ('As tags <module /> não foram encontradas no XML ['. $serverFile .']!');
$update = array ();
$changelog = array ();
foreach ($arrayServer ['module'] as $trash => $module)
{
if (!array_key_exists ('name', $module) || !array_key_exists ('version', $module))
continue;
if (array_key_exists ('changelog', $module))
$changelog [$module ['name']] = $module ['changelog'];
else
$changelog [$module ['name']] = '';
if (array_key_exists ($module ['name'], $actual) && $actual [$module ['name']] < (int) $module ['version'])
$update [$module ['name']] = (int) $module ['version'];
}
if (!$make)
return $update;
$updated = array ();
foreach ($forUp as $key => $paths)
if (array_key_exists ($key, $update))
{
if (!is_writable ($paths [0]))
{
$updated [$key] = array (FALSE, 'O Titan Lite não possui permissões de escrita no diretório ['. $paths [0] .'].');
continue;
}
ob_start ();
system ('svn up '. $paths [0] .' -r '. $update [$key] .' -q --non-interactive', $return);
ob_end_clean ();
if ($return)
{
$updated [$key] = array (FALSE, 'Ocorreu um erro inesperado durante a atualizaçõo do diretório ['. $paths [0] .'].');
continue;
}
$updated [$key] = array (TRUE, 'O diretório ['. $paths [0] .'] foi atualizado com sucesso.'. (trim ($changelog [$key]) != '' ? ' Ver changelog »' : ''));
$arrayFinal [$key]['version'] = $update [$key];
$arrayFinal [$key]['changelog'] = $changelog [$key];
}
$xml = new XmlMaker ();
$xml->push ('version');
foreach ($arrayFinal as $trash => $module)
$xml->collapseElement ('module', $module);
$xml->pop ();
$newFile = $xml->getXml ();
foreach ($forUp as $key => $paths)
file_put_contents ($paths [1], $newFile);
return $updated;
}
?>