You are here

function _filetree_process in File Tree 6

Same name and namespace in other branches
  1. 6.2 filetree.module \_filetree_process()
  2. 7.2 filetree.module \_filetree_process()
  3. 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',
  );

  // 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*)=(?:\\"|&quot;)(.*?)(?:\\"|&quot;)/', $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;
}