📄 httpform.cxx
字号:
{ value = toupper(val[0]) == 'T' || toupper(val[0]) == 'y' || val.AsInteger() != 0 || val.Find("TRUE") != P_MAX_INDEX;}PString PHTTPBooleanField::GetValue(BOOL dflt) const{ return ((dflt ? initialValue : value) ? "True" : "False");}void PHTTPBooleanField::LoadFromConfig(PConfig & cfg){ PString section, key; switch (SplitConfigKey(fullName, section, key)) { case 1 : value = cfg.GetBoolean(key, initialValue); break; case 2 : value = cfg.GetBoolean(section, key, initialValue); }}void PHTTPBooleanField::SaveToConfig(PConfig & cfg) const{ PString section, key; switch (SplitConfigKey(fullName, section, key)) { case 1 : cfg.SetBoolean(key, value); break; case 2 : cfg.SetBoolean(section, key, value); }}//////////////////////////////////////////////////////////////////////////////// PHTTPRadioFieldPHTTPRadioField::PHTTPRadioField(const char * name, const PStringArray & valueArray, PINDEX initVal, const char * help) : PHTTPField(name, NULL, help), values(valueArray), titles(valueArray), value(valueArray[initVal]), initialValue(value){}PHTTPRadioField::PHTTPRadioField(const char * name, const PStringArray & valueArray, const PStringArray & titleArray, PINDEX initVal, const char * help) : PHTTPField(name, NULL, help), values(valueArray), titles(titleArray), value(valueArray[initVal]), initialValue(value){}PHTTPRadioField::PHTTPRadioField(const char * name, PINDEX count, const char * const * valueStrings, PINDEX initVal, const char * help) : PHTTPField(name, NULL, help), values(count, valueStrings), titles(count, valueStrings), value(valueStrings[initVal]), initialValue(value){}PHTTPRadioField::PHTTPRadioField(const char * name, PINDEX count, const char * const * valueStrings, const char * const * titleStrings, PINDEX initVal, const char * help) : PHTTPField(name, NULL, help), values(count, valueStrings), titles(count, titleStrings), value(valueStrings[initVal]), initialValue(value){}PHTTPRadioField::PHTTPRadioField(const char * name, const char * groupTitle, const PStringArray & valueArray, PINDEX initVal, const char * help) : PHTTPField(name, groupTitle, help), values(valueArray), titles(valueArray), value(valueArray[initVal]), initialValue(value){}PHTTPRadioField::PHTTPRadioField(const char * name, const char * groupTitle, const PStringArray & valueArray, const PStringArray & titleArray, PINDEX initVal, const char * help) : PHTTPField(name, groupTitle, help), values(valueArray), titles(titleArray), value(valueArray[initVal]), initialValue(value){}PHTTPRadioField::PHTTPRadioField(const char * name, const char * groupTitle, PINDEX count, const char * const * valueStrings, PINDEX initVal, const char * help) : PHTTPField(name, groupTitle, help), values(count, valueStrings), titles(count, valueStrings), value(valueStrings[initVal]), initialValue(value){}PHTTPRadioField::PHTTPRadioField(const char * name, const char * groupTitle, PINDEX count, const char * const * valueStrings, const char * const * titleStrings, PINDEX initVal, const char * help) : PHTTPField(name, groupTitle, help), values(count, valueStrings), titles(count, titleStrings), value(valueStrings[initVal]), initialValue(value){}PHTTPField * PHTTPRadioField::NewField() const{ return new PHTTPRadioField(*this);}void PHTTPRadioField::GetHTMLTag(PHTML & html) const{ for (PINDEX i = 0; i < values.GetSize(); i++) html << PHTML::RadioButton(fullName, values[i], values[i] == value ? PHTML::Checked : PHTML::UnChecked) << titles[i] << PHTML::BreakLine();}PString PHTTPRadioField::GetHTMLInput(const PString & input) const{ PString inval; PINDEX before, after; if (FindInputValue(input, before, after)) inval = input(before+1, after-1); else inval = baseName; if (inval != value) return input; return "<input checked" + input.Mid(6);}PString PHTTPRadioField::GetValue(BOOL dflt) const{ if (dflt) return initialValue; else return value;}void PHTTPRadioField::SetValue(const PString & newVal){ value = newVal;}//////////////////////////////////////////////////////////////////////////////// PHTTPSelectFieldPHTTPSelectField::PHTTPSelectField(const char * name, const PStringArray & valueArray, PINDEX initVal, const char * help) : PHTTPField(name, NULL, help), values(valueArray){ initialValue = initVal; if (initVal < values.GetSize()) value = values[initVal];}PHTTPSelectField::PHTTPSelectField(const char * name, PINDEX count, const char * const * valueStrings, PINDEX initVal, const char * help) : PHTTPField(name, NULL, help), values(count, valueStrings){ initialValue = initVal; if (initVal < count) value = values[initVal];}PHTTPSelectField::PHTTPSelectField(const char * name, const char * title, const PStringArray & valueArray, PINDEX initVal, const char * help) : PHTTPField(name, title, help), values(valueArray){ initialValue = initVal; if (initVal < values.GetSize()) value = values[initVal];}PHTTPSelectField::PHTTPSelectField(const char * name, const char * title, PINDEX count, const char * const * valueStrings, PINDEX initVal, const char * help) : PHTTPField(name, title, help), values(count, valueStrings){ initialValue = initVal; if (initVal < values.GetSize()) value = values[initVal];}PHTTPField * PHTTPSelectField::NewField() const{ return new PHTTPSelectField(baseName, title, values, initialValue, help);}void PHTTPSelectField::GetHTMLTag(PHTML & html) const{ html << PHTML::Select(fullName); for (PINDEX i = 0; i < values.GetSize(); i++) html << PHTML::Option(values[i] == value ? PHTML::Selected : PHTML::NotSelected) << values[i]; html << PHTML::Select();}PString PHTTPSelectField::GetValue(BOOL dflt) const{ if (dflt) if (initialValue < values.GetSize()) return values[initialValue]; else return PString(); else return value;}void PHTTPSelectField::SetValue(const PString & newVal){ value = newVal;}//////////////////////////////////////////////////////////////////////////////// PHTTPFormPHTTPForm::PHTTPForm(const PURL & url) : PHTTPString(url), fields(""){}PHTTPForm::PHTTPForm(const PURL & url, const PHTTPAuthority & auth) : PHTTPString(url, auth), fields(""){}PHTTPForm::PHTTPForm(const PURL & url, const PString & html) : PHTTPString(url, html), fields(""){}PHTTPForm::PHTTPForm(const PURL & url, const PString & html, const PHTTPAuthority & auth) : PHTTPString(url, html, auth), fields(""){}static BOOL FindSpliceAccepted(const PString & text, PINDEX offset, PINDEX & pos, PINDEX & len, PINDEX & start, PINDEX & finish){ static PRegularExpression Accepted("<?!--#form[ \t\r\n]+accepted[ \t\r\n]*-->?", PRegularExpression::Extended|PRegularExpression::IgnoreCase); return FindSpliceBlock(Accepted, text, offset, pos, len, start, finish);}static BOOL FindSpliceErrors(const PString & text, PINDEX offset, PINDEX & pos, PINDEX & len, PINDEX & start, PINDEX & finish){ static PRegularExpression Errors("<?!--#form[ \t\r\n]+errors[ \t\r\n]*-->?", PRegularExpression::Extended|PRegularExpression::IgnoreCase); return FindSpliceBlock(Errors, text, offset, pos, len, start, finish);}static BOOL FindSpliceField(const PRegularExpression & startExpr, const PRegularExpression & endExpr, const PString & text, PINDEX offset, const PHTTPField & rootField, PINDEX & pos, PINDEX & len, PINDEX & start, PINDEX & finish, const PHTTPField * & field){ field = NULL; if (!FindSpliceBlock(startExpr, endExpr, text, offset, pos, len, start, finish)) return FALSE; PINDEX endBlock = start != finish ? (start-1) : (pos+len-1); PINDEX namePos, nameEnd; if (FindSpliceName(text, pos, endBlock, namePos, nameEnd)) field = rootField.LocateName(text(namePos, nameEnd)); return TRUE;}void PHTTPForm::OnLoadedText(PHTTPRequest & request, PString & text){ PINDEX pos, len, start, finish; const PHTTPField * field; // Remove the subsections for POST command pos = 0; while (FindSpliceAccepted(text, pos, pos, len, start, finish)) text.Delete(pos, len); pos = 0; while (FindSpliceErrors(text, pos, pos, len, start, finish)) text.Delete(pos, len); // See if are a subform, set root composite field accordingly PString prefix = request.url.GetQueryVars()("subformprefix"); if (!prefix) { static PRegularExpression SubFormPrefix("<?!--#form[ \t\r\n]+subformprefix[ \t\r\n]*-->?", PRegularExpression::Extended|PRegularExpression::IgnoreCase); while (text.FindRegEx(SubFormPrefix, pos, len)) text.Splice("subformprefix=" + PURL::TranslateString(prefix, PURL::QueryTranslation), pos, len); field = fields.LocateName(prefix); if (field != NULL) { finish = P_MAX_INDEX; field->ExpandFieldNames(text, 0, finish); } } // Locate <!--#form array name--> macros and expand them static PRegularExpression ArrayRegEx("<!--#form[ \t\r\n]+array[ \t\r\n]+[^-]+-->", PRegularExpression::Extended|PRegularExpression::IgnoreCase); static PRegularExpression EndBlock("<?!--#form[ \t\r\n]+end[ \t\r\n]+[^-]+-->?", PRegularExpression::Extended|PRegularExpression::IgnoreCase); pos = len = 0; while (FindSpliceField(ArrayRegEx, EndBlock, text, pos+len, fields, pos, len, start, finish, field)) { if (start != finish && field != NULL) field->ExpandFieldNames(text, start, finish); } // Have now expanded all field names to be fully qualified static PRegularExpression HTMLRegEx("<!--#form[ \t\r\n]+html[ \t\r\n]+[^-]+-->", PRegularExpression::Extended|PRegularExpression::IgnoreCase); while (FindSpliceField(HTMLRegEx, "", text, 0, fields, pos, len, start, finish, field)) { if (field != NULL) { PHTML html(PHTML::InForm); field->GetHTMLTag(html); text.Splice(html, pos, len); } } pos = len = 0; static PRegularExpression ValueRegEx("<!--#form[ \t\r\n]+value[ \t\r\n]+[^-]+-->", PRegularExpression::Extended|PRegularExpression::IgnoreCase); while (FindSpliceField(ValueRegEx, "", text, pos+len, fields, pos, len, start, finish, field)) { if (field != NULL) text.Splice(field->GetValue(), pos, len); } pos = len = 0; static PRegularExpression InputRegEx("<input[ \t\r\n][^>]*name[ \t\r\n]*=[ \t\r\n]*\"[^\"]*\"[^>]*>", PRegularExpression::Extended|PRegularExpression::IgnoreCase); while (FindSpliceField(InputRegEx, "", text, pos+len, fields, pos, len, start, finish, field)) {
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -