. */ namespace SP\Import; use SP\Core\Exceptions\SPException; use SP\Core\Messages\LogMessage; use SP\Log\Email; use SP\Log\Log; use SP\Storage\DbWrapper; defined('APP_ROOT') || die(); /** * Esta clase es la encargada de importar cuentas. */ class Import { /** * @var ImportParams Parámetros de importación */ protected $ImportParams; /** * Import constructor. * * @param ImportParams $ImportParams */ public function __construct(ImportParams $ImportParams) { $this->ImportParams = $ImportParams; } /** * Iniciar la importación de cuentas. * * @param array $fileData Los datos del archivo * @return LogMessage * @throws SPException */ public function doImport(&$fileData) { set_time_limit(0); $LogMessage = new LogMessage(); $LogMessage->setAction(__('Importar Cuentas', false)); $Log = new Log($LogMessage); try { $file = new FileImport($fileData); switch ($file->getFileType()) { case 'text/csv': case 'application/vnd.ms-excel': $Import = new CsvImport($file, $this->ImportParams, $LogMessage); break; case 'text/xml': $Import = new XmlImport($file, $this->ImportParams, $LogMessage); break; default: throw new SPException( sprintf(__('Tipo mime no soportado ("%s")'), $file->getFileType()), SPException::WARNING, __('Compruebe el formato del archivo', false) ); } if (!DbWrapper::beginTransaction()) { throw new SPException(__('No es posible iniciar una transacción', false), SPException::ERROR); } $Import->doImport(); if (!DbWrapper::endTransaction()) { throw new SPException(__('No es posible finalizar una transacción', false), SPException::ERROR); } $LogMessage->addDetails(__('Cuentas importadas'), $Import->getCounter()); } catch (SPException $e) { DbWrapper::rollbackTransaction(); $LogMessage->addDescription($e->getMessage()); $LogMessage->addDetails(__('Ayuda', false), $e->getHint()); $Log->setLogLevel(Log::ERROR); $Log->writeLog(); throw $e; } $Log->writeLog(true); Email::sendEmail($LogMessage); $LogMessage->addDescription(__('Importación finalizada', false)); $LogMessage->addDescription(__('Revise el registro de eventos para más detalles', false)); return $LogMessage; } }