You are here

function PclZip::add 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::add()

File

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

Class

PclZip

Code

function add($p_filelist) {
  $v_result = 1;

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

  // ----- Set default values
  $v_options = array();
  $v_options[PCLZIP_OPT_NO_COMPRESSION] = FALSE;

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

  // ----- 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) {

      // ----- Parse the options
      $v_result = $this
        ->privParseOptions($v_arg_list, $v_size, $v_options, array(
        PCLZIP_OPT_REMOVE_PATH => 'optional',
        PCLZIP_OPT_REMOVE_ALL_PATH => 'optional',
        PCLZIP_OPT_ADD_PATH => 'optional',
        PCLZIP_CB_PRE_ADD => 'optional',
        PCLZIP_CB_POST_ADD => 'optional',
        PCLZIP_OPT_NO_COMPRESSION => 'optional',
        PCLZIP_OPT_COMMENT => 'optional',
        PCLZIP_OPT_ADD_COMMENT => 'optional',
        PCLZIP_OPT_PREPEND_COMMENT => 'optional',
        PCLZIP_OPT_TEMP_FILE_THRESHOLD => 'optional',
        PCLZIP_OPT_TEMP_FILE_ON => 'optional',
        PCLZIP_OPT_TEMP_FILE_OFF => 'optional',
      ));
      if ($v_result != 1) {
        return 0;
      }
    }
    else {

      // ----- Get the first argument
      $v_options[PCLZIP_OPT_ADD_PATH] = $v_add_path = $v_arg_list[0];

      // ----- Look for the optional second argument
      if ($v_size == 2) {
        $v_options[PCLZIP_OPT_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
          return 0;
        }
      }
    }
  }

  // ----- Look for default option values
  $this
    ->privOptionDefaultThreshold($v_options);

  // ----- Init
  $v_string_list = array();
  $v_att_list = array();
  $v_filedescr_list = array();
  $p_result_list = array();

  // ----- Look if the $p_filelist is really an array
  if (is_array($p_filelist)) {

    // ----- Look if the first element is also an array
    //       This will mean that this is a file description entry
    if (isset($p_filelist[0]) && is_array($p_filelist[0])) {
      $v_att_list = $p_filelist;
    }
    else {
      $v_string_list = $p_filelist;
    }
  }
  else {
    if (is_string($p_filelist)) {

      // ----- Create a list from the string
      $v_string_list = explode(PCLZIP_SEPARATOR, $p_filelist);
    }
    else {
      PclZip::privErrorLog(PCLZIP_ERR_INVALID_PARAMETER, "Invalid variable type '" . gettype($p_filelist) . "' for p_filelist");
      return 0;
    }
  }

  // ----- Reformat the string list
  if (sizeof($v_string_list) != 0) {
    foreach ($v_string_list as $v_string) {
      $v_att_list[][PCLZIP_ATT_FILE_NAME] = $v_string;
    }
  }

  // ----- For each file in the list check the attributes
  $v_supported_attributes = array(
    PCLZIP_ATT_FILE_NAME => 'mandatory',
    PCLZIP_ATT_FILE_NEW_SHORT_NAME => 'optional',
    PCLZIP_ATT_FILE_NEW_FULL_NAME => 'optional',
    PCLZIP_ATT_FILE_MTIME => 'optional',
    PCLZIP_ATT_FILE_CONTENT => 'optional',
    PCLZIP_ATT_FILE_COMMENT => 'optional',
  );
  foreach ($v_att_list as $v_entry) {
    $v_result = $this
      ->privFileDescrParseAtt($v_entry, $v_filedescr_list[], $v_options, $v_supported_attributes);
    if ($v_result != 1) {
      return 0;
    }
  }

  // ----- Expand the filelist (expand directories)
  $v_result = $this
    ->privFileDescrExpand($v_filedescr_list, $v_options);
  if ($v_result != 1) {
    return 0;
  }

  // ----- Call the create fct
  $v_result = $this
    ->privAdd($v_filedescr_list, $p_result_list, $v_options);
  if ($v_result != 1) {
    return 0;
  }

  // ----- Return
  return $p_result_list;
}