File.php
3.07 KB
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
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
<?PHP
/**
* patTemplate Reader that reads from a file
*
* $Id: File.php,v 1.12 2004/06/04 19:40:02 schst Exp $
*
* @package patTemplate
* @subpackage Readers
* @author Stephan Schmidt <schst@php.net>
*/
/**
* patTemplate Reader that reads from a file
*
* $Id: File.php,v 1.12 2004/06/04 19:40:02 schst Exp $
*
* @package patTemplate
* @subpackage Readers
* @author Stephan Schmidt <schst@php.net>
*/
class patTemplate_Reader_File extends patTemplate_Reader
{
/**
* reader name
* @access private
* @var string
*/
var $_name = 'File';
/**
* flag to indicate, that current file is remote
*
* @access private
* @var boolean
*/
var $_isRemote = false;
/**
* all files, that have been opened
*
* @access private
* @var array
*/
var $_files = array();
/**
* read templates from any input
*
* @final
* @access public
* @param string file to parse
* @return array templates
*/
function readTemplates( $input )
{
$this->_currentInput = $input;
$fullPath = $this->_resolveFullPath( $input );
if( patErrorManager::isError( $fullPath ) )
return $fullPath;
$content = $this->_getFileContents( $fullPath );
if( patErrorManager::isError( $content ) )
return $content;
$templates = $this->parseString( $content );
return $templates;
}
/**
* load template from any input
*
* If the a template is loaded, the content will not get
* analyzed but the whole content is returned as a string.
*
* @abstract must be implemented in the template readers
* @param mixed input to load from.
* This can be a string, a filename, a resource or whatever the derived class needs to read from
* @return string template content
*/
function loadTemplate( $input )
{
$fullPath = $this->_resolveFullPath( $input );
if( patErrorManager::isError( $fullPath ) )
return $fullPath;
return $this->_getFileContents( $fullPath );
}
/**
* resolve path for a template
*
* @access private
* @param string filename
* @return string full path
*/
function _resolveFullPath( $filename )
{
if( preg_match( '/^[a-z]+:\/\//', $filename ) )
{
$this->_isRemote = true;
return $filename;
}
/**
* local file
*/
else
{
$baseDir = $this->_options['root'];
$fullPath = $baseDir . '/' . $filename;
}
return $fullPath;
}
/**
* get the contents of a file
*
* @access private
* @param string filename
* @return string file contents
*/
function _getFileContents( $file )
{
if( !$this->_isRemote && ( !file_exists( $file ) || !is_readable( $file ) ) )
{
return patErrorManager::raiseError(
PATTEMPLATE_READER_ERROR_NO_INPUT,
"Could not load templates from $file."
);
}
if( function_exists( 'file_get_contents' ) )
$content = @file_get_contents( $file );
else
$content = implode( '', file( $file ) );
/**
* store the file name
*/
array_push( $this->_files, $file );
return $content;
}
}
?>