public function synchronize(NodeInterface $node, Context $context, $dirtyAllowed = false) { /* @var $node EntityNode */ $machineName = $node->getBundle(); $object = $node->getValue(); if (!is_array($object)) { $object = []; } if (empty($object['description'])) { $description = ''; } else { $description = $object['description']; } if ($node->isMerge() && ($existing = $this->getExistingObject($node, $context))) { $info = ['machine_name' => $machineName, 'description' => $description] + $object + $existing; } else { $info = ['machine_name' => $machineName, 'description' => $description] + $object + self::$defaults; if ($vocabulary = taxonomy_vocabulary_machine_name_load($machineName)) { // So an existing object is here, but the vid parameter is // actually never loaded (we don't want to export it when we // are building a yml file) - therefore we need to load it // once again. In case we didn't set the vid, the taxonomy // save method will attempt an SQL INSERT and cause bad SQL // STATE errors (constraint violation) $info['vid'] = $vocabulary->vid; } } if (empty($info['name'])) { $context->logWarning(sprintf('%s: has no name', $node->getPath())); $info['name'] = $machineName; } taxonomy_vocabulary_save((object) $info); }
public function serialize(NodeInterface $node) { if (!class_exists('\\Symfony\\Component\\Yaml\\Yaml')) { if (!@(include_once __DIR__ . '/../../../vendor/autoload.php')) { throw new \LogicException("Unable to find the \\Symfony\\Component\\Yaml\\Yaml class"); } } return Yaml::dump($node->getValue(), 32, 2); }
public function synchronize(NodeInterface $node, Context $context, $dirtyAllowed = false) { /* @var $node ViewNode */ $entityType = $node->getEntityType(); $bundle = $node->getBundle(); $name = $node->getName(); // First populate the variable that will be used during the // hook_entity_info_alter() call to populate the view modes $viewModes = variable_get(USYNC_VAR_VIEW_MODE, []); $viewModes[$entityType][$name] = $name; variable_set(USYNC_VAR_VIEW_MODE, $viewModes); // First grab a list of everything that can be displayed in view // modes with both extra fields and real fields $instances = field_info_instances($entityType, $bundle); $bundleSettings = field_bundle_settings($entityType, $bundle); $extra = $this->getExtraFieldsDisplay($entityType, $bundle); $weight = 0; $displayExtra = []; $displayField = []; // Then deal with fields and such foreach ($node->getValue() as $propertyName => $formatter) { if (isset($instances[$propertyName])) { $display = array(); // We are working with a field if (!is_array($formatter)) { if (true === $formatter || 'default' === $formatter) { $formatter = array(); } else { if (false === $formatter || null === $formatter || 'delete' === $formatter) { continue; } else { if (!is_string($formatter)) { $context->logWarning(sprintf("%s: %s invalid value for formatter", $node->getPath(), $propertyName)); $formatter = array(); } else { $display['type'] = $formatter; } } } } else { $display = $formatter; } // Merge default and save $displayField[$propertyName] = drupal_array_merge_deep($this->getFieldDefault($node, $entityType, $bundle, $propertyName, $context), $display, array('weight' => $weight++)); } else { if (isset($extra[$propertyName])) { // We are working with and extra field if (!is_array($formatter)) { if (true === $formatter || 'default' === $formatter) { $formatter = array(); } else { if (false === $formatter || null === $formatter || 'delete' === $formatter) { continue; } else { $context->logWarning(sprintf("%s: %s extra fields can only be delete or default", $node->getPath(), $propertyName)); } } } // Merge default and save $displayExtra[$propertyName] = ['visible' => true, 'weight' => $weight++]; } else { $context->logError(sprintf("%s: %s property is nor a field nor an extra field", $node->getPath(), $propertyName)); } } } // Iterate over the fields and update each instance: we don't // need to do it with the $displayExtra property since it is // already the correctly formatted variable foreach ($displayField as $fieldName => $display) { $instances[$fieldName]['display'][$name] = $display; } // Remove non configured fields and extra fields from display foreach ($instances as $fieldName => $instance) { if (!isset($displayField[$fieldName])) { $instance['display'][$name] = array('type' => 'hidden'); } if ($dirtyAllowed) { $data = $instance; unset($data['id'], $data['field_id'], $data['field_name'], $data['entity_type'], $data['bundle'], $data['deleted']); db_update('field_config_instance')->condition('id', $instance['id'])->fields(['data' => serialize($data)])->execute(); } else { field_update_instance($instance); } } foreach (array_keys($extra) as $propertyName) { if (isset($displayExtra[$propertyName])) { $bundleSettings['extra_fields']['display'][$propertyName][$name] = $displayExtra[$propertyName]; } else { $bundleSettings['extra_fields']['display'][$propertyName][$name] = ['visible' => false, 'weight' => $weight++]; } } $bundleSettings['view_modes'][$name] = ['label' => $name, 'custom_settings' => true]; if ($dirtyAllowed) { // Hopefully nothing about display is really cached into the // internal field cache class, except the raw display array // into each instance, but nothing will use that except this // specific view mode implementation, we are going to delay // a few cache clear calls at the very end of the processing. // From field_bundle_settings(). variable_set('field_bundle_settings_' . $entityType . '__' . $bundle, $bundleSettings); } else { field_bundle_settings($entityType, $bundle, $bundleSettings); } if ($dirtyAllowed) { // From field_update_instance() cache_clear_all('*', 'cache_field', true); // From field_info_cache_clear() drupal_static_reset('field_view_mode_settings'); // We need to clear cache in order for later view modes to // load the right instance and prevent them for overriding // what we actually did here entity_info_cache_clear(); _field_info_field_cache()->flush(); } }
/** * {inheritdoc} */ public function getNodeName(NodeInterface $node) { $object = $node->getValue(); if (!empty($object['label'])) { return (string) $object['label']; } }
public function synchronize(NodeInterface $node, Context $context, $dirtyAllowed = false) { variable_set($node->getName(), $node->getValue()); }
/** * Determine which action should be done with the given node * * @param NodeInterface $node * @param Context $context * @param LoaderInterface $loader * * @return string * One of the \USync\Loading\Loader::LOAD_* constant */ protected function getLoadMode(NodeInterface $node, Context $context, LoaderInterface $loader) { if ($node instanceof DeleteNode || $node instanceof NullValueNode) { $mode = self::LOAD_DELETE; } else { if ($node instanceof DefaultNode) { $mode = self::LOAD_SYNC; } else { if ($node instanceof BooleanValueNode) { if ($node->getValue()) { $mode = self::LOAD_SYNC; } else { $mode = self::LOAD_DELETE; } } else { if ($node instanceof DrupalNodeInterface && $node->shouldIgnore()) { $mode = self::LOAD_IGNORE; } else { if ($node instanceof DrupalNodeInterface && $node->shouldDelete()) { $mode = self::LOAD_DELETE; } else { $mode = self::LOAD_SYNC; } } } } } return $mode; }
/** * {inheritdoc} */ public function getNodeName(NodeInterface $node) { /* @var $node FieldInstanceNode */ $object = $node->getValue(); if (!empty($object['label'])) { return (string) $object['label']; } $field = field_info_field($node->getFieldName()); if (isset($field['label'])) { return $field['label']; } }