You are here

function PclZip::extractByIndex in Quiz 6.5

Same name and namespace in other branches
  1. 6.6 includes/moodle/lib/pclzip/pclzip.lib.php \PclZip::extractByIndex()

File

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

Class

PclZip

Code

function extractByIndex($p_index) {

  //--(MAGIC-PclTrace)--//PclTraceFctStart(__FILE__, __LINE__, "PclZip::extractByIndex", "index='$p_index', ...");
  $v_result = 1;

  // ----- Reset the error handler
  $this
    ->privErrorReset();

  // ----- Check archive
  if (!$this
    ->privCheckFormat()) {

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

  // ----- Set default values
  $v_options = array();

  //    $v_path = "./";
  $v_path = '';
  $v_remove_path = "";
  $v_remove_all_path = false;

  // ----- Look for variable options arguments
  $v_size = func_num_args();

  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "$v_size arguments passed to the method");

  // ----- Default values for option
  $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;

  // ----- Look for arguments
  if ($v_size > 1) {

    // ----- Get the arguments
    $v_arg_list = func_get_args();

    // ----- Remove form the options list the first argument
    array_shift($v_arg_list);
    $v_size--;

    // ----- Look for first arg
    if (is_integer($v_arg_list[0]) && $v_arg_list[0] > 77000) {

      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Variable list of options");

      // ----- Parse the options
      $v_result = $this
        ->privParseOptions($v_arg_list, $v_size, $v_options, array(
        PCLZIP_OPT_PATH => 'optional',
        PCLZIP_OPT_REMOVE_PATH => 'optional',
        PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
        PCLZIP_OPT_EXTRACT_AS_STRING => 'optional',
        PCLZIP_OPT_ADD_PATH => 'optional',
        PCLZIP_CB_PRE_EXTRACT => 'optional',
        PCLZIP_CB_POST_EXTRACT => 'optional',
        PCLZIP_OPT_SET_CHMOD => 'optional',
        PCLZIP_OPT_REPLACE_NEWER => 'optional',
        PCLZIP_OPT_STOP_ON_ERROR => 'optional',
        PCLZIP_OPT_EXTRACT_DIR_RESTRICTION => 'optional',
      ));
      if ($v_result != 1) {

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

      // ----- Set the arguments
      if (isset($v_options[PCLZIP_OPT_PATH])) {
        $v_path = $v_options[PCLZIP_OPT_PATH];
      }
      if (isset($v_options[PCLZIP_OPT_REMOVE_PATH])) {
        $v_remove_path = $v_options[PCLZIP_OPT_REMOVE_PATH];
      }
      if (isset($v_options[PCLZIP_OPT_REMOVE_ALL_PATH])) {
        $v_remove_all_path = $v_options[PCLZIP_OPT_REMOVE_ALL_PATH];
      }
      if (isset($v_options[PCLZIP_OPT_ADD_PATH])) {

        // ----- Check for '/' in last path char
        if (strlen($v_path) > 0 && substr($v_path, -1) != '/') {
          $v_path .= '/';
        }
        $v_path .= $v_options[PCLZIP_OPT_ADD_PATH];
      }
      if (!isset($v_options[PCLZIP_OPT_EXTRACT_AS_STRING])) {
        $v_options[PCLZIP_OPT_EXTRACT_AS_STRING] = FALSE;

        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING not set.");
      }
      else {

        //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 4, "Option PCLZIP_OPT_EXTRACT_AS_STRING set.");
      }
    }
    else {

      //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 3, "Static synopsis");

      // ----- Get the first argument
      $v_path = $v_arg_list[0];

      // ----- Look for the optional second argument
      if ($v_size == 2) {
        $v_remove_path = $v_arg_list[1];
      }
      else {
        if ($v_size > 2) {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid number / type of arguments");

          // ----- Return

          //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, PclZip::errorCode(), PclZip::errorInfo());
          return 0;
        }
      }
    }
  }

  // ----- Trace

  //--(MAGIC-PclTrace)--//PclTraceFctMessage(__FILE__, __LINE__, 2, "index='$p_index', path='$v_path', remove_path='$v_remove_path', remove_all_path='".($v_remove_path?'true':'false')."'");

  // ----- Trick
  // Here I want to reuse extractByRule(), so I need to parse the $p_index
  // with privParseOptions()
  $v_arg_trick = array(
    PCLZIP_OPT_BY_INDEX,
    $p_index,
  );
  $v_options_trick = array();
  $v_result = $this
    ->privParseOptions($v_arg_trick, sizeof($v_arg_trick), $v_options_trick, array(
    PCLZIP_OPT_BY_INDEX => 'optional',
  ));
  if ($v_result != 1) {

    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0);
    return 0;
  }
  $v_options[PCLZIP_OPT_BY_INDEX] = $v_options_trick[PCLZIP_OPT_BY_INDEX];

  // ----- Call the extracting fct
  if (($v_result = $this
    ->privExtractByRule($p_list, $v_path, $v_remove_path, $v_remove_all_path, $v_options)) < 1) {

    //--(MAGIC-PclTrace)--//PclTraceFctEnd(__FILE__, __LINE__, 0, PclZip::errorInfo());
    return 0;
  }

  // ----- Return

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