function _filetree_process in File Tree 6.2
Same name and namespace in other branches
- 6 filetree.module \_filetree_process()
- 7.2 filetree.module \_filetree_process()
- 7 filetree.module \_filetree_process()
Process function for the filter.
1 call to _filetree_process()
- filetree_filter in ./
filetree.module - Implementation of hook_filter().
File
- ./
filetree.module, line 89
Code
function _filetree_process($text, $format) {
// Look for our special [filetree] token.
if (!preg_match_all('/(?:<p>)?\\[filetree\\s*(.*?)\\](?:<\\/p>)?/s', $text, $matches)) {
return $text;
}
// Setup our default parameters.
$default_params = array(
'dir' => NULL,
'multi' => TRUE,
'controls' => TRUE,
'absolute' => TRUE,
'exclude' => array(
'CVS',
),
'dirname' => '%filename',
'dirtitle' => '%filename',
'filename' => '%filename',
'filetitle' => '%filename',
'animation' => TRUE,
);
// The token might be present multiple times; loop through each instance.
foreach ($matches[1] as $key => $passed_params) {
// Load the defaults.
$params[$key] = $default_params;
// Parse the parameters (but only the valid ones).
preg_match_all('/(\\w*)=(?:\\"|")(.*?)(?:\\"|")/', $passed_params, $matches2[$key]);
foreach ($matches2[$key][1] as $param_key => $param_name) {
if (in_array($param_name, array_keys($default_params))) {
// If default param is a boolean, convert the passed param to boolean.
// Note: "false" (as a string) is considered TRUE by PHP, so there's a
// special check for it.
if (is_bool($default_params[$param_name])) {
$params[$key][$param_name] = $matches2[$key][2][$param_key] == "false" ? FALSE : (bool) $matches2[$key][2][$param_key];
}
else {
if ($param_name == 'exclude') {
$params[$key][$param_name] = array_filter(array_map('trim', explode(';', $matches2[$key][2][$param_key])));
}
else {
$params[$key][$param_name] = $matches2[$key][2][$param_key];
}
}
}
}
// Make sure that "dir" was provided,
if (!$params[$key]['dir'] or !($dir = file_create_path($params[$key]['dir'])) or !drupal_match_path($params[$key]['dir'], variable_get('filetree_folders_' . $format, '*'))) {
continue;
}
// Flatten "exclude" array.
$params[$key]['exclude'] = implode("\n", $params[$key]['exclude']);
// Convert params containing token values.
foreach (array(
'dirname',
'dirtitle',
'filename',
'filetitle',
) as $token_param) {
$params[$key][$token_param] = preg_replace('/%(\\w+)/', '[$1]', $params[$key][$token_param]);
}
// Render tree.
$files = _filetree_list_files($dir, $params[$key]);
$rendered = theme('filetree', $files, $params[$key]);
// Replace token with rendered tree.
$text = str_replace($matches[0][$key], $rendered, $text);
}
return $text;
}