public function testCaseTransform() { $entity = new Content(); $underscore = 'bolt_field_example'; $camel = 'boltFieldExample'; $camel2 = 'BoltFieldExample'; $this->assertEquals('BoltFieldExample', $entity->camelize($underscore)); $this->assertEquals('bolt_field_example', $entity->underscore($camel)); $this->assertEquals('bolt_field_example', $entity->underscore($camel2)); }
/** * Dispatch the update event. * * @param Content $content * @param string $type * @param string $legacyType */ private function dispatch(Content $content, $type, $legacyType) { $event = new StorageEvent($content, ['contenttype' => $content->getContenttype(), 'create' => false]); try { $this->dispatcher->dispatch("timed.{$type}", $event); } catch (\Exception $e) { $this->systemLogger->critical(sprintf('Dispatch handling failed for %s.', $content->getContenttype()), ['event' => 'exception', 'exception' => $e]); } try { /** @deprecated Deprecated since 3.1, to be removed in 4.0. */ $this->dispatcher->dispatch("timed.{$legacyType}", $event); } catch (\Exception $e) { $this->systemLogger->critical(sprintf('Dispatch handling failed for %s.', $content->getContenttype()), ['event' => 'exception', 'exception' => $e]); } }
/** * Generate tab groups. * Changed to include $content and $incomingNotInverted which we need for * templatefields and relations respectivley. * * @param array $contentType * @param array $has * @param Content $content * @param array $incomingNotInverted * * @return array */ private function createGroupTabs(array $contentType, array $has, Content $content, $incomingNotInverted) { $groups = []; $groupIds = []; $addGroup = function ($group, $label) use(&$groups, &$groupIds) { $nr = count($groups) + 1; $id = rtrim('tab-' . Slugify::create()->slugify($group), '-'); if (isset($groupIds[$id]) || $id === 'tab') { $id .= '-' . $nr; } $groups[$group] = ['label' => $label, 'id' => $id, 'is_active' => $nr === 1, 'fields' => []]; $groupIds[$id] = 1; }; foreach ($contentType['groups'] ? $contentType['groups'] : ['ungrouped'] as $group) { $default = ['DEFAULT' => ucfirst($group)]; $key = ['contenttypes', $contentType['slug'], 'group', $group]; $addGroup($group, Trans::__($key, $default)); } /* * Create groups for templatefields */ if ($content->getTemplatefields()) { $currentGroup = 'template'; foreach ($content->getTemplatefields()->getContenttype()['fields'] as $fieldName => $field) { $group = $field['group'] === 'ungrouped' ? $currentGroup : $field['group']; if (!array_key_exists($group, $groups)) { $default = ['DEFAULT' => ucfirst($group)]; $key = ['contenttypes', $contentType['slug'], 'group', $group]; $addGroup($group, Trans::__($key, $default)); } $groups[$group]['fields'][] = 'templatefield_' . $fieldName; } } /* * Create groups for relations */ $currentGroup = 'relations'; foreach ($contentType['relations'] as $relationName => $relation) { if (!array_key_exists($relationName, $incomingNotInverted)) { $group = isset($relation['group']) ? $relation['group'] : $currentGroup; if (!array_key_exists($group, $groups)) { $default = ['DEFAULT' => ucfirst($group)]; $key = ['contenttypes', $contentType['slug'], 'group', $group]; $addGroup($group, Trans::__($key, $default)); } $groups[$group]['fields'][] = 'relation_' . $relationName; } } /* * Create groups for taxonomy */ $currentGroup = 'taxonomy'; foreach ($contentType['taxonomy'] as $taxonomy) { $taxonomyConfig = $this->config->get('taxonomy')[$taxonomy]; $group = isset($taxonomyConfig['group']) ? $taxonomyConfig['group'] : $currentGroup; if (!array_key_exists($group, $groups)) { $default = ['DEFAULT' => ucfirst($group)]; $key = ['contenttypes', $contentType['slug'], 'group', $group]; $addGroup($group, Trans::__($key, $default)); } $groups[$group]['fields'][] = 'taxonomy_' . $taxonomy; } $addGroup('meta', Trans::__('contenttypes.generic.group.meta')); $groups['meta']['fields'][] = '*meta'; // References fields in tab group data. foreach ($contentType['fields'] as $fieldName => $field) { $groups[$field['group']]['fields'][] = $fieldName; } return $groups; }
/** * Create a list of fields types used in regular, template and virtual fields. * * @param ContentType $contentType * @param Content $content * @param array $has * * @return array */ private function getUsedFieldtypes(ContentType $contentType, Content $content, array $has) { $fieldtypes = ['meta' => true]; if ($content->getTemplatefields() instanceof TemplateFields) { $templateFields = $content->getTemplatefields()->getContenttype()->getFields() ?: []; } else { $templateFields = []; } foreach ([$contentType['fields'], $templateFields] as $fields) { foreach ($fields as $field) { $fieldtypes[$field['type']] = true; } if ($field['type'] === 'repeater') { foreach ($field['fields'] as $rfield) { $fieldtypes[$rfield['type']] = true; } } } if ($has['relations'] || $has['incoming_relations']) { $fieldtypes['relationship'] = true; } if ($has['taxonomy'] || is_array($contentType['groups']) && in_array('taxonomy', $contentType['groups'])) { $fieldtypes['taxonomy'] = true; } if ($has['templatefields'] || is_array($contentType['groups']) && in_array('template', $contentType['groups'])) { $fieldtypes['template'] = true; } return array_keys($fieldtypes); }
/** * Create a list of fields types used in regular, template and virtual fields. * * @param array $contenttype * @param Content $content * @param array $has * * @return array */ private function getUsedFieldtypes(array $contenttype, Content $content, array $has) { $fieldtypes = ['meta' => true]; foreach ([$contenttype['fields'], $content->getTemplatefields() ?: []] as $fields) { foreach ($fields as $field) { $fieldtypes[$field['type']] = true; } } if ($has['relations'] || $has['incoming_relations']) { $fieldtypes['relationship'] = true; } if ($has['taxonomy'] || is_array($contenttype['groups']) && in_array('taxonomy', $contenttype['groups'])) { $fieldtypes['taxonomy'] = true; } if ($has['templatefields'] || is_array($contenttype['groups']) && in_array('template', $contenttype['groups'])) { $fieldtypes['template'] = true; } return array_keys($fieldtypes); }
/** * Transition a record's owner if permitted. * * @param Content $entity * @param integer $ownerId */ protected function transistionRecordOwner(Content $entity, $ownerId) { $recordId = $entity->getId(); $contentTypeName = (string) $entity->getContenttype(); $canChangeOwner = $this->users->isAllowed("contenttype:{$contentTypeName}:change-ownership:{$recordId}"); if (!$canChangeOwner) { $this->loggerFlash->error(Trans::__('general.access-denied.content-not-modified', ['%title%' => $entity->getTitle()])); return; } $entity->setOwnerid($ownerId); $entity->_modified = true; }
/** * Add a change log entry to track the change. * * @param string $contentType * @param integer $contentId * @param Entity\Content $newContent * @param Entity\Content|null $oldContent * @param string|null $comment */ private function logChange($contentType, $contentId, $newContent = null, $oldContent = null, $comment = null) { $type = $oldContent ? 'Update' : 'Insert'; $this->loggerChange->info($type . ' record', ['action' => strtoupper($type), 'contenttype' => $contentType, 'id' => $contentId, 'new' => $newContent ? $newContent->toArray() : null, 'old' => $oldContent ? $oldContent->toArray() : null, 'comment' => $comment]); }
/** * Identifies which relations are incoming to the given entity * * @param Entity\Content $entity * * @return mixed */ public function incoming(Entity\Content $entity) { return $this->filter(function ($el) use($entity) { /** @var Entity\Relations $el */ return $el->getToContenttype() == (string) $entity->getContenttype() && $el->getToId() === $entity->getId(); }); }