get_parms( "proxy", "proxyport", "host", "port", "user" , "password", "ssl", "ftppath", "localpath" , "passive", "period" ); 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) { $ptype = substr($pname, 0, 3); $pname = substr($pname, 4); $pvalue = $parm2[$pname]; 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 { // 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) { case "str": $ns->appendChild($dom->createTextNode($pvalue)); break; case "boo": $ns->appendChild($dom->createTextNode($pvalue ? '1' : '0')); break; } $xmlchanged = true; } } return($dom->saveXML()); } public function xml2graphic($xml, $form) { if (($sxml = simplexml_load_string($xml)) != FALSE) { // in fact XML IS always valid here... // ... but we could check for safe values (ex. 0 < period < 3600) ?>
get_parms( "xml", "name", "active", "proxy", "proxyport", "period" , "localpath", "ftppath", "port", "host", "user" , "password", "passive", "ssl", "debug" ); if ($parm["xml"] === null) { // pas de xml 'raw' : on accepte les champs 'graphic view' if (($domTaskSettings = DOMDocument::loadXML($taskrow["settings"])) != FALSE) { $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)) != NULL) { // le champ existait dans le xml, on supprime son ancienne valeur (tout le contenu) while (($n = $ns->firstChild)) { $ns->removeChild($n); } } 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)); $domTaskSettings->documentElement->appendChild($domTaskSettings->createTextNode("\n")); } // on fixe sa valeur $ns->appendChild($domTaskSettings->createTextNode($parm[$f])); $xmlchanged = true; } } if ($xmlchanged) { $parm["xml"] = $domTaskSettings->saveXML(); } } } // si on doit changer le xml, on verifie qu'il est valide if ($parm["xml"] && ! DOMDocument::loadXML($parm["xml"])) { return(false); } $sql = ""; $params = array(':task_id' => $taskid); if ($parm["xml"] !== NULL) { $sql .= ( $sql ? " ," : "") . "settings = :settings"; $params[':settings'] = $parm['xml']; } if ($parm["name"] !== NULL) { $sql .= ( $sql ? " ," : "") . "name = :name"; $params[':name'] = $parm['name']; } if ($parm["active"] !== NULL) { $sql .= ( $sql ? " ," : "") . "active = :active"; $params[':active'] = $parm['active']; } 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) { return false; } } else { return true; } } protected function loadSettings(SimpleXMLElement $sx_task_settings) { $this->proxy = (string) $sx_task_settings->proxy; $this->proxyport = (string) $sx_task_settings->proxyport; $this->host = (string) ($sx_task_settings->host); $this->port = (string) ($sx_task_settings->port); $this->user = (string) ($sx_task_settings->user); $this->password = (string) ($sx_task_settings->password); $this->ssl = ! ! ((string) ($sx_task_settings->ssl)); $this->passive = ! ! ((string) ($sx_task_settings->passive)); $this->ftppath = (string) ($sx_task_settings->ftppath); $this->localpath = (string) ($sx_task_settings->localpath); parent::loadSettings($sx_task_settings); } protected function retrieveContent(appbox $appbox) { 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; } } $this->dependencyContainer['filesystem']->mkdir($this->localpath, 0750); if ( ! is_dir($this->localpath)) { $this->log('\'' . $this->localpath . '\' does not exists'); $this->running = FALSE; } if ( ! is_writeable($this->localpath)) { $this->log('\'' . $this->localpath . '\' is not writeable'); $this->running = FALSE; } if ( ! $this->running) { $this->set_status(self::STATE_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); $list_1 = $ftp->list_directory(true); $done = 0; $todo = count($list_1); $this->setProgress($done, $todo); $this->logger->addDebug("attente de 25sec pour avoir les fichiers froids..."); $this->sleep(25); if ( ! $this->running) { if (isset($ftp) && $ftp instanceof ftpclient) { $ftp->close(); } return array(); } $list_2 = $ftp->list_directory(true); foreach ($list_1 as $filepath => $timestamp) { $done ++; $this->setProgress($done, $todo); if ( ! isset($list_2[$filepath])) { $this->logger->addDebug("le fichier $filepath a disparu...\n"); continue; } if ($list_2[$filepath] !== $timestamp) { $this->logger->addDebug("le fichier $filepath a ete modifie depuis le dernier passage..."); continue; } $finalpath = p4string::addEndSlash($this->localpath) . ($filepath[0] == '/' ? mb_substr($filepath, 1) : $filepath); $this->logger->addDebug("Ok pour rappatriement de $filepath vers $finalpath\n"); try { if (file_exists($finalpath)) { throw new Exception("Un fichier du meme nom ($finalpath) existe deja..."); } $this->dependencyContainer['filesystem']->mkdir(dirname($finalpath), 0750); $ftp->get($finalpath, $filepath); $ftp->delete($filepath); } catch (Exception $e) { $this->logger->addDebug("Erreur lors du rappatriement de $filepath : " . $e->getMessage()); } } $ftp->close(); $this->setProgress(0, 0); } catch (Exception $e) { if (isset($ftp) && $ftp instanceof ftpclient) { $ftp->close(); } $this->log('Exception catch : ' . $e->getMessage()); return array(); } } protected function processOneContent(appbox $appbox, Array $row) { } protected function postProcessOneContent(appbox $appbox, Array $row) { } }