Version 0.74-0 * Added Rbigpost.cgi which handles POST submissions by redirecting the input to the .cgi script directly to the R session so that it can be read there. This avoids exceeding shell limits for large data submissions * The package reads the submission from standard input if it is not provided by the FORM_DATA environment variable, or any WWW_ variables. This is how Rbigpost.cgi hands the submission to R. There is no change for the script writer to deal with - the formData variable is merely constructed automatically in a different way. Version 0.73-0 * Identify the contents of file uploads with a class "FileUploadContent" * Don't collapse duplicate parameter values that correspond to file uploads in MultiPartFormData objects. * $ operator for MultiPartFormData extended to handle the case of multiple elements for the same parameter, specifically file uploads. * Added parameters to some functions to allow caller to specify content of the submitted form that is usually provide via environment variables or standard in. This facilitates debugging. Version 0.72-2 * Deal with repeated parameters. **************************** * Handle multipart/form-data which is used in POST forms when the contents of files are uploaded in the query. This uses the parser for this type of data and also a fix/change to the R.cgi script so that the input on stdin is collected into FORM_DATA. Note: This version doesn't handle the different encodings of the the contents yet. * R.cgi treats the POST method by taking the input from standard input rather than the first command line argument ($1). This handles both regular and multipart form POSTs. * Allow graphDir and graphURLroot to be specified as arguments to webPNG() and img() respectively to override or avoid the corresponding global variables. * Examples for simulations/bootstraps for the different types of form submission methods. * Using a NAMESPACE file. * Will use GDD rather than ghostview (gs) if that package is available. * Added functionality in cgi.R to allow the developer of the script more control over the output. The only issue here is whether the R script should be able emit the Content-type line that is currently emitted by the R.cgi script. If the output from the script starts with the string "Content-type: ", then R.cgi does not emit its version. This allows the user, for example, to return a data set as regular text by writing Content-type: text/plain and then the regular output. We could also use a hidden field in the form with a particular pattern to determine whether to output the headers. * HTMLheader() takes a title and css argument to add references to Cascading Style Sheets and insert a TITLE element. It also outputs the .. tags. The endHTML() closes the BODY and HTML elements. * The img() function now returns the location of the file created by combining graphURLroot with the name of the file. * Some simple functions for add information about the request to the output of the script. Incompatible changes: ____________________ Combine duplicate parameters in the query into a single character vector, e.g. x=1&x=2&y=3 yields list(x=c("1", "2"), y = "3"), rather than requiring the unclass(formData)[names(formData) == "x"]. So the resulting formData() list can now have elements that are not simple scalar strings. If you need (or want) the previous behavior, use the command R CMD INSTALL --configure-args='--enable-old-style-formdata' CGIwithR i.e. with the --enable-old-style-formdata flag for the configure script. Other suggestions: Have functions return the data they construct, e.g. img() return the value of the src field rather than the less useful "image" string. Perhaps also see the XML generation facilities in the XML package.