xref: /plugin/combo/ComboStrap/EditButtonManager.php (revision 70bbd7f1f72440223cc13f3495efdcb2b0a11514)
104fd306cSNickeau<?php
204fd306cSNickeau
304fd306cSNickeaunamespace ComboStrap;
404fd306cSNickeau
504fd306cSNickeau/**
604fd306cSNickeau *
704fd306cSNickeau *
804fd306cSNickeau */
904fd306cSNickeauclass EditButtonManager
1004fd306cSNickeau{
1104fd306cSNickeau
1204fd306cSNickeau
1304fd306cSNickeau    /**
1404fd306cSNickeau     * @var array Hold the actual edit button manager
1504fd306cSNickeau     */
1604fd306cSNickeau    private static $editButtonManagers;
1704fd306cSNickeau
1804fd306cSNickeau    /**
1904fd306cSNickeau     * @var EditButton[]
2004fd306cSNickeau     */
2104fd306cSNickeau    private $editButtonStack;
2204fd306cSNickeau
2304fd306cSNickeau    static function getOrCreate(): EditButtonManager
2404fd306cSNickeau    {
2504fd306cSNickeau
2604fd306cSNickeau        $page = MarkupPath::createFromRequestedPage();
2704fd306cSNickeau        $cacheKey = $page->getWikiId();
28*70bbd7f1Sgerardnico        $editButtonManager = self::$editButtonManagers[$cacheKey] ?? null;
2904fd306cSNickeau        if ($editButtonManager === null) {
3004fd306cSNickeau            // new run, delete all old cache managers
3104fd306cSNickeau            self::$editButtonManagers = [];
3204fd306cSNickeau            // create
3304fd306cSNickeau            $editButtonManager = new EditButtonManager();
3404fd306cSNickeau            self::$editButtonManagers[$cacheKey] = $editButtonManager;
3504fd306cSNickeau        }
3604fd306cSNickeau        return $editButtonManager;
3704fd306cSNickeau    }
3804fd306cSNickeau
3904fd306cSNickeau    /**
4004fd306cSNickeau     * @param $name
4104fd306cSNickeau     * @param $startPosition
4204fd306cSNickeau     * @return EditButton
4304fd306cSNickeau     */
4404fd306cSNickeau    public function createAndAddEditButtonToStack($name, $startPosition): EditButton
4504fd306cSNickeau    {
4604fd306cSNickeau
4704fd306cSNickeau
4804fd306cSNickeau        if (empty($startPosition)) {
4904fd306cSNickeau            LogUtility::msg("The position for a start section should not be empty", LogUtility::LVL_MSG_ERROR, "support");
5004fd306cSNickeau        }
5104fd306cSNickeau        if (empty($name)) {
5204fd306cSNickeau            LogUtility::msg("The name for a start section should not be empty", LogUtility::LVL_MSG_ERROR, "support");
5304fd306cSNickeau        }
5404fd306cSNickeau
5504fd306cSNickeau        $editButton = EditButton::create($name)
5604fd306cSNickeau            ->setStartPosition($startPosition);
5704fd306cSNickeau        $this->editButtonStack[] = $editButton;
5804fd306cSNickeau        return $editButton;
5904fd306cSNickeau
6004fd306cSNickeau    }
6104fd306cSNickeau
6204fd306cSNickeau    public function popEditButtonFromStack($endPosition): ?EditButton
6304fd306cSNickeau    {
6404fd306cSNickeau        $editButton = array_pop($this->editButtonStack);
6504fd306cSNickeau        $editButton->setEndPosition($endPosition);
6604fd306cSNickeau        return $editButton;
6704fd306cSNickeau    }
6804fd306cSNickeau
6904fd306cSNickeau}
70