You are here

function PclZip::privFileDescrExpand in Quiz 6.5

Same name and namespace in other branches
  1. 6.6 includes/moodle/lib/pclzip/pclzip.lib.php \PclZip::privFileDescrExpand()
2 calls to PclZip::privFileDescrExpand()
PclZip::add in includes/moodle/lib/pclzip/pclzip.lib.php
PclZip::create in includes/moodle/lib/pclzip/pclzip.lib.php

File

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

Class

PclZip

Code

function privFileDescrExpand(&$p_filedescr_list, &$p_options) {

  //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::privFileDescrExpand", "");
  $v_result = 1;

  // ----- Create a result list
  $v_result_list = array();

  // ----- Look each entry
  for ($i = 0; $i < sizeof($p_filedescr_list); $i++) {

    // ----- Get filedescr
    $v_descr = $p_filedescr_list[$i];

    // ----- Reduce the filename

    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr before reduction :'".$v_descr['filename']."'");

    //      $v_descr['filename'] = PclZipUtilTranslateWinPath($v_descr['filename']); //Moolde fix - see MDL-7828
    $v_descr['filename'] = PclZipUtilPathReduction($v_descr['filename']);

    //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Filedescr after reduction :'".$v_descr['filename']."'");

    // ----- Get type of descr
    if (!file_exists($v_descr['filename'])) {

      // ----- Error log

      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "File '".$v_descr['filename']."' does not exists");
      PclZip::privErrorLog(PCLZIP_ERR_MISSING_FILE, "File '" . $v_descr['filename'] . "' does not exists");

      // ----- Return

      //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
      return PclZip::errorCode();
    }
    if (@is_file($v_descr['filename'])) {

      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a file");
      $v_descr['type'] = 'file';
    }
    else {
      if (@is_dir($v_descr['filename'])) {

        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "This is a folder");
        $v_descr['type'] = 'folder';
      }
      else {
        if (@is_link($v_descr['filename'])) {

          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : link");

          // skip
          continue;
        }
        else {

          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Unsupported file type : unknown type");

          // skip
          continue;
        }
      }
    }

    // ----- Calculate the stored filename
    $this
      ->privCalculateStoredFilename($v_descr, $p_options);

    // ----- Add the descriptor in result list
    $v_result_list[sizeof($v_result_list)] = $v_descr;

    // ----- Look for folder
    if ($v_descr['type'] == 'folder') {

      // ----- List of items in folder
      $v_dirlist_descr = array();
      $v_dirlist_nb = 0;
      if ($v_folder_handler = @opendir($v_descr['filename'])) {
        while (($v_item_handler = @readdir($v_folder_handler)) !== false) {

          //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Looking for '".$v_item_handler."' in the directory");

          // ----- Skip '.' and '..'
          if ($v_item_handler == '.' || $v_item_handler == '..') {
            continue;
          }

          // ----- Compose the full filename
          $v_dirlist_descr[$v_dirlist_nb]['filename'] = $v_descr['filename'] . '/' . $v_item_handler;

          // ----- Look for different stored filename
          // Because the name of the folder was changed, the name of the
          // files/sub-folders also change
          if ($v_descr['stored_filename'] != $v_descr['filename']) {
            $v_dirlist_descr[$v_dirlist_nb]['new_full_name'] = $v_descr['stored_filename'] . '/' . $v_item_handler;
          }
          $v_dirlist_nb++;
        }
      }
      else {

        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Unable to open dir '".$v_descr['filename']."' in read mode. Skipped.");

        // TBC : unable to open folder in read mode
      }

      // ----- Expand each element of the list
      if ($v_dirlist_nb != 0) {

        // ----- Expand
        if (($v_result = $this
          ->privFileDescrExpand($v_dirlist_descr, $p_options)) != 1) {

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

        // ----- Concat the resulting list

        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Merging result list (size '".sizeof($v_result_list)."') with dirlist (size '".sizeof($v_dirlist_descr)."')");
        $v_result_list = array_merge($v_result_list, $v_dirlist_descr);

        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "merged result list is size '".sizeof($v_result_list)."'");
      }
      else {

        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "Nothing in this folder to expand.");
      }

      // ----- Free local array
      unset($v_dirlist_descr);
    }
  }

  // ----- Get the result list
  $p_filedescr_list = $v_result_list;

  // ----- Return

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