public static function getLocaleFromHost($host = null) { if (!$host) { $host = $_SERVER["HTTP_HOST"]; } $keys = array_keys(self::$locale_domains, $host); if ($keys && isset($keys[0])) { $locale = $keys[0]; } elseif (DataObject::has_extension('SiteTree', 'Translatable')) { $locale = Translatable::get_current_locale(); } else { $locale = i18n::get_locale(); } return $locale; }
/** * @param \DataObject $object * @param Field $field * @throws \ValidationException * @throws null */ public function write(\DataObject $object, Field $field) { if ($object->has_extension('Versioned')) { $object->writeToStage('Stage'); $args = $field->options; $publish = isset($args['publish']) ? $args['publish'] : true; if ($publish) { $object->publish('Stage', 'Live'); } } else { $object->write(); } if (!$object->isSeeded()) { $seed = new \SeedRecord(); $seed->SeedClassName = $object->ClassName; $seed->SeedID = $object->ID; $seed->Key = $field->key; $seed->Root = $field->fieldType === Field::FT_ROOT; $seed->write(); $object->setIsSeeded(); } }
/** * @param \DataObject $object * @param Field $field */ public function write(\DataObject $object, Field $field) { $className = $object->class; // cache has_extension call if (!isset($this->isVersioned[$className])) { $this->isVersioned[$className] = $object->has_extension('Versioned'); } if ($this->isVersioned[$className]) { $args = $field->options; if (!isset($args['publish']) || $args['publish']) { $this->batchWriter->writeToStage($object, 'Stage', 'Live'); } else { $this->batchWriter->writeToStage($object, 'Stage'); } } else { $this->batchWriter->write($object); } $isSeeded = $object->isSeeded(); if (!$isSeeded) { $isRoot = $field->fieldType === Field::FT_ROOT; $dataObjectProperty = $this->dataObjectRecordProperty; $batchWriter = $this->batchWriter; $object->onAfterExistsCallback(function ($object) use($field, $isRoot, $dataObjectProperty, $batchWriter) { $seed = \QuickDataObject::create('SeedRecord'); $objectFields = $dataObjectProperty->getValue($object); $fields = $dataObjectProperty->getValue($seed); $fields['SeedClassName'] = $object->class; $fields['SeedID'] = $objectFields['ID']; $fields['Key'] = $field->key; $fields['Root'] = $isRoot; $dataObjectProperty->setValue($seed, $fields); $batchWriter->write($seed); }); $object->setIsSeeded(); } }
public function Sortable() { return DataObject::has_extension($this->sourceClass(), 'SortableDataObject'); }
/** * @param null $key */ public function unseed($key = null) { $this->outputFormatter->beginUnseed(); // TODO delete many_many tables $deleted = array(); $seeds = \SeedRecord::get(); if ($key) { $seeds = $seeds->filter('Key', $key); } while ($seeds->Count()) { // sort by id desc to delete in reverse $seedBatch = $seeds->limit(1000)->sort('ID DESC'); $classes = array(); foreach ($seedBatch as $seed) { $className = $seed->SeedClassName; $classes[$className][] = $seed->SeedID; $this->writer->delete($seed); } foreach ($classes as $className => $ids) { $versioned = \DataObject::has_extension($className, 'Versioned'); if ($versioned) { $this->writer->deleteIDsFromStage($className, $ids, 'Stage', 'Live'); } else { $this->writer->deleteIDs($className, $ids); } $deleted[$className] = count($ids); } $this->writer->finish(); } $this->outputFormatter->reportDataObjectsDeleted($deleted); }