WordPress как на ладони
Недорогой хостинг для сайтов на WordPress: wordpress.jino.ru
функция не описана

PclZip::privParseOptions() public WP 1.0

Function : privParseOptions() Description : This internal methods reads the variable list of arguments ($p_options_list, $p_size) and generate an array with the options and values ($v_result_list). $v_requested_options contains the options that can be present and those that must be present. $v_requested_options is an array, with the option value as key, and 'optional', or 'mandatory' as value. Parameters : See above. Return Values :
1 on success.
0 on failure.

Это метод класса: PclZip{}

Хуков нет.

Возвращает

Null. Ничего.

Использование

$PclZip = new PclZip();
$PclZip->privParseOptions( $p_options_list, $p_size, $v_result_list, $v_requested_options );

Код PclZip::privParseOptions() WP 5.5.1

wp-admin/includes/class-pclzip.php
<?php
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 written ...
                // ----- 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;
}