httpform.h
上传用户:hzhsqp
上传日期:2007-01-06
资源大小:1600k
文件大小:24k
源码类别:

IP电话/视频会议

开发平台:

Visual C++

  1. /*
  2.  * httpform.h
  3.  *
  4.  * Forms management using HTTP User Interface.
  5.  *
  6.  * Portable Windows Library
  7.  *
  8.  * Copyright (c) 1993-1998 Equivalence Pty. Ltd.
  9.  *
  10.  * The contents of this file are subject to the Mozilla Public License
  11.  * Version 1.0 (the "License"); you may not use this file except in
  12.  * compliance with the License. You may obtain a copy of the License at
  13.  * http://www.mozilla.org/MPL/
  14.  *
  15.  * Software distributed under the License is distributed on an "AS IS"
  16.  * basis, WITHOUT WARRANTY OF ANY KIND, either express or implied. See
  17.  * the License for the specific language governing rights and limitations
  18.  * under the License.
  19.  *
  20.  * The Original Code is Portable Windows Library.
  21.  *
  22.  * The Initial Developer of the Original Code is Equivalence Pty. Ltd.
  23.  *
  24.  * Portions are Copyright (C) 1993 Free Software Foundation, Inc.
  25.  * All Rights Reserved.
  26.  *
  27.  * Contributor(s): ______________________________________.
  28.  *
  29.  * $Log: httpform.h,v $
  30.  * Revision 1.12  1999/03/09 08:01:46  robertj
  31.  * Changed comments for doc++ support (more to come).
  32.  *
  33.  * Revision 1.11  1999/02/16 08:07:10  robertj
  34.  * MSVC 6.0 compatibility changes.
  35.  *
  36.  * Revision 1.10  1998/11/30 02:50:48  robertj
  37.  * New directory structure
  38.  *
  39.  * Revision 1.9  1998/09/23 06:19:31  robertj
  40.  * Added open source copyright license.
  41.  *
  42.  * Revision 1.8  1998/08/20 05:45:33  robertj
  43.  * Fixed bug where substitutions did not always occur if near end of macro block.
  44.  *
  45.  * Revision 1.7  1998/01/26 00:25:24  robertj
  46.  * Major rewrite of HTTP forms management.
  47.  *
  48.  * Revision 1.6  1997/08/09 07:46:51  robertj
  49.  * Fixed problems with value of SELECT fields in form
  50.  *
  51.  * Revision 1.5  1997/07/26 11:38:17  robertj
  52.  * Support for overridable pages in HTTP service applications.
  53.  *
  54.  * Revision 1.4  1997/07/08 13:16:12  robertj
  55.  * Major HTTP form enhancements for lists and arrays of fields.
  56.  *
  57.  * Revision 1.3  1997/06/08 04:49:40  robertj
  58.  * Adding new llist based form field.
  59.  *
  60.  * Revision 1.2  1997/04/01 06:01:39  robertj
  61.  * Allowed value list in drop down box to be modified once created.
  62.  *
  63.  * Revision 1.1  1996/06/28 12:55:56  robertj
  64.  * Initial revision
  65.  *
  66.  */
  67. #ifndef _PHTTPFORM
  68. #define _PHTTPFORM
  69. #ifdef __GNUC__
  70. #pragma interface
  71. #endif
  72. #include <ptclib/http.h>
  73. ///////////////////////////////////////////////////////////////////////////////
  74. // PHTTPField
  75. /** This class is the abstract base class for fields in a #PHTTPForm#
  76.    resource type.
  77.  */
  78. class PHTTPField : public PObject
  79. {
  80.   PCLASSINFO(PHTTPField, PObject)
  81.   public:
  82.     PHTTPField(
  83.       const char * bname,  // base name (identifier) for the field.
  84.       const char * title,  // Title text for field (defaults to name).
  85.       const char * help    // Help text for the field.
  86.     );
  87.     // Create a new field in a HTTP form.
  88.     /** Compare the fields using the field names.
  89.        @return
  90.        Comparison of the name fields of the two fields.
  91.      */
  92.     virtual Comparison Compare(
  93.       const PObject & obj
  94.     ) const;
  95.     /** Get the identifier name of the field.
  96.        @return
  97.        String for field name.
  98.      */
  99.     const PCaselessString & GetName() const { return fullName; }
  100.     /** Get the identifier name of the field.
  101.        @return
  102.        String for field name.
  103.      */
  104.     const PCaselessString & GetBaseName() const { return baseName; }
  105.     /** Set the name for the field.
  106.      */
  107.     virtual void SetName(
  108.       const PString & newName   // New name for field
  109.     );
  110.     /** Locate the field naem, recusing down for composite fields.
  111.        @return
  112.        Pointer to located field, or NULL if not found.
  113.      */
  114.     virtual const PHTTPField * LocateName(
  115.       const PString & name    // Full field name to locate
  116.     ) const;
  117.     /** Get the title of the field.
  118.        @return
  119.        String for title placed next to the field.
  120.      */
  121.     const PString & GetTitle() const { return title; }
  122.     /** Get the title of the field.
  123.        @return
  124.        String for title placed next to the field.
  125.      */
  126.     const PString & GetHelp() const { return help; }
  127.     void SetHelp(
  128.       const PString & text        // Help text.
  129.     ) { help = text; }
  130.     void SetHelp(
  131.       const PString & hotLinkURL, // URL for link to help page.
  132.       const PString & linkText    // Help text in the link.
  133.     );
  134.     void SetHelp(
  135.       const PString & hotLinkURL, // URL for link to help page.
  136.       const PString & imageURL,   // URL for image to be displayed in link.
  137.       const PString & imageText   // Text in the link when image unavailable.
  138.     );
  139.     // Set the help text for the field.
  140.     /** Create a new field of the same class as the current field.
  141.        @return
  142.        New field object instance.
  143.      */
  144.     virtual PHTTPField * NewField() const = 0;
  145.     virtual void ExpandFieldNames(PString & text, PINDEX start, PINDEX & finish) const;
  146.     // Splice expanded macro substitutions into text string
  147.     /** Convert the field to HTML form tag for inclusion into the HTTP page.
  148.      */
  149.     virtual void GetHTMLTag(
  150.       PHTML & html    // HTML to receive the fields HTML tag.
  151.     ) const = 0;
  152.     /** Convert the field input to HTML for inclusion into the HTTP page.
  153.      */
  154.     virtual PString GetHTMLInput(
  155.       const PString & input // Source HTML text for input tag.
  156.     ) const;
  157.     /** Convert the field input to HTML for inclusion into the HTTP page.
  158.      */
  159.     virtual PString GetHTMLSelect(
  160.       const PString & selection // Source HTML text for input tag.
  161.     ) const;
  162.     /** Convert the field to HTML for inclusion into the HTTP page.
  163.      */
  164.     virtual void GetHTMLHeading(
  165.       PHTML & html    // HTML to receive the field info.
  166.     ) const;
  167.     /** Get the string value of the field.
  168.        @return
  169.        String for field value.
  170.      */
  171.     virtual PString GetValue(BOOL dflt = FALSE) const = 0;
  172.     /** Set the value of the field.
  173.      */
  174.     virtual void SetValue(
  175.       const PString & newValue   // New value for the field.
  176.     ) = 0;
  177.     /** Get the value of the PConfig to the sub-field. If the field is not
  178.        composite then it always sets the value as for the non-indexed version.
  179.      */
  180.     virtual void LoadFromConfig(
  181.       PConfig & cfg   // Configuration for value transfer.
  182.     );
  183.     /** Set the value of the sub-field into the PConfig. If the field is not
  184.        composite then it always sets the value as for the non-indexed version.
  185.      */
  186.     virtual void SaveToConfig(
  187.       PConfig & cfg   // Configuration for value transfer.
  188.     ) const;
  189.     /** Validate the new field value before #SetValue()# is called.
  190.        @return
  191.        BOOL if the new field value is OK.
  192.      */
  193.     virtual BOOL Validated(
  194.       const PString & newVal, // Proposed new value for the field.
  195.       PStringStream & msg     // Stream to take error HTML if value not valid.
  196.     ) const;
  197.     /** Retrieve all the names in the field and subfields.
  198.        @return
  199.        List of strings for each subfield.
  200.      */
  201.     virtual PStringList GetAllNames() const;
  202.     /** Set the value of the field in a list of fields.
  203.      */
  204.     virtual void SetAllValues(
  205.       const PStringToString & data   // New value for the field.
  206.     );
  207.     /** Validate the new field value in a list before #SetValue()# is called.
  208.        @return
  209.        BOOL if the all the new field values are OK.
  210.      */
  211.     virtual BOOL ValidateAll(
  212.       const PStringToString & data, // Proposed new value for the field.
  213.       PStringStream & msg     // Stream to take error HTML if value not valid.
  214.     ) const;
  215.     BOOL NotYetInHTML() const { return notInHTML; }
  216.     void SetInHTML() { notInHTML = FALSE; }
  217.   protected:
  218.     PCaselessString baseName;
  219.     PCaselessString fullName;
  220.     PString title;
  221.     PString help;
  222.     BOOL notInHTML;
  223. };
  224. PLIST(PHTTPFieldList, PHTTPField);
  225. class PHTTPCompositeField : public PHTTPField
  226. {
  227.   PCLASSINFO(PHTTPCompositeField, PHTTPField)
  228.   public:
  229.     PHTTPCompositeField(
  230.       const char * name,          // Name (identifier) for the field.
  231.       const char * title = NULL,  // Title text for field (defaults to name).
  232.       const char * help = NULL    // Help text for the field.
  233.     );
  234.     virtual void SetName(
  235.       const PString & name   // New name for field
  236.     );
  237.     virtual const PHTTPField * LocateName(
  238.       const PString & name    // Full field name to locate
  239.     ) const;
  240.     virtual PHTTPField * NewField() const;
  241.     virtual void ExpandFieldNames(PString & text, PINDEX start, PINDEX & finish) const;
  242.     virtual void GetHTMLTag(
  243.       PHTML & html    // HTML to receive the field info.
  244.     ) const;
  245.     virtual PString GetHTMLInput(
  246.       const PString & input // Source HTML text for input tag.
  247.     ) const;
  248.     virtual void GetHTMLHeading(
  249.       PHTML & html    // HTML to receive the field info.
  250.     ) const;
  251.     virtual PString GetValue(BOOL dflt = FALSE) const;
  252.     virtual void SetValue(
  253.       const PString & newValue   // New value for the field.
  254.     );
  255.     virtual void LoadFromConfig(
  256.       PConfig & cfg   // Configuration for value transfer.
  257.     );
  258.     virtual void SaveToConfig(
  259.       PConfig & cfg   // Configuration for value transfer.
  260.     ) const;
  261.     virtual PStringList GetAllNames() const;
  262.     virtual void SetAllValues(
  263.       const PStringToString & data   // New value for the field.
  264.     );
  265.     virtual BOOL ValidateAll(
  266.       const PStringToString & data, // Proposed new value for the field.
  267.       PStringStream & msg     // Stream to take error HTML if value not valid.
  268.     ) const;
  269.     /** Get the number of sub-fields in the composite field. Note that this is
  270.        the total including any composite sub-fields, ie, it is the size of the
  271.        whole tree of primitive fields.
  272.        @return
  273.        Returns field count.
  274.      */
  275.     virtual PINDEX GetSize() const;
  276.     void Append(PHTTPField * fld);
  277.     PHTTPField & operator[](PINDEX idx) const { return fields[idx]; }
  278.     void RemoveAt(PINDEX idx) { fields.RemoveAt(idx); }
  279.     void RemoveAll() { fields.RemoveAll(); }
  280.   protected:
  281.     PHTTPFieldList fields;
  282. };
  283. class PHTTPSubForm : public PHTTPCompositeField
  284. {
  285.   PCLASSINFO(PHTTPSubForm, PHTTPCompositeField)
  286.   public:
  287.     PHTTPSubForm(
  288.       const PString & subFormName, // URL for the sub-form
  289.       const char * name,           // Name (identifier) for the field.
  290.       const char * title = NULL,   // Title text for field (defaults to name).
  291.       PINDEX primaryField = 0,     // Pimary field whove value is in hot link
  292.       PINDEX secondaryField = P_MAX_INDEX   // Seconary field next to hotlink
  293.     );
  294.   PHTTPField * NewField() const;
  295.   void GetHTMLTag(PHTML & html) const;
  296.   void GetHTMLHeading(PHTML & html) const;
  297.   protected:
  298.     PString subFormName;
  299.     PINDEX primary;
  300.     PINDEX secondary;
  301. };
  302. class PHTTPFieldArray : public PHTTPCompositeField
  303. {
  304.   PCLASSINFO(PHTTPFieldArray, PHTTPCompositeField)
  305.   public:
  306.     PHTTPFieldArray(
  307.       PHTTPField * baseField,
  308.       BOOL ordered
  309.     );
  310.     ~PHTTPFieldArray();
  311.     virtual PHTTPField * NewField() const;
  312.     virtual void ExpandFieldNames(PString & text, PINDEX start, PINDEX & finish) const;
  313.     virtual void GetHTMLTag(
  314.       PHTML & html    // HTML to receive the field info.
  315.     ) const;
  316.     virtual void LoadFromConfig(
  317.       PConfig & cfg   // Configuration for value transfer.
  318.     );
  319.     virtual void SaveToConfig(
  320.       PConfig & cfg   // Configuration for value transfer.
  321.     ) const;
  322.     virtual void SetAllValues(
  323.       const PStringToString & data   // New value for the field.
  324.     );
  325.     virtual PINDEX GetSize() const;
  326.     void SetSize(PINDEX newSize);
  327.   protected:
  328.     void AddBlankField();
  329.     void AddArrayControlBox(PHTML & html, PINDEX fld) const;
  330.     void SetArrayFieldName(PINDEX idx) const;
  331.     PHTTPField * baseField;
  332.     BOOL orderedArray;
  333. };
  334. class PHTTPStringField : public PHTTPField
  335. {
  336.   PCLASSINFO(PHTTPStringField, PHTTPField)
  337.   public:
  338.     PHTTPStringField(
  339.       const char * name,
  340.       PINDEX size,
  341.       const char * initVal = NULL,
  342.       const char * help = NULL
  343.     );
  344.     PHTTPStringField(
  345.       const char * name,
  346.       const char * title,
  347.       PINDEX size,
  348.       const char * initVal = NULL,
  349.       const char * help = NULL
  350.     );
  351.     virtual PHTTPField * NewField() const;
  352.     virtual void GetHTMLTag(
  353.       PHTML & html    // HTML to receive the field info.
  354.     ) const;
  355.     virtual PString GetValue(BOOL dflt = FALSE) const;
  356.     virtual void SetValue(
  357.       const PString & newVal
  358.     );
  359.   protected:
  360.     PString value;
  361.     PString initialValue;
  362.     PINDEX size;
  363. };
  364. class PHTTPPasswordField : public PHTTPStringField
  365. {
  366.   PCLASSINFO(PHTTPPasswordField, PHTTPStringField)
  367.   public:
  368.     PHTTPPasswordField(
  369.       const char * name,
  370.       PINDEX size,
  371.       const char * initVal = NULL,
  372.       const char * help = NULL
  373.     );
  374.     PHTTPPasswordField(
  375.       const char * name,
  376.       const char * title,
  377.       PINDEX size,
  378.       const char * initVal = NULL,
  379.       const char * help = NULL
  380.     );
  381.     virtual PHTTPField * NewField() const;
  382.     virtual void GetHTMLTag(
  383.       PHTML & html    // HTML to receive the field info.
  384.     ) const;
  385.     virtual PString GetValue(BOOL dflt = FALSE) const;
  386.     virtual void SetValue(
  387.       const PString & newVal
  388.     );
  389.     static PString Decrypt(const PString & pword);
  390. };
  391. class PHTTPIntegerField : public PHTTPField
  392. {
  393.   PCLASSINFO(PHTTPIntegerField, PHTTPField)
  394.   public:
  395.     PHTTPIntegerField(
  396.       const char * name,
  397.       int low, int high,
  398.       int initVal = 0,
  399.       const char * units = NULL,
  400.       const char * help = NULL
  401.     );
  402.     PHTTPIntegerField(
  403.       const char * name,
  404.       const char * title,
  405.       int low, int high,
  406.       int initVal = 0,
  407.       const char * units = NULL,
  408.       const char * help = NULL
  409.     );
  410.     virtual PHTTPField * NewField() const;
  411.     virtual void GetHTMLTag(
  412.       PHTML & html    // HTML to receive the field info.
  413.     ) const;
  414.     virtual PString GetValue(BOOL dflt = FALSE) const;
  415.     virtual void SetValue(
  416.       const PString & newVal
  417.     );
  418.     virtual void LoadFromConfig(
  419.       PConfig & cfg   // Configuration for value transfer.
  420.     );
  421.     virtual void SaveToConfig(
  422.       PConfig & cfg   // Configuration for value transfer.
  423.     ) const;
  424.     virtual BOOL Validated(
  425.       const PString & newVal,
  426.       PStringStream & msg
  427.     ) const;
  428.   protected:
  429.     int low, high, value;
  430.     int initialValue;
  431.     PString units;
  432. };
  433. class PHTTPBooleanField : public PHTTPField
  434. {
  435.   PCLASSINFO(PHTTPBooleanField, PHTTPField)
  436.   public:
  437.     PHTTPBooleanField(
  438.       const char * name,
  439.       BOOL initVal = FALSE,
  440.       const char * help = NULL
  441.     );
  442.     PHTTPBooleanField(
  443.       const char * name,
  444.       const char * title,
  445.       BOOL initVal = FALSE,
  446.       const char * help = NULL
  447.     );
  448.     virtual PHTTPField * NewField() const;
  449.     virtual void GetHTMLTag(
  450.       PHTML & html    // HTML to receive the field info.
  451.     ) const;
  452.     virtual PString GetHTMLInput(
  453.       const PString & input
  454.     ) const;
  455.     virtual PString GetValue(BOOL dflt = FALSE) const;
  456.     virtual void SetValue(
  457.       const PString & newVal
  458.     );
  459.     virtual void LoadFromConfig(
  460.       PConfig & cfg   // Configuration for value transfer.
  461.     );
  462.     virtual void SaveToConfig(
  463.       PConfig & cfg   // Configuration for value transfer.
  464.     ) const;
  465.   protected:
  466.     BOOL value, initialValue;
  467. };
  468. class PHTTPRadioField : public PHTTPField
  469. {
  470.   PCLASSINFO(PHTTPRadioField, PHTTPField)
  471.   public:
  472.     PHTTPRadioField(
  473.       const char * name,
  474.       const PStringArray & valueArray,
  475.       PINDEX initVal = 0,
  476.       const char * help = NULL
  477.     );
  478.     PHTTPRadioField(
  479.       const char * name,
  480.       const PStringArray & valueArray,
  481.       const PStringArray & titleArray,
  482.       PINDEX initVal = 0,
  483.       const char * help = NULL
  484.     );
  485.     PHTTPRadioField(
  486.       const char * name,
  487.       PINDEX count,
  488.       const char * const * valueStrings,
  489.       PINDEX initVal = 0,
  490.       const char * help = NULL
  491.     );
  492.     PHTTPRadioField(
  493.       const char * name,
  494.       PINDEX count,
  495.       const char * const * valueStrings,
  496.       const char * const * titleStrings,
  497.       PINDEX initVal = 0,
  498.       const char * help = NULL
  499.     );
  500.     PHTTPRadioField(
  501.       const char * name,
  502.       const char * groupTitle,
  503.       const PStringArray & valueArray,
  504.       PINDEX initVal = 0,
  505.       const char * help = NULL
  506.     );
  507.     PHTTPRadioField(
  508.       const char * name,
  509.       const char * groupTitle,
  510.       const PStringArray & valueArray,
  511.       const PStringArray & titleArray,
  512.       PINDEX initVal = 0,
  513.       const char * help = NULL
  514.     );
  515.     PHTTPRadioField(
  516.       const char * name,
  517.       const char * groupTitle,
  518.       PINDEX count,
  519.       const char * const * valueStrings,
  520.       PINDEX initVal = 0,
  521.       const char * help = NULL
  522.     );
  523.     PHTTPRadioField(
  524.       const char * name,
  525.       const char * groupTitle,
  526.       PINDEX count,
  527.       const char * const * valueStrings,
  528.       const char * const * titleStrings,
  529.       PINDEX initVal = 0,
  530.       const char * help = NULL
  531.     );
  532.     virtual PHTTPField * NewField() const;
  533.     virtual void GetHTMLTag(
  534.       PHTML & html    // HTML to receive the field info.
  535.     ) const;
  536.     virtual PString GetHTMLInput(
  537.       const PString & input
  538.     ) const;
  539.     virtual PString GetValue(BOOL dflt = FALSE) const;
  540.     virtual void SetValue(
  541.       const PString & newVal
  542.     );
  543.   protected:
  544.     PStringArray values;
  545.     PStringArray titles;
  546.     PString value;
  547.     PString initialValue;
  548. };
  549. class PHTTPSelectField : public PHTTPField
  550. {
  551.   PCLASSINFO(PHTTPSelectField, PHTTPField)
  552.   public:
  553.     PHTTPSelectField(
  554.       const char * name,
  555.       const PStringArray & valueArray,
  556.       PINDEX initVal = 0,
  557.       const char * help = NULL
  558.     );
  559.     PHTTPSelectField(
  560.       const char * name,
  561.       PINDEX count,
  562.       const char * const * valueStrings,
  563.       PINDEX initVal = 0,
  564.       const char * help = NULL
  565.     );
  566.     PHTTPSelectField(
  567.       const char * name,
  568.       const char * title,
  569.       const PStringArray & valueArray,
  570.       PINDEX initVal = 0,
  571.       const char * help = NULL
  572.     );
  573.     PHTTPSelectField(
  574.       const char * name,
  575.       const char * title,
  576.       PINDEX count,
  577.       const char * const * valueStrings,
  578.       PINDEX initVal = 0,
  579.       const char * help = NULL
  580.     );
  581.     virtual PHTTPField * NewField() const;
  582.     virtual void GetHTMLTag(
  583.       PHTML & html    // HTML to receive the field info.
  584.     ) const;
  585.     virtual PString GetValue(BOOL dflt = FALSE) const;
  586.     virtual void SetValue(
  587.       const PString & newVal
  588.     );
  589.     PStringArray values;
  590.   protected:
  591.     PString value;
  592.     PINDEX initialValue;
  593. };
  594. ///////////////////////////////////////////////////////////////////////////////
  595. // PHTTPForm
  596. class PHTTPForm : public PHTTPString
  597. {
  598.   PCLASSINFO(PHTTPForm, PHTTPString)
  599.   public:
  600.     PHTTPForm(
  601.       const PURL & url
  602.     );
  603.     PHTTPForm(
  604.       const PURL & url,
  605.       const PHTTPAuthority & auth
  606.     );
  607.     PHTTPForm(
  608.       const PURL & url,
  609.       const PString & html
  610.     );
  611.     PHTTPForm(
  612.       const PURL & url,
  613.       const PString & html,
  614.       const PHTTPAuthority & auth
  615.     );
  616.     virtual void OnLoadedText(
  617.       PHTTPRequest & request,    // Information on this request.
  618.       PString & text             // Data used in reply.
  619.     );
  620.     virtual BOOL Post(
  621.       PHTTPRequest & request,       // Information on this request.
  622.       const PStringToString & data, // Variables in the POST data.
  623.       PHTML & replyMessage          // Reply message for post.
  624.     );
  625.     PHTTPField * Add(
  626.       PHTTPField * fld
  627.     );
  628.     void RemoveAllFields()
  629.       { fields.RemoveAll(); fieldNames.RemoveAll(); }
  630.     enum BuildOptions {
  631.       CompleteHTML,
  632.       InsertIntoForm,
  633.       InsertIntoHTML
  634.     };
  635.     void BuildHTML(
  636.       const char * heading
  637.     );
  638.     void BuildHTML(
  639.       const PString & heading
  640.     );
  641.     void BuildHTML(
  642.       PHTML & html,
  643.       BuildOptions option = CompleteHTML
  644.     );
  645.   protected:
  646.     PHTTPCompositeField fields;
  647.     PStringSet fieldNames;
  648. };
  649. //////////////////////////////////////////////////////////////////////////////
  650. // PHTTPConfig
  651. class PHTTPConfig : public PHTTPForm
  652. {
  653.   PCLASSINFO(PHTTPConfig, PHTTPForm)
  654.   public:
  655.     PHTTPConfig(
  656.       const PURL & url,
  657.       const PString & section
  658.     );
  659.     PHTTPConfig(
  660.       const PURL & url,
  661.       const PString & section,
  662.       const PHTTPAuthority & auth
  663.     );
  664.     PHTTPConfig(
  665.       const PURL & url,
  666.       const PString & section,
  667.       const PString & html
  668.     );
  669.     PHTTPConfig(
  670.       const PURL & url,
  671.       const PString & section,
  672.       const PString & html,
  673.       const PHTTPAuthority & auth
  674.     );
  675.     virtual void OnLoadedText(
  676.       PHTTPRequest & request,    // Information on this request.
  677.       PString & text             // Data used in reply.
  678.     );
  679.     virtual BOOL Post(
  680.       PHTTPRequest & request,       // Information on this request.
  681.       const PStringToString & data, // Variables in the POST data.
  682.       PHTML & replyMessage          // Reply message for post.
  683.     );
  684.     /** Load all of the values for the resource from the configuration.
  685.      */
  686.     void LoadFromConfig();
  687.     /** Get the configuration file section that the page will alter.
  688.        @return
  689.        String for config file section.
  690.      */
  691.     const PString & GetConfigSection() const { return section; }
  692.     void SetConfigSection(
  693.       const PString & sect   // New section for the config page.
  694.     ) { section = sect; }
  695.     // Set the configuration file section.
  696.     /** Add a field that will determine the name opf the secontion into which
  697.        the other fields are to be added as keys. The section is not created and
  698.        and error generated if the section already exists.
  699.      */
  700.     PHTTPField * AddSectionField(
  701.       PHTTPField * sectionFld,     // Field to set as the section name
  702.       const char * prefix = NULL,  // String to attach before the field value
  703.       const char * suffix = NULL   // String to attach after the field value
  704.     );
  705.     /** Add fields to the HTTP form for adding a new key to the config file
  706.        section.
  707.      */
  708.     void AddNewKeyFields(
  709.       PHTTPField * keyFld,  // Field for the key to be added.
  710.       PHTTPField * valFld   // Field for the value of the key yto be added.
  711.     );
  712.   protected:
  713.     PString section;
  714.     PString sectionPrefix;
  715.     PString sectionSuffix;
  716.     PHTTPField * sectionField;
  717.     PHTTPField * keyField;
  718.     PHTTPField * valField;
  719.   private:
  720.     void Construct();
  721. };
  722. //////////////////////////////////////////////////////////////////////////////
  723. // PHTTPConfigSectionList
  724. class PHTTPConfigSectionList : public PHTTPString
  725. {
  726.   PCLASSINFO(PHTTPConfigSectionList, PHTTPString)
  727.   public:
  728.     PHTTPConfigSectionList(
  729.       const PURL & url,
  730.       const PHTTPAuthority & auth,
  731.       const PString & sectionPrefix,
  732.       const PString & additionalValueName,
  733.       const PURL & editSection,
  734.       const PURL & newSection,
  735.       const PString & newSectionTitle,
  736.       PHTML & heading
  737.     );
  738.     virtual void OnLoadedText(
  739.       PHTTPRequest & request,    // Information on this request.
  740.       PString & text             // Data used in reply.
  741.     );
  742.     virtual BOOL Post(
  743.       PHTTPRequest & request,       // Information on this request.
  744.       const PStringToString & data, // Variables in the POST data.
  745.       PHTML & replyMessage          // Reply message for post.
  746.     );
  747.   protected:
  748.     PString sectionPrefix;
  749.     PString additionalValueName;
  750.     PString newSectionLink;
  751.     PString newSectionTitle;
  752.     PString editSectionLink;
  753. };
  754. #endif
  755. // End Of File ///////////////////////////////////////////////////////////////