mirror of
https://github.com/alchemy-fr/Phraseanet.git
synced 2025-10-12 20:43:25 +00:00
fixes for windows
This commit is contained in:
138
lib/classes/task/period/ftpPull.class.php
Normal file → Executable file
138
lib/classes/task/period/ftpPull.class.php
Normal file → Executable file
@@ -2,7 +2,7 @@
|
|||||||
/*
|
/*
|
||||||
* This file is part of Phraseanet
|
* 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
|
* For the full copyright and license information, please view the LICENSE
|
||||||
* file that was distributed with this source code.
|
* file that was distributed with this source code.
|
||||||
@@ -16,6 +16,7 @@
|
|||||||
*/
|
*/
|
||||||
class task_period_ftpPull extends task_appboxAbstract
|
class task_period_ftpPull extends task_appboxAbstract
|
||||||
{
|
{
|
||||||
|
|
||||||
protected $debug = false;
|
protected $debug = false;
|
||||||
protected $proxy;
|
protected $proxy;
|
||||||
protected $proxyport;
|
protected $proxyport;
|
||||||
@@ -47,24 +48,30 @@ class task_period_ftpPull extends task_appboxAbstract
|
|||||||
, "password", "ssl", "ftppath", "localpath"
|
, "password", "ssl", "ftppath", "localpath"
|
||||||
, "passive", "period"
|
, "passive", "period"
|
||||||
);
|
);
|
||||||
if ($dom = @DOMDocument::loadXML($oldxml)) {
|
if ($dom = @DOMDocument::loadXML($oldxml))
|
||||||
|
{
|
||||||
$xmlchanged = false;
|
$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);
|
$ptype = substr($pname, 0, 3);
|
||||||
$pname = substr($pname, 4);
|
$pname = substr($pname, 4);
|
||||||
$pvalue = $parm2[$pname];
|
$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)
|
// le champ existait dans le xml, on supprime son ancienne valeur (tout le contenu)
|
||||||
while (($n = $ns->firstChild))
|
while (($n = $ns->firstChild))
|
||||||
$ns->removeChild($n);
|
$ns->removeChild($n);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// le champ n'existait pas dans le xml, on le cree
|
// le champ n'existait pas dans le xml, on le cree
|
||||||
$dom->documentElement->appendChild($dom->createTextNode("\t"));
|
$dom->documentElement->appendChild($dom->createTextNode("\t"));
|
||||||
$ns = $dom->documentElement->appendChild($dom->createElement($pname));
|
$ns = $dom->documentElement->appendChild($dom->createElement($pname));
|
||||||
$dom->documentElement->appendChild($dom->createTextNode("\n"));
|
$dom->documentElement->appendChild($dom->createTextNode("\n"));
|
||||||
}
|
}
|
||||||
// on fixe sa valeur
|
// on fixe sa valeur
|
||||||
switch ($ptype) {
|
switch ($ptype)
|
||||||
|
{
|
||||||
case "str":
|
case "str":
|
||||||
$ns->appendChild($dom->createTextNode($pvalue));
|
$ns->appendChild($dom->createTextNode($pvalue));
|
||||||
break;
|
break;
|
||||||
@@ -81,7 +88,8 @@ class task_period_ftpPull extends task_appboxAbstract
|
|||||||
|
|
||||||
public function xml2graphic($xml, $form)
|
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)
|
// ... but we could check for safe values (ex. 0 < period < 3600)
|
||||||
?>
|
?>
|
||||||
<script type="text/javascript">
|
<script type="text/javascript">
|
||||||
@@ -101,7 +109,9 @@ class task_period_ftpPull extends task_appboxAbstract
|
|||||||
<?php
|
<?php
|
||||||
|
|
||||||
return("");
|
return("");
|
||||||
} else { // ... so we NEVER come here
|
}
|
||||||
|
else // ... so we NEVER come here
|
||||||
|
{
|
||||||
// bad xml
|
// bad xml
|
||||||
return("BAD XML");
|
return("BAD XML");
|
||||||
}
|
}
|
||||||
@@ -192,17 +202,24 @@ class task_period_ftpPull extends task_appboxAbstract
|
|||||||
, "password", "passive", "ssl", "debug"
|
, "password", "passive", "ssl", "debug"
|
||||||
);
|
);
|
||||||
|
|
||||||
if ($parm["xml"] === null) {
|
if ($parm["xml"] === null)
|
||||||
|
{
|
||||||
// pas de xml 'raw' : on accepte les champs 'graphic view'
|
// pas de xml 'raw' : on accepte les champs 'graphic view'
|
||||||
if ($domTaskSettings = DOMDocument::loadXML($taskrow["settings"])) {
|
if ($domTaskSettings = DOMDocument::loadXML($taskrow["settings"]))
|
||||||
|
{
|
||||||
$xmlchanged = false;
|
$xmlchanged = false;
|
||||||
foreach (array("proxy", "proxyport", "period", "host", "port", "user", "password", "ssl", "passive", "localpath", "ftppath") as $f) {
|
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)) {
|
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)
|
// le champ existait dans le xml, on supprime son ancienne valeur (tout le contenu)
|
||||||
while (($n = $ns->firstChild))
|
while (($n = $ns->firstChild))
|
||||||
$ns->removeChild($n);
|
$ns->removeChild($n);
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
// le champ n'existait pas dans le xml, on le cree
|
// le champ n'existait pas dans le xml, on le cree
|
||||||
$domTaskSettings->documentElement->appendChild($domTaskSettings->createTextNode("\t"));
|
$domTaskSettings->documentElement->appendChild($domTaskSettings->createTextNode("\t"));
|
||||||
$ns = $domTaskSettings->documentElement->appendChild($domTaskSettings->createElement($f));
|
$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
|
// 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);
|
return(false);
|
||||||
}
|
|
||||||
|
|
||||||
$sql = "";
|
$sql = "";
|
||||||
$params = array(':task_id' => $taskid);
|
$params = array(':task_id' => $taskid);
|
||||||
if ($parm["xml"] !== NULL) {
|
if ($parm["xml"] !== NULL)
|
||||||
|
{
|
||||||
$sql .= ( $sql ? " ," : "") . "settings = :settings";
|
$sql .= ( $sql ? " ," : "") . "settings = :settings";
|
||||||
$params[':settings'] = $parm['xml'];
|
$params[':settings'] = $parm['xml'];
|
||||||
}
|
}
|
||||||
if ($parm["name"] !== NULL) {
|
if ($parm["name"] !== NULL)
|
||||||
|
{
|
||||||
$sql .= ( $sql ? " ," : "") . "name = :name";
|
$sql .= ( $sql ? " ," : "") . "name = :name";
|
||||||
$params[':name'] = $parm['name'];
|
$params[':name'] = $parm['name'];
|
||||||
}
|
}
|
||||||
if ($parm["active"] !== NULL) {
|
if ($parm["active"] !== NULL)
|
||||||
|
{
|
||||||
$sql .= ( $sql ? " ," : "") . "active = :active";
|
$sql .= ( $sql ? " ," : "") . "active = :active";
|
||||||
$params[':active'] = $parm['active'];
|
$params[':active'] = $parm['active'];
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($sql) {
|
if ($sql)
|
||||||
try {
|
{
|
||||||
|
try
|
||||||
|
{
|
||||||
$sql = "UPDATE task2 SET $sql WHERE task_id = :task_id";
|
$sql = "UPDATE task2 SET $sql WHERE task_id = :task_id";
|
||||||
$stmt = $conn->prepare($sql);
|
$stmt = $conn->prepare($sql);
|
||||||
$stmt->execute($params);
|
$stmt->execute($params);
|
||||||
$stmt->closeCursor();
|
$stmt->closeCursor();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception $e) {
|
}
|
||||||
|
catch (Exception $e)
|
||||||
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
} else {
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -274,13 +300,32 @@ class task_period_ftpPull extends task_appboxAbstract
|
|||||||
|
|
||||||
protected function retrieve_content(appbox $appbox)
|
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))
|
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))
|
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 = new ftpclient($this->host, $port, 90, $this->ssl, $this->proxy, $this->proxyport);
|
||||||
$ftp->login($this->user, $this->password);
|
$ftp->login($this->user, $this->password);
|
||||||
$ftp->chdir($this->ftppath);
|
$ftp->chdir($this->ftppath);
|
||||||
@@ -291,20 +336,38 @@ class task_period_ftpPull extends task_appboxAbstract
|
|||||||
|
|
||||||
if ($this->debug)
|
if ($this->debug)
|
||||||
echo "attente de 25sec pour avoir les fichiers froids...\n";
|
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);
|
$list_2 = $ftp->list_directory(true);
|
||||||
|
|
||||||
foreach ($list_1 as $filepath => $timestamp) {
|
foreach ($list_1 as $filepath => $timestamp)
|
||||||
|
{
|
||||||
$done++;
|
$done++;
|
||||||
$this->setProgress($done, $todo);
|
$this->setProgress($done, $todo);
|
||||||
|
|
||||||
if ( ! isset($list_2[$filepath])) {
|
if (!isset($list_2[$filepath]))
|
||||||
|
{
|
||||||
if ($this->debug)
|
if ($this->debug)
|
||||||
echo "le fichier $filepath a disparu...\n";
|
echo "le fichier $filepath a disparu...\n";
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
if ($list_2[$filepath] !== $timestamp) {
|
if ($list_2[$filepath] !== $timestamp)
|
||||||
|
{
|
||||||
if ($this->debug)
|
if ($this->debug)
|
||||||
echo "le fichier $filepath a ete modifie depuis le dernier passage...\n";
|
echo "le fichier $filepath a ete modifie depuis le dernier passage...\n";
|
||||||
continue;
|
continue;
|
||||||
@@ -313,7 +376,8 @@ class task_period_ftpPull extends task_appboxAbstract
|
|||||||
$finalpath = p4string::addEndSlash($this->localpath) . ($filepath[0] == '/' ? mb_substr($filepath, 1) : $filepath);
|
$finalpath = p4string::addEndSlash($this->localpath) . ($filepath[0] == '/' ? mb_substr($filepath, 1) : $filepath);
|
||||||
echo "Ok pour rappatriement de $filepath vers $finalpath\n";
|
echo "Ok pour rappatriement de $filepath vers $finalpath\n";
|
||||||
|
|
||||||
try {
|
try
|
||||||
|
{
|
||||||
if (file_exists($finalpath))
|
if (file_exists($finalpath))
|
||||||
throw new Exception("Un fichier du meme nom ($finalpath) existe deja...");
|
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->get($finalpath, $filepath);
|
||||||
$ftp->delete($filepath);
|
$ftp->delete($filepath);
|
||||||
} catch (Exception $e) {
|
}
|
||||||
|
catch (Exception $e)
|
||||||
|
{
|
||||||
if ($this->debug)
|
if ($this->debug)
|
||||||
echo "Erreur lors du rappatriement de $filepath : " . $e->getMessage() . "\n";
|
echo "Erreur lors du rappatriement de $filepath : " . $e->getMessage() . "\n";
|
||||||
}
|
}
|
||||||
@@ -330,10 +396,13 @@ class task_period_ftpPull extends task_appboxAbstract
|
|||||||
$ftp->close();
|
$ftp->close();
|
||||||
|
|
||||||
$this->setProgress(0, 0);
|
$this->setProgress(0, 0);
|
||||||
} catch (Exception $e) {
|
}
|
||||||
|
catch (Exception $e)
|
||||||
|
{
|
||||||
if (isset($ftp) && $ftp instanceof ftpclient)
|
if (isset($ftp) && $ftp instanceof ftpclient)
|
||||||
$ftp->close();
|
$ftp->close();
|
||||||
echo $e->getMessage() . "\n";
|
echo $e->getMessage() . "\n";
|
||||||
|
return array();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -346,4 +415,5 @@ class task_period_ftpPull extends task_appboxAbstract
|
|||||||
{
|
{
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user