# httpform.h

Go to the documentation of this file.

    00001 /*
    00002  * httpform.h
    00003  *
    00004  * Forms management using HTTP User Interface.
    00005  *
    00006  * Portable Windows Library
    00007  *
    00008  * Copyright (c) 1993-2002 Equivalence Pty. Ltd.
    00009  *
    00010  * The contents of this file are subject to the Mozilla Public License
    00011  * Version 1.0 (the "License"); you may not use this file except in
    00012  * compliance with the License. You may obtain a copy of the License at
    00013  * http://www.mozilla.org/MPL/
    00014  *
    00015  * Software distributed under the License is distributed on an "AS IS"
    00016  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
    00017  * the License for the specific language governing rights and limitations
    00018  * under the License.
    00019  *
    00020  * The Original Code is Portable Windows Library.
    00021  *
    00022  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
    00023  *
    00024  * Contributor(s): ______________________________________.
    00025  *
    00026  * $Revision: 24177 $
    00027  * $Author: rjongbloed $
    00028  * $Date: 2010-04-05 06:52:04 -0500 (Mon, 05 Apr 2010) $
    00029  */
    00030
    00031 #ifndef PTLIB_HTTPFORM_H
    00032 #define PTLIB_HTTPFORM_H
    00033
    00034 #ifdef P_USE_PRAGMA
    00035 #pragma interface
    00036 #endif
    00037
    00038 #if P_HTTPFORMS
    00039
    00040 #include <ptclib/http.h>
    00041 #include <ptclib/html.h>
    00042
    00043
    00045 // PHTTPField
    00046
    00050 class PHTTPField : public PObject
    00051 {
    00052   PCLASSINFO(PHTTPField, PObject)
    00053   public:
    00054     PHTTPField(
    00055       const char * bname,  // base name (identifier) for the field.
    00056       const char * title,  // Title text for field (defaults to name).
    00057       const char * help    // Help text for the field.
    00058     );
    00059     // Create a new field in a HTTP form.
    00060
    00066     virtual Comparison Compare(
    00067       const PObject & obj
    00068     ) const;
    00069
    00075     const PCaselessString & GetName() const { return fullName; }
    00076
    00082     const PCaselessString & GetBaseName() const { return baseName; }
    00083
    00086     virtual void SetName(
    00087       const PString & newName   // New name for field
    00088     );
    00089
    00095     virtual const PHTTPField * LocateName(
    00096       const PString & name    // Full field name to locate
    00097     ) const;
    00098
    00104     const PString & GetTitle() const { return title; }
    00105
    00111     const PString & GetHelp() const { return help; }
    00112
    00113     void SetHelp(
    00114       const PString & text        // Help text.
    00115     ) { help = text; }
    00116     void SetHelp(
    00117       const PString & hotLinkURL, // URL for link to help page.
    00118       const PString & linkText    // Help text in the link.
    00119     );
    00120     void SetHelp(
    00121       const PString & hotLinkURL, // URL for link to help page.
    00122       const PString & imageURL,   // URL for image to be displayed in link.
    00123       const PString & imageText   // Text in the link when image unavailable.
    00124     );
    00125     // Set the help text for the field.
    00126
    00132     virtual PHTTPField * NewField() const = 0;
    00133
    00134     virtual void ExpandFieldNames(PString & text, PINDEX start, PINDEX & finish) const;
    00135     // Splice expanded macro substitutions into text string
    00136
    00139     virtual void GetHTMLTag(
    00140       PHTML & html    // HTML to receive the fields HTML tag.
    00141     ) const = 0;
    00142
    00145     virtual PString GetHTMLInput(
    00146       const PString & input // Source HTML text for input tag.
    00147     ) const;
    00148
    00151     virtual PString GetHTMLSelect(
    00152       const PString & selection // Source HTML text for input tag.
    00153     ) const;
    00154
    00157     virtual void GetHTMLHeading(
    00158       PHTML & html    // HTML to receive the field info.
    00159     ) const;
    00160
    00166     virtual PString GetValue(PBoolean dflt = false) const = 0;
    00167
    00170     virtual void SetValue(
    00171       const PString & newValue   // New value for the field.
    00172     ) = 0;
    00173
    00177     virtual void LoadFromConfig(
    00178       PConfig & cfg   // Configuration for value transfer.
    00179     );
    00180
    00184     virtual void SaveToConfig(
    00185       PConfig & cfg   // Configuration for value transfer.
    00186     ) const;
    00187
    00193     virtual PBoolean Validated(
    00194       const PString & newVal, // Proposed new value for the field.
    00195       PStringStream & msg     // Stream to take error HTML if value not valid.
    00196     ) const;
    00197
    00198
    00204     virtual void GetAllNames(PStringArray & names) const;
    00205
    00208     virtual void SetAllValues(
    00209       const PStringToString & data   // New value for the field.
    00210     );
    00211
    00217     virtual PBoolean ValidateAll(
    00218       const PStringToString & data, // Proposed new value for the field.
    00219       PStringStream & msg     // Stream to take error HTML if value not valid.
    00220     ) const;
    00221
    00222
    00223     PBoolean NotYetInHTML() const { return notInHTML; }
    00224     void SetInHTML() { notInHTML = false; }
    00225
    00226   protected:
    00227     PCaselessString baseName;
    00228     PCaselessString fullName;
    00229     PString title;
    00230     PString help;
    00231     PBoolean notInHTML;
    00232 };
    00233
    00234
    00235 PARRAY(PHTTPFields, PHTTPField);
    00236
    00237 class PHTTPCompositeField : public PHTTPField
    00238 {
    00239   PCLASSINFO(PHTTPCompositeField, PHTTPField)
    00240   public:
    00241     PHTTPCompositeField(
    00242       const char * name,          // Name (identifier) for the field.
    00243       const char * title = NULL,  // Title text for field (defaults to name).
    00244       const char * help = NULL,   // Help text for the field.
    00245       bool includeHeaders = false // Make a sub-table and put headers on HTML fields.
    00246     );
    00247
    00248     virtual void SetName(
    00249       const PString & name   // New name for field
    00250     );
    00251
    00252     virtual const PHTTPField * LocateName(
    00253       const PString & name    // Full field name to locate
    00254     ) const;
    00255
    00256     virtual PHTTPField * NewField() const;
    00257
    00258     virtual void ExpandFieldNames(PString & text, PINDEX start, PINDEX & finish) const;
    00259
    00260     virtual void GetHTMLTag(
    00261       PHTML & html    // HTML to receive the field info.
    00262     ) const;
    00263
    00264     virtual PString GetHTMLInput(
    00265       const PString & input // Source HTML text for input tag.
    00266     ) const;
    00267
    00268     virtual void GetHTMLHeading(
    00269       PHTML & html    // HTML to receive the field info.
    00270     ) const;
    00271
    00272     virtual PString GetValue(PBoolean dflt = false) const;
    00273
    00274     virtual void SetValue(
    00275       const PString & newValue   // New value for the field.
    00276     );
    00277
    00278     virtual void LoadFromConfig(
    00279       PConfig & cfg   // Configuration for value transfer.
    00280     );
    00281     virtual void SaveToConfig(
    00282       PConfig & cfg   // Configuration for value transfer.
    00283     ) const;
    00284
    00285     virtual void GetAllNames(PStringArray & names) const;
    00286     virtual void SetAllValues(
    00287       const PStringToString & data   // New value for the field.
    00288     );
    00289
    00290     virtual PBoolean ValidateAll(
    00291       const PStringToString & data, // Proposed new value for the field.
    00292       PStringStream & msg     // Stream to take error HTML if value not valid.
    00293     ) const;
    00294
    00295
    00303     virtual PINDEX GetSize() const;
    00304
    00305     void Append(PHTTPField * fld);
    00306     PHTTPField & operator[](PINDEX idx) const { return fields[idx]; }
    00307     void RemoveAt(PINDEX idx) { fields.RemoveAt(idx); }
    00308     void RemoveAll() { fields.RemoveAll(); }
    00309
    00310   protected:
    00311     PHTTPFields fields;
    00312     bool        m_includeHeaders;
    00313 };
    00314
    00315
    00316 class PHTTPSubForm : public PHTTPCompositeField
    00317 {
    00318   PCLASSINFO(PHTTPSubForm, PHTTPCompositeField)
    00319   public:
    00320     PHTTPSubForm(
    00321       const PString & subFormName, // URL for the sub-form
    00322       const char * name,           // Name (identifier) for the field.
    00323       const char * title = NULL,   // Title text for field (defaults to name).
    00324       PINDEX primaryField = 0,     // Pimary field whove value is in hot link
    00325       PINDEX secondaryField = P_MAX_INDEX   // Seconary field next to hotlink
    00326     );
    00327
    00328   PHTTPField * NewField() const;
    00329   void GetHTMLTag(PHTML & html) const;
    00330   void GetHTMLHeading(PHTML & html) const;
    00331
    00332   protected:
    00333     PString subFormName;
    00334     PINDEX primary;
    00335     PINDEX secondary;
    00336 };
    00337
    00338
    00339 class PHTTPFieldArray : public PHTTPCompositeField
    00340 {
    00341   PCLASSINFO(PHTTPFieldArray, PHTTPCompositeField)
    00342   public:
    00343     PHTTPFieldArray(
    00344       PHTTPField * baseField,
    00345       PBoolean ordered,
    00346       PINDEX fixedSize = 0
    00347     );
    00348
    00349     ~PHTTPFieldArray();
    00350
    00351
    00352     virtual PHTTPField * NewField() const;
    00353
    00354     virtual void ExpandFieldNames(PString & text, PINDEX start, PINDEX & finish) const;
    00355
    00356     virtual void GetHTMLTag(
    00357       PHTML & html    // HTML to receive the field info.
    00358     ) const;
    00359
    00360     virtual void LoadFromConfig(
    00361       PConfig & cfg   // Configuration for value transfer.
    00362     );
    00363     virtual void SaveToConfig(
    00364       PConfig & cfg   // Configuration for value transfer.
    00365     ) const;
    00366
    00367
    00368     virtual void SetAllValues(
    00369       const PStringToString & data   // New value for the field.
    00370     );
    00371
    00372     virtual PINDEX GetSize() const;
    00373     void SetSize(PINDEX newSize);
    00374
    00375     PStringArray GetStrings(
    00376       PConfig & cfg
    00377     );
    00378
    00379     void SetStrings(
    00380       PConfig & cfg,
    00381       const PStringArray & values
    00382     );
    00383
    00384   protected:
    00385     void AddBlankField();
    00386     void AddArrayControlBox(PHTML & html, PINDEX fld) const;
    00387     void SetArrayFieldName(PINDEX idx) const;
    00388
    00389     PHTTPField * baseField;
    00390     PBoolean orderedArray;
    00391     PBoolean canAddElements;
    00392 };
    00393
    00394
    00395 class PHTTPStringField : public PHTTPField
    00396 {
    00397   PCLASSINFO(PHTTPStringField, PHTTPField)
    00398   public:
    00399     PHTTPStringField(
    00400       const char * name,
    00401       PINDEX size,
    00402       const char * initVal = NULL,
    00403       const char * help = NULL
    00404     );
    00405     PHTTPStringField(
    00406       const char * name,
    00407       const char * title,
    00408       PINDEX size,
    00409       const char * initVal = NULL,
    00410       const char * help = NULL
    00411     );
    00412
    00413     virtual PHTTPField * NewField() const;
    00414
    00415     virtual void GetHTMLTag(
    00416       PHTML & html
    00417     ) const;
    00418
    00419     virtual PString GetValue(PBoolean dflt = false) const;
    00420
    00421     virtual void SetValue(
    00422       const PString & newVal
    00423     );
    00424
    00425
    00426   protected:
    00427     PString value;
    00428     PString initialValue;
    00429     PINDEX size;
    00430 };
    00431
    00432
    00433 class PHTTPPasswordField : public PHTTPStringField
    00434 {
    00435   PCLASSINFO(PHTTPPasswordField, PHTTPStringField)
    00436   public:
    00437     PHTTPPasswordField(
    00438       const char * name,
    00439       PINDEX size,
    00440       const char * initVal = NULL,
    00441       const char * help = NULL
    00442     );
    00443     PHTTPPasswordField(
    00444       const char * name,
    00445       const char * title,
    00446       PINDEX size,
    00447       const char * initVal = NULL,
    00448       const char * help = NULL
    00449     );
    00450
    00451     virtual PHTTPField * NewField() const;
    00452
    00453     virtual void GetHTMLTag(
    00454       PHTML & html
    00455     ) const;
    00456
    00457     virtual PString GetValue(PBoolean dflt = false) const;
    00458
    00459     virtual void SetValue(
    00460       const PString & newVal
    00461     );
    00462
    00463     static PString Decrypt(const PString & pword);
    00464 };
    00465
    00466
    00467 class PHTTPDateField : public PHTTPStringField
    00468 {
    00469   PCLASSINFO(PHTTPDateField, PHTTPStringField)
    00470   public:
    00471     PHTTPDateField(
    00472       const char * name,
    00473       const PTime & initVal = PTime(0),
    00474       PTime::TimeFormat fmt = PTime::ShortDate
    00475     );
    00476
    00477     virtual PHTTPField * NewField() const;
    00478
    00479     virtual void SetValue(
    00480       const PString & newValue
    00481     );
    00482
    00483     virtual PBoolean Validated(
    00484       const PString & newValue,
    00485       PStringStream & msg
    00486     ) const;
    00487
    00488   protected:
    00489     PTime::TimeFormat m_format;
    00490 };
    00491
    00492
    00493 class PHTTPIntegerField : public PHTTPField
    00494 {
    00495   PCLASSINFO(PHTTPIntegerField, PHTTPField)
    00496   public:
    00497     PHTTPIntegerField(
    00498       const char * name,
    00499       int low, int high,
    00500       int initVal = 0,
    00501       const char * units = NULL,
    00502       const char * help = NULL
    00503     );
    00504     PHTTPIntegerField(
    00505       const char * name,
    00506       const char * title,
    00507       int low, int high,
    00508       int initVal = 0,
    00509       const char * units = NULL,
    00510       const char * help = NULL
    00511     );
    00512
    00513     virtual PHTTPField * NewField() const;
    00514
    00515     virtual void GetHTMLTag(
    00516       PHTML & html
    00517     ) const;
    00518
    00519     virtual PString GetValue(PBoolean dflt = false) const;
    00520
    00521     virtual void SetValue(
    00522       const PString & newVal
    00523     );
    00524
    00525     virtual void LoadFromConfig(
    00526       PConfig & cfg
    00527     );
    00528     virtual void SaveToConfig(
    00529       PConfig & cfg
    00530     ) const;
    00531
    00532     virtual PBoolean Validated(
    00533       const PString & newVal,
    00534       PStringStream & msg
    00535     ) const;
    00536
    00537
    00538   protected:
    00539     int low, high, value;
    00540     int initialValue;
    00541     PString units;
    00542 };
    00543
    00544
    00545 class PHTTPBooleanField : public PHTTPField
    00546 {
    00547   PCLASSINFO(PHTTPBooleanField, PHTTPField)
    00548   public:
    00549     PHTTPBooleanField(
    00550       const char * name,
    00551       PBoolean initVal = false,
    00552       const char * help = NULL
    00553     );
    00554     PHTTPBooleanField(
    00555       const char * name,
    00556       const char * title,
    00557       PBoolean initVal = false,
    00558       const char * help = NULL
    00559     );
    00560
    00561     virtual PHTTPField * NewField() const;
    00562
    00563     virtual void GetHTMLTag(
    00564       PHTML & html
    00565     ) const;
    00566
    00567     virtual PString GetHTMLInput(
    00568       const PString & input
    00569     ) const;
    00570
    00571     virtual PString GetValue(PBoolean dflt = false) const;
    00572
    00573     virtual void SetValue(
    00574       const PString & newVal
    00575     );
    00576
    00577     virtual void LoadFromConfig(
    00578       PConfig & cfg
    00579     );
    00580     virtual void SaveToConfig(
    00581       PConfig & cfg
    00582     ) const;
    00583
    00584
    00585   protected:
    00586     PBoolean value, initialValue;
    00587 };
    00588
    00589
    00590 class PHTTPRadioField : public PHTTPField
    00591 {
    00592   PCLASSINFO(PHTTPRadioField, PHTTPField)
    00593   public:
    00594     PHTTPRadioField(
    00595       const char * name,
    00596       const PStringArray & valueArray,
    00597       PINDEX initVal = 0,
    00598       const char * help = NULL
    00599     );
    00600     PHTTPRadioField(
    00601       const char * name,
    00602       const PStringArray & valueArray,
    00603       const PStringArray & titleArray,
    00604       PINDEX initVal = 0,
    00605       const char * help = NULL
    00606     );
    00607     PHTTPRadioField(
    00608       const char * name,
    00609       PINDEX count,
    00610       const char * const * valueStrings,
    00611       PINDEX initVal = 0,
    00612       const char * help = NULL
    00613     );
    00614     PHTTPRadioField(
    00615       const char * name,
    00616       PINDEX count,
    00617       const char * const * valueStrings,
    00618       const char * const * titleStrings,
    00619       PINDEX initVal = 0,
    00620       const char * help = NULL
    00621     );
    00622     PHTTPRadioField(
    00623       const char * name,
    00624       const char * groupTitle,
    00625       const PStringArray & valueArray,
    00626       PINDEX initVal = 0,
    00627       const char * help = NULL
    00628     );
    00629     PHTTPRadioField(
    00630       const char * name,
    00631       const char * groupTitle,
    00632       const PStringArray & valueArray,
    00633       const PStringArray & titleArray,
    00634       PINDEX initVal = 0,
    00635       const char * help = NULL
    00636     );
    00637     PHTTPRadioField(
    00638       const char * name,
    00639       const char * groupTitle,
    00640       PINDEX count,
    00641       const char * const * valueStrings,
    00642       PINDEX initVal = 0,
    00643       const char * help = NULL
    00644     );
    00645     PHTTPRadioField(
    00646       const char * name,
    00647       const char * groupTitle,
    00648       PINDEX count,
    00649       const char * const * valueStrings,
    00650       const char * const * titleStrings,
    00651       PINDEX initVal = 0,
    00652       const char * help = NULL
    00653     );
    00654
    00655     virtual PHTTPField * NewField() const;
    00656
    00657     virtual void GetHTMLTag(
    00658       PHTML & html
    00659     ) const;
    00660
    00661     virtual PString GetHTMLInput(
    00662       const PString & input
    00663     ) const;
    00664
    00665     virtual PString GetValue(PBoolean dflt = false) const;
    00666
    00667     virtual void SetValue(
    00668       const PString & newVal
    00669     );
    00670
    00671
    00672   protected:
    00673     PStringArray values;
    00674     PStringArray titles;
    00675     PString value;
    00676     PString initialValue;
    00677 };
    00678
    00679
    00680 class PHTTPSelectField : public PHTTPField
    00681 {
    00682   PCLASSINFO(PHTTPSelectField, PHTTPField)
    00683   public:
    00684     PHTTPSelectField(
    00685       const char * name,
    00686       const PStringArray & valueArray,
    00687       PINDEX initVal = 0,
    00688       const char * help = NULL
    00689     );
    00690     PHTTPSelectField(
    00691       const char * name,
    00692       PINDEX count,
    00693       const char * const * valueStrings,
    00694       PINDEX initVal = 0,
    00695       const char * help = NULL
    00696     );
    00697     PHTTPSelectField(
    00698       const char * name,
    00699       const char * title,
    00700       const PStringArray & valueArray,
    00701       PINDEX initVal = 0,
    00702       const char * help = NULL
    00703     );
    00704     PHTTPSelectField(
    00705       const char * name,
    00706       const char * title,
    00707       PINDEX count,
    00708       const char * const * valueStrings,
    00709       PINDEX initVal = 0,
    00710       const char * help = NULL
    00711     );
    00712
    00713     virtual PHTTPField * NewField() const;
    00714
    00715     virtual void GetHTMLTag(
    00716       PHTML & html
    00717     ) const;
    00718
    00719     virtual PString GetValue(PBoolean dflt = false) const;
    00720
    00721     virtual void SetValue(
    00722       const PString & newVal
    00723     );
    00724
    00725
    00726     PStringArray values;
    00727
    00728
    00729   protected:
    00730     PString value;
    00731     PINDEX initialValue;
    00732 };
    00733
    00734
    00736 // PHTTPForm
    00737
    00738 class PHTTPForm : public PHTTPString
    00739 {
    00740   PCLASSINFO(PHTTPForm, PHTTPString)
    00741   public:
    00742     PHTTPForm(
    00743       const PURL & url
    00744     );
    00745     PHTTPForm(
    00746       const PURL & url,
    00747       const PHTTPAuthority & auth
    00748     );
    00749     PHTTPForm(
    00750       const PURL & url,
    00751       const PString & html
    00752     );
    00753     PHTTPForm(
    00754       const PURL & url,
    00755       const PString & html,
    00756       const PHTTPAuthority & auth
    00757     );
    00758
    00759
    00760     virtual void OnLoadedText(
    00761       PHTTPRequest & request,
    00762       PString & text
    00763     );
    00764     virtual PBoolean Post(
    00765       PHTTPRequest & request,
    00766       const PStringToString & data,
    00767       PHTML & replyMessage
    00768     );
    00769
    00770
    00771     PHTTPField * Add(
    00772       PHTTPField * fld
    00773     );
    00774     void RemoveAllFields()
    00775       { fields.RemoveAll(); fieldNames.RemoveAll(); }
    00776
    00777     enum BuildOptions {
    00778       CompleteHTML,
    00779       InsertIntoForm,
    00780       InsertIntoHTML
    00781     };
    00782
    00783     void BuildHTML(
    00784       const char * heading
    00785     );
    00786     void BuildHTML(
    00787       const PString & heading
    00788     );
    00789     void BuildHTML(
    00790       PHTML & html,
    00791       BuildOptions option = CompleteHTML
    00792     );
    00793
    00794
    00795   protected:
    00796     PHTTPCompositeField fields;
    00797     PStringSet fieldNames;
    00798 };
    00799
    00800
    00802 // PHTTPConfig
    00803
    00804 class PHTTPConfig : public PHTTPForm
    00805 {
    00806   PCLASSINFO(PHTTPConfig, PHTTPForm)
    00807   public:
    00808     PHTTPConfig(
    00809       const PURL & url,
    00810       const PString & section
    00811     );
    00812     PHTTPConfig(
    00813       const PURL & url,
    00814       const PString & section,
    00815       const PHTTPAuthority & auth
    00816     );
    00817     PHTTPConfig(
    00818       const PURL & url,
    00819       const PString & section,
    00820       const PString & html
    00821     );
    00822     PHTTPConfig(
    00823       const PURL & url,
    00824       const PString & section,
    00825       const PString & html,
    00826       const PHTTPAuthority & auth
    00827     );
    00828
    00829     virtual void OnLoadedText(
    00830       PHTTPRequest & request,
    00831       PString & text
    00832     );
    00833     virtual PBoolean Post(
    00834       PHTTPRequest & request,
    00835       const PStringToString & data,
    00836       PHTML & replyMessage
    00837     );
    00838
    00839
    00842     void LoadFromConfig();
    00843
    00849     const PString & GetConfigSection() const { return section; }
    00850
    00851     void SetConfigSection(
    00852       const PString & sect
    00853     ) { section = sect; }
    00854     // Set the configuration file section.
    00855
    00860     PHTTPField * AddSectionField(
    00861       PHTTPField * sectionFld,
    00862       const char * prefix = NULL,
    00863       const char * suffix = NULL
    00864     );
    00865
    00869     void AddNewKeyFields(
    00870       PHTTPField * keyFld,
    00871       PHTTPField * valFld
    00872     );
    00873
    00874
    00875   protected:
    00876     PString section;
    00877     PString sectionPrefix;
    00878     PString sectionSuffix;
    00879     PHTTPField * sectionField;
    00880     PHTTPField * keyField;
    00881     PHTTPField * valField;
    00882
    00883   private:
    00884     void Construct();
    00885 };
    00886
    00887
    00889 // PHTTPConfigSectionList
    00890
    00891 class PHTTPConfigSectionList : public PHTTPString
    00892 {
    00893   PCLASSINFO(PHTTPConfigSectionList, PHTTPString)
    00894   public:
    00895     PHTTPConfigSectionList(
    00896       const PURL & url,
    00897       const PHTTPAuthority & auth,
    00898       const PString & sectionPrefix,
    00899       const PString & additionalValueName,
    00900       const PURL & editSection,
    00901       const PURL & newSection,
    00902       const PString & newSectionTitle,
    00903       PHTML & heading
    00904     );
    00905
    00906     virtual void OnLoadedText(
    00907       PHTTPRequest & request,
    00908       PString & text
    00909     );
    00910     virtual PBoolean Post(
    00911       PHTTPRequest & request,
    00912       const PStringToString & data,
    00913       PHTML & replyMessage
    00914     );
    00915
    00916   protected:
    00917     PString sectionPrefix;
    00918     PString additionalValueName;
    00919     PString newSectionLink;
    00920     PString newSectionTitle;
    00921     PString editSectionLink;
    00922 };
    00923
    00924
    00925 #endif // P_HTTPFORMS
    00926
    00927 #endif // PTLIB_HTTPFORM_H
    00928
    00929
    00930 // End Of File ///////////////////////////////////////////////////////////////