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