public function saveContent(Content $content, $comment = null)
{
$contenttype = $content->contenttype;
$fieldvalues = $content->values;
if (empty($contenttype)) {
$this->app['logger.system']->error('Contenttype is required for ' . __FUNCTION__, ['event' => 'exception']);
throw new StorageException('Contenttype is required for ' . __FUNCTION__);
}
// Test to see if this is a new record, or an update
if (empty($fieldvalues['id'])) {
$create = true;
} else {
$create = false;
}
// We need to verify if the slug is unique. If not, we update it.
$getId = $create ? null : $fieldvalues['id'];
$fieldvalues['slug'] = $this->getUri($fieldvalues['slug'], $getId, $contenttype['slug'], false, false);
// Update the content object
$content->setValues($fieldvalues);
// Dispatch pre-save event
if (!$this->inDispatcher && $this->app['dispatcher']->hasListeners(StorageEvents::PRE_SAVE)) {
$event = new StorageEvent($content, ['contenttype' => $contenttype, 'create' => $create]);
$this->app['dispatcher']->dispatch(StorageEvents::PRE_SAVE, $event);
}
// Decide whether to insert a new record, or update an existing one.
if ($create) {
$this->insertContent($content, $comment);
} else {
$this->updateContent($content, $comment);
}
// Update taxonomy and record relationships
$this->updateTaxonomy($contenttype, $content->values['id'], $content->taxonomy);
$this->updateRelation($contenttype, $content->values['id'], $content->relation);
// Dispatch post-save event
if (!$this->inDispatcher && $this->app['dispatcher']->hasListeners(StorageEvents::POST_SAVE)) {
// Block loops
$this->inDispatcher = true;
$event = new StorageEvent($content, ['contenttype' => $contenttype, 'create' => $create]);
$this->app['dispatcher']->dispatch(StorageEvents::POST_SAVE, $event);
// Re-enable the dispatcher
$this->inDispatcher = false;
}
return $content->values['id'];
}