aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorfriendica <info@friendica.com>2013-11-28 20:17:07 -0800
committerfriendica <info@friendica.com>2013-11-28 20:17:07 -0800
commit7536ed6e449e0d405394155b50f5e1ce96fd7776 (patch)
tree31ca9f31003d049df3be83c367fe3f4f257bf5bb
parent8cd9a2c3a944e804c72ef461df801116c6b44ac7 (diff)
downloadvolse-hubzilla-7536ed6e449e0d405394155b50f5e1ce96fd7776.tar.gz
volse-hubzilla-7536ed6e449e0d405394155b50f5e1ce96fd7776.tar.bz2
volse-hubzilla-7536ed6e449e0d405394155b50f5e1ce96fd7776.zip
allow themes to mess with the navbar contents without a custom template. It's done as a callback using a transient plugin hook.
For instance to get rid of the notifications link: insert_hook('nav','strip_notify'); function strip_notify($a,&$b) { unset($b['nav']['notifications']); }
-rwxr-xr-xboot.php3
-rw-r--r--include/nav.php7
-rwxr-xr-xinclude/plugin.php37
3 files changed, 42 insertions, 5 deletions
diff --git a/boot.php b/boot.php
index 53d756e93..dc9021745 100755
--- a/boot.php
+++ b/boot.php
@@ -2459,6 +2459,8 @@ function construct_page(&$a) {
* Build the page - now that we have all the components
*/
+ require_once(theme_include('theme_init.php'));
+
$installing = false;
if($a->module == 'setup')
@@ -2473,7 +2475,6 @@ function construct_page(&$a) {
}
}
- require_once(theme_include('theme_init.php'));
if(($p = theme_include(current_theme() . '.js')) != '')
head_add_js($p);
diff --git a/include/nav.php b/include/nav.php
index 51c1cc583..56644f6fd 100644
--- a/include/nav.php
+++ b/include/nav.php
@@ -201,16 +201,19 @@ EOT;
if($banner === false)
$banner = 'red';
+ $x = array('nav' => $nav, 'usermenu' => $userinfo );
+ call_hooks('nav', $x);
+
$tpl = get_markup_template('nav.tpl');
$a->page['nav'] .= replace_macros($tpl, array(
'$baseurl' => $a->get_baseurl(),
'$langselector' => ((get_config('system','select_language')) ? lang_selector() : ''),
'$sitelocation' => $sitelocation,
- '$nav' => $nav,
+ '$nav' => $x['nav'],
'$banner' => $banner,
'$emptynotifications' => t('Nothing new here'),
- '$userinfo' => $userinfo,
+ '$userinfo' => $x['usermenu'],
'$localuser' => local_user(),
'$sel' => $a->nav_sel,
'$apps' => $a->get_apps(),
diff --git a/include/plugin.php b/include/plugin.php
index d90434b3a..fd58fb7dd 100755
--- a/include/plugin.php
+++ b/include/plugin.php
@@ -181,12 +181,14 @@ function unregister_hook($hook,$file,$function) {
//
// It might not be obvious but themes can manually add hooks to the $a->hooks
// array in their theme_init() and use this to customise the app behaviour.
+// UPDATE: use insert_hook($hookname,$function_name) to do this
//
function load_hooks() {
$a = get_app();
- $a->hooks = array();
+ if(! is_array($a->hooks))
+ $a->hooks = array();
$r = q("SELECT * FROM hook WHERE true ORDER BY priority DESC");
if($r) {
foreach($r as $rr) {
@@ -197,6 +199,36 @@ function load_hooks() {
}
}
+/**
+ *
+ * @function insert_hook($hook,$fn)
+ *
+ * Insert a short-lived hook into the running page request.
+ * Hooks are normally persistent so that they can be called
+ * across asynchronous processes such as delivery and poll
+ * processes.
+ *
+ * insert_hook lets you attach a hook callback immediately
+ * which will not persist beyond the life of this page request
+ * or the current process.
+ *
+ * @param string $hook;
+ * name of hook to attach callback
+ * @param string $fn;
+ * function name of callback handler
+ *
+ */
+
+function insert_hook($hook,$fn) {
+ $a = get_app();
+ if(! is_array($a->hooks))
+ $a->hooks = array();
+ if(! array_key_exists($hook,$a->hooks))
+ $a->hooks[$hook] = array();
+ $a->hooks[$hook][] = array('',$fn);
+}
+
+
function call_hooks($name, &$data = null) {
@@ -204,7 +236,8 @@ function call_hooks($name, &$data = null) {
if((is_array($a->hooks)) && (array_key_exists($name,$a->hooks))) {
foreach($a->hooks[$name] as $hook) {
- @include_once($hook[0]);
+ if($hook[0])
+ @include_once($hook[0]);
if(function_exists($hook[1])) {
$func = $hook[1];
$func($a,$data);