fixes for windows

This commit is contained in:
jygaulier
2012-04-25 13:53:41 +02:00
parent f0b1dbcee3
commit 6f5ac2d417

138
lib/classes/task/period/ftpPull.class.php Normal file → Executable file
View File

@@ -2,7 +2,7 @@
/*
* This file is part of Phraseanet
*
* (c) 2005-2012 Alchemy
* (c) 2005-2010 Alchemy
*
* For the full copyright and license information, please view the LICENSE
* file that was distributed with this source code.
@@ -16,6 +16,7 @@
*/
class task_period_ftpPull extends task_appboxAbstract
{
protected $debug = false;
protected $proxy;
protected $proxyport;
@@ -47,24 +48,30 @@ class task_period_ftpPull extends task_appboxAbstract
, "password", "ssl", "ftppath", "localpath"
, "passive", "period"
);
if ($dom = @DOMDocument::loadXML($oldxml)) {
if ($dom = @DOMDocument::loadXML($oldxml))
{
$xmlchanged = false;
foreach (array("str:proxy", "str:proxyport", "str:period", "boo:passive", "boo:ssl", "str:password", "str:user", "str:ftppath", "str:localpath", "str:port", "str:host") as $pname) {
foreach (array("str:proxy", "str:proxyport", "str:period", "boo:passive", "boo:ssl", "str:password", "str:user", "str:ftppath", "str:localpath", "str:port", "str:host") as $pname)
{
$ptype = substr($pname, 0, 3);
$pname = substr($pname, 4);
$pvalue = $parm2[$pname];
if ($ns = $dom->getElementsByTagName($pname)->item(0)) {
if ($ns = $dom->getElementsByTagName($pname)->item(0))
{
// le champ existait dans le xml, on supprime son ancienne valeur (tout le contenu)
while (($n = $ns->firstChild))
$ns->removeChild($n);
} else {
}
else
{
// le champ n'existait pas dans le xml, on le cree
$dom->documentElement->appendChild($dom->createTextNode("\t"));
$ns = $dom->documentElement->appendChild($dom->createElement($pname));
$dom->documentElement->appendChild($dom->createTextNode("\n"));
}
// on fixe sa valeur
switch ($ptype) {
switch ($ptype)
{
case "str":
$ns->appendChild($dom->createTextNode($pvalue));
break;
@@ -81,7 +88,8 @@ class task_period_ftpPull extends task_appboxAbstract
public function xml2graphic($xml, $form)
{
if (($sxml = simplexml_load_string($xml))) { // in fact XML IS always valid here...
if (($sxml = simplexml_load_string($xml))) // in fact XML IS always valid here...
{
// ... but we could check for safe values (ex. 0 < period < 3600)
?>
<script type="text/javascript">
@@ -101,7 +109,9 @@ class task_period_ftpPull extends task_appboxAbstract
<?php
return("");
} else { // ... so we NEVER come here
}
else // ... so we NEVER come here
{
// bad xml
return("BAD XML");
}
@@ -192,17 +202,24 @@ class task_period_ftpPull extends task_appboxAbstract
, "password", "passive", "ssl", "debug"
);
if ($parm["xml"] === null) {
if ($parm["xml"] === null)
{
// pas de xml 'raw' : on accepte les champs 'graphic view'
if ($domTaskSettings = DOMDocument::loadXML($taskrow["settings"])) {
if ($domTaskSettings = DOMDocument::loadXML($taskrow["settings"]))
{
$xmlchanged = false;
foreach (array("proxy", "proxyport", "period", "host", "port", "user", "password", "ssl", "passive", "localpath", "ftppath") as $f) {
if ($parm[$f] !== NULL) {
if ($ns = $domTaskSettings->getElementsByTagName($f)->item(0)) {
foreach (array("proxy", "proxyport", "period", "host", "port", "user", "password", "ssl", "passive", "localpath", "ftppath") as $f)
{
if ($parm[$f] !== NULL)
{
if ($ns = $domTaskSettings->getElementsByTagName($f)->item(0))
{
// le champ existait dans le xml, on supprime son ancienne valeur (tout le contenu)
while (($n = $ns->firstChild))
$ns->removeChild($n);
} else {
}
else
{
// le champ n'existait pas dans le xml, on le cree
$domTaskSettings->documentElement->appendChild($domTaskSettings->createTextNode("\t"));
$ns = $domTaskSettings->documentElement->appendChild($domTaskSettings->createElement($f));
@@ -219,37 +236,46 @@ class task_period_ftpPull extends task_appboxAbstract
}
// si on doit changer le xml, on verifie qu'il est valide
if ($parm["xml"] && ! DOMDocument::loadXML($parm["xml"])) {
if ($parm["xml"] && !DOMDocument::loadXML($parm["xml"]))
return(false);
}
$sql = "";
$params = array(':task_id' => $taskid);
if ($parm["xml"] !== NULL) {
if ($parm["xml"] !== NULL)
{
$sql .= ( $sql ? " ," : "") . "settings = :settings";
$params[':settings'] = $parm['xml'];
}
if ($parm["name"] !== NULL) {
if ($parm["name"] !== NULL)
{
$sql .= ( $sql ? " ," : "") . "name = :name";
$params[':name'] = $parm['name'];
}
if ($parm["active"] !== NULL) {
if ($parm["active"] !== NULL)
{
$sql .= ( $sql ? " ," : "") . "active = :active";
$params[':active'] = $parm['active'];
}
if ($sql) {
try {
if ($sql)
{
try
{
$sql = "UPDATE task2 SET $sql WHERE task_id = :task_id";
$stmt = $conn->prepare($sql);
$stmt->execute($params);
$stmt->closeCursor();
return true;
} catch (Exception $e) {
}
catch (Exception $e)
{
return false;
}
} else {
}
else
{
return true;
}
}
@@ -274,13 +300,32 @@ class task_period_ftpPull extends task_appboxAbstract
protected function retrieve_content(appbox $appbox)
{
try {
foreach(array('localpath', 'host', 'port', 'user', 'password', 'ftppath') as $f)
{
if(trim((string)($this->{$f})) === '')
{
$this->log('setting \''.$f.'\' must be set');
$this->running = FALSE;
}
}
if (!is_dir($this->localpath) || !system_file::mkdir($this->localpath))
throw new Exception("$this->localpath is not writeable\n");
{
$this->log('\''.$this->localpath.'\' does not exists');
$this->running = FALSE;
}
if (!is_writeable($this->localpath))
throw new Exception("$this->localpath is not writeable\n");
{
$this->log('\''.$this->localpath.'\' is not writeable');
$this->running = FALSE;
}
if(!$this->running )
{
$this->set_status(self::STATUS_STOPPED);
return array();
}
try
{
$ftp = new ftpclient($this->host, $port, 90, $this->ssl, $this->proxy, $this->proxyport);
$ftp->login($this->user, $this->password);
$ftp->chdir($this->ftppath);
@@ -291,20 +336,38 @@ class task_period_ftpPull extends task_appboxAbstract
if ($this->debug)
echo "attente de 25sec pour avoir les fichiers froids...\n";
sleep(25);
for($t = 25; $this->running && $t > 0; $t--) // DON'T do sleep($this->period - $when_started) because it prevents ticks !
{
$s = $this->get_status();
if($s == self::STATUS_TOSTOP)
{
if (isset($ftp) && $ftp instanceof ftpclient)
$ftp->close();
$this->set_status(self::STATUS_STOPPED);
$this->running = FALSE;
return array();
}
else
{
sleep(1);
}
}
$list_2 = $ftp->list_directory(true);
foreach ($list_1 as $filepath => $timestamp) {
foreach ($list_1 as $filepath => $timestamp)
{
$done++;
$this->setProgress($done, $todo);
if ( ! isset($list_2[$filepath])) {
if (!isset($list_2[$filepath]))
{
if ($this->debug)
echo "le fichier $filepath a disparu...\n";
continue;
}
if ($list_2[$filepath] !== $timestamp) {
if ($list_2[$filepath] !== $timestamp)
{
if ($this->debug)
echo "le fichier $filepath a ete modifie depuis le dernier passage...\n";
continue;
@@ -313,7 +376,8 @@ class task_period_ftpPull extends task_appboxAbstract
$finalpath = p4string::addEndSlash($this->localpath) . ($filepath[0] == '/' ? mb_substr($filepath, 1) : $filepath);
echo "Ok pour rappatriement de $filepath vers $finalpath\n";
try {
try
{
if (file_exists($finalpath))
throw new Exception("Un fichier du meme nom ($finalpath) existe deja...");
@@ -321,7 +385,9 @@ class task_period_ftpPull extends task_appboxAbstract
$ftp->get($finalpath, $filepath);
$ftp->delete($filepath);
} catch (Exception $e) {
}
catch (Exception $e)
{
if ($this->debug)
echo "Erreur lors du rappatriement de $filepath : " . $e->getMessage() . "\n";
}
@@ -330,10 +396,13 @@ class task_period_ftpPull extends task_appboxAbstract
$ftp->close();
$this->setProgress(0, 0);
} catch (Exception $e) {
}
catch (Exception $e)
{
if (isset($ftp) && $ftp instanceof ftpclient)
$ftp->close();
echo $e->getMessage() . "\n";
return array();
}
}
@@ -346,4 +415,5 @@ class task_period_ftpPull extends task_appboxAbstract
{
}
}