. */ namespace SP\Import; use SP\Core\Exceptions\SPException; use SP\DataModel\AccountExtData; use SP\DataModel\CategoryData; use SP\DataModel\CustomerData; use SP\Log\Log; use SP\Mgmt\Categories\Category; use SP\Mgmt\Customers\Customer; defined('APP_ROOT') || die(); /** * Clase CsvImportBase para base de clases de importación desde archivos CSV * * @package SP */ abstract class CsvImportBase extends ImportBase { /** * @var int */ protected $numFields = 7; /** * @var array */ protected $mapFields = []; /** * @param int $numFields */ public function setNumFields($numFields) { $this->numFields = $numFields; } /** * @param array $mapFields */ public function setMapFields($mapFields) { $this->mapFields = $mapFields; } /** * Obtener los datos de las entradas de sysPass y crearlas * * @throws SPException * @throws \SP\Core\Exceptions\InvalidClassException */ protected function processAccounts() { $line = 0; $Log = new Log(); $LogMessage = $Log->getLogMessage(); $LogMessage->setAction(__('Importar Cuentas', false)); foreach ($this->file->getFileContent() as $data) { $line++; $fields = str_getcsv($data, $this->ImportParams->getCsvDelimiter()); $numfields = count($fields); // Comprobar el número de campos de la línea if ($numfields !== $this->numFields) { throw new SPException( SPException::SP_CRITICAL, sprintf(__('El número de campos es incorrecto (%d)', false), $numfields), sprintf(__('Compruebe el formato del archivo CSV en línea %s', false), $line) ); } // Eliminar las " del principio/fin de los campos // array_walk($fields, // function (&$value, $key) { // $value = trim($value, '"'); // } // ); // Asignar los valores del array a variables list($accountName, $customerName, $categoryName, $url, $login, $password, $notes) = $fields; // Obtener los ids de cliente y categoría $CustomerData = new CustomerData(null, $customerName); $this->addCustomer($CustomerData); $CategoryData = new CategoryData(null, $categoryName); $this->addCategory($CategoryData); // Crear la nueva cuenta $AccountData = new AccountExtData(); $AccountData->setAccountName($accountName); $AccountData->setAccountLogin($login); $AccountData->setAccountCustomerId($CustomerData->getCustomerId()); $AccountData->setAccountCategoryId($CategoryData->getCategoryId()); $AccountData->setAccountNotes($notes); $AccountData->setAccountUrl($url); $AccountData->setAccountPass($password); try { $this->addAccount($AccountData); $LogMessage->addDetails(__('Cuenta importada', false), $accountName); } catch (SPException $e) { // Escribir los mensajes pendientes $Log->writeLog(true); $LogMessage->addDescription(__('Error importando cuenta', false)); $LogMessage->addDetails(__('Error procesando línea', false), $line); $LogMessage->addDetails(__('Error'), $e->getMessage()); // Flush y reset $Log->writeLog(true); } } $Log->writeLog(); } }