profile
viewpoint
If you are wondering where the data of this site comes from, please visit https://api.github.com/users/skurfuerst/events. GitMemory does not store any data, but only uses NGINX to cache data for a period of time. The idea behind GitMemory is simply to give users a better reading experience.
Sebastian Kurfürst skurfuerst Sandstorm Media GmbH Dresden, Germany https://sandstorm.de Consultant | Web Developer | @neos and Flow Team Member | CTO @sandstorm

neos/neos-ui 244

Neos CMS UI written in ReactJS with Immutable data structures.

neos/Neos.EventSourcing 33

A library for Event Sourcing and CQRS for Flow projects.

Flowpack/Flowpack.SearchPlugin 22

A simple search plugin for Neos

neos/neos-ui-extensibility-examples 17

Neos UI Extensibility Examples

helhum/TYPO3.IHS 4

Incident Handling System

hlubek/liveslide 4

A collaborative live slideshow app with node.js, CouchDB and Websockets

neos/brand 4

Neos brand assets

sandstorm/CkEditorInspector 4

a Neos UI Plugin to include the CKEditor 5 Inspector - very helpful when debugging CKEditor5 plugins

sandstorm/neos-conf-app 2

React Conf 2017 Companion App - built with React Native

push eventFlowpack/Flowpack.Prunner

Sebastian Kurfürst

commit sha 841021ed48d765d8cd700f086a221aa6c229c609

TASK: explain how the prunner UI can be updated

view details

push time in a day

push eventFlowpack/prunner-ui

Sebastian Kurfürst

commit sha 34400e7fe1996274e7382e691e20ea515a3e8273

TASK: update README

view details

push time in a day

push eventFlowpack/prunner

Sebastian Kurfürst

commit sha a2098bd57539fdbd6c8b38190cdcc1f6ea441d37

TASK: update README

view details

push time in a day

push eventFlowpack/Flowpack.Prunner

Sebastian Kurfürst

commit sha 92cdbe7f113412a83f1aa86d6e90ef57ae24bb18

FEATURE: install correct prunner version post-package-update

view details

push time in a day

push eventFlowpack/prunner

Sebastian Kurfürst

commit sha 9de9b00935fef7866b4a6e0ed60def877b2fbca8

TASK: fix license of prunner (GPL because taskctl is GPL licensed as well)

view details

push time in a day

created tagFlowpack/prunner

tagv0.0.1

Go-based, embeddable, API based pipeline runner.

created time in a day

release Flowpack/prunner

v0.0.1

released time in a day

delete branch Flowpack/prunner

delete branch : gh-action

delete time in a day

push eventFlowpack/prunner

Sebastian Kurfürst

commit sha ac3ff399b44fdc5d16456dd7f7812c5adcaf49f6

Try fixing test workflow

view details

Sebastian Kurfürst

commit sha 385516722f935124e634ca7df1358c2f338abf05

TASK: make linter happy

view details

Sebastian Kurfürst

commit sha c82d8b1f071fb4f6242b80e16a0890405cacf512

TASK: try release github workflow

view details

Sebastian Kurfürst

commit sha dbc505e34676f371793a3529731c6f02cb28981c

Merge pull request #1 from Flowpack/gh-action Try fixing test workflow

view details

push time in a day

PR merged Flowpack/prunner

Try fixing test workflow
+75 -12

0 comment

8 changed files

skurfuerst

pr closed time in a day

push eventFlowpack/prunner

Sebastian Kurfürst

commit sha c82d8b1f071fb4f6242b80e16a0890405cacf512

TASK: try release github workflow

view details

push time in a day

push eventFlowpack/prunner

Sebastian Kurfürst

commit sha 385516722f935124e634ca7df1358c2f338abf05

TASK: make linter happy

view details

push time in a day

PR opened Flowpack/prunner

Try fixing test workflow
+3 -3

0 comment

1 changed file

pr created time in a day

create barnchFlowpack/prunner

branch : gh-action

created branch time in a day

push eventFlowpack/prunner

Sebastian Kurfürst

commit sha 5c8507d21491da0d4566f105355da4bc6c29fb0c

TASK: try github actions for tests

view details

push time in a day

push eventFlowpack/prunner-ui

Sebastian Kurfürst

commit sha d52e6ff6487317007de3252469b3c3465dcbf078

FEATURE: add README

