Maybe with procedures. You should create a portal frame block and portal block (This inside frame) and on tickUpdate frame block trigger try create procedure that check that frame is complete. If is, procedure should fill portal frame with portal blocks. Next, you must create your dimesion and crate procedure that detects that player is touching it. If yes, you should teleport player in your dimesion and voila!
Maybe with procedures. You should create a portal frame block and portal block (This inside frame) and on tickUpdate frame block trigger try create procedure that check that frame is complete. If is, procedure should fill portal frame with portal blocks. Next, you must create your dimesion and crate procedure that detects that player is touching it. If yes, you should teleport player in your dimesion and voila!
Create a block, and make it rotatable.
Then when right clicked with your custom eye of ender change block to the new version.
With the ones facing the other direction make sure the direction of that block is saved.
Then one of the new blocks will have to check for the other 11 every tick.
Check for if the other 11 are the correct block and direction.
If the other 11 are the correct block and direction then create the 9 blocks in the middle the portal.
The portal block would just be a portal that teleports you to the end on collision with player.
"that player is touching it" -> I wanted to say -> "that player is touching portal block"
Sorry for this mistake