Esempio n. 1
0
 public function translationsImportAction()
 {
     $admin = $this->_getParam("admin");
     if ($this->getUser()->isAllowed("translations")) {
         $languages = Pimcore_Tool::getValidLanguages();
         try {
             //read import data
             $tmpData = file_get_contents($_FILES["Filedata"]["tmp_name"]);
             //convert to utf-8 if needed
             $encoding = Pimcore_Tool_Text::detectEncoding($tmpData);
             if ($encoding) {
                 $tmpData = iconv($encoding, "UTF-8", $tmpData);
             }
             //store data for further usage
             $importFile = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/import_translations";
             file_put_contents($importFile, $tmpData);
             chmod($importFile, 0766);
             $importFileOriginal = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/import_translations_original";
             file_put_contents($importFileOriginal, $tmpData);
             chmod($importFileOriginal, 0766);
             // determine csv type
             $dialect = Pimcore_Tool_Admin::determineCsvDialect(PIMCORE_SYSTEM_TEMP_DIRECTORY . "/import_translations_original");
             //read data
             if (($handle = fopen(PIMCORE_SYSTEM_TEMP_DIRECTORY . "/import_translations", "r")) !== FALSE) {
                 while (($rowData = fgetcsv($handle, 10000, $dialect->delimiter, $dialect->quotechar, $dialect->escapechar)) !== false) {
                     $data[] = $rowData;
                 }
                 fclose($handle);
             }
             //process translations
             if (is_array($data) and count($data) > 1) {
                 $keys = $data[0];
                 $data = array_slice($data, 1);
                 foreach ($data as $row) {
                     $keyValueArray = array();
                     for ($counter = 0; $counter < count($row); $counter++) {
                         $rd = str_replace("&quot;", '"', $row[$counter]);
                         $keyValueArray[$keys[$counter]] = $rd;
                     }
                     $t = null;
                     if ($keyValueArray["key"]) {
                         try {
                             if ($admin) {
                                 $t = Translation_Admin::getByKey($keyValueArray["key"]);
                             } else {
                                 $t = Translation_Website::getByKey($keyValueArray["key"]);
                             }
                         } catch (Exception $e) {
                             Logger::debug("Unable to find translation with key: " . $keyValueArray["key"]);
                         }
                     }
                     if (!$t instanceof Translation_Abstract) {
                         if ($admin) {
                             $t = new Translation_Admin();
                         } else {
                             $t = new Translation_Website();
                         }
                     }
                     $t->setDate(time());
                     foreach ($keyValueArray as $key => $value) {
                         if ($key != "key" && $key != "date" && in_array($key, $languages)) {
                             $t->addTranslation($key, $value);
                         }
                     }
                     if ($keyValueArray["key"]) {
                         $t->setKey($keyValueArray["key"]);
                     }
                     $t->save();
                 }
                 $this->_helper->json(array("success" => true));
             } else {
                 throw new Exception("less than 2 rows of data - nothing to import");
             }
         } catch (Exception $e) {
             Logger::error($e);
             $this->_helper->json(false);
         }
     } else {
         Logger::err("user [" . $this->getUser()->getId() . "] attempted to import translations csv, but has no permission to do so.");
         die;
     }
 }
 public function importProcessAction()
 {
     $success = true;
     $type = $this->_getParam("type");
     $parentId = $this->_getParam("parentId");
     $job = $this->_getParam("job");
     $id = $this->_getParam("id");
     $mappingRaw = Zend_Json::decode($this->_getParam("mapping"));
     $class = Object_Class::getById($this->_getParam("classId"));
     $skipFirstRow = $this->_getParam("skipHeadRow") == "true";
     $fields = $class->getFieldDefinitions();
     $file = PIMCORE_SYSTEM_TEMP_DIRECTORY . "/import_" . $id;
     if ($type == "csv") {
         // determine type
         $dialect = Pimcore_Tool_Admin::determineCsvDialect(PIMCORE_SYSTEM_TEMP_DIRECTORY . "/import_" . $id . "_original");
         $count = 0;
         if (($handle = fopen($file, "r")) !== false) {
             $data = fgetcsv($handle, 1000, $dialect->delimiter, $dialect->quotechar, $dialect->escapechar);
         }
         if ($skipFirstRow && $job == 1) {
             //read the next row, we need to skip the head row
             $data = fgetcsv($handle, 1000, $dialect->delimiter, $dialect->quotechar, $dialect->escapechar);
         }
         $tmpFile = $file . "_tmp";
         $tmpHandle = fopen($tmpFile, "w+");
         while (!feof($handle)) {
             $buffer = fgets($handle);
             fwrite($tmpHandle, $buffer);
         }
         fclose($handle);
         fclose($tmpHandle);
         unlink($file);
         rename($tmpFile, $file);
     }
     // prepare mapping
     foreach ($mappingRaw as $map) {
         if ($map[0] !== "" && $map[1] && !empty($map[2])) {
             $mapping[$map[2]] = $map[0];
         } else {
             if ($map[1] == "published (system)") {
                 $mapping["published"] = $map[0];
             }
         }
     }
     // create new object
     $className = "Object_" . ucfirst($this->_getParam("className"));
     $parent = Object_Abstract::getById($this->_getParam("parentId"));
     $parent->getPermissionsForUser($this->getUser());
     $objectKey = "object_" . $job;
     if ($this->_getParam("filename") == "id") {
         $objectKey = null;
     } else {
         if ($this->_getParam("filename") != "default") {
             $objectKey = Pimcore_File::getValidFilename($data[$this->_getParam("filename")]);
         }
     }
     $overwrite = false;
     if ($this->_getParam("overwrite") == "true") {
         $overwrite = true;
     }
     if ($parent->isAllowed("create")) {
         $intendedPath = $parent->getFullPath() . "/" . $objectKey;
         if ($overwrite) {
             $object = Object_Abstract::getByPath($intendedPath);
             if (!$object instanceof Object_Concrete) {
                 //create new object
                 $object = new $className();
             } else {
                 if (object instanceof Object_Concrete and $object->getO_className() !== $className) {
                     //delete the old object it is of a different class
                     $object->delete();
                     $object = new $className();
                 } else {
                     if (object instanceof Object_Folder) {
                         //delete the folder
                         $object->delete();
                         $object = new $className();
                     } else {
                         //use the existing object
                     }
                 }
             }
         } else {
             $counter = 1;
             while (Object_Abstract::getByPath($intendedPath) != null) {
                 $objectKey .= "_" . $counter;
                 $intendedPath = $parent->getFullPath() . "/" . $objectKey;
                 $counter++;
             }
             $object = new $className();
         }
         $object->setClassId($this->_getParam("classId"));
         $object->setClassName($this->_getParam("className"));
         $object->setParentId($this->_getParam("parentId"));
         $object->setKey($objectKey);
         $object->setCreationDate(time());
         $object->setUserOwner($this->getUser()->getId());
         $object->setUserModification($this->getUser()->getId());
         if ($data[$mapping["published"]] === "1") {
             $object->setPublished(true);
         } else {
             $object->setPublished(false);
         }
         foreach ($class->getFieldDefinitions() as $key => $field) {
             $value = $data[$mapping[$key]];
             if (array_key_exists($key, $mapping) and $value != null) {
                 // data mapping
                 $value = $field->getFromCsvImport($value);
                 if ($value !== null) {
                     $object->setValue($key, $value);
                 }
             }
         }
         try {
             $object->save();
             $this->_helper->json(array("success" => true));
         } catch (Exception $e) {
             $this->_helper->json(array("success" => false, "message" => $object->getKey() . " - " . $e->getMessage()));
         }
     }
     $this->_helper->json(array("success" => $success));
 }