function _filetree_process in File Tree 7.2
Same name and namespace in other branches
- 6.2 filetree.module \_filetree_process()
- 6 filetree.module \_filetree_process()
- 7 filetree.module \_filetree_process()
Implements hook_filter_FILTER_process().
1 string reference to '_filetree_process'
- filetree_filter_info in ./
filetree.module - Implements hook_filter_info().
File
- ./
filetree.module, line 132
Code
function _filetree_process($text, $filter, $format, $langcode, $cache, $cache_id) {
// 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',
'fileformat' => '%link',
'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'] || !drupal_match_path($params[$key]['dir'], $filter->settings['folders']) || !($params[$key]['uri'] = file_build_uri($params[$key]['dir'])) || !file_prepare_directory($params[$key]['uri'])) {
continue;
}
// Flatten "exclude" array.
$params[$key]['exclude'] = implode("\n", $params[$key]['exclude']);
// Convert params containing token values.
foreach (array(
'dirname',
'dirtitle',
'filename',
'filetitle',
'fileformat',
) as $token_param) {
$params[$key][$token_param] = preg_replace('/%(\\w+)/', '[filetree:$1]', $params[$key][$token_param]);
}
// Render tree.
$files = _filetree_list_files($params[$key]['uri'], $params[$key]);
$rendered = theme('filetree', array(
'files' => $files,
'params' => $params[$key],
));
// Replace token with rendered tree.
$text = str_replace($matches[0][$key], $rendered, $text);
}
return $text;
}