Warning: chmod(): Operation not permitted in /var/www/hopeinstoughton_www/wp-content/plugins/simple-universal-google-analytics/main.php on line 8 [0] in function chmod in /var/www/hopeinstoughton_www/wp-content/plugins/simple-universal-google-analytics/main.php on line 8 [1] in function include_once in /var/www/hopeinstoughton_www/wp-settings.php on line 560 [2] in function require_once in /var/www/hopeinstoughton_www/wp-config.php on line 85 [3] in function require_once in /var/www/hopeinstoughton_www/wp-load.php on line 50 [4] in function require_once in /var/www/hopeinstoughton_www/wp-blog-header.php on line 13 [5] in function require in /var/www/hopeinstoughton_www/index.php on line 17
| Server IP : 94.177.8.99 / Your IP : 216.73.217.165 Web Server : Apache/2.4.58 (Ubuntu) System : Linux aries 6.8.0-134-generic #134-Ubuntu SMP PREEMPT_DYNAMIC Fri Jun 26 18:43:11 UTC 2026 x86_64 User : www-data ( 33) PHP Version : 8.1.34 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : OFF Directory : /var/www/patientapps_support/modules/tabs/ |
Upload File : |
<?php
namespace modules\tabs;
class main extends \moduleMain {
private $tabs_present;
use \modules\input\traits {
\modules\input\traits::__construct as __ConstructInput;
}
use \modules\output\traits {
\modules\output\traits::__construct as __ConstructOutput;
}
public function __construct() {
parent::__construct(__DIR__);
$this->__ConstructInput();
$this->__ConstructOutput();
$this->tabs_present = FALSE;
}
// class must be listed in a 'depends' setting to be activated
public function Activate() {
// add 'tabs' helper -- replaces macro with query-ui tab
hook_add('html.prepare', [$this, '__add_helper']);
// intercept handlebars output, looking for "{{tabs ...}}"
hook_add('handlebars.add', [$this, '__intercept_fileobject']);
// enumerate tabs to be displayed
hook_add('output.data', [$this, '__intercept_pagedata']);
// if the active template contains a tab
// then get content of first tab, include data in page json.
// this will be displayed by default, if a different fragment is specified, it will be loaded by the javascripts
}
// tab callback in two parts - enumerate (what tabs are to be displayed, and how is the tab to be displayed) - data (for the body of the active tab)
// does the handlebars template use tabs?
public function __intercept_fileobject(\FileObject $result) {
if (preg_match('~\{\{tabs\s+(.*?)(|\s+.*?)\}\}~ms', $result->html(), $match)) {
$hook = trim($match[1]);
if (strlen($hook)) {
$p = $hook[0];
if (($p == '"' || $p == "'") && substr($hook, -1) == $p) {
$hook = substr($hook, 1, -1);
}
$result->x_tabhook = $hook;
$this->tabs_present = TRUE;
}
}
}
public function __add_helper(\moduleMain $theme) {
$base = $this->StaticUriModule(__DIR__);
$theme->IncludeFile("$base/tabs.js");
}
// does the active template have a TAB, if so, include:
// 1. headers for all tabs
// 2. the default tab - template and data
// (data for other tabs are loaded by the javascript when a fragment is specified)
//** TO DO: must include ephemeral data
public function __intercept_pagedata(&$data, $param) {
if (isset($param['template'])) {
$template = $param['template'];
if (isset($template->x_tabhook)) {
// get all the data needed to be included in an ephemeral structure
// main page will generate a constant id (hookname:parameterhash)
$tabdata = hook_execute($template->x_tabhook, [], $param['uri']);
if (!array_key_exists('uri', $tabdata)) $tabdata['uri'] = $param['uri'];
$tabdata['hook'] = $template->x_tabhook;
$tabdata['action'] = 'tabs';
$id = $GLOBALS['loader']->CreateEphemeral($tabdata, $tabdata['guid'], 1800); // normally 600 = 10min?
$data['tabauth'] = $id;
$fragment = isset($tabdata['default']) ? $tabdata['default'] : '';
if ($fragment != '') { // get data for the default tab
foreach($tabdata['_tab'] as &$tab) {
if ($tab['fragment'] == $fragment) {
$tab['data'] = hook_execute($template->x_tabhook . '.' . $fragment, [], $tabdata);
if (!count($tab['data'])) {
$tab['data'] = [
'result' => -1999,
'message' => 'unable to retrieve data for tab "' . $template->x_tabhook . '.' . $fragment . '"',
];
}
break;
}
}
}
$data['_tab'] = $tabdata['_tab'];
}
}
}
final function select($tabauth, $fragment = '') {
$payload = $GLOBALS['loader']->GetEphemeral($tabauth);
$url = $this->param('url');
if ($payload === FALSE) {
return ['error' => -14120, 'message' => 'link has expired'];
}
if ($payload['action'] != 'tabs') {
return ['error' => -14121, 'message' => 'invalid link'];
}
if ($url === NULL) {
return ['error' => -14122, 'message' => 'missing url parameter'];
}
if (empty($fragment)) {
return ['error' => -14123, 'message' => 'missing fragment element'];
}
$uri = parse_url($url, PHP_URL_PATH);
$hook = $payload['hook'];
$res = hook_execute($hook . '.' . $fragment, [], $payload);
return hook_execute($hook . '.*', $res, $payload, $fragment);
}
}