You are here

function PclZip::privCalculateStoredFilename in Quiz 6.6

Same name and namespace in other branches
  1. 6.5 includes/moodle/lib/pclzip/pclzip.lib.php \PclZip::privCalculateStoredFilename()
1 call to PclZip::privCalculateStoredFilename()
PclZip::privFileDescrExpand in includes/moodle/lib/pclzip/pclzip.lib.php

File

includes/moodle/lib/pclzip/pclzip.lib.php, line 2728

Class

PclZip

Code

function privCalculateStoredFilename(&$p_filedescr, &$p_options) {

  //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privCalculateStoredFilename", "filename='".$p_filedescr['filename']."'");
  $v_result = 1;

  // ----- Working variables
  $p_filename = $p_filedescr['filename'];
  if (isset($p_options[PCLZIP_OPT_ADD_PATH])) {
    $p_add_dir = $p_options[PCLZIP_OPT_ADD_PATH];
  }
  else {
    $p_add_dir = '';
  }
  if (isset($p_options[PCLZIP_OPT_REMOVE_PATH])) {
    $p_remove_dir = $p_options[PCLZIP_OPT_REMOVE_PATH];
  }
  else {
    $p_remove_dir = '';
  }
  if (isset($p_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
    $p_remove_all_dir = $p_options[PCLZIP_OPT_REMOVE_ALL_PATH];
  }
  else {
    $p_remove_all_dir = 0;
  }

  // ----- Look for full name change
  if (isset($p_filedescr['new_full_name'])) {
    $v_stored_filename = $p_filedescr['new_full_name'];

    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Changing full name of '".$p_filename."' for '".$v_stored_filename."'");
  }
  else {

    // ----- Look for short name change
    if (isset($p_filedescr['new_short_name'])) {
      $v_path_info = pathinfo($p_filename);
      $v_dir = '';
      if ($v_path_info['dirname'] != '') {
        $v_dir = $v_path_info['dirname'] . '/';
      }
      $v_stored_filename = $v_dir . $p_filedescr['new_short_name'];

      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Changing short name of '".$p_filename."' for '".$v_stored_filename."'");
    }
    else {

      // ----- Calculate the stored filename
      $v_stored_filename = $p_filename;
    }

    // ----- Look for all path to remove
    if ($p_remove_all_dir) {
      $v_stored_filename = basename($p_filename);

      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Remove all path selected change '".$p_filename."' for '".$v_stored_filename."'");
    }
    else {
      if ($p_remove_dir != "") {
        if (substr($p_remove_dir, -1) != '/') {
          $p_remove_dir .= "/";
        }
        if (substr($p_filename, 0, 2) == "./" || substr($p_remove_dir, 0, 2) == "./") {
          if (substr($p_filename, 0, 2) == "./" && substr($p_remove_dir, 0, 2) != "./") {
            $p_remove_dir = "./" . $p_remove_dir;
          }
          if (substr($p_filename, 0, 2) != "./" && substr($p_remove_dir, 0, 2) == "./") {
            $p_remove_dir = substr($p_remove_dir, 2);
          }
        }
        $v_compare = PclZipUtilPathInclusion($p_remove_dir, $v_stored_filename);
        if ($v_compare > 0) {
          if ($v_compare == 2) {
            $v_stored_filename = "";

            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Path to remove is the current folder");
          }
          else {

            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Remove path '$p_remove_dir' in file '$v_stored_filename'");
            $v_stored_filename = substr($v_stored_filename, strlen($p_remove_dir));

            //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Result is '$v_stored_filename'");
          }
        }
      }
    }

    // ----- Look for path to add
    if ($p_add_dir != "") {
      if (substr($p_add_dir, -1) == "/") {
        $v_stored_filename = $p_add_dir . $v_stored_filename;
      }
      else {
        $v_stored_filename = $p_add_dir . "/" . $v_stored_filename;
      }

      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Add path '$p_add_dir' in file '$p_filename' = '$v_stored_filename'");
    }
  }

  // ----- Filename (reduce the path of stored name)
  $v_stored_filename = PclZipUtilPathReduction($v_stored_filename);
  $p_filedescr['stored_filename'] = $v_stored_filename;

  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Stored filename will be '".$p_filedescr['stored_filename']."', strlen ".strlen($p_filedescr['stored_filename']));

  // ----- Return

  //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, $v_result);
  return $v_result;
}