From 8b59c76150b9e142e9a0fb8d05b79c0c2bf70437 Mon Sep 17 00:00:00 2001 From: ralf Date: Wed, 20 Mar 2024 22:52:51 +0200 Subject: [PATCH] WIP allow cfs in extra tabs --- admin/inc/class.admin_customfields.inc.php | 4 +-- api/src/Etemplate/Widget/Tabbox.php | 38 ++++++++++++++++++++++ 2 files changed, 40 insertions(+), 2 deletions(-) diff --git a/admin/inc/class.admin_customfields.inc.php b/admin/inc/class.admin_customfields.inc.php index 523c7406c2..3b113c450b 100644 --- a/admin/inc/class.admin_customfields.inc.php +++ b/admin/inc/class.admin_customfields.inc.php @@ -139,7 +139,7 @@ class admin_customfields $this->use_private = !empty($_GET['use_private']) && $_GET['use_private'] !== 'undefined' || !empty($content['use_private']); // Read fields, constructor doesn't always know appname - $this->fields = Api\Storage\Customfields::get($this->appname,true); + $this->fields = Api\Storage\Customfields::get($this->appname,true, null, null, null); $this->tmpl = new Etemplate(); $this->tmpl->read('admin.customfields'); @@ -349,7 +349,7 @@ class admin_customfields $this->use_readonly = !isset($_GET['use_readonly']) || (boolean)$_GET['use_readonly'] || !empty($content['use_readonly']); // Read fields, constructor doesn't always know appname - $this->fields = Api\Storage\Customfields::get($this->appname,true); + $this->fields = Api\Storage\Customfields::get($this->appname,true, null, null, null); // Update based on info returned from template if (is_array($content)) diff --git a/api/src/Etemplate/Widget/Tabbox.php b/api/src/Etemplate/Widget/Tabbox.php index d55ff2b2e4..863456fd1b 100644 --- a/api/src/Etemplate/Widget/Tabbox.php +++ b/api/src/Etemplate/Widget/Tabbox.php @@ -14,6 +14,7 @@ namespace EGroupware\Api\Etemplate\Widget; use EGroupware\Api\Etemplate; +use EGroupware\Api; /** * eTemplate Tabs widget stacks multiple sub-templates and lets you switch between them @@ -129,4 +130,41 @@ class Tabbox extends Etemplate\Widget if (true) $valid = $value; } } + + /** + * Method called before eT2 request is sent to client + * + * @param string $cname + * @param array $expand values for keys 'c', 'row', 'c_', 'row_', 'cont' + */ + public function beforeSendToClient($cname, array $expand=null) + { + [$app] = explode('.', self::$request->template['name']); + if (empty($app) || !($cfs = Api\Storage\Customfields::get($app, false, null, null, true))) + { + return; + } + $tabs = []; + $content = self::$request->content; + foreach($cfs as $cf) + { + if (!empty($cf['tab'])) + { + $tab = $tabs[$cf['tab']]['id'] ?? 'cf-tab'.(1+count($tabs)); + if (!isset($tabs[$cf['tab']])) + { + $tabs[$cf['tab']] = array( + 'id' => $tab, + 'template' => 'api.cf-tab', + 'label' => $cf['tab'], + ); + } + } + } + if ($tabs) + { + self::$request->content = $content; + self::setElementAttribute($this->id, 'extraTabs', array_values($tabs)); + } + } } \ No newline at end of file