* split horizon context in iterators; expect one context, provide another into the subiterators
* first work on mime iterators
{
WebcitAddUrlHandler(HKEY("display_inetconf"), display_inetconf, 0);
WebcitAddUrlHandler(HKEY("save_inetconf"), new_save_inetconf, AJAX);
- RegisterIterator("SERVCFG:INET", 1, NULL, GetInetConfHash, InetCfgSubst, NULL, CTX_INETCFG);
+ RegisterIterator("SERVCFG:INET", 1, NULL, GetInetConfHash, InetCfgSubst, NULL, CTX_INETCFG, CTX_NONE);
RegisterNamespace("SERVCFG:FLUSHINETCFG",0, 0, DeleteInetConfHash, CTX_NONE);
}
-HashList *iterate_get_mime(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+HashList *iterate_get_mime_All(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
{
- return NULL;
+ message_summary *Msg = (message_summary*) Context;
+ return Msg->AllAttach;
+}
+HashList *iterate_get_mime_Submessages(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ message_summary *Msg = (message_summary*) Context;
+ return Msg->Submessages;
+}
+HashList *iterate_get_mime_AttachLinks(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ message_summary *Msg = (message_summary*) Context;
+ return Msg->AttachLinks;
+}
+HashList *iterate_get_mime_Attachments(StrBuf *Target, int nArgs, WCTemplateToken *Tokens, void *Context, int ContextType)
+{
+ message_summary *Msg = (message_summary*) Context;
+ return Msg->AllAttach;
}
RegisterConditional(HKEY("COND:MAIL:SUMM:OTHERNODE"), 0, Conditional_MAIL_SUMM_OTHERNODE, CTX_MAILSUM);
- RegisterIterator("MAIL:MIME:ATTACH", 0, NULL, iterate_get_mime, tmplput_MIME_ATTACH, NULL, CTX_MAILSUM);
+ RegisterIterator("MAIL:MIME:ATTACH", 0, NULL, iterate_get_mime_All,
+ tmplput_MIME_ATTACH, NULL, CTX_MIME_ATACH, CTX_MAILSUM);
+ RegisterIterator("MAIL:MIME:ATTACH:SUBMESSAGES", 0, NULL, iterate_get_mime_Submessages,
+ tmplput_MIME_ATTACH, NULL, CTX_MIME_ATACH, CTX_MAILSUM);
+ RegisterIterator("MAIL:MIME:ATTACH:LINKS", 0, NULL, iterate_get_mime_AttachLinks,
+ tmplput_MIME_ATTACH, NULL, CTX_MIME_ATACH, CTX_MAILSUM);
+ RegisterIterator("MAIL:MIME:ATTACH:ATT", 0, NULL, iterate_get_mime_Attachments,
+ tmplput_MIME_ATTACH, NULL, CTX_MIME_ATACH, CTX_MAILSUM);
RegisterMimeRenderer(HKEY("text/x-citadel-variformat"), render_MAIL_variformat);
RegisterMimeRenderer(HKEY("text/plain"), render_MAIL_text_plain);
WebcitAddUrlHandler(HKEY("display_confirm_delete_node"), display_confirm_delete_node, 0);
WebcitAddUrlHandler(HKEY("delete_node"), delete_node, 0);
WebcitAddUrlHandler(HKEY("display_add_node"), display_add_node, 0);
- RegisterIterator("NODECONFIG", 0, NULL, load_netconf, NodeCfgSubst, DeleteHash, CTX_NODECONF);
+ RegisterIterator("NODECONFIG", 0, NULL, load_netconf, NodeCfgSubst, DeleteHash, CTX_NODECONF, CTX_NONE);
}
/*@}*/
RegisterNamespace("PREF:VALUE", 1, 1, tmplput_CFG_Value, CTX_SESSION);
RegisterNamespace("PREF:DESCR", 1, 1, tmplput_CFG_Descr, CTX_SESSION);
- RegisterIterator("PREF:ZONE", 0, ZoneHash, NULL, CfgZoneTempl, NULL, CTX_PREF);
+ RegisterIterator("PREF:ZONE", 0, ZoneHash, NULL, CfgZoneTempl, NULL, CTX_PREF, CTX_NONE);
RegisterConditional(HKEY("COND:PREF"), 4, ConditionalPreference, CTX_NONE);
}
TemplateParam *Param;
WCTemplateToken *NewToken = (WCTemplateToken*)malloc(sizeof(WCTemplateToken));
+ NewToken->FileName = pTmpl->FileName; /* to print meaningfull log messages... */
NewToken->Flags = 0;
NewToken->Line = Line + 1;
NewToken->pTokenStart = pTmplStart;
HashList *StaticList;
int AdditionalParams;
int ContextType;
+ int XPectContextType;
RetrieveHashlistFunc GetHash;
HashDestructorFunc Destructor;
SubTemplFunc DoSubTemplate;
Tokens->Params[0]->Start,
Tokens->Params[0]->len,
&vIt)) {
- lprintf(1, "unknown Iterator [%s] (in line %ld); "
+ lprintf(1, "unknown Iterator [%s] (in '%s' line %ld); "
" [%s]\n",
Tokens->Params[0]->Start,
+ ChrPtr(Tokens->FileName),
Tokens->Line,
ChrPtr(Tokens->FlatToken));
StrBufAppendPrintf(
Target,
- "<pre>\nunknown Iterator [%s] (in line %ld); \n"
+ "<pre>\nunknown Iterator [%s] (in '%s' line %ld); \n"
" [%s]\n</pre>",
Tokens->Params[0]->Start,
+ ChrPtr(Tokens->FileName),
Tokens->Line,
ChrPtr(Tokens->FlatToken));
return;
It = (HashIterator*) vIt;
if (Tokens->nParameters < It->AdditionalParams + 2) {
- lprintf(1, "Iterator [%s] (in line %ld); "
+ lprintf(1, "Iterator [%s] (in '%s' line %ld); "
"doesn't work with %ld params [%s]\n",
Tokens->Params[0]->Start,
+ ChrPtr(Tokens->FileName),
Tokens->Line,
Tokens->nParameters,
ChrPtr(Tokens->FlatToken));
StrBufAppendPrintf(
Target,
- "<pre>Iterator [%s] \n(in line %ld);\n"
+ "<pre>Iterator [%s] \n(in '%s' line %ld);\n"
"doesn't work with %ld params \n[%s]\n</pre>",
Tokens->Params[0]->Start,
+ ChrPtr(Tokens->FileName),
Tokens->Line,
Tokens->nParameters,
ChrPtr(Tokens->FlatToken));
return;
}
+ if ((It->XPectContextType != CTX_NONE) &&
+ (It->XPectContextType != ContextType)) {
+ lprintf(1, "Iterator [%s] (in '%s' line %ld); "
+ "requires context of type %ld, have %ld [%s]\n",
+ Tokens->pName,
+ ChrPtr(Tokens->FileName),
+ Tokens->Line,
+ It->XPectContextType,
+ ContextType,
+ ChrPtr(Tokens->FlatToken));
+ StrBufAppendPrintf(
+ Target,
+ "<pre>\nIterator [%s] (in '%s' line %ld);"
+ " requires context of type %ld, have %ld!\n[%s]\n</pre>\n",
+ Tokens->pName,
+ ChrPtr(Tokens->FileName),
+ Tokens->Line,
+ It->XPectContextType,
+ ContextType,
+ ChrPtr(Tokens->FlatToken));
+ return ;
+
+ }
+
+
+
+
if (It->StaticList == NULL)
List = It->GetHash(Target, nArgs, Tokens, Context, ContextType);
else
RetrieveHashlistFunc GetHash,
SubTemplFunc DoSubTempl,
HashDestructorFunc Destructor,
- int ContextType)
+ int ContextType,
+ int XPectContextType)
{
HashIterator *It = (HashIterator*)malloc(sizeof(HashIterator));
It->StaticList = StaticList;
It->DoSubTemplate = DoSubTempl;
It->Destructor = Destructor;
It->ContextType = ContextType;
+ It->XPectContextType = XPectContextType;
Put(Iterators, Name, len, It, NULL);
}
RegisterConditional(HKEY("COND:USERACCESS"), 0, ConditionalUserAccess, CTX_USERLIST);
RegisterConditional(HKEY("COND:USERLIST:FLAG:USE_INTERNET"), 0, ConditionalFlagINetEmail, CTX_USERLIST);
- RegisterIterator("USERLIST", 0, NULL, iterate_load_userlist, NULL, DeleteHash, CTX_USERLIST);
+ RegisterIterator("USERLIST", 0, NULL, iterate_load_userlist, NULL, DeleteHash, CTX_USERLIST, CTX_NONE);
}
} TemplateParam;
typedef struct _TemplateToken {
+ const StrBuf *FileName; /* Reference to print error messages; not to be freed */
StrBuf *FlatToken;
long Line;
const char *pTokenStart;
#define CTX_NODECONF 7
#define CTX_USERLIST 8
#define CTX_MAILSUM 9
-
+#define CTX_MIME_ATACH 10
void RegisterNS(const char *NSName, long len,
int nMinArgs,
RetrieveHashlistFunc GetHash,
SubTemplFunc DoSubTempl,
HashDestructorFunc Destructor,
- int ContextType);
-#define RegisterIterator(a, b, c, d, e, f, g) RegisterITERATOR(a, sizeof(a)-1, b, c, d, e, f, g)
+ int ContextType,
+ int XPectContextType);
+#define RegisterIterator(a, b, c, d, e, f, g, h) RegisterITERATOR(a, sizeof(a)-1, b, c, d, e, f, g, h)
void SVPut(char *keyname, size_t keylen, int keytype, char *Data);
#define svput(a, b, c) SVPut(a, sizeof(a) - 1, b, c)
WebcitAddUrlHandler(HKEY("terminate_session"), _terminate_session, 0);
WebcitAddUrlHandler(HKEY("edit_me"), edit_me, 0);
- RegisterIterator("WHOLIST", 0, NULL, GetWholistHash, WholistSubst, DeleteWholistHash, CTX_WHO);
+ RegisterIterator("WHOLIST", 0, NULL, GetWholistHash, WholistSubst, DeleteWholistHash, CTX_WHO, CTX_NONE);
}