/** * Imports various data files from fixtures (YAML) directory or via file upload (CSV,YAML,Spreadsheets). * * @throws Exception * @return afResponse * @author Tamas Geshitz */ protected function processImportData() { $remote_files = json_decode($this->getParameter("remote_files", '{}'), true); sort($remote_files); $formats = array("yml" => "yml", "yaml" => "yml", "csv" => "csv", "xlsx" => "xls", "xls" => "xls", "ods" => "xls"); foreach (array("has_headers", "append", "model", "name", "tmp", "code", "delimeter", "enclosure", "raw", "worksheet", "worksheets_as_models") as $item) { $params[$item] = $this->getParameter($item); } $params["append"] = $params["append"] === "true" || $params["append"] === "on" ? true : false; $params["delimeter"] = $params["delimeter"] ? $params["delimeter"] : ","; $params["enclosure"] = $params["enclosure"] ? $params["enclosure"] : '"'; try { if (!$params["name"]) { foreach ($remote_files as $file) { $files[] = afStudioUtil::getFixturesDir() . "/" . $file; } $class = "YmlImporter"; } else { $ext = afsFileSystem::create()->getExtension($params["name"]); if (!array_key_exists($ext, $formats)) { throw new Exception("Unsupported file: " . $params["name"]); } $class = ucfirst($formats[$ext] . "Importer"); if ($params["code"] !== 0) { throw new Exception("Failed to upload file: " . $params["name"]); } $uploaded_file = afStudioUtil::getUploadsDir() . "/" . $params["name"]; if (!@move_uploaded_file($params["tmp"], $uploaded_file)) { throw new Exception("Couldn't process uploaded file: " . $params["name"]); } $files = array($uploaded_file); } $importer = new $class($params); $importer->setProperty("all", $files); foreach ($files as $k => &$file) { $importer->setProperty("current", $file); $importer->loadData($file); if (!$importer instanceof CsvImporter) { $importer->insertData($file); } } if ($params["name"]) { if (!@unlink($uploaded_file)) { throw new Exception("Couldn't delete tmp file: " . $params["name"]); } } } catch (Exception $e) { return afResponseHelper::create()->success(false)->message("An error has been occured!<br/><br/>" . $e->getMessage()); } $errors = $importer->getProperty("errors"); if ($class == "YmlImporter" && $errors) { return afResponseHelper::create()->success(false)->message("Error(s) have been occured:<br/><br/>" . implode("<br />", $errors)); } return afResponseHelper::create()->success(true)->message("Data has been successfully inserted!"); }