/** * Функция производит отправку всех сообщения в статусе STATUS_EVENT_READY * И меняет статус события на отправлено */ public function sendEvent() { $events = $this->_repository->findBy(array('status' => IA\EventAbstract::STATUS_EVENT_READY), array('externalCreatedAt' => 'ASC')); if (is_array($events) && !empty($events)) { $zip = new U\Zip(); foreach ($events as $event) { /* * необходимо определить является ли файл zip-архивом, и если да, то разархивировать */ if ($zip->isZipArchive($event->getFilename())) { $pathToFile = $zip->extract($event->getFilename()); } else { $pathToFile = $event->getFilename(); } //определяем имя файла $filename = basename($pathToFile); /* * если первый символ в имени цифровой, * то прибавляем случайную последовательность символов, * это нужно чтобы передавать каждый файл с уникальным именем, * для перезапуска цепочки */ #if (is_numeric(substr($filename, 0, 1))) { $filename = substr(time(), -6) . '_' . $filename; #} //если файлов в папки больше чем LIMIT_FILES_IN_DIR, то файл не отправляем if ($this->getCountFilesInDir($event->getDestinationPath()) > self::LIMIT_FILES_IN_DIR) { continue; } $result = $this->putFtp($event->getDestinationPath() . "/" . $filename, $pathToFile); //если это PO, то файл также необходимо положить в сетевую папку /*if ('PO' == $event->getSystemName()) { $pathToCopy = '/home/winshares/spm_po'; if (!file_exists($pathToCopy) && !is_dir($pathToCopy)) { throw new \Exception("Can't found folder /home/winshares/spm_po"); } copy($pathToFile, $pathToCopy."/".$filename); }*/ if ($result === false) { throw new \Exception("Can't upload file {$filename} to FTP-server"); } //архивируем файл $zipFilename = $zip->pack($pathToFile); $event->setStatus(IA\EventAbstract::STATUS_EVENT_SEND); $event->setTransferredAt(new \DateTime()); $event->setFilename($zipFilename); $event->setTransferredFilename($filename); $this->_em->flush(); } } }
protected function importPO($file) { $zip = new U\Zip(); $remove = false; if (is_file($file)) { if ($zip->isZipArchive($file)) { $pathToFile = $zip->extract($file); $remove = true; } else { $pathToFile = $file; } $process = new SI\ImportShipmentPoEem($pathToFile, $this->_container); $process->setDistinationPath($this->_distinationPath); $process->importPO(); if (true == $remove) { unlink($pathToFile); } return "File {$file} succesufully parsed. \n\r"; } else { return "File {$file} not found at server"; } }