2 * Lots of different room-related operations.
8 char *viewdefs[VIEW_MAX]; /* the different kinds of available views */
10 ROOM_VIEWS exchangeable_views[VIEW_MAX][VIEW_MAX] = { /* the different kinds of available views for a view */
11 {VIEW_BBS, VIEW_MAILBOX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX },
12 {VIEW_BBS, VIEW_MAILBOX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX },
13 {VIEW_MAX, VIEW_MAX, VIEW_ADDRESSBOOK, VIEW_CALENDAR, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX },
14 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_CALENDAR, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX /*VIEW_CALBRIEF*/, VIEW_MAX, VIEW_MAX },
15 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_TASKS, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, },
16 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_NOTES, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, },
17 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_WIKI, VIEW_MAX, VIEW_MAX, VIEW_MAX},
18 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_CALENDAR, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX/*VIEW_CALBRIEF*/, VIEW_MAX, VIEW_MAX},
19 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_JOURNAL, VIEW_MAX },
20 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_BLOG },
22 /* the brief calendar view is disabled: VIEW_CALBRIEF */
24 ROOM_VIEWS allowed_default_views[VIEW_MAX] = {
25 1, /* VIEW_BBS Bulletin board view */
26 1, /* VIEW_MAILBOX Mailbox summary */
27 1, /* VIEW_ADDRESSBOOK Address book view */
28 1, /* VIEW_CALENDAR Calendar view */
29 1, /* VIEW_TASKS Tasks view */
30 1, /* VIEW_NOTES Notes view */
31 1, /* VIEW_WIKI Wiki view */
32 0, /* VIEW_CALBRIEF Brief Calendar view */
33 0, /* VIEW_JOURNAL Journal view */
34 0 /* VIEW_BLOG Blog view (not yet implemented) */
39 * Initialize the viewdefs with localized strings
41 void initialize_viewdefs(void) {
42 viewdefs[VIEW_BBS] = _("Bulletin Board");
43 viewdefs[VIEW_MAILBOX] = _("Mail Folder");
44 viewdefs[VIEW_ADDRESSBOOK] = _("Address Book");
45 viewdefs[VIEW_CALENDAR] = _("Calendar");
46 viewdefs[VIEW_TASKS] = _("Task List");
47 viewdefs[VIEW_NOTES] = _("Notes List");
48 viewdefs[VIEW_WIKI] = _("Wiki");
49 viewdefs[VIEW_CALBRIEF] = _("Calendar List");
50 viewdefs[VIEW_JOURNAL] = _("Journal");
51 viewdefs[VIEW_BLOG] = _("Blog");
56 void tmplput_ROOM_COLLECTIONTYPE(StrBuf *Target, WCTemplputParams *TP)
58 folder *Folder = (folder *)CTX;
60 switch(Folder->view) {
62 StrBufAppendBufPlain(Target, HKEY("vevent"), 0);
65 StrBufAppendBufPlain(Target, HKEY("vtodo"), 0);
67 case VIEW_ADDRESSBOOK:
68 StrBufAppendBufPlain(Target, HKEY("vcard"), 0);
71 StrBufAppendBufPlain(Target, HKEY("vnotes"), 0);
74 StrBufAppendBufPlain(Target, HKEY("vjournal"), 0);
77 StrBufAppendBufPlain(Target, HKEY("wiki"), 0);
84 int ConditionalRoomHasGroupdavContent(StrBuf *Target, WCTemplputParams *TP)
86 folder *Folder = (folder *)CTX;
88 lprintf(0, "-> %s: %ld\n", ChrPtr(Folder->name), Folder->view);
90 return ((Folder->view == VIEW_CALENDAR) ||
91 (Folder->view == VIEW_TASKS) ||
92 (Folder->view == VIEW_ADDRESSBOOK) ||
93 (Folder->view == VIEW_NOTES) ||
94 (Folder->view == VIEW_JOURNAL) );
100 int ConditionalIsRoomtype(StrBuf *Target, WCTemplputParams *TP)
105 (TP->Tokens->nParameters < 3))
107 return ((WCC->CurRoom.view < VIEW_BBS) ||
108 (WCC->CurRoom.view > VIEW_MAX));
111 return WCC->CurRoom.view == GetTemplateTokenNumber(Target, TP, 2, VIEW_BBS);
115 void tmplput_CurrentRoomViewString(StrBuf *Target, WCTemplputParams *TP)
121 (WCC->CurRoom.defview >= VIEW_MAX) ||
122 (WCC->CurRoom.defview < VIEW_BBS))
124 LogTemplateError(Target, "Token", ERR_PARM2, TP,
125 "Roomview [%ld] not valid\n",
127 WCC->CurRoom.defview : -1);
131 Buf = NewStrBufPlain(_(viewdefs[WCC->CurRoom.defview]), -1);
132 StrBufAppendTemplate(Target, TP, Buf, 0);
136 void tmplput_RoomViewString(StrBuf *Target, WCTemplputParams *TP)
141 CheckThis = GetTemplateTokenNumber(Target, TP, 0, 0);
142 if ((CheckThis >= VIEW_MAX) || (CheckThis < VIEW_BBS))
144 LogTemplateError(Target, "Token", ERR_PARM2, TP,
145 "Roomview [%ld] not valid\n",
150 Buf = NewStrBufPlain(_(viewdefs[CheckThis]), -1);
151 StrBufAppendTemplate(Target, TP, Buf, 0);
157 int ConditionalIsAllowedDefaultView(StrBuf *Target, WCTemplputParams *TP)
165 CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
166 if ((CheckThis >= VIEW_MAX) || (CheckThis < VIEW_BBS))
168 LogTemplateError(Target, "Conditional", ERR_PARM2, TP,
169 "Roomview [%ld] not valid\n",
174 return allowed_default_views[CheckThis] != 0;
177 int ConditionalThisRoomDefView(StrBuf *Target, WCTemplputParams *TP)
185 CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
186 return CheckThis == WCC->CurRoom.defview;
189 int ConditionalThisRoomCurrView(StrBuf *Target, WCTemplputParams *TP)
197 CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
198 return CheckThis == WCC->CurRoom.view;
201 int ConditionalThisRoomHaveView(StrBuf *Target, WCTemplputParams *TP)
209 CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
210 if ((CheckThis >= VIEW_MAX) || (CheckThis < VIEW_BBS))
212 LogTemplateError(Target, "Conditional", ERR_PARM2, TP,
213 "Roomview [%ld] not valid\n",
218 return exchangeable_views [WCC->CurRoom.defview][CheckThis] != VIEW_MAX;
221 void tmplput_ROOM_VIEW(StrBuf *Target, WCTemplputParams *TP)
223 folder *Folder = (folder *)CTX;
224 StrBufAppendPrintf(Target, "%d", Folder->view);
226 void tmplput_ROOM_DEFVIEW(StrBuf *Target, WCTemplputParams *TP)
228 folder *Folder = (folder *)CTX;
229 StrBufAppendPrintf(Target, "%d", Folder->defview);
233 void tmplput_CurrentRoomDefView(StrBuf *Target, WCTemplputParams *TP)
237 StrBufAppendPrintf(Target, "%d", WCC->CurRoom.defview);
244 initialize_viewdefs();
246 RegisterNamespace("THISROOM:VIEW_STRING", 0, 1, tmplput_CurrentRoomViewString, NULL, CTX_NONE);
247 RegisterNamespace("ROOM:VIEW_STRING", 1, 2, tmplput_RoomViewString, NULL, CTX_NONE);
249 RegisterConditional(HKEY("COND:ALLOWED_DEFAULT_VIEW"), 0, ConditionalIsAllowedDefaultView, CTX_NONE);
250 RegisterConditional(HKEY("COND:THISROOM:DEFAULT_VIEW"), 0, ConditionalThisRoomDefView, CTX_NONE);
251 RegisterNamespace("THISROOM:DEFAULT_VIEW", 0, 0, tmplput_CurrentRoomDefView, NULL, CTX_NONE);
252 RegisterNamespace("ROOM:INFO:DEFVIEW", 0, 1, tmplput_ROOM_DEFVIEW, NULL, CTX_ROOMS);
254 RegisterConditional(HKEY("COND:ROOM:TYPE_IS"), 0, ConditionalIsRoomtype, CTX_NONE);
256 RegisterConditional(HKEY("COND:THISROOM:HAVE_VIEW"), 0, ConditionalThisRoomHaveView, CTX_NONE);
257 RegisterConditional(HKEY("COND:ROOM:GROUPDAV_CONTENT"), 0, ConditionalRoomHasGroupdavContent, CTX_ROOMS);
259 RegisterConditional(HKEY("COND:THISROOM:CURR_VIEW"), 0, ConditionalThisRoomCurrView, CTX_NONE);
260 RegisterNamespace("ROOM:INFO:VIEW", 0, 1, tmplput_ROOM_VIEW, NULL, CTX_ROOMS);
262 RegisterNamespace("ROOM:INFO:COLLECTIONTYPE", 0, 1, tmplput_ROOM_COLLECTIONTYPE, NULL, CTX_ROOMS);