summaryrefslogtreecommitdiff
path: root/rt/html/Elements/Callback
diff options
context:
space:
mode:
Diffstat (limited to 'rt/html/Elements/Callback')
-rw-r--r--rt/html/Elements/Callback66
1 files changed, 66 insertions, 0 deletions
diff --git a/rt/html/Elements/Callback b/rt/html/Elements/Callback
new file mode 100644
index 0000000..79157e7
--- /dev/null
+++ b/rt/html/Elements/Callback
@@ -0,0 +1,66 @@
+%# BEGIN LICENSE BLOCK
+%#
+%# Copyright (c) 1996-2003 Jesse Vincent <jesse@bestpractical.com>
+%#
+%# (Except where explictly superceded by other copyright notices)
+%#
+%# This work is made available to you under the terms of Version 2 of
+%# the GNU General Public License. A copy of that license should have
+%# been provided with this software, but in any event can be snarfed
+%# from www.gnu.org.
+%#
+%# This work 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
+%# General Public License for more details.
+%#
+%# Unless otherwise specified, all modifications, corrections or
+%# extensions to this work which alter its source code become the
+%# property of Best Practical Solutions, LLC when submitted for
+%# inclusion in the work.
+%#
+%#
+%# END LICENSE BLOCK
+<%once>
+my (%cache, $check);
+</%once>
+<%init>
+# checks for inode change time for each callback directory
+my $new_check = join(
+ $;, map { $_->[1] => (stat("$_->[1]/Callbacks"))[10] } $m->interp->resolver->comp_root_array
+) or return;
+
+$Page = $m->callers(1)->path unless ($Page);
+
+my $callbacks;
+if ($new_check eq $check) {
+ $callbacks = $cache{$Page,$_CallbackName};
+}
+else {
+ $check = $new_check;
+}
+
+if (!$callbacks) {
+ my $path = "/Callbacks/*$Page/$_CallbackName";
+ $callbacks = [ $m->interp->resolver->glob_path($path) ];
+ @$callbacks = grep !/^\.|~$/, @$callbacks; #skip backup files
+
+ #skip files without a package
+ my $invalid_base = "/Callbacks/$Page/$_CallbackName";
+ @$callbacks = grep !/^$invalid_base$/, @$callbacks;
+
+
+
+ $cache{$Page,$_CallbackName} = $callbacks;
+}
+
+my @rv;
+foreach my $comp (sort @$callbacks) {
+ push @rv, $m->comp($comp, %ARGS) if $m->comp_exists($comp);
+}
+return @rv;
+</%init>
+<%args>
+$_CallbackName => 'Default'
+$Page => undef
+</%args>