view details

push time in a day

push eventFlowpack/prunner

Sebastian Kurfürst

commit sha c42859c36fa64d257f02793465f00aac104e7898

FEATURE: add README

view details

push time in a day

push eventFlowpack/Flowpack.Prunner

Sebastian Kurfürst

commit sha 6ddda5523151468bd0ff77d46fd76f3cb4d82681

FEATURE: add README

view details

push time in a day

create barnchFlowpack/Flowpack.Prunner

branch : main

created branch time in a day

create barnchFlowpack/prunner-ui

branch : main

created branch time in a day

create barnchFlowpack/prunner

branch : main

created branch time in a day

created repositoryFlowpack/Flowpack.Prunner

An embeddable, API based pipeline runner. (Flow Package)

created time in a day

created repositoryFlowpack/prunner-ui

UI for prunner

created time in a day

created repositoryFlowpack/prunner

Go-based, embeddable, API based pipeline runner.

created time in a day

Pull request review commentneos/contentrepository-development-collection

FEATURE: Node Migrations

 private function connectNodeWithSiblings(DocumentNodeInfo $node, NodeAggregateId             'succeedingNodeAggregateIdentifier' => $newSucceedingNodeAggregateIdentifier,         ]);     }+++    public function whenDimensionSpacePointWasMoved(DimensionSpacePointWasMoved $event)+    {+        $this->updateNodeQuery(+            'SET dimensionspacepointhash = :newDimensionSpacePointHash WHERE dimensionspacepointhash = :originalDimensionSpacePointHash', [+            'originalDimensionSpacePointHash' => $event->getSource()->getHash(),+            'newDimensionSpacePointHash' => $event->getTarget()->getHash(),+            'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier()+                // TODO: contentStreamIdentifier restriction HOW?+        ]);++        $this->updateNodeQuery(+            'SET origindimensionspacepointhash = :newDimensionSpacePointHash WHERE origindimensionspacepointhash = :originalDimensionSpacePointHash', [+            'originalDimensionSpacePointHash' => $event->getSource()->getHash(),+            'newDimensionSpacePointHash' => $event->getTarget()->getHash(),+            'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier()+            // TODO: contentStreamIdentifier restriction HOW?

if (!$this->isInLiveConentStream()) return;

skurfuerst

comment created time in 5 days

PullRequestReviewEvent

Pull request review commentneos/contentrepository-development-collection

FEATURE: Node Migrations

 protected function updateNodeRecordWithCopyOnWrite(ContentStreamIdentifier $cont         }         return $result;     }++    protected function copyReferenceRelations(NodeRelationAnchorPoint $sourceRelationAnchorPoint, NodeRelationAnchorPoint $destinationRelationAnchorPoint): void+    {+        $this->getDatabaseConnection()->executeStatement('+                INSERT INTO neos_contentgraph_referencerelation (+                  nodeanchorpoint,+                  name,+                  position,+                  destinationnodeaggregateidentifier+                )+                SELECT+                  "' . (string)$destinationRelationAnchorPoint . '" AS nodeanchorpoint,+                  ref.name,+                  ref.position,+                  ref.destinationnodeaggregateidentifier+                FROM+                    neos_contentgraph_referencerelation ref+                    WHERE ref.nodeanchorpoint = :sourceNodeAnchorPoint+            ', [+            'sourceNodeAnchorPoint' => (string)$sourceRelationAnchorPoint+        ]);+    }++    public function whenDimensionSpacePointWasMoved(DimensionSpacePointWasMoved $event)+    {+        $this->transactional(function () use ($event) {+            // the ordering is important - we first update the OriginDimensionSpacePoints, as we need the+            // hierarchy relations for this query. Then, we update the Hierarchy Relations.++            // 1) originDimensionSpacePoint on Node+            $rel = $this->getDatabaseConnection()->executeQuery(+                'SELECT n.relationanchorpoint, n.origindimensionspacepointhash FROM neos_contentgraph_node n+                     INNER JOIN neos_contentgraph_hierarchyrelation h ON h.childnodeanchor = n.relationanchorpoint++                     AND h.contentstreamidentifier = :contentStreamIdentifier+                     AND h.dimensionspacepointhash = :dimensionSpacePointHash+                     -- find only nodes which have their ORIGIN at the source DimensionSpacePoint,+                     -- as we need to rewrite these origins (using copy on write)+                     AND n.origindimensionspacepointhash = :dimensionSpacePointHash+                ',+                [+                    'dimensionSpacePointHash' => $event->getSource()->getHash(),+                    'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier()+                ]+            );+            while ($res = $rel->fetchAssociative()) {+                $relationAnchorPoint = NodeRelationAnchorPoint::fromString($res['relationanchorpoint']);+                $this->updateNodeRecordWithCopyOnWrite($event->getContentStreamIdentifier(), $relationAnchorPoint, function(NodeRecord $nodeRecord) use ($event) {+                    $nodeRecord->originDimensionSpacePoint = $event->getTarget()->jsonSerialize();+                    $nodeRecord->originDimensionSpacePointHash = $event->getTarget()->getHash();+                });+            }++            // 2) hierarchy relations+            $this->getDatabaseConnection()->executeStatement(+                '+                UPDATE neos_contentgraph_hierarchyrelation h+                    SET+                        h.dimensionspacepoint = :newDimensionSpacePoint,+                        h.dimensionspacepointhash = :newDimensionSpacePointHash+                    WHERE+                      h.dimensionspacepointhash = :originalDimensionSpacePointHash+                      AND h.contentstreamidentifier = :contentStreamIdentifier+                      ',+                [+                    'originalDimensionSpacePointHash' => $event->getSource()->getHash(),+                    'newDimensionSpacePointHash' => $event->getTarget()->getHash(),+                    'newDimensionSpacePoint' => json_encode($event->getTarget()->jsonSerialize()),+                    'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier()+                ]+            );++            // 3) restriction relations+            $this->getDatabaseConnection()->executeStatement(+                '+                UPDATE neos_contentgraph_restrictionrelation r+                    SET+                        r.dimensionspacepointhash = :newDimensionSpacePointHash+                    WHERE+                      r.dimensionspacepointhash = :originalDimensionSpacePointHash+                      AND r.contentstreamidentifier = :contentStreamIdentifier+                      ',+                [+                    'originalDimensionSpacePointHash' => $event->getSource()->getHash(),+                    'newDimensionSpacePointHash' => $event->getTarget()->getHash(),+                    'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier()+                ]+            );++            // TODO: Routing Projection!++        });+    }++    public function whenDimensionShineThroughWasAdded(ContentRepository\Context\DimensionSpace\Event\DimensionShineThroughWasAdded $event)+    {+        $this->transactional(function () use ($event) {+            // 1) hierarchy relations+            $this->getDatabaseConnection()->executeStatement(+                '+                INSERT INTO neos_contentgraph_hierarchyrelation (+                  parentnodeanchor,+                  childnodeanchor,+                  `name`,+                  position,+                  dimensionspacepoint,+                  dimensionspacepointhash,+                  contentstreamidentifier+                )+                SELECT+                  h.parentnodeanchor,+                  h.childnodeanchor,+                  h.name,+                  h.position,+                 :newDimensionSpacePoint AS dimensionspacepoint,+                 :newDimensionSpacePointHash AS dimensionspacepointhash,+                  h.contentstreamidentifier+                FROM+                    neos_contentgraph_hierarchyrelation h+                    WHERE h.contentstreamidentifier = :contentStreamIdentifier+                    AND h.dimensionspacepointhash = :sourceDimensionSpacePointHash',+                [+                    'contentStreamIdentifier' => $event->getContentStreamIdentifier()->jsonSerialize(),+                    'sourceDimensionSpacePointHash' => $event->getSource()->getHash(),+                    'newDimensionSpacePointHash' => $event->getTarget()->getHash(),+                    'newDimensionSpacePoint' => json_encode($event->getTarget()->jsonSerialize()),+                ]+            );++            // 2) restriction relations+            $this->getDatabaseConnection()->executeUpdate('+                INSERT INTO neos_contentgraph_restrictionrelation (+                  contentstreamidentifier,+                  dimensionspacepointhash,+                  originnodeaggregateidentifier,+                  affectednodeaggregateidentifier+                )+                SELECT+                  r.contentstreamidentifier,+                  :targetDimensionSpacePointHash,+                  r.originnodeaggregateidentifier,+                  r.affectednodeaggregateidentifier+                FROM+                    neos_contentgraph_restrictionrelation r+                    WHERE r.contentstreamidentifier = :contentStreamIdentifier+                    AND r.dimensionspacepointhash = :sourceDimensionSpacePointHash++            ', [+                'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier(),+                'sourceDimensionSpacePointHash' => (string)$event->getSource()->getHash(),+                'targetDimensionSpacePointHash' => (string)$event->getTarget()->getHash()+            ]);++            // TODO: Routing Projection!

I believe this has been already implemented. need to checka gain

skurfuerst

comment created time in 7 days

PullRequestReviewEvent

Pull request review commentneos/contentrepository-development-collection

FEATURE: Node Migrations

 protected function updateNodeRecordWithCopyOnWrite(ContentStreamIdentifier $cont         }         return $result;     }++    protected function copyReferenceRelations(NodeRelationAnchorPoint $sourceRelationAnchorPoint, NodeRelationAnchorPoint $destinationRelationAnchorPoint): void+    {+        $this->getDatabaseConnection()->executeStatement('+                INSERT INTO neos_contentgraph_referencerelation (+                  nodeanchorpoint,+                  name,+                  position,+                  destinationnodeaggregateidentifier+                )+                SELECT+                  "' . (string)$destinationRelationAnchorPoint . '" AS nodeanchorpoint,+                  ref.name,+                  ref.position,+                  ref.destinationnodeaggregateidentifier+                FROM+                    neos_contentgraph_referencerelation ref+                    WHERE ref.nodeanchorpoint = :sourceNodeAnchorPoint+            ', [+            'sourceNodeAnchorPoint' => (string)$sourceRelationAnchorPoint+        ]);+    }++    public function whenDimensionSpacePointWasMoved(DimensionSpacePointWasMoved $event)+    {+        $this->transactional(function () use ($event) {+            // the ordering is important - we first update the OriginDimensionSpacePoints, as we need the+            // hierarchy relations for this query. Then, we update the Hierarchy Relations.++            // 1) originDimensionSpacePoint on Node+            $rel = $this->getDatabaseConnection()->executeQuery(+                'SELECT n.relationanchorpoint, n.origindimensionspacepointhash FROM neos_contentgraph_node n+                     INNER JOIN neos_contentgraph_hierarchyrelation h ON h.childnodeanchor = n.relationanchorpoint++                     AND h.contentstreamidentifier = :contentStreamIdentifier+                     AND h.dimensionspacepointhash = :dimensionSpacePointHash+                     -- find only nodes which have their ORIGIN at the source DimensionSpacePoint,+                     -- as we need to rewrite these origins (using copy on write)+                     AND n.origindimensionspacepointhash = :dimensionSpacePointHash+                ',+                [+                    'dimensionSpacePointHash' => $event->getSource()->getHash(),+                    'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier()+                ]+            );+            while ($res = $rel->fetchAssociative()) {+                $relationAnchorPoint = NodeRelationAnchorPoint::fromString($res['relationanchorpoint']);+                $this->updateNodeRecordWithCopyOnWrite($event->getContentStreamIdentifier(), $relationAnchorPoint, function(NodeRecord $nodeRecord) use ($event) {+                    $nodeRecord->originDimensionSpacePoint = $event->getTarget()->jsonSerialize();+                    $nodeRecord->originDimensionSpacePointHash = $event->getTarget()->getHash();+                });+            }++            // 2) hierarchy relations+            $this->getDatabaseConnection()->executeStatement(+                '+                UPDATE neos_contentgraph_hierarchyrelation h+                    SET+                        h.dimensionspacepoint = :newDimensionSpacePoint,+                        h.dimensionspacepointhash = :newDimensionSpacePointHash+                    WHERE+                      h.dimensionspacepointhash = :originalDimensionSpacePointHash+                      AND h.contentstreamidentifier = :contentStreamIdentifier+                      ',+                [+                    'originalDimensionSpacePointHash' => $event->getSource()->getHash(),+                    'newDimensionSpacePointHash' => $event->getTarget()->getHash(),+                    'newDimensionSpacePoint' => json_encode($event->getTarget()->jsonSerialize()),+                    'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier()+                ]+            );++            // 3) restriction relations+            $this->getDatabaseConnection()->executeStatement(+                '+                UPDATE neos_contentgraph_restrictionrelation r+                    SET+                        r.dimensionspacepointhash = :newDimensionSpacePointHash+                    WHERE+                      r.dimensionspacepointhash = :originalDimensionSpacePointHash+                      AND r.contentstreamidentifier = :contentStreamIdentifier+                      ',+                [+                    'originalDimensionSpacePointHash' => $event->getSource()->getHash(),+                    'newDimensionSpacePointHash' => $event->getTarget()->getHash(),+                    'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier()+                ]+            );++            // TODO: Routing Projection!++        });+    }++    public function whenDimensionShineThroughWasAdded(ContentRepository\Context\DimensionSpace\Event\DimensionShineThroughWasAdded $event)+    {+        $this->transactional(function () use ($event) {+            // 1) hierarchy relations+            $this->getDatabaseConnection()->executeStatement(+                '+                INSERT INTO neos_contentgraph_hierarchyrelation (+                  parentnodeanchor,+                  childnodeanchor,+                  `name`,+                  position,+                  dimensionspacepoint,+                  dimensionspacepointhash,+                  contentstreamidentifier+                )+                SELECT+                  h.parentnodeanchor,+                  h.childnodeanchor,+                  h.name,+                  h.position,+                 :newDimensionSpacePoint AS dimensionspacepoint,+                 :newDimensionSpacePointHash AS dimensionspacepointhash,+                  h.contentstreamidentifier+                FROM+                    neos_contentgraph_hierarchyrelation h+                    WHERE h.contentstreamidentifier = :contentStreamIdentifier+                    AND h.dimensionspacepointhash = :sourceDimensionSpacePointHash',+                [+                    'contentStreamIdentifier' => $event->getContentStreamIdentifier()->jsonSerialize(),+                    'sourceDimensionSpacePointHash' => $event->getSource()->getHash(),+                    'newDimensionSpacePointHash' => $event->getTarget()->getHash(),+                    'newDimensionSpacePoint' => json_encode($event->getTarget()->jsonSerialize()),+                ]+            );++            // 2) restriction relations+            $this->getDatabaseConnection()->executeUpdate('+                INSERT INTO neos_contentgraph_restrictionrelation (+                  contentstreamidentifier,+                  dimensionspacepointhash,+                  originnodeaggregateidentifier,+                  affectednodeaggregateidentifier+                )+                SELECT+                  r.contentstreamidentifier,+                  :targetDimensionSpacePointHash,+                  r.originnodeaggregateidentifier,+                  r.affectednodeaggregateidentifier+                FROM+                    neos_contentgraph_restrictionrelation r+                    WHERE r.contentstreamidentifier = :contentStreamIdentifier+                    AND r.dimensionspacepointhash = :sourceDimensionSpacePointHash++            ', [+                'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier(),+                'sourceDimensionSpacePointHash' => (string)$event->getSource()->getHash(),+                'targetDimensionSpacePointHash' => (string)$event->getTarget()->getHash()+            ]);++            // TODO: Routing Projection!

TODO is relevant!

skurfuerst

comment created time in 7 days

Pull request review commentneos/contentrepository-development-collection

FEATURE: Node Migrations

 private function connectNodeWithSiblings(DocumentNodeInfo $node, NodeAggregateId             'succeedingNodeAggregateIdentifier' => $newSucceedingNodeAggregateIdentifier,         ]);     }+++    public function whenDimensionSpacePointWasMoved(DimensionSpacePointWasMoved $event)+    {+        $this->updateNodeQuery(+            'SET dimensionspacepointhash = :newDimensionSpacePointHash WHERE dimensionspacepointhash = :originalDimensionSpacePointHash', [+            'originalDimensionSpacePointHash' => $event->getSource()->getHash(),+            'newDimensionSpacePointHash' => $event->getTarget()->getHash(),+            'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier()+                // TODO: contentStreamIdentifier restriction HOW?+        ]);++        $this->updateNodeQuery(+            'SET origindimensionspacepointhash = :newDimensionSpacePointHash WHERE origindimensionspacepointhash = :originalDimensionSpacePointHash', [+            'originalDimensionSpacePointHash' => $event->getSource()->getHash(),+            'newDimensionSpacePointHash' => $event->getTarget()->getHash(),+            'contentStreamIdentifier' => (string)$event->getContentStreamIdentifier()+            // TODO: contentStreamIdentifier restriction HOW?

what did I mean with that? :)

skurfuerst

comment created time in 7 days