xref: /plugin/combo/ComboStrap/EditButtonManager.php (revision 04fd306c7c155fa133ebb3669986875d65988276)
1*04fd306cSNickeau<?php
2*04fd306cSNickeau
3*04fd306cSNickeaunamespace ComboStrap;
4*04fd306cSNickeau
5*04fd306cSNickeau/**
6*04fd306cSNickeau *
7*04fd306cSNickeau *
8*04fd306cSNickeau */
9*04fd306cSNickeauclass EditButtonManager
10*04fd306cSNickeau{
11*04fd306cSNickeau
12*04fd306cSNickeau
13*04fd306cSNickeau    /**
14*04fd306cSNickeau     * @var array Hold the actual edit button manager
15*04fd306cSNickeau     */
16*04fd306cSNickeau    private static $editButtonManagers;
17*04fd306cSNickeau
18*04fd306cSNickeau    /**
19*04fd306cSNickeau     * @var EditButton[]
20*04fd306cSNickeau     */
21*04fd306cSNickeau    private $editButtonStack;
22*04fd306cSNickeau
23*04fd306cSNickeau    static function getOrCreate(): EditButtonManager
24*04fd306cSNickeau    {
25*04fd306cSNickeau
26*04fd306cSNickeau        $page = MarkupPath::createFromRequestedPage();
27*04fd306cSNickeau        $cacheKey = $page->getWikiId();
28*04fd306cSNickeau        $editButtonManager = self::$editButtonManagers[$cacheKey];
29*04fd306cSNickeau        if ($editButtonManager === null) {
30*04fd306cSNickeau            // new run, delete all old cache managers
31*04fd306cSNickeau            self::$editButtonManagers = [];
32*04fd306cSNickeau            // create
33*04fd306cSNickeau            $editButtonManager = new EditButtonManager();
34*04fd306cSNickeau            self::$editButtonManagers[$cacheKey] = $editButtonManager;
35*04fd306cSNickeau        }
36*04fd306cSNickeau        return $editButtonManager;
37*04fd306cSNickeau    }
38*04fd306cSNickeau
39*04fd306cSNickeau    /**
40*04fd306cSNickeau     * @param $name
41*04fd306cSNickeau     * @param $startPosition
42*04fd306cSNickeau     * @return EditButton
43*04fd306cSNickeau     */
44*04fd306cSNickeau    public function createAndAddEditButtonToStack($name, $startPosition): EditButton
45*04fd306cSNickeau    {
46*04fd306cSNickeau
47*04fd306cSNickeau
48*04fd306cSNickeau        if (empty($startPosition)) {
49*04fd306cSNickeau            LogUtility::msg("The position for a start section should not be empty", LogUtility::LVL_MSG_ERROR, "support");
50*04fd306cSNickeau        }
51*04fd306cSNickeau        if (empty($name)) {
52*04fd306cSNickeau            LogUtility::msg("The name for a start section should not be empty", LogUtility::LVL_MSG_ERROR, "support");
53*04fd306cSNickeau        }
54*04fd306cSNickeau
55*04fd306cSNickeau        $editButton = EditButton::create($name)
56*04fd306cSNickeau            ->setStartPosition($startPosition);
57*04fd306cSNickeau        $this->editButtonStack[] = $editButton;
58*04fd306cSNickeau        return $editButton;
59*04fd306cSNickeau
60*04fd306cSNickeau    }
61*04fd306cSNickeau
62*04fd306cSNickeau    public function popEditButtonFromStack($endPosition): ?EditButton
63*04fd306cSNickeau    {
64*04fd306cSNickeau        $editButton = array_pop($this->editButtonStack);
65*04fd306cSNickeau        $editButton->setEndPosition($endPosition);
66*04fd306cSNickeau        return $editButton;
67*04fd306cSNickeau    }
68*04fd306cSNickeau
69*04fd306cSNickeau}
70