You are here

function PclZip::privParseOptions in Loft Data Grids 7.2

Same name and namespace in other branches
  1. 6.2 vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php \PclZip::privParseOptions()
5 calls to PclZip::privParseOptions()
PclZip::add in vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php
PclZip::create in vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php
PclZip::delete in vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php
PclZip::extract in vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php
PclZip::extractByIndex in vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php

File

vendor/phpoffice/phpexcel/Classes/PHPExcel/Shared/PCLZip/pclzip.lib.php, line 1426

Class

PclZip

Code

function privParseOptions(&$p_options_list, $p_size, &$v_result_list, $v_requested_options = false) {
  $v_result = 1;

  // ----- Read the options
  $i = 0;
  while ($i < $p_size) {

    // ----- Check if the option is supported
    if (!isset($v_requested_options[$p_options_list[$i]])) {

      // ----- Error log
      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid optional parameter '" . $p_options_list[$i] . "' for this method");

      // ----- Return
      return PclZip::errorCode();
    }

    // ----- Look for next option
    switch ($p_options_list[$i]) {

      // ----- Look for options that request a path value
      case PCLZIP_OPT_PATH:
      case PCLZIP_OPT_REMOVE_PATH:
      case PCLZIP_OPT_ADD_PATH:

        // ----- Check the number of parameters
        if ($i + 1 >= $p_size) {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

          // ----- Return
          return PclZip::errorCode();
        }

        // ----- Get the value
        $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i + 1], FALSE);
        $i++;
        break;
      case PCLZIP_OPT_TEMP_FILE_THRESHOLD:

        // ----- Check the number of parameters
        if ($i + 1 >= $p_size) {
          PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");
          return PclZip::errorCode();
        }

        // ----- Check for incompatible options
        if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '" . PclZipUtilOptionText($p_options_list[$i]) . "' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
          return PclZip::errorCode();
        }

        // ----- Check the value
        $v_value = $p_options_list[$i + 1];
        if (!is_integer($v_value) || $v_value < 0) {
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Integer expected for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");
          return PclZip::errorCode();
        }

        // ----- Get the value (and convert it in bytes)
        $v_result_list[$p_options_list[$i]] = $v_value * 1048576;
        $i++;
        break;
      case PCLZIP_OPT_TEMP_FILE_ON:

        // ----- Check for incompatible options
        if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_OFF])) {
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '" . PclZipUtilOptionText($p_options_list[$i]) . "' can not be used with option 'PCLZIP_OPT_TEMP_FILE_OFF'");
          return PclZip::errorCode();
        }
        $v_result_list[$p_options_list[$i]] = true;
        break;
      case PCLZIP_OPT_TEMP_FILE_OFF:

        // ----- Check for incompatible options
        if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_ON])) {
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '" . PclZipUtilOptionText($p_options_list[$i]) . "' can not be used with option 'PCLZIP_OPT_TEMP_FILE_ON'");
          return PclZip::errorCode();
        }

        // ----- Check for incompatible options
        if (isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Option '" . PclZipUtilOptionText($p_options_list[$i]) . "' can not be used with option 'PCLZIP_OPT_TEMP_FILE_THRESHOLD'");
          return PclZip::errorCode();
        }
        $v_result_list[$p_options_list[$i]] = true;
        break;
      case PCLZIP_OPT_EXTRACT_DIR_RESTRICTION:

        // ----- Check the number of parameters
        if ($i + 1 >= $p_size) {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

          // ----- Return
          return PclZip::errorCode();
        }

        // ----- Get the value
        if (is_string($p_options_list[$i + 1]) && $p_options_list[$i + 1] != '') {
          $v_result_list[$p_options_list[$i]] = PclZipUtilTranslateWinPath($p_options_list[$i + 1], FALSE);
          $i++;
        }
        else {
        }
        break;

      // ----- Look for options that request an array of string for value
      case PCLZIP_OPT_BY_NAME:

        // ----- Check the number of parameters
        if ($i + 1 >= $p_size) {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

          // ----- Return
          return PclZip::errorCode();
        }

        // ----- Get the value
        if (is_string($p_options_list[$i + 1])) {
          $v_result_list[$p_options_list[$i]][0] = $p_options_list[$i + 1];
        }
        else {
          if (is_array($p_options_list[$i + 1])) {
            $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1];
          }
          else {

            // ----- Error log
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

            // ----- Return
            return PclZip::errorCode();
          }
        }
        $i++;
        break;

      // ----- Look for options that request an EREG or PREG expression
      case PCLZIP_OPT_BY_EREG:

        // ereg() is deprecated starting with PHP 5.3. Move PCLZIP_OPT_BY_EREG
        // to PCLZIP_OPT_BY_PREG
        $p_options_list[$i] = PCLZIP_OPT_BY_PREG;
      case PCLZIP_OPT_BY_PREG:

        //case PCLZIP_OPT_CRYPT :

        // ----- Check the number of parameters
        if ($i + 1 >= $p_size) {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

          // ----- Return
          return PclZip::errorCode();
        }

        // ----- Get the value
        if (is_string($p_options_list[$i + 1])) {
          $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1];
        }
        else {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

          // ----- Return
          return PclZip::errorCode();
        }
        $i++;
        break;

      // ----- Look for options that takes a string
      case PCLZIP_OPT_COMMENT:
      case PCLZIP_OPT_ADD_COMMENT:
      case PCLZIP_OPT_PREPEND_COMMENT:

        // ----- Check the number of parameters
        if ($i + 1 >= $p_size) {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

          // ----- Return
          return PclZip::errorCode();
        }

        // ----- Get the value
        if (is_string($p_options_list[$i + 1])) {
          $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1];
        }
        else {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Wrong parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

          // ----- Return
          return PclZip::errorCode();
        }
        $i++;
        break;

      // ----- Look for options that request an array of index
      case PCLZIP_OPT_BY_INDEX:

        // ----- Check the number of parameters
        if ($i + 1 >= $p_size) {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

          // ----- Return
          return PclZip::errorCode();
        }

        // ----- Get the value
        $v_work_list = array();
        if (is_string($p_options_list[$i + 1])) {

          // ----- Remove spaces
          $p_options_list[$i + 1] = strtr($p_options_list[$i + 1], ' ', '');

          // ----- Parse items
          $v_work_list = explode(",", $p_options_list[$i + 1]);
        }
        else {
          if (is_integer($p_options_list[$i + 1])) {
            $v_work_list[0] = $p_options_list[$i + 1] . '-' . $p_options_list[$i + 1];
          }
          else {
            if (is_array($p_options_list[$i + 1])) {
              $v_work_list = $p_options_list[$i + 1];
            }
            else {

              // ----- Error log
              PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Value must be integer, string or array for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

              // ----- Return
              return PclZip::errorCode();
            }
          }
        }

        // ----- Reduce the index list
        // each index item in the list must be a couple with a start and
        // an end value : [0,3], [5-5], [8-10], ...
        // ----- Check the format of each item
        $v_sort_flag = false;
        $v_sort_value = 0;
        for ($j = 0; $j < sizeof($v_work_list); $j++) {

          // ----- Explode the item
          $v_item_list = explode("-", $v_work_list[$j]);
          $v_size_item_list = sizeof($v_item_list);

          // ----- TBC : Here we might check that each item is a
          // real integer ...
          // ----- Look for single value
          if ($v_size_item_list == 1) {

            // ----- Set the option value
            $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
            $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[0];
          }
          elseif ($v_size_item_list == 2) {

            // ----- Set the option value
            $v_result_list[$p_options_list[$i]][$j]['start'] = $v_item_list[0];
            $v_result_list[$p_options_list[$i]][$j]['end'] = $v_item_list[1];
          }
          else {

            // ----- Error log
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Too many values in index range for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

            // ----- Return
            return PclZip::errorCode();
          }

          // ----- Look for list sort
          if ($v_result_list[$p_options_list[$i]][$j]['start'] < $v_sort_value) {
            $v_sort_flag = true;

            // ----- TBC : An automatic sort should be writen ...
            // ----- Error log
            PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Invalid order of index range for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

            // ----- Return
            return PclZip::errorCode();
          }
          $v_sort_value = $v_result_list[$p_options_list[$i]][$j]['start'];
        }

        // ----- Sort the items
        if ($v_sort_flag) {

          // TBC : To Be Completed
        }

        // ----- Next option
        $i++;
        break;

      // ----- Look for options that request no value
      case PCLZIP_OPT_REMOVE_ALL_PATH:
      case PCLZIP_OPT_EXTRACT_AS_STRING:
      case PCLZIP_OPT_NO_COMPRESSION:
      case PCLZIP_OPT_EXTRACT_IN_OUTPUT:
      case PCLZIP_OPT_REPLACE_NEWER:
      case PCLZIP_OPT_STOP_ON_ERROR:
        $v_result_list[$p_options_list[$i]] = true;
        break;

      // ----- Look for options that request an octal value
      case PCLZIP_OPT_SET_CHMOD:

        // ----- Check the number of parameters
        if ($i + 1 >= $p_size) {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

          // ----- Return
          return PclZip::errorCode();
        }

        // ----- Get the value
        $v_result_list[$p_options_list[$i]] = $p_options_list[$i + 1];
        $i++;
        break;

      // ----- Look for options that request a call-back
      case PCLZIP_CB_PRE_EXTRACT:
      case PCLZIP_CB_POST_EXTRACT:
      case PCLZIP_CB_PRE_ADD:
      case PCLZIP_CB_POST_ADD:

        /* for futur use
           case PCLZIP_CB_PRE_DELETE :
           case PCLZIP_CB_POST_DELETE :
           case PCLZIP_CB_PRE_LIST :
           case PCLZIP_CB_POST_LIST :
           */

        // ----- Check the number of parameters
        if ($i + 1 >= $p_size) {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_MISSING_OPTION_VALUE, "Missing parameter value for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

          // ----- Return
          return PclZip::errorCode();
        }

        // ----- Get the value
        $v_function_name = $p_options_list[$i + 1];

        // ----- Check that the value is a valid existing function
        if (!function_exists($v_function_name)) {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_OPTION_VALUE, "Function '" . $v_function_name . "()' is not an existing function for option '" . PclZipUtilOptionText($p_options_list[$i]) . "'");

          // ----- Return
          return PclZip::errorCode();
        }

        // ----- Set the attribute
        $v_result_list[$p_options_list[$i]] = $v_function_name;
        $i++;
        break;
      default:

        // ----- Error log
        PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Unknown parameter '" . $p_options_list[$i] . "'");

        // ----- Return
        return PclZip::errorCode();
    }

    // ----- Next options
    $i++;
  }

  // ----- Look for mandatory options
  if ($v_requested_options !== false) {
    for ($key = reset($v_requested_options); $key = key($v_requested_options); $key = next($v_requested_options)) {

      // ----- Look for mandatory option
      if ($v_requested_options[$key] == 'mandatory') {

        // ----- Look if present
        if (!isset($v_result_list[$key])) {

          // ----- Error log
          PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Missing mandatory parameter " . PclZipUtilOptionText($key) . "(" . $key . ")");

          // ----- Return
          return PclZip::errorCode();
        }
      }
    }
  }

  // ----- Look for default values
  if (!isset($v_result_list[PCLZIP_OPT_TEMP_FILE_THRESHOLD])) {
  }

  // ----- Return
  return $v_result;
}