2 * Lots of different room-related operations.
4 * Copyright (c) 1996-2010 by the citadel.org team
6 * This program is free software; you can redistribute it and/or modify
7 * it under the terms of the GNU General Public License as published by
8 * the Free Software Foundation; either version 3 of the License, or
9 * (at your option) any later version.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22 #include "webserver.h"
24 char *viewdefs[VIEW_MAX]; /* the different kinds of available views */
26 ROOM_VIEWS exchangeable_views[VIEW_MAX][VIEW_MAX] = { /* the different kinds of available views for a view */
27 {VIEW_BBS, VIEW_MAILBOX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX },
28 {VIEW_BBS, VIEW_MAILBOX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX },
29 {VIEW_MAX, VIEW_MAX, VIEW_ADDRESSBOOK, VIEW_CALENDAR, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX },
30 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_CALENDAR, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX /*VIEW_CALBRIEF*/, VIEW_MAX, VIEW_MAX },
31 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_TASKS, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, },
32 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_NOTES, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, },
33 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_WIKI, VIEW_MAX, VIEW_MAX, VIEW_MAX},
34 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_CALENDAR, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX/*VIEW_CALBRIEF*/, VIEW_MAX, VIEW_MAX},
35 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_JOURNAL, VIEW_MAX },
36 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_DRAFTS, VIEW_MAX },
37 {VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_MAX, VIEW_BLOG },
39 /* the brief calendar view is disabled: VIEW_CALBRIEF */
41 ROOM_VIEWS allowed_default_views[VIEW_MAX] = {
42 1, /* VIEW_BBS Bulletin board */
43 1, /* VIEW_MAILBOX Mailbox summary */
44 1, /* VIEW_ADDRESSBOOK Address book */
45 1, /* VIEW_CALENDAR Calendar by month or day */
46 1, /* VIEW_TASKS Task list */
47 1, /* VIEW_NOTES Sticky notes */
48 1, /* VIEW_WIKI Wiki */
49 0, /* VIEW_CALBRIEF Calendar list of events */
50 0, /* VIEW_JOURNAL Journal */
51 0, /* VIEW_DRAFTS Drafts */
52 1 /* VIEW_BLOG Blog */
56 * Initialize the viewdefs with localized strings
58 void initialize_viewdefs(void) {
59 viewdefs[VIEW_BBS] = _("Bulletin Board");
60 viewdefs[VIEW_MAILBOX] = _("Mail Folder");
61 viewdefs[VIEW_ADDRESSBOOK] = _("Address Book");
62 viewdefs[VIEW_CALENDAR] = _("Calendar");
63 viewdefs[VIEW_TASKS] = _("Task List");
64 viewdefs[VIEW_NOTES] = _("Notes List");
65 viewdefs[VIEW_WIKI] = _("Wiki");
66 viewdefs[VIEW_CALBRIEF] = _("Calendar List");
67 viewdefs[VIEW_JOURNAL] = _("Journal");
68 viewdefs[VIEW_DRAFTS] = _("Drafts");
69 viewdefs[VIEW_BLOG] = _("Blog");
74 void tmplput_ROOM_COLLECTIONTYPE(StrBuf *Target, WCTemplputParams *TP)
76 folder *Folder = (folder *)CTX;
78 switch(Folder->view) {
80 StrBufAppendBufPlain(Target, HKEY("vevent"), 0);
83 StrBufAppendBufPlain(Target, HKEY("vtodo"), 0);
85 case VIEW_ADDRESSBOOK:
86 StrBufAppendBufPlain(Target, HKEY("vcard"), 0);
89 StrBufAppendBufPlain(Target, HKEY("vnotes"), 0);
92 StrBufAppendBufPlain(Target, HKEY("vjournal"), 0);
95 StrBufAppendBufPlain(Target, HKEY("wiki"), 0);
102 int ConditionalRoomHasGroupdavContent(StrBuf *Target, WCTemplputParams *TP)
104 folder *Folder = (folder *)CTX;
106 lprintf(0, "-> %s: %ld\n", ChrPtr(Folder->name), Folder->view);
108 return ((Folder->view == VIEW_CALENDAR) ||
109 (Folder->view == VIEW_TASKS) ||
110 (Folder->view == VIEW_ADDRESSBOOK) ||
111 (Folder->view == VIEW_NOTES) ||
112 (Folder->view == VIEW_JOURNAL) );
118 int ConditionalIsRoomtype(StrBuf *Target, WCTemplputParams *TP)
123 (TP->Tokens->nParameters < 3))
125 return ((WCC->CurRoom.view < VIEW_BBS) ||
126 (WCC->CurRoom.view > VIEW_MAX));
129 return WCC->CurRoom.view == GetTemplateTokenNumber(Target, TP, 2, VIEW_BBS);
133 void tmplput_CurrentRoomViewString(StrBuf *Target, WCTemplputParams *TP)
139 (WCC->CurRoom.defview >= VIEW_MAX) ||
140 (WCC->CurRoom.defview < VIEW_BBS))
142 LogTemplateError(Target, "Token", ERR_PARM2, TP,
143 "Roomview [%ld] not valid\n",
145 WCC->CurRoom.defview : -1);
149 Buf = NewStrBufPlain(_(viewdefs[WCC->CurRoom.defview]), -1);
150 StrBufAppendTemplate(Target, TP, Buf, 0);
154 void tmplput_RoomViewString(StrBuf *Target, WCTemplputParams *TP)
159 CheckThis = GetTemplateTokenNumber(Target, TP, 0, 0);
160 if ((CheckThis >= VIEW_MAX) || (CheckThis < VIEW_BBS))
162 LogTemplateError(Target, "Token", ERR_PARM2, TP,
163 "Roomview [%ld] not valid\n",
168 Buf = NewStrBufPlain(_(viewdefs[CheckThis]), -1);
169 StrBufAppendTemplate(Target, TP, Buf, 0);
175 int ConditionalIsAllowedDefaultView(StrBuf *Target, WCTemplputParams *TP)
183 CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
184 if ((CheckThis >= VIEW_MAX) || (CheckThis < VIEW_BBS))
186 LogTemplateError(Target, "Conditional", ERR_PARM2, TP,
187 "Roomview [%ld] not valid\n",
192 return allowed_default_views[CheckThis] != 0;
195 int ConditionalThisRoomDefView(StrBuf *Target, WCTemplputParams *TP)
203 CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
204 return CheckThis == WCC->CurRoom.defview;
207 int ConditionalThisRoomCurrView(StrBuf *Target, WCTemplputParams *TP)
215 CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
216 return CheckThis == WCC->CurRoom.view;
219 int ConditionalThisRoomHaveView(StrBuf *Target, WCTemplputParams *TP)
227 CheckThis = GetTemplateTokenNumber(Target, TP, 2, 0);
228 if ((CheckThis >= VIEW_MAX) || (CheckThis < VIEW_BBS))
230 LogTemplateError(Target, "Conditional", ERR_PARM2, TP,
231 "Roomview [%ld] not valid\n",
236 return exchangeable_views [WCC->CurRoom.defview][CheckThis] != VIEW_MAX;
239 void tmplput_ROOM_VIEW(StrBuf *Target, WCTemplputParams *TP)
241 folder *Folder = (folder *)CTX;
242 StrBufAppendPrintf(Target, "%d", Folder->view);
244 void tmplput_ROOM_DEFVIEW(StrBuf *Target, WCTemplputParams *TP)
246 folder *Folder = (folder *)CTX;
247 StrBufAppendPrintf(Target, "%d", Folder->defview);
251 void tmplput_CurrentRoomDefView(StrBuf *Target, WCTemplputParams *TP)
255 StrBufAppendPrintf(Target, "%d", WCC->CurRoom.defview);
262 initialize_viewdefs();
264 RegisterNamespace("THISROOM:VIEW_STRING", 0, 1, tmplput_CurrentRoomViewString, NULL, CTX_NONE);
265 RegisterNamespace("ROOM:VIEW_STRING", 1, 2, tmplput_RoomViewString, NULL, CTX_NONE);
267 RegisterConditional(HKEY("COND:ALLOWED_DEFAULT_VIEW"), 0, ConditionalIsAllowedDefaultView, CTX_NONE);
268 RegisterConditional(HKEY("COND:THISROOM:DEFAULT_VIEW"), 0, ConditionalThisRoomDefView, CTX_NONE);
269 RegisterNamespace("THISROOM:DEFAULT_VIEW", 0, 0, tmplput_CurrentRoomDefView, NULL, CTX_NONE);
270 RegisterNamespace("ROOM:INFO:DEFVIEW", 0, 1, tmplput_ROOM_DEFVIEW, NULL, CTX_ROOMS);
272 RegisterConditional(HKEY("COND:ROOM:TYPE_IS"), 0, ConditionalIsRoomtype, CTX_NONE);
274 RegisterConditional(HKEY("COND:THISROOM:HAVE_VIEW"), 0, ConditionalThisRoomHaveView, CTX_NONE);
275 RegisterConditional(HKEY("COND:ROOM:GROUPDAV_CONTENT"), 0, ConditionalRoomHasGroupdavContent, CTX_ROOMS);
277 RegisterConditional(HKEY("COND:THISROOM:CURR_VIEW"), 0, ConditionalThisRoomCurrView, CTX_NONE);
278 RegisterNamespace("ROOM:INFO:VIEW", 0, 1, tmplput_ROOM_VIEW, NULL, CTX_ROOMS);
280 RegisterNamespace("ROOM:INFO:COLLECTIONTYPE", 0, 1, tmplput_ROOM_COLLECTIONTYPE, NULL, CTX_ROOMS);