summaryrefslogtreecommitdiff
path: root/smarty_bit/resource.bitpackage.php
blob: cd35ced092c17e61b94dfa0a891b5c42c87c11f2 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File:     resource.bitpackage.php
* Type:     resource
* Name:     bitpackage
* Purpose:  Fetches templates from the correct package
* -------------------------------------------------------------
*/
function smarty_resource_bitpackage_source($tpl_name, &$tpl_source, &$smarty)
{
	global $gBitSystem, $gBitSystem; // gBitSystem is just for temporary backward compatibility
	$ret = false;

//	list( $package, $template ) = split( '/', $tpl_name );

	$path = explode( '/', $tpl_name );
	$package = array_shift( $path );
	$subdir = '';
	$template = array_pop( $path );
	foreach( $path as $p ) {
		$subdir .= $p.'/';
	}
	$subdir .= preg_match( '/mod_/', $template ) ? 'modules' : 'templates';

	// look in themes/force/
	$forceTemplate = THEMES_PKG_PATH."/force/$template";
	// look in themes/style/<stylename>/<package>/templates/
	$overrideTemplate = $gBitSystem->getStylePath()."/$package/$subdir/$template";
	// look in themes/style/<stylename>/<package>/ - module files are unique anyway
	$overrideTemplateSimple = $gBitSystem->getStylePath()."/$package/$template";
	// look in root of style themes/style/<stylename>/
	$overrideRootTemplate = $gBitSystem->getStylePath().$template;
	// look for default package template
	$package_template = BIT_PKG_PATH.$gBitSystem->mPackages[strtolower( $package )]['dir']."/$subdir/$template";

//vd( $forceTemplate.' - '.$overrideTemplate.' - '.$overrideRootTemplate.' - '.$package_template );

	global $gNoForceStyle;
	if ( empty( $gNoForceStyle ) && file_exists( $forceTemplate ) ) {
		$tpl_source = fread( fopen($forceTemplate, "r"), filesize($forceTemplate) );
		$ret = true;
	} elseif ( file_exists( $overrideTemplate ) ) {
		$tpl_source = fread( fopen($overrideTemplate, "r"), filesize($overrideTemplate) );
		$ret = true;
	} elseif ( file_exists( $overrideTemplateSimple ) ) {
		$tpl_source = fread( fopen($overrideTemplateSimple, "r"), filesize($overrideTemplateSimple) );
		$ret = true;
	} elseif ( file_exists( $overrideRootTemplate ) ) {
		$tpl_source = filesize($overrideRootTemplate) ? fread( fopen($overrideRootTemplate, "r"), filesize($overrideRootTemplate) ) : '';
		$ret = true;
	} elseif ( file_exists( $package_template )) {
		$tpl_source = fread( fopen($package_template, "r"), filesize($package_template) );
		$ret = true;
	} else {
		$tpl_source = "<p>MISSING TEMPLATE:<br/> <b>p_resource_type:</b> $p_resource_type<br><b>p_resource_name:</b> $p_resource_name<br><b>p_template_source:</b> $p_template_source<br><b>p_template_timestamp:</b> $p_template_timestamp<br><b>p_smarty_obj:</b> $p_smarty_obj <br /><b>override_template:</b> $override_template<br/><b>package_template:</b>$package_template<br/><b>TIKI Package Path:</b>".BIT_PKG_PATH;
		$ret = true;
	}

	return $ret;
}

// the PHP sibling file needs to be included in modules_inc before this fetch so caching works properly
function smarty_resource_bitpackage_timestamp($tpl_name, &$tpl_timestamp, &$smarty)
{
	//$tpl_timestamp = time();
	//return true;
	global $gBitSystem;
	$ret = false;

//	list( $package, $template ) = split( '/', $tpl_name );

	$path = explode( '/', $tpl_name );
	$package = array_shift( $path );
	$subdir = '';
	$template = array_pop( $path );
	foreach( $path as $p ) {
		$subdir .= $p.'/';
	}
	$subdir .= preg_match( '/mod_/', $template ) ? 'modules' : 'templates';


	// look in themes/force/
	$forceTemplate = THEMES_PKG_PATH."/force/$template";
	// look in themes/style/<stylename>/<package>/templates/
	$overrideTemplate = $gBitSystem->getStylePath()."/$package/$subdir/$template";
	// look in themes/style/<stylename>/<package>/templates/
	$overrideTemplateSimple = $gBitSystem->getStylePath()."/$package/$template";
	// look in root of style themes/style/<stylename>/
	$overrideRootTemplate = $gBitSystem->getStylePath().$template;
	// look for default package template
	$package_template = BIT_PKG_PATH.$gBitSystem->mPackages[strtolower( $package )]['dir']."/$subdir/$template";
//print "<br/>Time ($package $template)(FORCE: $forceTemplate<br/>OVERRIDE: $overrideTemplate $overrideRootTemplate $package_template)<br/>";
	global $gNoForceStyle;
	if ( empty( $gNoForceStyle ) && file_exists( $forceTemplate ) ) {
		$tpl_timestamp = filemtime($forceTemplate);
		$ret = true;
	} elseif ( file_exists( $overrideTemplate ) ) {
		$tpl_timestamp = filemtime($overrideTemplate);
		$ret = true;
	} elseif ( file_exists( $overrideTemplateSimple ) ) {
		$tpl_timestamp = filemtime($overrideTemplateSimple);
		$ret = true;
	} elseif ( file_exists( $overrideRootTemplate ) ) {
		$tpl_timestamp = filemtime($overrideRootTemplate);
		$ret = true;
	} elseif ( file_exists( $package_template )) {
		$tpl_timestamp = filemtime($package_template);
		$ret = true;
	} else {
		$ret = false;
	}

	return $ret;
}

function smarty_resource_bitpackage_secure($tpl_name, &$smarty)
{
	// assume all templates are secure
	return true;
}

function smarty_resource_bitpackage_trusted($tpl_name, &$smarty)
{
	// not used for templates
}
?>