You are here

public function Menu::parseURL in Forena Reports 8

Same name and namespace in other branches
  1. 7.5 src/Menu.php \Drupal\forena\Menu::parseURL()

Convert url into file paths based report name. Load all link data for the reprot. Most report urls look like a java lassname, so urls are of the form lang.subdir.anothersubdir.report.doctype. This function parses the url into it's components and store them in the menu object so that we can use this name.

Parameters

string $url: path style name

Return value

array Descriptioin of the url.

File

src/Menu.php, line 67
Menu.inc Drupal menu builder @author davidmetzler

Class

Menu

Namespace

Drupal\forena

Code

public function parseURL($url) {
  global $language;
  $name = $url;
  $tlang = '';

  // Determine if the report has an extention that is one of the docuemnt types
  $p = pathinfo($url);
  if (isset($p['extension']) && array_search($p['extension'], $this->doc_formats) !== FALSE) {
    $name = $p['dirname'] == '.' ? $p['filename'] : $p['dirname'] . '/' . $p['filename'];
    $format = $p['extension'];
  }
  else {
    $format = 'web';
    $ext = '';
  }

  // Convert class names to directory names.
  $base_name = str_replace('.', '/', $name);
  $name = $base_name;
  $i_name = $base_name;

  // Determine lanugage from url or drupal language interface.
  $lang = $language->language;
  if (\Drupal::moduleHandler()
    ->moduleExists('locale')) {

    //First check to see if the report allready has a language in it
    @(list($tlang, $tbase_name) = explode('/', $base_name, 2));

    // FInd out if the starting name of the report is an installed language.
    $lang_list = locale_translatable_language_list();
    if (array_key_exists($tlang, $lang_list)) {
      $base_name = $tbase_name;
      if ($lang != $tlang) {
        $lang = $tlang;
        $language = $lang_list[$lang];
        $i_name = $tlang . '/' . $base_name;
      }
      if ($tlang == 'en') {
        $name = $base_name = $tbase_name;
      }
    }
    else {
      if ($lang != 'en') {
        $def_language = language_default('language');
        if (FrxAPI::File()
          ->exists("{$lang}/{$name}.frx")) {
          $name = "{$lang}/{$name}";
        }
        elseif ($def_language != 'en' && FrxAPI::File()
          ->exists("{$def_language}/{$name}.frx")) {
          $name = "{$def_language}/{$name}";
          $lang = $def_language;
        }
      }
    }
  }

  //$name = trim(str_replace('.', '/', $base_name), '/');
  $filename = $name . '.frx';
  $desc['name'] = $this->name = $name;
  $desc['directory'] = FrxAPI::File()
    ->directory($filename);
  $desc['filename'] = $filename;
  $desc['base_name'] = $this->base_name = $base_name;
  $desc['exists'] = FrxAPI::File()
    ->exists($filename);
  $desc['link'] = $this->link = 'reports/' . str_replace('/', '.', $name);
  $desc['i_link'] = 'reports/' . ($this->i_link = str_replace('/', '.', $i_name));
  $desc['language'] = $this->language = $lang;
  $desc['format'] = $this->format = $format;
  return $desc;
}