diff --git a/lib/public/AppFramework/Http/Template/IMenuAction.php b/lib/public/AppFramework/Http/Template/IMenuAction.php new file mode 100644 index 00000000000..e42d2057981 --- /dev/null +++ b/lib/public/AppFramework/Http/Template/IMenuAction.php @@ -0,0 +1,64 @@ + + * + * @author Julius Härtl + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCP\AppFramework\Http\Template; + +/** + * Interface IMenuAction + * + * @package OCP\AppFramework\Http\Template + * @since 14.0 + */ +interface IMenuAction { + + /** + * @since 14.0.0 + * @return string + */ + public function getId(): string; + + /** + * @since 14.0.0 + * @return string + */ + public function getLabel(): string; + + /** + * @since 14.0.0 + * @return string + */ + public function getLink(): string; + + /** + * @since 14.0.0 + * @return int + */ + public function getPriority(): int; + + /** + * @since 14.0.0 + * @return string + */ + public function render(): string; + +} \ No newline at end of file diff --git a/lib/public/AppFramework/Http/Template/PublicTemplateResponse.php b/lib/public/AppFramework/Http/Template/PublicTemplateResponse.php new file mode 100644 index 00000000000..2a209c88b9f --- /dev/null +++ b/lib/public/AppFramework/Http/Template/PublicTemplateResponse.php @@ -0,0 +1,105 @@ + + * + * @author Julius Härtl + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCP\AppFramework\Http\Template; + +use OCP\AppFramework\Http\TemplateResponse; + +class PublicTemplateResponse extends TemplateResponse { + + private $headerTitle = ''; + private $headerDetails = ''; + private $headerActions = []; + + public function __construct(string $appName, string $templateName, array $params = array()) { + parent::__construct($appName, $templateName, $params, 'public'); + \OC_Util::addScript('core', 'public/publicpage'); + } + + public function setHeaderTitle(string $title) { + $this->headerTitle = $title; + } + + public function getHeaderTitle(): string { + return $this->headerTitle; + } + + public function setHeaderDetails(string $details) { + $this->headerDetails = $details; + } + + public function getHeaderDetails(): string { + return $this->headerDetails; + } + + public function setHeaderActions(array $actions) { + foreach ($actions as $action) { + if ($actions instanceof IMenuAction) { + throw new \InvalidArgumentException('Actions must be of type IMenuAction'); + } + $this->headerActions[] = $action; + } + } + + public function addAction(IMenuAction $action) { + $this->headerActions[] = $action; + } + + public function getPrimaryAction(): IMenuAction { + $lowest = null; + foreach ($this->headerActions as $action) { + if($lowest === null || $action->getPriority() < $lowest->getPriority()) { + $lowest = $action; + } + } + return $lowest; + } + + public function getActionCount(): int { + return count($this->headerActions); + } + + /** + * @return IMenuAction[] + */ + public function getOtherActions(): array { + $list = []; + $primary = $this->getPrimaryAction(); + foreach ($this->headerActions as $action) { + if($primary !== $action) { + $list[] = $action; + } + } + return $list; + } + + + public function render() { + $params = array_merge($this->getParams(), [ + 'template' => $this, + ]); + $this->setParams($params); + return parent::render(); + } + +} \ No newline at end of file diff --git a/lib/public/AppFramework/Http/Template/SimpleMenuAction.php b/lib/public/AppFramework/Http/Template/SimpleMenuAction.php new file mode 100644 index 00000000000..c5cbd9a032c --- /dev/null +++ b/lib/public/AppFramework/Http/Template/SimpleMenuAction.php @@ -0,0 +1,96 @@ + + * + * @author Julius Härtl + * + * @license GNU AGPL version 3 or any later version + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, either version 3 of the + * License, or (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + * + */ + +namespace OCP\AppFramework\Http\Template; + +use OCP\AppFramework\Http\Template\IMenuAction; +use Twig_Environment; + +class SimpleMenuAction implements IMenuAction { + + private $id; + private $label; + private $icon; + private $link; + private $priority = 100; + private $detail; + + public function __construct(string $id, string $label, string $icon, string $link = '', int $priority = 100, string $detail = '') { + $this->id = $id; + $this->label = $label; + $this->icon = $icon; + $this->link = $link; + $this->priority = $priority; + $this->detail = $detail; + } + + public function setId(string $id) { + $this->id = $id; + } + + public function setLabel(string $label) { + $this->label = $label; + } + + public function setDetail(string $detail) { + $this->detail = $detail; + } + + public function setIcon(string $icon) { + $this->icon = $icon; + } + + public function setLink(string $link) { + $this->link = $link; + } + + public function setPriority(int $priority) { + $this->priority = $priority; + } + + public function getId(): string { + return $this->id; + } + + public function getLabel(): string { + return $this->label; + } + + public function getIcon(): string { + return $this->icon; + } + + public function getLink(): string { + return $this->link; + } + + public function getPriority(): int { + return $this->priority; + } + + public function render(): string { + $detailContent = ($this->detail !== '') ? ' (' . $this->detail . ')' : ''; + return sprintf('
  • %s %s
  • ', $this->link, $this->icon, $this->label, $detailContent); + } + +} \ No newline at end of file