/** * {@inheritdoc} */ public function import(Row $row, array $old_destination_id_values = array()) { if ($row->isStub()) { throw new MigrateException('Config entities can not be stubbed.'); } $ids = $this->getIds(); $id_key = $this->getKey('id'); if (count($ids) > 1) { // Ids is keyed by the key name so grab the keys. $id_keys = array_keys($ids); if (!$row->getDestinationProperty($id_key)) { // Set the id into the destination in for form "val1.val2.val3". $row->setDestinationProperty($id_key, $this->generateId($row, $id_keys)); } } $entity = $this->getEntity($row, $old_destination_id_values); $entity->save(); if (count($ids) > 1) { // This can only be a config entity, content entities have their id key // and that's it. $return = array(); foreach ($id_keys as $id_key) { $return[] = $entity->get($id_key); } return $return; } return array($entity->id()); }
/** * {@inheritdoc} */ public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) { // If we're stubbing a file entity, return a URI of NULL so it will get // stubbed by the general process. if ($row->isStub()) { return NULL; } list($source, $destination) = $value; // Ensure the source file exists, if it's a local URI or path. if ($this->isLocalUri($source) && !file_exists($source)) { throw new MigrateException("File '{$source}' does not exist"); } // If the start and end file is exactly the same, there is nothing to do. if ($this->isLocationUnchanged($source, $destination)) { return $destination; } $replace = $this->getOverwriteMode(); // We attempt the copy/move first to avoid calling file_prepare_directory() // any more than absolutely necessary. $final_destination = $this->writeFile($source, $destination, $replace); if ($final_destination) { return $final_destination; } // If writeFile didn't work, make sure there's a writable directory in // place. $dir = $this->getDirectory($destination); if (!file_prepare_directory($dir, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS)) { throw new MigrateException("Could not create or write to directory '{$dir}'"); } $final_destination = $this->writeFile($source, $destination, $replace); if ($final_destination) { return $final_destination; } throw new MigrateException("File {$source} could not be copied to {$destination}"); }
/** * {@inheritdoc} */ protected function getEntity(Row $row, array $old_destination_id_values) { if ($row->isStub()) { $row->setDestinationProperty('name', $this->t('Stub name for source tid:') . $row->getSourceProperty('tid')); } return parent::getEntity($row, $old_destination_id_values); }
/** * {@inheritdoc} */ public function import(Row $row, array $old_destination_id_values = array()) { // For stub rows, there is no real file to deal with, let the stubbing // process create the stub entity. if ($row->isStub()) { return parent::import($row, $old_destination_id_values); } $file = $row->getSourceProperty($this->configuration['source_path_property']); $destination = $row->getDestinationProperty($this->configuration['destination_path_property']); $source = $this->configuration['source_base_path'] . $file; // Ensure the source file exists, if it's a local URI or path. if ($this->isLocalUri($source) && !file_exists($source)) { throw new MigrateException("File '{$source}' does not exist."); } // If the start and end file is exactly the same, there is nothing to do. if ($this->isLocationUnchanged($source, $destination)) { return parent::import($row, $old_destination_id_values); } $replace = $this->getOverwriteMode($row); $success = $this->writeFile($source, $destination, $replace); if (!$success) { $dir = $this->getDirectory($destination); if (file_prepare_directory($dir, FILE_CREATE_DIRECTORY)) { $success = $this->writeFile($source, $destination, $replace); } else { throw new MigrateException("Could not create directory '{$dir}'"); } } if ($success) { return parent::import($row, $old_destination_id_values); } else { throw new MigrateException("File {$source} could not be copied to {$destination}."); } }
/** * {@inheritdoc} */ public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) { // If we're stubbing a file entity, return a uri of NULL so it will get // stubbed by the general process. if ($row->isStub()) { return NULL; } list($source, $destination) = $value; // Modify the destination filename if necessary. $replace = !empty($this->configuration['rename']) ? FILE_EXISTS_RENAME : FILE_EXISTS_REPLACE; $final_destination = file_destination($destination, $replace); // Try opening the file first, to avoid calling file_prepare_directory() // unnecessarily. We're suppressing fopen() errors because we want to try // to prepare the directory before we give up and fail. $destination_stream = @fopen($final_destination, 'w'); if (!$destination_stream) { // If fopen didn't work, make sure there's a writable directory in place. $dir = $this->fileSystem->dirname($final_destination); if (!file_prepare_directory($dir, FILE_CREATE_DIRECTORY | FILE_MODIFY_PERMISSIONS)) { throw new MigrateException("Could not create or write to directory '{$dir}'"); } // Let's try that fopen again. $destination_stream = @fopen($final_destination, 'w'); if (!$destination_stream) { throw new MigrateException("Could not write to file '{$final_destination}'"); } } // Stream the request body directly to the final destination stream. $this->configuration['guzzle_options']['sink'] = $destination_stream; // Make the request. Guzzle throws an exception for anything other than 200. $this->httpClient->get($source, $this->configuration['guzzle_options']); return $final_destination; }
/** * {@inheritdoc} */ public function import(Row $row, array $old_destination_id_values = array()) { if ($row->isStub() && ($state = $this->state->get('comment.maintain_entity_statistics', 0))) { $this->state->set('comment.maintain_entity_statistics', 0); } $return = parent::import($row, $old_destination_id_values); if ($row->isStub() && $state) { $this->state->set('comment.maintain_entity_statistics', $state); } return $return; }
/** * {@inheritdoc} */ public function transform($value, MigrateExecutableInterface $migrate_executable, Row $row, $destination_property) { // If we're stubbing a file entity, return a uri of NULL so it will get // stubbed by the general process. if ($row->isStub()) { return NULL; } list($filepath, $file_directory_path, $temp_directory_path, $is_public) = $value; // Specific handling using $temp_directory_path for temporary files. if (substr($filepath, 0, strlen($temp_directory_path)) === $temp_directory_path) { $uri = preg_replace('/^' . preg_quote($temp_directory_path, '/') . '/', '', $filepath); return 'temporary://' . ltrim($uri, '/'); } // Strip the files path from the uri instead of using basename // so any additional folders in the path are preserved. $uri = preg_replace('/^' . preg_quote($file_directory_path, '/') . '/', '', $filepath); return ($is_public ? 'public' : 'private') . '://' . ltrim($uri, '/'); }
/** * {@inheritdoc} */ protected function getEntity(Row $row, array $old_destination_id_values) { // For stub rows, there is no real file to deal with, let the stubbing // process take its default path. if ($row->isStub()) { return parent::getEntity($row, $old_destination_id_values); } // By default the entity key (fid) would be used, but we want to make sure // we're loading the matching URI. $destination = $row->getDestinationProperty('uri'); if (empty($destination)) { throw new MigrateException('Destination property uri not provided'); } $entity = $this->storage->loadByProperties(['uri' => $destination]); if ($entity) { return reset($entity); } else { return parent::getEntity($row, $old_destination_id_values); } }