/** * Überschreibt die AbstractEntityController FUnktion die den FormPanel abspeichert * */ protected function processEntityFormRequest(Entity $entity, FormData $requestData, $revision) { $dataName = 'layoutManager'; if (isset($requestData->{$dataName}) && count($requestData->{$dataName}) > 0) { $serialized = $requestData->{$dataName}; } /*else { throw $this->err->validationError($dataName, NULL, new \Psc\Exception('Das Layout muss mindestens 1 Element enthalten')); }*/ // da wir keine unique constraints haben und neu sortieren müssen , nehmen wir die holzhammer methode: // delete all foreach ($entity->getEntries() as $entry) { // den entry selbst löschen $this->repository->remove($entry); } // auch aus dem CS löschen, weil der sonst automatisch persisted und das remove oben keinen effect hat $entity->getEntries()->clear(); /* PS: im Moment werden Entries von ContentStreams innerhalb des ContentStreams nicht mit delete all gelöscht d.h. hier bleiben relativ viele leichen übrig (auch contentstreams selbst). Bei unserialize wird im sub-ContentStream einfach eine neue instanz erzeugt die dann automatisch persisted wird */ if (isset($serialized)) { // persist new $this->getContentStreamConverter()->convertUnserialized($requestData->{$dataName}, $entity); } }
/** * @return Psc\CMS\RequestMeta */ public function getDeleteRequestMeta(Entity $entity = NULL) { if (!isset($this->deleteRequestMeta)) { $idIsInt = ($type = $this->getIdentifier()->getType()) instanceof IntegerType; $this->deleteRequestMeta = new RequestMeta(\Psc\Net\HTTP\Request::DELETE, $this->constructUrl(array($this->getEntityName(), $idIsInt ? '%d' : '%s')), array($type)); } if (isset($entity)) { $meta = clone $this->deleteRequestMeta; return $meta->setInput($entity->getIdentifier()); } return $this->deleteRequestMeta; }
/** * * @return EntityFormPanel */ public function createFormPanel(Entity $entity, $panelLabel = NULL) { $entityMeta = $this->getEntityMeta(); $panel = $this->ev->createFormPanel($panelLabel ?: ($entity->isNew() ? $entityMeta->getNewLabel() : $entityMeta->getEditLabel()), $this->ev->createEntityForm($entity, $entity->isNew() ? $entityMeta->getNewRequestMeta($entity) : $entityMeta->getSaveRequestMeta($entity))); return $panel; }
/** * Das Label z.b. für RightContentLinkable */ public function getLinkLabel() { return $this->linkLabel ?: $this->entity->getContextLabel($this->context); // sollte dann rightcontent sein oder so }
/** * Erstellt aus dem Request und dem FormPanel ein Set mit allen FormularDaten * * man könnte sich hier auch mal vorstellen die formulardaten im set aufzusplitten * Sicherheit: alle Felder die nicht registriert sind durch Componenten oder den Formpanel (getControlFields) schmeissen hier eine Exception */ public function createFormDataSet(FormData $requestData, EntityFormPanel $panel, Entity $entity) { $meta = $entity->getSetMeta(); // wir müssen die Spezial-Felder vom EntityFormPanel hier tracken foreach ($panel->getControlFields() as $field) { $meta->setFieldType($field, Type::create('String')); } // sonderfeld disabled wird ignored $meta->setFieldType('disabled', Type::create('Array')); try { $set = new Set((array) $requestData, $meta); } catch (\Psc\Data\FieldNotDefinedException $e) { throw \Psc\Exception::create("In den FormularDaten befindet sich ein Feld '%s', welches kein Feld aus Entity getSetMeta ist (%s).", implode('.', $e->field), implode(', ', $e->avaibleFields)); } return $set; }
protected function onDelete(Entity $entity) { $em = $this->dc->getEntityManager(); foreach ($entity->getNavigationNodes() as $node) { $node->setPage($inactivePage = $this->createInactivePage('acreated-page')); $em->persist($inactivePage); $em->persist($node); } return parent::onDelete($entity); }