CGI-Portable
view release on metacpan or search on metacpan
should have a better idea what the features represent.
Note that all "user path/query/post/cookies" properties are parsed copies
of various "request" properties, which are the raw versions; both can be
stored to give you maximum flexability.
* The two demo modules named DemoStatic and DemoSegTextDoc have been merged
into a single module named DemoTextFile, at version 0.47. Any of your
scripts that used DemoStatic can use DemoTextFile with no changes besides
the name of the module called. Scripts that use DemoSegTextDoc will need
to, in addition to the rename, pass an extra preference of "is_text => 1"
in order to replicate the old behaviour. The new module is more flexible
than its predecessors by letting you have multi-part documents that are
either plain text or html (not plain text only). In addition, extra title
and creator and date information is only displayed if the preference "title"
has a value, so you can have multi-part documents without extra headers now.
Any demos have been updated where necessary to the new module name.
* No other files were changed, and are still at version 0.46.
2001-09-30 Darren Duncan <perl@DarrenDuncan.net>
* Release 0.46.
* IMPORTANT: Rewrote the take_context_output() methods in all
CGI::Portable::* modules that had them: Errors, Files, Request, Response,
suffixless. Be aware that the changed methods have a different default
behaviour than before, as well as that they take a different argument set.
You should check any of your code which calls this method, because it may
very well break if it used any arguments or depended on specific behaviour.
Specifically, the new arguments [CONTEXT, LEAVE_SCALARS, REPLACE_LISTS]
replace the old arguments [CONTEXT, APPEND_LISTS, SKIP_SCALARS]. The new
default behaviours regarding when CONTEXT properties overwrite SELF
properties have been changed so that they more closely match what one would
intuitively expect to happen. No longer will null properties overwrite
properties with values. Also, lists are now combined by default rather than
replaced, which works well when you have multiple "application components"
subcontracted to make different regions of the same screens; previously, the
last component would overwrite earlier ones by default. Scalar properties
in "taken" CONTEXTs still will overwrite ones in SELF by default, but this
time only if they aren't null. See the method's own POD for more.
* Added method page_search_and_replace() to CGI::Portable::Response, which
replaces the search_and_replace_page_body() method in CGI::Portable; the
latter was deleted. Correspondingly, the deprecated preference named
"page_replace" that was handled by CGI::Portable::AppStatic has been renamed
to "page_search_and_replace". The renamed preference works the same as
before, and should be permanent. Also, added property and method
page_prologue() to Response and a corresponding "low/high_page_prologue"
properties to AppStatic. The new method and properties have no effect
unless your HTML::EasyTags install is 1-06 or later.
* Added module CGI::Portable::AppMultiScreen, an "application component"
that lets you easily define a group of screens that are related, delegate
the construction of each screen to separate "components", and simplify the
creation of links between the screens. The module is subclassed from
AppStatic. This module has complete POD so you can get a good description
by reading that documentation. This module is meant as a non-proprietary
replacement for DemoMultiPage; the latter module was deleted. The
preferences handled by DemoMultiPage were renamed as follows: "vrp_handlers"
to "delegate_list", "def_handler" to "default_delegate", "wpm_module" to
"module_name", "wpm_prefs" to "preferences", "wpm_subdir" to "file_subdir".
The new module does not have any replacement for the older "menu_items" and
related preferences for generating html menus of hyperlinks between the
various screens, and it will not get any due to the proprietary nature of
such a task. If you used "menu_items" before then you will need to make the
hyperlinks yourself and attach them to the pages. It really isn't that
difficult; see the "website" demo for an example of how to do it now.
* Added module CGI::Portable::AppSplitScreen, an "application component"
that lets you easily divide a response screen into multiple regions and
then delegate the construction of each region to separate "components".
You define the regions within the standard "preferences", and no other
input is required. The module is subclassed from AppStatic. This module
has complete POD so you can get a good description by reading that
documentation. Before this module became available, you would have had to
do your own programming for such simple tasks as adding page headers or
footers that are stored in a different file of their own; now such
activities can be done with nothing more than ordinary config files.
* Updated CGI::Portable::AdapterCGI so that it will always read posted data
up to Content-length bytes. While it never got more than that before,
it had also refused to read content if there was more than 100K of it.
This change brings more behaviour partity with AdapterSocket.
* Small update to the search_and_replace_url_path_tokens() method of
CGI::Portable so that it didn't leave a trailing "?" on urls when there was
no query string.
* Various small updates were made to the demo modules to keep them up to
date with the main module changes, above, so they don't break.
* Various small updates were made so that the output of the modules is
better compliant with XHTML. All HTML now has lowercased tags, among other
things. However, it should continue to work with older web browsers.
2001-08-26 Darren Duncan <perl@DarrenDuncan.net>
* Release 0.45.
* In summary, this release adds a new module, CGI::Portable::AppStatic,
removes a now-redundant existing one, CGI::WPM::Base, adds some methods to
other modules (mostly Response), deletes a few methods (mostly Request),
renames a number of methods (about 10% of Request), and renames the main
demo modules (all CGI::WPM::* became Demo*). These changes were done to
further streamline the modules, and prepare for large feature additions in
subsequent releases. Some of your code may break due to the changes, but
a simple search-and-replace should be all that's necessary to fix it.
* All files had versions changed to 0.45 whether changes were made or not.
* Updated CGI::Portable::Request to delete the following 3 methods along
with their associated properties: url_path_is_in_path_info(),
url_path_is_in_query(), url_path_query_param_name(). There were related
simplifications made to the module set such that it is expected that the
"user path" or "url path" are always stored as the "path info"; the option
to store it as a "query string" argument instead has been removed.
You should not need to change your code to reflect the above change, as the
public interface of the url-making methods were not changed. However, you
probably want to reset your app if you used the query string store because
any web screens currently served would then have invalid hyperlinks in them.
Also, a new "frameset" demo was added to show how one could use a single
script to implement a frameset and all member frames. This demo has 4.
* To help implement the frameset feature, this distribution now requires
version 1.05 of HTML::EasyTags, which had frameset support added to it.
* Fixed a bug in CGI::WPM::WebUserIO where redirection headers didn't work
properly under mod_perl. In fact, this led to a complete rewrite of the
methods relating to sending output. The methods make_http_headers() and
send_user_output() were dropped entirely. These methods were added instead:
send_quick_html_response(), send_quick_redirect_response(). The method
send_user_output_from_cgi_portable() still exists and does everything it did
before. It also outputs miscellaneous http headers now, but it still doesn't
do anything with cookies yet. In the future this will be addressed.
Since the last method is the only one I actually used in my demos
or Synopsis, I figure that these changes are okay. I also added the method
server_is_mod_perl() which returns true if we're running under mod_perl.
* As a result of the above changes, HTTP::Headers is no longer used by any
of my modules, so the requirements are now simplified.
2001-05-04 Darren Duncan <perl@DarrenDuncan.net>
* Release 0.41.
* This release is the first one following successful registrations with
"The Perl 5 Module List". The updated entry would look like this:
CGI::
::Portable adpO Framework for server-agnostic web apps DUNCAND
* This is the first release of CGI::Portable, which has been renamed from
HTML::Application. There are several changes to the module itself.
This release also includes all of my CGI::WPM::* modules, which have not been
renamed, to serve as demonstrations of CGI::Portable in use. Their code has
been updated a bit. Similarly, this distribution has been renamed to
CGI-Portable from HTML-Application and duncand-prerelease.
* This distribution now has a "demos" folder containing 40 files and folders
which are ready-to-use example scripts and data files that exercise
CGI::Portable and all of the CGI::WPM::* modules. Many of these are exactly
the same as the *new* Synopsis POD for particular modules. Some have minor
adjustments or demonstrate the Synopsis examples that make use of the most
features of the particular modules. Many demos have extra files in them
that never appeared in Synopsis. It is my hope that these demos will
make it an order of magnitude easier for you to adopt my modules and put
them to work in a productive manner. The provided demos include: a multi-page
web site with usage tracking, guest books, mail and survey forms, static html
and plain text pages, segmented text file display, redirection, and a few
other strange modules that don't do anything useful but play with features.
* All of the CGI::WPM::* modules except CountFile had their POD updated,
most notably with their Synopsis section. The new Synopsis should each be
complete working programs now, although some of the other data files they
call on may not exist unless you make them.
* All modules in this distribution are at version 0.41 whether or not there
was any functionality change.
* Updated these methods of CGI::Portable to permit more descriptive error
messages: resolve_prefs_node_to_array(), resolve_prefs_node_to_hash().
Previously these methods always reported a nonexistant file or directory
(whatever is in $!) even if the file did exist but had a different problem.
The new versions will distinguish a successful runtime that returns something
other than a hash/array ref, and will distinguish an existing file that just
doesn't compile or has a runtime error.
* Updated methods add_virtual_filename_error(), add_physical_filename_error()
to support custom reason strings for file-related errors as an extra method
argument. Previously the "reason" was always the content of $!.
* Modified method call_component() so that it now makes error screens itself
upon error conditions that it discovers, including failure of the component
to compile or run, or previously unhandled errors, probably related to prefs.
As a result, the calling structure of this method is simplified; you simply
take_context_output() and/or send the output as you usually do, without
needing extra code to report error conditions. (You can still make a custom
error screen if you want.) The second argument to call_component() was also
removed, and the method will now always make an error screen and return if
there is an unresolved error message. Likewise to the simplified calling
code, the called component doesn't need code to make an error screen for
problems occuring prior to its invocation, and is thereby simplified.
* Added method search_and_replace_url_path_tokens() to CGI::Portable that
handles a special kind of search and replace that
search_and_replace_page_body() can't handle, since it deals with processing
and replacing text near the token being searched for rather than just the
token itself. This method makes it easier to embed dynamic self-referencing
urls inside static screen content files used by your app.
* Added seven new methods to CGI::Portable which handle a special set of
"global preferences", each of which gets its own accessor method, which can
be set once and used all over your program. They are:
default_application_title(), default_maintainer_name(),
default_maintainer_email_address(), default_maintainer_email_screen_url_path(),
default_smtp_host(), default_smtp_timeout(), maintainer_email_html().
The updated call_component() uses this information in its error screens, and
the various CGI::WPM::* modules use it in many places as well. During
release 0.4, this global info was passed using the miscellaneous objects
property, which was a rather user-unfriendly means in comparison; scripts
written to use release 0.4 will have to be updated accordingly.
* CGI::Portable received several updates to its pod besides the appropriate
method updates, most notably in the Name, Synopsis, Description,
Similar Modules, A Different Overview.
* Added a couple methods to CGI::WPM::SimpleUserIO which will considerably
reduce the size of your config shell if you use them: the method
give_user_input_to_cgi_portable() will take a CGI::Portable object and feed
it all the user input possible at once; the method
send_user_output_from_cgi_portable() will likewise take a CGI::Portable
object and send its output to the user all at once.
* CGI::WPM::Base has been reduced to half its size as all but these 3 methods
were removed: main(), main_dispatch(), _get_amendment_message(). The code
to check for pre-existing logged error conditions was also removed.
* Updated CGI::WPM::GuestBook in the following ways: 1. The private method
get_question_field_defs() had a lot of redundant code removed, reducing the
method to half its previous size; for one thing, it makes use of
CGI::Portable's resolve_prefs_node_to_array() method now instead of doing a
poorer job of it manually. 2. Added preference "sign_by_default" which
allows you to choose whether the signing or reading mode is the default
when one isn't specified. 3. Added self-referencing links in the signing
mode that takes one to the reading mode; the reverse had already existed; so
now the module has built-in links between all of its modes. 4. Added
preference "msg_list_show_email" which if true will display the email
addresses of book signers in the reading mode; the default of not showing
the emails is what always happened before, even though they were stored in
the message file. 5. Minor update to the screen showing a successful
message was just posted where the recipient's email is now shown.
6. Updated the functionality relating to the simplified Boulder data files
(used to be called SequentialFile by me) where nonexistant files are only
created if they are for storing messages; they are now not created when they
were supposed to hold field definitions, since this is an error.
* Updated CGI::WPM::MailForm in the same ways as #s 1, 5, 6 of GuestBook;
regarding #6, MailForm would only ever read from such files anyway.
* Updated CGI::WPM::Usage in the following ways: 1. Removed preference
'use_def_engines'; it no longer applies because there is no longer any list
of search engines built into the module. To attempt such a thing here is an
impossible task considering how many there are and people's varying opinions
on what should be grouped there. So now if you want search engine
differentiation in referrer listings then you can provide a complete list
yourself via the already existing 'search_engines' preference.
2. Removed preference 'site_urls' since it had existed to make a big deal of
something that is better automated and not worried about anyway. From now on,
a referring url is said to be self-referencing if its base portion matches
the return value of CGI::Portable's base_url() method. While a few self urls
will undoubtedly end up in the normal referrer list, the majority will be
caught, and the ones slipping through are easy to identify in the list.
3. As a result of these changes, CGI::WPM::Usage is now a tenth smaller.
2001-04-23 Darren Duncan <perl@DarrenDuncan.net>
* duncand-prerelease 0.4, the last version of any distribution, prior to
this one, to include the CGI::WPM::* modules, was released.
2001-04-23 Darren Duncan <perl@DarrenDuncan.net>
* Release 0.4.
* This is the second release of HTML::Application as a distinct module.
It follows more extensive usability testing which resulted in a few added
features and bug fixes. As a result of the new testing, this module is being
moved to beta status from alpha.
* Fixed SYNOPSIS POD in "Aardvark" module relating to the $inner context; some
methods are now called following make_new_context() instead of before.
* Fixed bug in private method _make_an_url(), which is used by
url_as_string() and recall_url(), where query parameters were not being
replicated when url_path_is_in_path_info() was true; now they are.
* Fixed design flaw in make_new_context() where it had been calling
initialize() to give default values to the new object before copying over the
non default ones; now initialize() is not called and all object properties
are either set or copied explicitely. The flaw being fixed relates to
unpleasantries when a subclass overrides the initialize() method.
( run in 1.159 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )