Index: dotlrn_packages/packages/forums/catalog/forums.ar_EG.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.ar_EG.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.ar_EG.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,28 @@ + + + + وافق + إلصق؟ + :الملحقاتُ + المؤلف + بالتّاريخ + بالمنتدى + مُغلق + أكّد؟ + :أَكّدْ حذفْ + :أَكّدْ الإرسال إلى المنتدى + أخلق منتدًى جديدًا + إخلقْ منتدى جديداً + إحذفْ + عَطّلْ + عُطّلْ + آخر إرسال + الرسائل الأخيرة في الموضوعِ + الرسائل الأولى في الموضوعِ + لا + أرسلْ رسالةً جديدةً + الردود + :إبحثْ + الموضوع + نعم + Index: dotlrn_packages/packages/forums/catalog/forums.ar_LB.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.ar_LB.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.ar_LB.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + أدرْ + الإدارة + للجميع + وافق + هَلْ أنت متأكّد أنك تُريدُ أَنْ تَحْذفَ هذه الرسالة و <strong>كلّ الإجابات إليها</strong>؟ + إلصقْ؟ + الملحقات: + المؤلف + الرجوع الى %forum.name% + <a href="%thread_url%">الرجوع</a> الى %forum.name% + جسم + بالتاريخ + بالمنتدى + رخصة + مُغلق + أكّد؟ + أَكّدْ حذفْ: + أَكّدْ الإرسال إلى المنتدى: + انشئ منتدًى جديداً + انشئ منتدًى جديداً + إحذفْ + عَطّلْ + عَطّلها + عُطّلْ + تحرير + تحرير + إعادة التحرير + حررْ المنتدى + :حررْ الرسالة + بريد إلكتروني + في %posting_date%, %user_name% كتب: + أرسلْ بالبريد الإلكتروني رسالة: + أرسلْ بالبريد الإلكتروني إلى صديق + خوّلْ + خوّلها + مُخَوّل + الحالة الكاملة + العرض الاول + مسطح + الصيغة + المنتدى + المنتدى: + هويّة المنتدى + هويّة المنتدى + إسم المنتدى + إرسالات المنتدى + هويّة المنتدى + المنتديات + المنتديات: تاريخِ الإرسالات لـِ + تقدم + حَولْ: + إتش تي إم إل + آخر إرسال + الرسائل الأخيرة في الموضوعِ + أرسلْ بالبريد الإلكتروني نسخةَ عن الرسالةِ التالية: + الرسائل الأولى في الموضوعِ + إدارةُ المنتديات + تحتاجْ لتَزويد رسالةً للعَرْض. + تحتاجْ لتَزويد رسالةً للعَرْض ملحقات! + لاحظْ أنت مُشترك أصلاً في المنتدى ككل. أنت لَرُبَّمَا تَحْصلُ على تبليغات مضاعفة. + رجاءً أَكّدْ البريدَ التالي: + من فضلك أدخلْ رسالةً + من فضلك أدخل صفاً + المستخدمون يستطيعون انشاء حالات جدد + هَلْ أنت تحب أَنْ تُلحقْ ملفاً بهذه الرسالةِ؟ + هَلْ أنت تُحب أَنْ تَشتركَ في الردودِ؟ + يجب عليك إمّا أن ترسل إلى منتدى أو ردًّا على رسالة أخرى + أدرْ + أدرْ المنتدى: + أدرْ/عدلْ + هوية الرسالة + تعديل + مُعَدْل + إسم + منتدى جديد + لا + لا منتديات + لا رسالات + .لا إرسالات + لا أحد + رسالة واحدة + حالة واحدة + إفتحْ + محددات + الهويةُ الأصلُ + معلق + إنتظار الحالات + معروض + إرسلْ رسالةً + أرسلْ رسالةً جديدةً + إرسلْ ردّاً + إرسلْ إلى المنتدى: + مُرسلْ + معروض من قبل + تأريخِ الإرسال + تاريخِ الإرسال + تاريخِ الإرسال لـِ + سياسة الإرسال + العرض + مراجعة + ْرد: + إرفضْ + مرفوض + الردود + رُدّ + الرد على اول شيء معروض في هذا الخيط + الرد على اول شيء معروض في هذه الصفحة + إبحثْ: + إبحثْ + إبحثْ: + إبحثْ في المنتديات + الموضوع + إشتركْ؟ + النَصُّ + هذا المنتدى + حالات + حالات + شاهدْ + نعم + أنت يمكنك + مُلاحظتكَ + Index: dotlrn_packages/packages/forums/catalog/forums.ca_ES.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.ca_ES.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.ca_ES.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + Administrar + Administraci� + An�nim + aprovar + Esteu segur que voleu eliminar aquest missatge i <strong>totes les seues respostes</strong>? + Adjuntar? + Adjunts: + Autor + Tornar a %forum.name% + <a href="%thread_url%">Tornar</a> a %forum.name% + Cos del missatge + per data + per f�rum + Branca + tancat + Confirmar? + Confirmar l'eliminaci�: + Confirmar el missatge per al f�rum: + Crear un f�rum nou + Crear un f�rum nou + Eliminar + inhabilitat + deshabilitar-ho + inhabilitat + Editar + Editar + Tornar a editar + Editar f�rum + Editar missatge: + Correu electr�nic + El %posting_date%, %user_name% va escriure: + Missatge: + Enviar a un amic + habilitar + habilitar-ho + habilitat + Fil complet + Primer missatge + Sense fils + Format + F�rum + F�rum: + Identificador del f�rum + identificador del f�rum + Nom del f�rum + Missatges del f�rum + Identificador del f�rum + F�rums + F�rums: Historial de missatges de + Reenviar + Reenviar: + HTML + Darrer missatge + Darrer missatge del tema + Enviar una c�pia del missatge seg�ent: + Primer missatge del tema + Administraci� de f�rums + Heu de proporcionar un missatge per a mostrar + heu de proporcionar un missatge per a poder mostrar els arxius adjunts + (Atenci�: Ja esteu subscrit a aquest f�rum. En tornar-vos-hi a subscriure podeu rebre notificacions duplicades). + Per favor, confirmeu el missatge seg�ent: + Per favor, introdu�u el missatge + Per favor, introdu�u un t�tol + Els usuaris poden crear fils nous + Voleu adjuntar un arxiu a aquest missatge? + Voleu subscriure-vos per a rebre respostes? + Heu d'enviar un missatge al f�rum o b� contestar a un altre missatge + Administrar + Administrar el f�rum: + Administrar/Moderar + Identificador del missatge + Moderar + moderat + Nom + F�rum nou + No + Cap f�rum + Cap missatge + Cap missatge. + Cap + Un missatge + Un fil + obrir + Par�metres + Identificador del pare + Pendent + Fils pendents + Enviar + Enviar un missatge + Enviar un missatge nou + Enviar una resposta + Enviar al f�rum: + Enviat + Enviat per + Data d'enviament + Historial d'enviament + Historial de missatges per a + Pol�tica de publicacions + Presentaci� + Vista preliminar + Re: + refusar + Refusat + Respostes + Respondre + Respondre al primer missatge del tema + Respondre al primer missatge d'aquesta p�gina + Buscar: + Buscar + Buscar: + Buscar f�rums + T�tol + Subscriure-s'hi? + Text + Aquest f�rum �s + Amb fils + Fils + Veure + S� + Podeu + El vostre comentari + Index: dotlrn_packages/packages/forums/catalog/forums.ch_zh.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.ch_zh.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.ch_zh.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + 管理 + 管理 + 匿名的 + 批准 + 确实要删除此信息及<strong>全部回复</strong>吗? + 要添加吗? + 附件: + 作者 + 回到%forum.name% + <a href="%thread_url%">返回</a>到%forum.name% + 内容 + 按日期 + 按论坛 + 章程 + 已关闭的 + 确认吗? + 确认删除: + 确认发布帖子到论坛: + 创建新论坛 + 创建新论坛 + 删除 + 使不能 + 使不能 + 使不能的 + 编辑 + 编辑 + 重新编辑 + 编辑论坛 + 编辑信息: + Email + %posting_date%日,%user_name%写到: + Email信息: + Email给朋友 + 使能 + 使能 + 使能的 + 全Thread + 第一帖 + 普通的 + 格式 + 论坛 + 论坛: + Forum ID + forum ID + 论坛名称 + 论坛发布 + ForumID + 论坛 + 论坛:发布帖子历史记录记录 + 向前 + 向前: + HTML + 最后帖 + 此主题最后帖子 + Email下列信息的拷贝: + 此主题的第一帖子 + 论坛管理 + 需要提供显示信息。 + 需要提供显示附件信息! + (注意:你已整体订阅论坛。你可能收到重复的通知。) + 请确认下面的帖子: + 请输入信息 + 请输入主题 + 用户可创建新Threads + 要为此信息附加文件吗? + 要订阅回复吗? + 可以在论坛发布帖子,也可以回复信息。 + 管理 + 管理论坛: + 控制/调制 + Message ID + 调制 + 已调制的 + 名称 + 新论坛 + 没有 + 没有论坛 + 没有信息 + 没有帖子。 + 没有 + 一条信息 + 一个Thread + 打开 + 参数 + parent ID + 待定 + 待定Threads + 发布 + 发布信息 + 发布新信息 + 回复帖子 + 发布帖子到论坛: + 已发布的 + 发布 + 发布日期 + 发布历史记录 + 发布历史记录 + 发布策略 + 陈述 + 预览 + 回复: + 拒绝 + 被拒绝的 + 回复 + 回复 + 回复此thread第一帖子 + 回复此页第一帖子 + 搜索: + 搜索 + 搜索: + 搜索论坛 + 主题 + 要订阅吗? + 普通文本 + 此论坛是 + Threaded + Threads + 查看 + + 你可能 + 注意 + Index: dotlrn_packages/packages/forums/catalog/forums.da_DK.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.da_DK.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.da_DK.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + Administr�r + Administration + Anonym + godkend + Er du sikker p�, at du �nsker at slette dette indl�g og <strong>alle svar til den</strong> + Vedh�ft? + Vedh�ftelser: + Forfatter + Tilbage til %forum.name% + <a href="%thread_url%">Tilbage</a> til %forum.name% + Tekst + efter Dato + efter Forum + Form�lsbeskrivelse + lukket + Bekr�ft? + Bekr�ft Sletning: + Bekr�ft indl�g til forum: + Opret et nyt Forum + Opret nyt Forum + Slet + deaktiv�r + deaktivere det + deaktiveret + Rediger + rediger + Rediger igen + Rediger Forum + Rediger Indl�g: + E-mail + %user_name% skrev p� %posting_date%: + E-mail Besked: + Send til en ven + aktiv�r + aktiv�re det + aktiveret + Hele Tr�den + F�rste Indl�g + Fladt + Format + Forum + Forum: + Forum ID + forum ID + Forumnavn + Forumindl�g + Forum ID + Fora + Fora: Indl�g for + Frem + Fwd: + html + Seneste Indl�g + Sidste indl�g indenfor emne + Send en kopi af det f�lgende indl�g: + F�rste indl�g indenfor emne + Administration af Fora + Du skal angive et indl�g til visning. + du skal angive et indl�g for at vise vedh�ftelser. + (Bem�rk, at du allerede abonnerer p� hele dette forum. Det er derfor muligt, at du modtager besked om nye indl�g to gange.) + Bekr�ft venligst den f�lgende indl�g: + Skriv venligt et indl�g + Skriv venligt et emne + Brugere kan oprette nye tr�de + �nsker du at vedh�fte en fil til dette indl�g? + �nsker du er at abonnere p� svar? + Du skal enten skrive et indl�g til et forum eller svare p� et andet indl�g + Administr�r + Administr�r Forum + Administr�r/Moder�r + Besked ID + Moder�r + modereret + Navn + Nyt Forum + Nej + Ingen Fora + Ingen Beskeder + Ingen Indl�g. + Ingen + Et Indl�g + En Tr�d + �bn + Parametre + parent ID + Afventer + Afventende Tr�de + Indl�g + Indsend et indl�g + Indsend et nyt indl�g + Indsend et Svar + Indsend til Forum: + Indsendt + Indsendt af + Indsendelsesdato + Indsendelseshistorik + Indsendelseshistorik for + Indsendelsespolitik + Pr�sentation + Vis + Re: + afvis + Afvist + Svar + svar + Besvar det f�rste indl�g i tr�den + Besvar det f�rste indl�g p� denne side + S�g: + S�g + S�g: + S�g i Fora + Emne + Abonn�r? + tekst + Dette forum er + Opdelt i tr�de + Tr�de + Vis + Ja + Du kan + Din Note + Index: dotlrn_packages/packages/forums/catalog/forums.de_DE.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.de_DE.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.de_DE.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,159 @@ + + + + Forum verwalten + Diskussionsforen verwalten + Sie koennen in diesem Forum Ihre Nachricht auch anonym senden. + Anonym + Freigeben + Wollen Sie diesen Beitrag und <strong>alle zugeh�rigen Antworten </strong> wirklich l�schen? + Datei Anh�ngen? + Anh�nge: + Verfasser + Verf�gbare Foren + Zur�ck zu %forum.name% + <a href="%thread_url%">Zur�ck</a> zu %forum.name% + Text + nach Datum + nach Forum + Beschreibung + Geschlossen + zuklappen + Best�tigen + L�schen best�tigen: + Verschieben best�tigen + Forumsbeitrag best�tigen: + Neues Forum erstellen + Neues Forum erstellen + L�schen + Deaktivieren + deaktivieren + Deaktiviert + Anzeige anpassen: + Zeige vollstaendige Nachrichten + Bearbeiten + Bearbeiten + Erneut bearbeiten + Forum bearbeiten + Forumsbeitrag bearbeiten: + E-Mail-Adresse + %user_name% schrieb am %posting_date%: + E-Mail-Nachricht: + Weiterleiten + Aktivieren + aktivieren + aktiviert + Gesamter Thread + aufklappen + Erster Beitrag + Chronologisch geordnet + flach + Format + Forum + Forum: + Foren-ID + Foren-ID + Name des Forums + Forumsbeitrag + Foren-ID + Foren + Foren: Verlauf der Beitr�ge f�r + Weiterleiten + Fwd: + HTML + In diesem Forum wird anstatt ihres Namens ihr Alias angezeigt: + Zeige nur die Ueberschriften + Letzter Beitrag + Letzter Beitrag zum Thema + Eine Kopie des folgenden Beitrags per E-Mail versenden: + Erster Beitrag zum Thema + Diskussionsforen verwalten + Zum Anzeigen der Elemente wird eine Nachricht ben�tigt. + Zum Anzeigen von Anh�ngen wird eine Nachricht ben�tigt. + Hinweis: Sie haben die Benachrichtigungsfunktion bereits f�r das gesamte Forum aktiviert. M�glicherweise erhalten Sie mehrfache Benachrichtigungen. + Bitte best�tigen Sie folgenden Beitrag: + Bitte geben Sie einen Text ein. + Bitte geben Sie einen Betreff ein. + Benutzer d�rfen ein neues Diskussionsthema beginnen + M�chten Sie dem Beitrag einen Anhang hinzuf�gen? + M�chten Sie �ber Antworten benachrichtigt werden? + Sie k�nnen eine Nachricht entweder als eigenst�ndigen Forumsbeitrag posten oder als Antwort auf einen anderen Beitrag. + Verwalten + Forum verwalten: + Verwalten/Moderieren + alle als gelesen markieren + Beitrags-ID + Moderieren + Moderiert + Verschiebe Nachricht + Verschiebe Nachricht in Forum:: + Verschiebe Nachricht zu Nachricht + Verschiebe Thread + Verschiebe Thread in Forum + Verschiebe Nachricht zu anderer Nachricht + Verschiebe Thread in ein anderes Forum + Verschiebe Thread in anderen Thread + Verschiebe den Thread in den Thread + Verschiebe Thread in den Thread + Verschiebe nach + Verschiebe in einen anderen Thread + Name + einger�ckt + Neues Forum erstellen + Nein + Keine Diskussionsforen vorhanden + Zeige Nachrichten nicht eingerueckt + Keine Beitr�ge vorhanden + Keine Beitr�ge vorhanden + Kein Forum vorhanden + Entschuldigung, aber es scheint, dass Sie nicht die benoetigten Rechten besitzen. + am + Einzelner Beitrag + Einzelner Thread + Offen + Einstellungen + ID des �bergeordneten Objekts + Noch nicht freigegeben + Diskussionsthemen mit Beitr�gen, die noch nicht freigegeben wurden + Abschicken + Neuen Beitrag verfassen + Neues Thema beginnen + Antworten + Ver�ffentlichen auf Forum: + Beitrag vom + Von + Ver�ffentlichungsdatum + Verlauf der Beitr�ge + Verlauf der Beitr�ge f�r + Teilnahmeregelung + Darstellungsform + Foren + Vorschau + drucken + Druckansicht + Re: + Ablehnen + Abgelehnt + Antworten + Antworten + Ersten Beitrag des Diskussionsthemas beantworten + Ersten Beitrag auf dieser Seite beantworten + Suche: + Suche + Suche: + In Foren suchen + Entschuldigen Sie, aber es gibt kein anderes Forum, in welches dieser Thread geschoben werden k�nnte. + Betreff + Benachrichtigungsfunktion aktivieren? + andere abonnieren + Einfacher Text + Dieses Forum ist + Strukturiert + Diskussionsthemen + Ansicht + Zeige Nachrichten eingerueckt + Ja + Sie k�nnen + Sie k�nnen es + Ihr Kommentar + Index: dotlrn_packages/packages/forums/catalog/forums.el_GR.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.el_GR.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.el_GR.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,19 @@ + + + + Διαχείρηση + Επισύναψη; + Συγγραφέας + Περιεχόμενο + Πρώτο Μήνυμα + Φόρουμ: + Τελευταίο Μήνυμα + Όχι + Αποστολή + Νέο Μήνυμα + Προεπισκόπηση + Απαντήσεις + Αναζήτηση: + Θέμα + Ναι + Index: dotlrn_packages/packages/forums/catalog/forums.en_AU.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.en_AU.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.en_AU.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + Administer + Administration + Anonymous + approve + Are you sure you want to delete this message and <strong>all replies to it</strong>? + Attach? + Attachments: + Author + Back to %forum.name% + <a href="%thread_url%">Back</a> to %forum.name% + Body + by Date + by Forum + Charter + closed + Confirm? + Confirm Delete: + Confirm Post to Forum: + Create a New Forum + Create New Forum + Delete + disable + disable it + disabled + Edit + Edit + Edit again + Edit forum + Edit Message: + Email + On %posting_date%, %user_name% wrote: + Email Message: + Email to a friend + enable + enable it + enabled + Entire Thread + First Post + Flat + Format + Forum + Forum: + Forum ID + forum ID + Forum Name + Forum Posting + ForumID + Forums + Forums: Posting history for + Forward + Fwd: + HTML + Last Post + Last post in subject + Email a copy of the following message: + First post in subject + Forums Administration + Need to provide a message to display. + need to provide a message to display attachments! + (Note that you are already subscribed to the forum as a whole. You may get duplicate notifications.) + Please confirm the following post: + Please enter a message + Please enter a subject + Users Can Create New Threads + Would you like to attach a file to this message? + Would you like to subscribe to responses? + You either have to post to a forum or in reply to another message + Manage + Manage Forum: + Manage/Moderate + Message ID + Moderate + moderated + Name + New Forum + No + No Forums + No Messages + No Postings. + None + One Message + One Thread + open + Parameters + parent ID + Pending + Pending Threads + Post + Post a Message + Post a New Message + Post a Reply + Post to Forum: + Posted + Posted by + Posting Date + Posting History + Posting history for + Posting Policy + Presentation + Preview + Re: + reject + Rejected + Replies + Reply + Reply to first post in thread + Reply to first post on this page + Search: + Search + Search: + Search Forums + Subject + Subscribe? + Plain text + This forum is + Threaded + Threads + View + Yes + You may + Your Note + Index: dotlrn_packages/packages/forums/catalog/forums.en_GB.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.en_GB.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.en_GB.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,5 @@ + + + + Purpose + Index: dotlrn_packages/packages/forums/catalog/forums.en_US.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.en_US.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.en_US.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,198 @@ + + + + Administrative options for all forums. + Administer + Administration + You can post in this forum anonymiously. + Anonymous + approve + Are you sure you want to delete this message and <strong>all replies to it</strong>? + Are you sure you want to move this message and all of its descendents? + Are you sure you want to move this thread and all of its descendents? + Attach? + Attachments: + Author + Available Forums + Available Messages + Back to %forum.name% + <a href="%thread_url%">Back</a> to %forum.name% + Body + by Date + by Forum + Charter + Charter exceeds maximum length (4000 characters) + closed + Collapse + Confirm? + Confirm Delete: + Confirm Move to + Confirm Post to Forum: + Create a New Forum + Create New Forum + Delete + Direct link to this post + disable + disable it + disabled + Display as: + Display full posts + Edit + Edit + Edit again + Edit forum + Edit forum "%name%" + Edit Message: + Email + On %posting_date%, %user_name% wrote: + Email Message: + Email to a friend + enable + enable it + enabled + Enter a list of email addresses, optionally with first and last names. They will be subscribed to this forum. As an example: + Entire Thread + Expand + First Post + Flat + Flat + Format + Forum + Forum: + Forum ID + forum ID + Forum Name + Forum Posting + ForumID + Forums + Forums history + Forums History + Forums: Posting history for + Forward + Fwd: + Go to thread %messages.subject% + If <b>No</b>, users may only reply to existing posts not create new threads. + <b>Open</b> allows any users to post and have posts appear immediately, <b>moderated</b> means posts must be approved by a moderator before others can see them, and <b>closed</b> means only administrators may post. + <b>Flat</b> only allows replies at the end of a thread with no nesting or threading, <b>Threaded</b> allows replies to be made to any post in the thread and the reply will be indented under the post they are associated with. + HTML + If checked, create users that don't exist: + In this forum your screenname is used instead of your realname as follows: + Just display subjects + Last Post + Last post in subject + Link to this post on a separate page + List of users that wrote in the forum: + Email a copy of the following message: + First post in subject + Forums Administration + Need to provide a message to display. + need to provide a message to display attachments! + (Note that you are already subscribed to the forum as a whole. You may get duplicate notifications.) + Please confirm the following post: + Please enter a message + Please enter a subject + Users Can Create New Threads + Would you like to attach a file to this message? + Would you like to subscribe to responses? + You either have to post to a forum or in reply to another message + Manage + Manage Forum: + Manage/Moderate + mark all as read + Message ID + Subject + Moderate + moderated + Move message + Move message to forum: + Move message to the message + Move message to thread + Move thread + Move thread to forum + Move message to other message + Move thread to other forum + Move thread to other thread + Move thread to thread + Move thread to other thread + Move to + Move to other thread + Name + Name + Forum Name + Nested + New Forum + No + No Forums + No indentation for replies + No Messages + No Postings. + None + We're sorry, but it appears that you do not have the permission to perform this operation. + Number of Posts + of forum + on + One Message + One Thread + open + Parameters + parent ID + Pending + Pending Threads + Permissions for "%name%" + Permissions for all forums. + Post + Post a Message + Post a New Message + Post a Reply + Post Anonymously + Post to Forum: + Posted + Posted by + Posting Date + Posting History + Posting history for + Posting Policy + Presentation + Forums + Preview + Print + Printable view + Re: + reject + Rejected + Replies + Reply + Reply to first post in thread + Reply to first post on this page + Search: + Search + Search: + Search Forums + Selected + Show %messages.user_name% posting history + Show %message.user_name% posting history + Sorry. You can not move this message. There are no other threads in this forum. + Sorry. You can not move this thread. There are no other threads. + Sorry. You can not move this thread. There are no other forums. + Statistics + Subject + Subscribe? + Subscribe others + subscribe others + Number of subscriptions to this forum: + Summary + Summary of posting history + Plain text + This forum is + Forum %forum.name%: %message.subject% + Threaded + Threads + User + Users that wrote in the forum + View + With indentation of replies + Yes + You can + You may + Your Note + Index: dotlrn_packages/packages/forums/catalog/forums.es_CO.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.es_CO.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.es_CO.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + Administrar + Administraci�n + An�nimo + aprobar + �Est� seguro que quiere borrar este mensaje y <strong>todas sus respuestas</strong>? + �Adjuntar archivo(s)? + Archivos adjuntos: + Autor + Regresa a %forum.name% + <a href="%thread_url%">Volver</a> a %forum.name% + Cuerpo del mensaje + por Fecha + por Foro + Rama + cerrado + �Confirmar? + Confirmaci�n para eliminar: + Confirmaci�n de su mensaje para el foro de discusi�n: + Crear nuevo foro de discusi�n + Crear nuevo foro de discusi�n + Eliminar + deshabilitar + deshabilitar + deshabilitado + Editar + Editar + Modificar de nuevo + Editar foro de discusi�n + Editar Mensaje: + Email + En %posting_date%, %user_name% escribi�: + Mensaje: + Enviar correo a un amigo + habilitar + habilitar + habilitado + Discusi�n Completa + Primer Mensaje + Sin discusiones indentadas + Formato + Foro de Discusi�n + Foro de Discusi�n: + ID del Foro + ID del Foro + Nombre Foro de Discusi�n + Enviando mensaje al foro de discusi�n + ID del Foro + Foros de Discusi�n + Foros de Discusi�n: Historia de mensajes para + Reenviar + Re-enviar: + HTML + �ltimo Mensaje + �ltimos mensajes de la discusi�n + Enviar una copia del siguiente mensaje: + Primer mensaje de la discusi�n + Administraci�n de Foros de Discusi�n + Necesita proveer un mensaje para mostrar + necesita proveer un mensaje para poder desplegar los archivos adjuntos! + (Atenci�n: Ud.est� suscrito a este foro. (Al suscribirse nuevamente puede recibir notificaciones duplicadas). + Por favor, confirme el siguiente mensaje: + Por favor, ingrese un mensaje + Por favor, ingrese un t�tulo de mensaje + Los usuarios pueden crear nuevas discusiones + �Desea adjuntar un archivo a este mensaje? + �Desea suscribirse para recibir respuestas? + Debe enviar un mensaje al foro de discusi�n o contestar otro mensaje + Administrar + Administrar Foro de Discusi�n: + Administrar/Moderar + ID del Mensaje + Moderar + moderado + Nombre + Nuevo Foro de Discusi�n + No + No existen foro de discusi�n + No existen mensajes + No existen mensajes enviados. + Ninguno + Un Mensaje + Un hilo + abrir + Par�metros + ID del padre + Pendientes + Discusiones pendientes + Enviar + Enviar un mensaje + Enviar un nuevo Mensaje + Enviar una respuesta + Enviar al Foro de Discusi�n + Enviados + Enviado por + Fecha de Env�o + Historia de Mensajes Enviados + Mensajes Enviados por + Pol�tica de publicaciones + Presentaci�n + Vista preliminar + Re: + rechazar + Rechazado + Respuestas + Contestar + Responder al primer mensaje de esta discusi�n + Responder al primer mensaje de esta p�gina + Buscar: + Buscar + Buscar: + Buscar Foros de Discusi�n + T�tulo + �Suscribirse? + texto + Este Foro de Discusi�n es + Con discusiones indentadas + Discusiones + Ver + S� + Puedes + Su Commentario + Index: dotlrn_packages/packages/forums/catalog/forums.es_ES.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.es_ES.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.es_ES.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,196 @@ + + + + Opciones de administraci�n para todos los foros + Administrar + Administraci�n + Puede postear en este foro de forma an�nima + An�nimo + Aprobar + �Est� seguro que quiere borrar este mensaje y <strong>todas sus respuestas</strong>? + �Est� seguro de que quiere mover este mensaje y todas sus respuestas? + �Est�s seguro que quieres mover este hilo y todos sus hijos? + + �Adjuntar archivo(s)? + Archivos adjuntos: + Autor + Foros disponibles + Regresar a %forum.name% + <a href="%thread_url%">Volver</a> a %forum.name% + Cuerpo del mensaje + Por fecha + por foro + Tem�tica + La tem�tica no puede superar el l�mite de 4000 caracteres + cerrado + Contraer + �Es correcto? + Confirmaci�n para eliminar: + Confirmar mover mensaje + Confirmaci�n de su mensaje para el foro de discusi�n: + Crear nuevo foro de discusi�n + Crear nuevo foro de discusi�n + Eliminar + Enlace directo a este mensaje + no habilitado + Deshabilitarlo + no habilitado + Mostrar como: + Mostrar los mensajes + Editar + Editar + Modificar de nuevo + Editar foro de discusi�n + Editar foro &quot;%name%&quot; + Editar mensaje: + Email + El %posting_date%, %user_name% escribi�: + Mensaje: + Enviar por email a terceros + habilitar + habilitarlo + habilitado + Ingrese una lista de correos electr�nicos, si desea agregue nombres y apellidos. Ellos ser�n suscritos autom�ticamente a este foro. Por ejemplo: + Hilo completo + Expandir + Primer mensaje + Sin hilos + Plano + Formato + Foro de discusi�n + Foro de discusi�n: + Foro ID + foro ID + Nombre del foro + Enviando mensaje al foro de discusi�n + ForoID + Foros de discusi�n + Foros historia + Foros historia + Foros de Discusi�n: Historia de mensajes de + Reenviar + Re-enviar: + Ir al hilo %messages.subject% + Si se activa "No", los usuarios s�lo pueden responder a mensajes existentes, no pueden crear hilos nuevos. + "Abierta" permite a cualquier usuario publicar mensajes y que aprezcan inmediatamente, "moderada" significa que los mensajes deben ser aprobados por un moderador antes de que otros los puedan ver y "cerrada" quiere decir que s�lo los administradores pueden poner mensajes. + "Sin hilos" s�lo permite respuestas al final del hilo sin anidamiento ni hebras, "Con hilos" permite que se pueda responder a cualquier mensaje en el hilo y la respuesta ser� indentada bajo el mensaje al que pertenece la respuesta. + html + Si se selecciona, se crear�n usuarios que no existen. + En este foro, su screenname ser� usado en lugar de su nombre completo: + Mostrar s�lo los asuntos + �ltimo mensaje + �ltimos mensajes del hilo + Abrir mensaje en una nueva p�gina + Usuarios que escribieron en el foro: + Enviar una copia del siguiente mensaje: + Primer mensaje del hilo + Administraci�n de Foros de Discusi�n + Necesita proveer un mensaje para mostrar + Necesita proveer un mensaje para poder mostrar los archivos adjuntos + (Atenci�n: Ud.est� suscrito a este foro. (Al suscribirse nuevamente puede recibir notificaciones duplicadas). + Por favor, confirme el siguiente mensaje: + Por favor, entre su mensaje + Por favor, ingrese t�tulo de mensaje + Los usuarios pueden crear nuevos hilos + �Desea adjuntar archivo a este mensaje? + �Desea suscribirse para recibir respuestas? + Debe enviar un mensaje al foro de discusi�n o contestar a otro mensaje + Administrar + Administrar Foro de Discusi�n: + Administrar/Moderar + Mensaje ID + T�tulo + Moderar + moderado + Mover mensaje + Mover mensaje al foro: + Mover mensaje a otro mensaje + Mover mensaje a hilo + Mover hilo + Mover hilo a otro foro + Mover mensaje al mensaje: + Mover hilo a otro foro + Mover hilo a otro hilo + Mover hilo al hilo + Mover hilo a otro hilo + Mover + Mover a otro hilo + Nombre + Nombre del foro + Nombre del foro + Anidados + Nuevo Foro de Discusi�n + No + No existen foro de discusi�n + Ninguna indentaci�n para respuestas + No existen mensajes + No existen mensajes enviados. + Ninguno + Lo sentimos, pero parece que no dispone de los permisos necesarios para realizar esta acci�n. + N�mero de mensajes + del foro + on + Un Mensaje + Un hilo + abierto + Par�metros + ID del padre + Pendientes + Hilos pendientes + Permisos para &quot;%name%&quot; + Permisos para todos los foros. + Enviar + Enviar un mensaje + Enviar un nuevo mensaje + Enviar una respuesta + Enviar al foro: + Enviados + Enviado por + Fecha de env�o + Historia de mensajes enviados + Mensajes enviados por + Pol�tica de publicaciones + Presentaci�n + Foros + Vista preliminar + Imprimir + Vista para impresi�n + Re: + rechazar + Rechazado + Respuestas + Contestar + Responder al primer mensaje de este hilo + Responder al primer mensaje de esta p�gina + Buscar: + Buscar + Buscar: + Buscar en Foros de Discusi�n + Seleccionado + Ver historial de mensajes de %messages.user_name% + Ver historial de mensajes de %message.user_name% + Lo sentimos. No puedes mover este mensaje a otro hilo. No hay otros hilos en este foro. + Lo sentimos. No puedes mover este hilo a otro hilo porque solo existe �ste. + Lo sentimos. No puedes mover este hilo a otro foro porque no hay m�s foros. + Estad�sticas + T�tulo + �Suscribir? + Suscribir a otros + inscribir a otros + N�mero de suscripciones para este foro: + Resumen de mensajes enviados + Resumen de mensajes enviados + texto + Este foro de discusi�n est� + Foro %forum.name%: %message.subject% + Con hilos + Hilos + Usuario + Usuarios que escribieron en el foro + Ver + Con indentaci�n de las respuestas + S� + Puede + Puedes + Su commentario + Index: dotlrn_packages/packages/forums/catalog/forums.es_GT.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.es_GT.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.es_GT.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + Administrar + Administraci�n + An�nimo + aprobar + �Est� seguro que quiere borrar este mensaje y <strong>todas sus respuestas</strong>? + �Adjuntar archivo(s)? + Archivos adjuntos: + Autor + Regresa a %forum.name% + <a href="%thread_url%">Volver</a> a %forum.name% + Cuerpo del mensaje + por Fecha + por Foro + Rama + cerrado + �Confirmar? + Confirmaci�n para eliminar: + Confirmaci�n de su mensaje para el foro de discusi�n: + Crear nuevo foro de discusi�n + Crear nuevo foro de discusi�n + Eliminar + deshabilitar + deshabilitar + deshabilitado + Editar + Editar + Modificar de nuevo + Editar foro de discusi�n + Editar Mensaje: + Email + En %posting_date%, %user_name% escribi�: + Mensaje: + Enviar correo a un amigo + habilitar + habilitar + habilitado + Hilo completo + Primer Mensaje + Sin hilos + Formato + Foro de Discusi�n + Foro de Discusi�n: + ID del Foro + ID del Foro + Nombre Foro de Discusi�n + Enviando mensaje al foro de discusi�n + ID del Foro + Foros de Discusi�n + Foros de Discusi�n: Historia de mensajes para + Reenviar + Re-enviar: + HTML + �ltimo Mensaje + �ltimos mensajes del hilo + Enviar una copia del siguiente mensaje: + Primer mensaje del hilo + Administraci�n de Foros de Discusi�n + Necesita proveer un mensaje para mostrar + necesita proveer un mensaje para poder desplegar los archivos adjuntos + (Atenci�n: Ud.est� suscrito a este foro. (Al suscribirse nuevamente puede recibir notificaciones duplicadas). + Por favor, confirme el siguiente mensaje: + Por favor, ingrese un mensaje + Por favor, ingrese un t�tulo de mensaje + Los usuarios pueden crear nuevos hilos + �Desea adjuntar un archivo a este mensaje? + �Desea suscribirse para recibir respuestas? + Debe enviar un mensaje al foro de discusi�n o contestar otro mensaje + Administrar + Administrar Foro de Discusi�n: + Administrar/Moderar + ID del Mensaje + Moderar + moderado + Nombre + Nuevo Foro de Discusi�n + No + No existen foro de discusi�n + No existen mensajes + No existen mensajes enviados. + Ninguno + Un Mensaje + Un hilo + abierto + Par�metros + ID del padre + Pendientes + Hilos pendientes + Enviar + Enviar un mensaje + Enviar un nuevo Mensaje + Enviar una respuesta + Enviar al Foro de Discusi�n + Enviados + Enviado por + Fecha de Env�o + Historia de Mensajes Enviados + Mensajes Enviados por + Pol�tica de publicaciones + Presentaci�n + Vista preliminar + Re: + rechazar + Rechazado + Respuestas + Contestar + Responder al primer mensaje de este hilo + Responder al primer mensaje de esta p�gina + Buscar: + Buscar + Buscar: + Buscar Foros de Discusi�n + T�tulo + �Suscribirse? + texto + Este Foro de Discusi�n es + Con hilos + Hilos + Ver + S� + Puedes + Su Commentario + Index: dotlrn_packages/packages/forums/catalog/forums.fi_FI.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.fi_FI.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.fi_FI.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,109 @@ + + + + Hallinnoi + Hallinta + hyväksy + Oletko varma, että haluat poistaa tämän viestin ja <strong>kaikki siihen liittyvät vastaukset</strong>? + Liitetiedosto? + Liitetiedostot: + Kirjoittaja + Runko + päiväyksen perusteella + keskusteluryhmän perusteella + Kuvaus + suljettu + Vahvista? + Vahvista viestin poisto: + Vahvista viestin lisäys keskusteluryhmään: + Luo uusi keskusteluryhmä + Luo uusi keskusteluryhmä + poista + poista käytöstä + Poista käytöstä + pois käytöstä + Muokkaa + muokkaa + Muokkaa keskusteluryhmää + Muokkaa viestiä: + Sähköposti + Lähetä viesti sähköpostilla: + Lähetä viesti kaverille + ota käyttöön + Ota käyttöön + käytössä + Koko viestiketju + Litteä + Muoto + Keskusteluryhmä + Ryhmä: + Ryhmän ID + forum ID + Ryhmän nimi + Ryhmän viesti + ForumID + Keskusteluryhmät + Viestihistoria ryhmälle + Fwd: + html + Uusin viesti + Aiheen ensimmäinen viesti + Lähetä sähköpostilla kopio seuraavasta viestistä: + Viimeinen viesti aiheesta + Forums-hallinta + Näytettävä viesti on määriteltävä. + liitetiedostojen näyttämiseksi on määriteltävä ne sisältävä viesti! + (Huomaa, että olet jo tilannut koko ryhmän viestit sähköpostiisi. Saatat saada samoja muistutuksia kahteen kertaan.) + Vahvista seuraava viesti: + Kirjoita viesti + Kirjoita viestin otsikko + Saavatko käyttäjät luoda uusia viestiketjuja + Haluatko lisätä liitetiedoston tähän viestiin? + Haluatko saada vastaukset tähän viestiin sähköpostilla? + Sinun pitää lähettää joko viesti ryhmään tai vastaus johonkin olemassaolevaan viestiin. + Hallinnoi + Hallinnoi ryhmää: + Hallinnoi/moderoi + Viestin ID + valvottu + Nimi + Uusi keskusteluryhmä + Ei + Ei ryhmiä + Ei viestejä + Ei viestejä. + Ei mitään. + Viesti + Viestiketju + avoin + isän ID + Odottavat viestiketjut + Kirjoita viesti + Kirjoita uusi viesti + Kirjoita vastaus + Kirjoita viesti ryhmään: + Lähetetty + Lähetyspäivämäärä + Lähetyshistoria + Lähetyshistoria käyttäjälle + Lähetyspolitiikka + Esitysmuoto + Vl: + hylkää + Vastaukset + vastaa + Etsi: + Etsi + Etsi: + Etsi keskusteluryhmistä + Otsikko + Viestit sähköpostilla? + teksti + Tämä keskusteluryhmä on + Säikeinen (jokainen viesti aloittaa oman haaransa) + Viestiketjut + Näkymä + Kyllä + &nbsp; + Huomautuksesi + Index: dotlrn_packages/packages/forums/catalog/forums.gl_ES.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.gl_ES.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.gl_ES.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,109 @@ + + + + Administrar + Administraci�n + Aprobar + Tes certeza de que queres eliminar esta mensaxe e <strong>todas as suas respostas</strong>? + Anexar? + Anexos: + Autor + Corpo + por Data + por F�rum + Descripci�n + pechado + Confirmas? + Confirmar Eliminaci�n: + Confirmar Env�o ao F�rum: + Criar un Novo F�rum + Criar Novo F�rum + eliminar + desabilitar + desactivalo + desactivado + Editar + editar + Editar f�rum + Editar Mensaxe: + Correo-E + Mensaxe de Correo: + Enviar por correo para un amigo + activar + activalo + activo + Discusi�n Completa + Plano + Formato + F�rum + F�rum: + ID do F�rum + ID do F�rum + Nome do F�rum + Mensaxe ao F�rum + ForumID + F�rums + F�rums: Historia de mensaxes de + Enc: + html + �ltima Mensaxe + �ltima mensaxe neste asunto + Enviar por correo electr�nico unha copia da seguinte mensaxe: + Primeira mensaxe relativa a este asunto + Administraci�n dos Forums + Necesita fornecer unha mensaxe para mostrar + necesita fornecer unha mensaxe para mostrar os anexos!! + (Repara en que xa te encontras subscrito para o forum como un todo. Podes receber notificaci�ns duplicadas.) + Por favor, confirma a seguinte mensaxe: + Por favor, escribe unha mensaxe + Por favor, pon un asunto + Usuarios poden criar novas discusi�ns + Gostar�as de anexar un ficheiro a esta mensaxe? + Gostar�as de subscrever-te para receber respostas? + Debes enviar a mensaxe para un forum ou en responsta a outra mensaxe + Xerenciar + Xerenciar Forum: + Xerenciar/Moderar + ID da mensaxe + moderado + Nome + Novo forum + Non + Non hai forums + Non hai mensaxes + Non hai mensaxes enviadas. + Ning�n + Unha mensaxe + Unha discusi�n + aberto + ID do pai + Discusi�ns pendentes + Enviar unha mensaxe + Enviar unha nova mensaxe + Enviar unha resposta + Enviar para o forum: + Enviada + Data de env�o + Hist�rico das mensaxes enviadas + Hist�rico das mensaxes enviadas para + Pol�tica de env�o de mensaxes + Presentaci�n + Re: + rexeitar + Respostas + responder + Presquisar: + Pesquisar + Pesquisar: + Pesquisar forums + Asunto + Subscreber? + texto + Este f�rum � + Por discusi�ns + Discusi�ns + Ver + Si + Podes + O Teu Comentario + Index: dotlrn_packages/packages/forums/catalog/forums.hi_IN.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.hi_IN.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.hi_IN.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + सन्चालन + प्रशासन + गुमनाम + अनुमोदन करिये + क्या आप निश्चित रुप से यह सन्देश मिटाना चाहते है. &lt;strong&gt;।इसके सारे उत्तर&lt;/strong&gt;? + सलग्न? + सलग्न सामग्री: + लेखक + %forum.name% को वापिस + &lt;a href=&quot;%thread_url%&quot;&gt;वापिस&lt;/a&gt; को %forum.name% + विवरण + तिथि तक + फ़ोरम द्वारा + विशेषाधिकार + बन्द + पुष्टि करे? + मिटाने की पुष्टि करे: + फ़ोरम को पोस्ट करने की पुष्टि करे: + नया फ़ोरम बनाइये + नया फ़ोरम बनाये + मिटाओ + अयोग्य + इसे अयोग्य करे + अयोग्य + सम्पादित + सम्पादित + दुबारा सम्पादित करे + फ़ोरम को सम्पादित करे + सन्देश को सम्पादित करे: + ईमेल + %posting_date% पर %user_name% लिखा: + ईमेल सन्देश: + मित्र को ईमेल करे + योग्य + योग्य बनाइये + योग्य बनाइये + पूरा तागा + पहली नियुक्ति + क्षेतिज + आरुप + फ़ोरम + फ़ोरम: + फ़ोरम आई डी + फ़ोरम आई डी + फ़ोरम नाम + फ़ोरम की नियुक्ति + फ़ोरम आईडी + फ़ोरम्स + फ़ोरम्स: इतिहास की नियुक्ति + आगे + एफ़ डब्लु डी: + एच टी एम एल + आखिरी नियुक्ति + विषय मे आखिरी नियुक्ति + निम्न सन्देश के एक प्रतिरुप को ईमेल कीजिए: + विषय मे प्रथम नियुक्ति + फ़ोरम प्रशासन + प्रदर्शन के लिये सन्देश उपलब्ध कराने की आवश्यकता + सलग्न प्रस्तुति के लिये सन्देश उपलब्ध कराने की आवशयकता! + (ध्यान दीजिए कि आप पहले हे फ़ोरम को सम्पुर्ण रुप से समीयर्त कर चुके है। आप को अनुलिपि अधिसूचना मिल सकती है। + क्रप्या निम्न नियुक्ति की पुष्टि करे: + क्रप्या सन्देश प्रविष्ट करे + क्रप्या विषय प्रविष्ट करे + उपयोगकर्ता नया थ्रेड बना सकते है। + क्या आप इस सन्देश के साथ फ़ाइल सलग्न करना चाहेगे? + क्या आप प्रत्युतरो को समचिर्त करना चाहेगे? + आप को या तो फ़ोरम की नियुक्ति या फ़िर किसी सन्देश का जवाब करना होगी + प्रबन्धित करे + फ़ोरम को प्रबन्धित करे : + प्रबन्धित/सामान्य + सन्देश आईडी + सामान्य + सामान्य किया गया + नाम + नया फ़ोरम + नही + कोई फ़ोरम नही + कोई सन्देश नही + कोई नियुक्ति नही + कोई नही + एक सन्देश + एक थ्रेड + खुला + मानक + मुख्य आईडी + लम्बित + लम्बित थ्रेड + नियुक्ति + सन्देश नियुक्त करे + नया सन्देश नियुक्त करे + जवाब नियुक्त करे + फ़ोरम को भेजना + भेज दिया गया + द्वारा भेजा गया + नियुक्त करने की तिथि + भेजने का इतिहास + नियुक्त किये इतिहास के लिये + नियुक्त करने की नीति + प्रस्तुति + पुर्वदर्शन + आरई: + असविक्रत + अस्विक्रत की गई + उत्तर + उत्तर + पहली नियुक्ति का थ्रेड मे उत्तर + इस प्रष्ठ पर पहली नियुक्ति का उत्तर + खोजिये: + खोजिये + खोजिये: + फ़ोरम खोजिये + विषय + स्वीकार किया? + साधारण लेख + यह फ़ोरम है + थ्रेड + थ्रेड्स + दर्शन + हा + आप + आपकी टिप्पणी + Index: dotlrn_packages/packages/forums/catalog/forums.hu_HU.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.hu_HU.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.hu_HU.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,56 @@ + + + + Adminisztrál + Adminisztráció + engedélyez + Biztosan törölni akarod ezt az üzenetet és az <strong>összes választ</strong>? + Csatolod? + Csatolt dolgok: + Szerző + Dátum szerint + Fórumok szerint + Kiáltvány + zárt + Biztos? + Törlés megerősítése: + Egy új fórum készítése + Új fórum készítése + töröl + Szerkeszt + szerkeszt + Fórum módosítása + Email + Formátum + Fórum + Fórum: + Fórum ID + fórum id + Fórum neve + FórumID + Fórumok + html + Utolsó hozzászólás + Utolsó hozzászólás ebben a témában + Üzenet ID + moderált + Név + Új fórum + Nem + Nincsenek fórumok + Nincsenek üzenetek + Egy üzenet + Válasz erre + elutasít + Válaszok + Keresés: + Keresés + Keresés: + Keresés a fórumokban + Téma + Előfizetsz? + szöveg + Ez a fórum + Nézet + Igen + Index: dotlrn_packages/packages/forums/catalog/forums.it_IT.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.it_IT.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.it_IT.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + Amministra + Amministrazione + Anonimo + approva + Sei sicuro di voler cancellare questo messaggio e <strong>tutte le risposte collegate</strong>? + Allega? + Allegati + Autore + Torna indietro</a> a %forum.name% + <a href="%thread_url%">Torna indietro</a> a %forum.name% + Messaggio + per Data + per Forum + Descrizione + chiuso + Confermi? + Conferma Cancellazione + Conferma l'invio del messaggio: + Crea un nuovo forum + Crea un nuovo forum + cancella + disabilita + Disabilita + disabilitati + Modifica + modifica + Modifica ancora + Modifica il forum + Modifica il Messaggio: + Email + Il %posting_date%, %user_name% ha scritto: + Spedisci il messaggio: + Invia a un amico + abilita + abilitalo + abilitato + L'intera discussione + Primo messaggio + Piatto + Formato + Forum + Forum: + ID Forum + ID Forum + Nome del Forum + Invio messaggi al forum + ForumID + Forum + Forum: Lista messaggi dell'utente + Inoltra + Fwd: + html + Ultimo messaggio + Ultimo messaggio in oggetto + Invia per posta una copia di questo messaggio: + Primo messaggio in oggetto + Amministrazione Forum + Occorre un messaggio per visualizzare + Occorre un messaggio per visualizzare l'allegato! + (Nota che tu hai gi� sottoscritto il forum per intero. Potresti ricevere notifiche doppie) + Conferma il seguente messaggio: + Inserisci un messaggio + Inserisci un oggetto + Gli utenti possono aprire nuove discussioni + Vuoi associare un file in attach a questo messaggio? + Vuoi ricevere un mail di notifica per eventuali risposte? + Devi inviare un messaggio a un forum o rispondere a un altro messaggio + Gestisci + Gestione Forum: + Gestisci/Modera + ID Messaggio + Modera + moderato + Nome + Nuovo Forum + No + Nessun Forum + Nessun Messaggio + Nessun invio + nessuno + Un messaggio + Una discussione + aperta + Parametri + parent ID + Pendente + Discussioni in attesa + Messaggio + Invia un messaggio + Invia un nuovo messaggio + Invia una risposta + Invia un messaggio al Forum: + Data d'invio + Inviato da + Data di invio + Elenco dei messaggi + Lista dei messaggi per l'utente + Politica sui messaggi pendente + Presentazione + Anteprima + Re: + rifiuta + Respinto + Risposte + rispondi + Rispondi al primo messaggio della discussione + Rispondi al primo messaggio su questa pagina + Cerca: + Cerca + Cerca: + Cerca i Forum + Oggetto + Sottoscrivi? + testo + Questo forum � + Ramificato + Discussioni + Vedi + S� + Puoi + Tua nota + Index: dotlrn_packages/packages/forums/catalog/forums.ja_JP.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.ja_JP.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.ja_JP.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,20 @@ + + + + 作成者 + 閉鎖済み + 削除 + 無効にする + 無効にする + 編集 + 編集 + メール + 有効にする + 有効にする + HTML + いいえ + なし + 開く + 表示 + はい + Index: dotlrn_packages/packages/forums/catalog/forums.ko_KR.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.ko_KR.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.ko_KR.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + 관리하다 + 관리 + 무명의 + 승인 + 이 메시지와 <strong>모든 응답메시지</strong>를 삭제하시겠습니까? + 첨부하시겠습니까? + 첨부: + 글쓴이 + %forum.name%으로 복귀 + %forum.name%으로 <a href="%thread_url%">돌아가기</a> + 본문 + 일자에 의해 + 포럼에 의해 + 면허장(免許帳 ) + 폐쇄 + 확인하셨습니까? + 삭제 확인: + 포럼에 게시 확인: + 새로운 포럼 생성 + 새로운 포럼 생성 + 삭제 + 사용불능 + 사용불능하게 하다 + 사용불가능하다 + 수정 + 수정 + 다시 수정 + 포럼 수정 + 메시지 수정: + 전자우편주소 + %posting_date%에 %user_name%(이)가 기록함 + 전자우편 메시지: + 친구에게 전자우편 보내기 + 사용가능하게 하다 + 사용가능하게 하다 + 사용가능하게 하다 + 전체 스레드 + 처음 게시 + 플랫 + 형식 + 포럼 + 포럼: + 포럼 아이디 + 포럼 아이디 + 포럼 이름 + 포럼 게시 + 포럼 아이디 + 포럼 + 포럼: 게시 기록 + 전달 + 전달: + html + 마지막 게시 + 제목의 최종 게시물 + 다음 메시지의 복사본을 메일로 보냅니다: + 제목의 처음 게시물 + 포럼 관리 + 디스플레이하는 메시지를 제공해야 합니다. + 첨부를 표시하는 메시지가 제공되어야 합니다. + (당신은 이미 포럼에 대해 신청하였습니다. 중복 공지를 받았습니다.) + 다음의 게시물을 확인하시기 바랍니다: + 메시지를 입력하시오. + 제목을 입력하시오. + 사용자는 새로운 스레드를 생성할 수 있습니다. + 이 메시지에 파일을 첨부하시겠습니까? + 응답에 대해 신청하시겠습니까? + 포럼에 게시했거나 다른 메시지에 응답하였습니다. + 관리 + 포럼 관리: + 관리/조절 + 메시지 아이디 + 조절하다 + 조절하다 + 이름 + 새로운 포럼 + 아니오 + 포럼이 없습니다. + 메시지가 없습니다. + 게시물이 없습니다. + 아무것도 + 하나의 메시지 + 한개의 스레드 + 열기 + 파라미터 + 부모 아이디 + 계류중 + 보류중인 스레드 + 게시 + 메시지 게시 + 새로운 메시지 게시 + 회신 게시 + 포럼에 게시: + 게시된 + 게시됨 + 게시 일자 + 게시 기록 + 게시 기록 + 게시 정책 + 표현 + 미리보기 + 응답: + 거부 + 거부됨 + 회신 + 회신 + 스레드안의 첫번째 게시물에 응답 + 이 페이지의 첫번째 게시물에 응답 + 검색: + 검색 + 검색: + 포럼 검색 + 제목 + 신청하시겠습니까? + 텍스트 + 이 포럼은 + 스레드된 + 스레드 + 보기 + + 여러분은 + 여러분의 주석 + Index: dotlrn_packages/packages/forums/catalog/forums.ms_MY.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.ms_MY.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.ms_MY.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + Tadbir + Penyeliaan + Tanpa Nama + lulus + Adakah anda pasti anda mahu membuang pesanan ini dan <strong>semua balasan-balasannya</strong>? + Lampirkan? + Lampiran-lampiran: + Pengarang + Kebali ke %forum.name% + <a href="%thread_url%">Kembali </a> ke %forum.name% + Isi + susunan mengikut Tarikh + susunan mengikut Forum + Carta + tutup + Pasti? + Pasti Buang: + Sahkan Pos kepada Forum: + Buat satu Forum Baru + Buat Forum Baru + buang + lumpuh + lumpuhkannya + dilumpuhkan + Edit + Edit + Edit semula + Edit forum + Edit Mesej: + Emel + Pada %posting_date%, %user_name% telah menulis: + Emel Mesej: + Emel kepada kawan + pulih + pulihkannya + dipulihkan + Seluruh Bebenang + Pos Pertama + Mendatar + Format + Forum + Forum: + Forum ID + forum ID + Nama Forum + Penghantaran Forum + ForumID + Forum-forum + Forum-forum: Penghantaran sejarah untuk + Hantar + Hantar: + html + Penghantaran Terakhir + Penghantaran terakhir dalam subjek + Emel satu salinan mesej berikut: + Penghantaran pertama dalam subjek + Pentadbiran Forum-forum + Perlu memberi mesej untuk memapar. + perlu memberi mesej untuk memapar lampiran-lampiran! + (Ambil perhatian bahawa anda telah pun melanggan forum ini secara seluruhnya. Anda mungkin akan dapat notifikasi-notifikasi duplikasi.) + Sila kenalpasti penghantaran berikut: + Sila masukkan mesej + Sila masukkan subjek + Pengguna-pengguna Boleh Menambah Bebenang Baru + Mahukah anda melampirkan suatu fail kepada mesej ini? + Mahukan anda melanggan kepada maklumbalas-maklumbalas? + Sama ada anda perlu menghantar ke sesuatu forum atau membalas ke mesej yang lain + Urus + Urus Forum: + Urus/Moderasi + ID Mesej + Moderasi + Dimoderasikan + Nama + Forum Baru + Tidak + Tiada Forum + Tiada Mesej + Tiada Penghantaran. + Tiada + Satu Mesej + Satu Bebenang + buka + Parameter-parameter + ID induk + Tergantung + Bebenang Tergantung + Hantar + Hantar Mesej + Hantar Mesej Baru + Hantar Maklumbalas + Hantar ke Forum: + Dihantarkan + Dihantar oleh + Tarikh Penghantaran + Sejarah Penghantaran + Sejarah penghantaran untuk + Polisi Penghantaran + Persembahan + Prebiu + Balas: + ditolak + Ditolak + Balasan-balasan + Balas + Balas kepada penghantaran pertama dalam bebenang + Balas kepada penghantaran pertama dalam halaman ini + Cari: + Cari + Cari: + Cari Forum-forum + Subjek + Langgan? + tulisan + Forum ini adalah + Berangkai + Rangkaian-Rangkain + Paparan + Ya + Anda boleh + Nota Anda + Index: dotlrn_packages/packages/forums/catalog/forums.nl_NL.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.nl_NL.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.nl_NL.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,170 @@ + + + + Beheersopties voor alle forums. + Beheren + Beheren + Anoniem + Goedkeuren + Dit bericht echt verwijderen? <strong>Alle reacties op dit bericht worden ook verwijderd!</strong> + Bent u zeker dat u dit bericht en alle onderliggende berichten wilt verplaatsen? + Bent u zeker dat u deze discussielijn en alle onderliggende berichten wilt verplaatsen? + Bijvoegen? + Bijlagen: + Auteur + Terug naar %forum.name% + <a href='%thread_url'>Terug</a> naar %forum.name%. + Inhoud + op Datum + op Forum + Beschrijving + Handvest is langer dan maximale lengte (4000 tekens) + Gesloten + Bevestigen? + Bevestig verwijderen: + Bevestig verplaatsing naar + Bericht verzending bevestigen in forum: + Een nieuw forum aanmaken + Nieuw forum aanmaken + Verwijderen + uitschakelen + uitschakelen + uitgeschakeld + Bewerken + Bewerken + Opnieuw bewerken + Forum bewerken + Wijzig forum "%name%" + Bericht bewerken + E-mail + Op %posting_date%, schreef %user_name%: + E-mailbericht: + Een vriend e-mail sturen + inschakelen + inschakelen + ingeschakeld + Geef een lijst van e-mailadressen in, eventueel met voor- en achternamen. Deze worden geabboneerd op dit forumn. Bijvoorbeeld: + Gehele discussie + Eerste bericht + Plat + Indeling + Forum + Forum: + Forum-ID + forum-ID + Forum + Forumbericht + Forum-ID + Forums + Forumvoorgeschiedenis + Forumvoorgeschiedenis + Forums: Berichtenoverzicht voor: + Doorsturen + Doorgestuurd: + Indien <B>Nee</B>, mogen gebruikers alleen op bestaande berichten antwoorden en geen nieuwe discussielijnen starten. + <B>Open</B> staat enige gebruiker te berichten te plaatsen waarbij deze onmiddelijk verschijnen. <B>Gemodereerd</B> betekent dat berichten goedgekeurd moeten worden door een moderator alvorens anderen deze kunnen zien. <B>Gesloten</B> betekent dat alleen beheerders berichten mogen plaatsen. + <B>Plat</B> staat alleen berichten aan het eind van een discussielijn toe, zonder nesting of hierarchie. <B>Hirarchisch</B> maakt het mogelijk te antwoorden op enig bericht in de discussielijn en het antwoord wordt ingesprongen onder de post waarop het antwoord. + html + Indien aangevinkt, maak gebruikers aan die niet bestaan. + Laatste bericht + Laatste bericht in onderwerp + Lijst van gebruikers die in dit forum gschreven hebben: + Een kopie van het volgende bericht per e-mail sturen: + Eerste bericht in onderwerp + Forum administratie + Om te tonen dient eerst voor een bericht te worden gezorgd + Om bijlagen te kunnen tonen dient eerst voor een bericht te worden gezorgd! + (Attentie! Als de kennisgevingsfunctie is ingeschakeld voor het gehele forum en voor individuele discussie, zullen sommige berichten dubbel worden verzonden en ontvangen.) + Het volgende bericht bevestigen: + Bericht invoeren + Titel invoeren + Gebruikers kunnen nieuwe discussies starten + Een bijlage aan dit bestand toevoegen? + Kennisgevingsfunctie voor antwoorden inschakelen? + Men kan een nieuwe discussie starten of reageren op een bericht in een forum. + Beheren + Forum beheren: + Beheren/Recenseren + Bericht-ID + Onderwerp + Gerecenseerd + gerecenseerd + Verplaats bericht: + Verplaats bericht naar forum: + Verplaats bericht naar het bericht + Verplaats discussielijn + Verplaats discussielijn naar forum + Verplaats bericht naar ander bericht + Verplaats discussielijn naar ander forum + Verplaats discussielijn naar andere discussielijn + Verplaats discussielijn naar discussielijn + Verplaats discussielijn naar andere discussielijn + Verplaats naar + Verplaats discussielijn naar discussielijn + Naam + Naam + Forumnaam + Nieuw forum + Nee + Geen forums beschikbaar + Geen berichten beschikbaar + Geen berichten beschikbaar + Geen + Aantal berichten + van forum + E�n bericht + E�n discussie + open + Parameters + ID van het bovenliggende element + In behandeling + Lopende discussies + Rechten voor "%name%". + Rechten voor alle forums. + Plaatsen + Een bericht plaatsen + Een nieuw bericht plaatsen + Een reaktie plaatsen + In forum plaatsen + Gepubliceerd + Geplaatst door + Plaatsingsdatum + Publicatiegeschiedenis + Publicatie overzicht van + Publicatiebeleid + Presentatie + Voorvertoning + Re: + weigeren + Afgewezen + Reacties + Reageren + Op het eerste bericht in deze discussie reageren + Op het eerste bericht op deze pagina reageren + Zoeken: + Zoeken + Zoeken: + Forums doorzoeken + Geselecteerd. + Excuseer, u kunt dit bericht niet verplaatsen. Er zijn geen andere discussielijnen in dit forum. + Excuseer, u kunt dit bericht niet verplaatsen. Er zijn geen andere discussielijnen. + Excuseer, u kunt deze discussielijn niet verplaatsen. Er zijn geen andere forums. + Statistieken + Titel + Kennisgevingsfunctie inschakelen? + Abonneer anderen + Aantal abonnementen op dit forum: + Samenvatting + Samenvatting van geschiedenis geplaatste berichten: + Platte tekst + Dit forum is + Forum %forum.name%: %message.subject% + Per discussie + Discussies + Gebruiker + Gebruikers die in het forum schreven + Bekijk + Ja + Er kan + Eigen notitie + Index: dotlrn_packages/packages/forums/catalog/forums.nn_NO.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.nn_NO.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.nn_NO.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + Administrer + Administrasjon + Anonym + godkjenn + Er du sikker p� at du vil slette denne meldinga og <strong>alle svara p� den</strong>? + Legg ved? + Vedlegg: + Forfattar + Attende til %forum.name% + <a href="%thread_url%">Attende</a> til %forum.name% + Innhald + etter dato + etter forum + Omtale + stengt + Bekreft? + Bekreft sletting: + Bekreft innlegg i forum: + Opprett eit nytt forum + Opprett nytt forum + Slett + gjer uverksam + gjer den uverksam + uverksam + Rediger + Rediger + Rediger igjen + Rediger forum + Rediger melding: + E-post + Den %posting_date% skreiv %user_name%: + E-postmelding: + E-post til ein ven + gjer verksam + gjer den verksam + verksam + Heile tr�den + F�rste innlegg + Flat + Format + Forum + Forum: + Forum ID + forum ID + Forumnavn + Foruminnlegg + ForumID + Fora + Fora: Innlegg av + Vidaresend + Fwd: + HTML + Siste innlegg + Siste innlegg i emne + Send kopi av f�lgjande melding som e-post: + F�rste innlegg i emne + Forumadministrasjon + M� skrive ei melding for � vise. + m� skrive ei melding for � kunne vise vedlegg! + (Legg merke til at du alt er medlem i forumet som heilskap. Du kan ende opp med dupliserte meldingar.) + Bekreft f�lgjande innlegg: + Skriv ei melding + Skriv eit emne + Brukarar kan opprette nye tr�dar + �nskjer du � legge ei fil ved denne meldinga? + �nskjer du � f� andre innlegg sende til deg som e-post? + Du m� enten leggje inn i eit forum eller som svar til ei anna melding + Administrer + Administrer forum + Administrer/Moderer + MeldingsID + Moderer + moderert + Navn + Nytt forum + Ingen + Ingen forum + Ingen meldingar + Ingen innlegg + Ingen + Ei melding + Ein tr�d + open + Parametrar + forelder ID + Ventar + Ventande tr�dar + Legg inn + Legg inn ei melding + Legg inn ei ny melding + Legg inn eit svar + Legg inn i forum: + Innlagt + Lagt inn av + Innleggingsdato + Innleggingslogg + Innleggingslogg for + Innleggingspolicy + Presentasjon + Kontrollvising + Ang.: + forkast + Forkasta + Svar + Svar + Svar til f�rste innlegg i tr�den + Svar til f�rste innlegget p� denne sida + S�k: + S�k + S�k: + S�k fora + Emne + Abonner + Enkel tekst + Dette forumet er + Tr�da + Tr�dar + Utsnitt + Ja + Du kan + Dine notatar + Index: dotlrn_packages/packages/forums/catalog/forums.no_NO.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.no_NO.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.no_NO.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + Administrer + Administrasjon + Anonym + godkjenn + Er du sikker p� at du vil slette denne meldingen og <strong>alle svarene p� den</strong>? + Legg ved? + Vedlegg + Forfatter + Tilbake til %forum.name% + <a href="%thread_url%">Tilbake</a> til %forum.name% + Innhold + etter dato + etter forum + Beskrivelse + stengt + Bekreft? + Bekreft sletting: + Bekreft innlegg i forum: + Opprett et nytt forum + Opprett nytt forum + slett + gj�r uvirksom + gj�r den uvirksom + uvirksom + Rediger + rediger + Rediger igjen + Rediger forum + Rediger melding: + E-post + Den %posting_date% skrev %user_name%: + E-postmelding: + E-post til en venn + gj�r virksom + gj�r den virksom + virksom + Hele tr�den + F�rste innlegg + Flat + Format + Forum + Forum: + Forum ID + forum id + Forumnavn + Foruminnlegg + ForumID + Fora + Fora: Innlegg av + Videresend + Fwd: + html + Siste innlegg + Siste innlegg i emne + Send kopi av f�lgende melding som e-post: + F�rste innlegg i emne + Forumadministrasjon + m� skrive en melding for � vise. + m� skrive en melding for � kunne vise tillegg! + (Legg merke til at du allerede er medlem i forumet som heltet. Du kan ende opp med dupliserte meldinger.) + Vennligst bekreft f�lgende innlegg: + Skriv en melding + Skriv et emne + Brukere kan opprette nye tr�der + �nsker du � legge en fil ved denne meldingen? + �nsker du � f� tilsendt andre innlegg som e-post? + Du m� enden legge inn i et forum eller som svar til en annen melding + Administrer + Administreringsforum: + Administrer/Moderer + MeldingsID + Moderer + moderert + Navn + Nytt forum + Ingen + Ingen forum + Ingen meldinger + Ingen innlegg. + Ingen + En melding + En lenke + �pen + Parametre + forelder ID + Venter + Ventende tr�der + Legg inn + Legg inn en melding + Legg inn en ny melding + Legg inn et svar + Ligg inn i forum: + Innlagt + Innlagt av + innlagt dato + Innleggelseslogg + Innleggelseslogg for + Innleggelsespolicy + Presentasjon + Forh�ndsvisning + Ang.: + forkast + Forkastet + Svar + svar + Svar til f�rste innlegg i tr�den + Svar til f�rste innlegg p� denne siden + S�k + S�k + S�k: + S�k fora + Emne + Abonner? + Enkel tekst + Dette forumet er + Tr�det + Tr�der + Utsnitt + ja + Du kan + Din anmerkning + Index: dotlrn_packages/packages/forums/catalog/forums.pl_PL.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.pl_PL.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.pl_PL.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,165 @@ + + + + Opcje administracyjne wszystkich forum. + Administruj + Administracja + Anonymous + zatwierdź + Czy na pewno usunąć ten komunikat i <strong>wszystkie nań odpowiedzi </strong>? + Czy na pewno przenieść ten komunikat i wszystkie do niego odpowiedzi? + Czy na pewno przenieść cały ten wątek? + Załączyć coś? + Załączniki: + Autor + Wróć do %forum.name% + <a href="%thread_url%">Powrót</a> do %forum.name% + Treść + wg. Daty + wg. Forum + Zwyczaje + Zamknięte + Potwierdzić? + Potwierdź Usunięcie: + Potwierdź Przeniesienie do + Potwierdź Komunikat na Forum: + Utwórz Nowe Forum + Utwórz Nowe Forum + Usuń + wyłącz + wyłącz + wyłączony + Edytuj + edytuj + Edytuj ponownie + Edytuj forum + Edytuj forum "%name%" + Edytuj Komunikat: + Email + %posting_date%, %user_name% napisał(a): + Wyślij Komunikat: + Wyślij znajomym + włącz + włącz + włączony + Wpisz listę adresów email, opcjonalnie z imieniem i nazwiskiem. Te osoby zostaną zapisane do tego forum. Przykład: + Cały Wątek + Pierwszy Post + Prosty + Format + Forum + Forum: + ID Forum + ID forum + Nazwa Forum + Głos w Dyskusji + ID Forum + Forum + Historia forum + Historia Forum + Forum: Historia dla + Naprzód + Fwd: + Jeśli <b>Nie</b>, użytkownicy będą mogli tylko odpowiadać na istniejące posty, ale nie będą mogli tworzyć nowych wątków. + html + Jeśli zaznaczone, utwórz użytkowników, którzy nie istnieją: + Ostatni Post + Ostatni post na ten temat + Lista użytkowników, którzy pisali na forum: + Wyślij kopię tego komunikatu: + Pierwszy post na ten temat + Administracja Forum + Wymaga komunikatu do wyświetlenia. + wymaga komunikatu by pokazać załączniki! + (Ustawiono dla Ciebie zawiadomienia o wiadomościach na całym forum. Możesz otrzymywać podwójne zawiadomienia.) + Proszę potwierdzić następujący komunikat: + Proszę wprowadzić komunikat + Proszę wpowadzić temat + Użytkownicy mogą tworzyć nowe wątki + Czy chcesz załączyć plik do tego komunikatu? + Czy chcesz otrzymywać zawiadomienia o odpowiedziach? + Musisz wysłać wiadomość albo na forum albo w odpowiedzi na inny komunikat + Zarządzaj + Zarządzaj Forum: + Zarządzaj/Moderuj + ID Komunikatu + Temat + Moderuj + moderowane + Przenieś komunikat + Przenieś komunikat do forum: + Wątek przeniesiony + Przenieś wątek do forum + Przenieś wątek do innego forum + Przenieś wątek do wątku + Przenieś wątek do wątku + Przenieś wątek do innego wątku + Przenieś do + Przenieś do innego wątku + Nazwa + Nazwa + Nazwa Forum + Nowe Forum + Nie + Brak Forum + Brak Komunikatów + Brak Postów. + Żaden + Liczba Postów + forum + Komunikat + Wątek + otwarte + Parametry + ID nadrzędnyego + Oczekuje + Wątki Zawieszone + Prawa dla "%name%" + Prawa dla wszystkich forum. + Wyślij + Wyślij Komunikat + Wyślij Nowy Komunikat + Odpowiedz + Wyślij na Forum: + Wysłąne + Wysłane przez + Data Wysłania + Historia + Historia dla + Zasady Dyskusji + Prezentacja + Podgląd + Re: + odrzuć + Odrzucony + Odpowiedzi + odpowiedz + Odpowiedz na pierwszy post w wątku + Odpowiedz na pierwszy na tej stronie post + Szukaj: + Szukaj + Szukaj: + Przeszukaj Forum + Wybrany + Przepraszamy. Nie możesz przenieść tego komunikatu. Brak innych wątków w tym forum. + Przepraszamy. Nie możesz przenieść tego wątku. Brak innych wątków. + Przepraszamy. Nie możesz przenieść tego wątku. Brak innych forum. + Statystyki + Temat + Subskrybować? + Zapisz innych + Liczba osób zapisanych do tego forum: + Podsumowanie + Podsumowanie historii postów + tekst + To forum jest + Forum %forum.name%: %message.subject% + Z Wątkami + Wątki + Użytkownik + Użytkownicy, którzy pisali na tym forum + Widok + Tak + Możesz + Twoja Notatka + Index: dotlrn_packages/packages/forums/catalog/forums.pt_BR.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.pt_BR.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.pt_BR.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,166 @@ + + + + Op��es administrativas para todos os f�runs. + Administrar + Administra��o + An�nimo + aprovar + Tem certeza que quer apagar esta mensagem e <strong>todas as suas repostas</strong>? + Anexar? + Anexos: + Autor + Retornar ao f�rum %forum.name% + <a href="%thread_url%">Retornar</a> para %forum.name% + Corpo + por Data + por F�rum + Descri��o + fechado + Confirma? + Confirmar Exclus�o: + Confirme Mover para + Confirmar Envio de Mensagem ao F�rum: + Criar um Novo F�rum + Criar Novo F�rum + apagar + desativar + desativ�-lo + desativados + Editar + editar + Editar novamente + Editar F�rum + Editar "%name%" do f�rum + Editar Mensagem: + E-mail + Em %posting_date%, %user_name% escreveu: + Enviar Mensagem por e-mail: + Enviar por e-mail para um amigo + ativar + ativ�-lo + ativado + Entre com uma lista de endere�os de e-mail, opcionalmente com primeiro e segundo nomes. Eles assinar�o o f�rum. Por exemplo: + Discuss�o Completa + Primeira Postagem + Plano + Formato + F�rum + F�rum: + ID do F�rum + ID do F�rum + Nome do F�rum + Mensagem ao F�rum + ForumID + F�rums + Hist�ria dos f�runs + Hist�ria dos F�runs + F�rums: Hist�ria de mensagens de + Encaminhar + Enc: + Se <b>N�o</b>, os usu�rios s� resposnder�o aos f�runs existentes. N�o poder�o criar outros. + <b>Aberto</b> permite a qualquer usu�rio postar e o que foi postado aparecer imediatamente,<b>moderado</b> significa que os posts precisam ser aprovados por um moderador antes que os outros possa v�-lo e <b>fechado</b> Significa que s� os administradores podem postar. + html + Se marcado, cria usu�rios que n�o existem: + �ltima Mensagem + �ltima mensagem neste assunto + Lista dos usu�rios que escreveram no f�rum: + Enviar uma c�pia desta mensagem por e-mail: + Primeira mensagem neste assunto + Administra��o dos F�rums + � preciso uma mensagem a ser mostrada. + � preciso uma mensagem para mostrar anexos! + (Note que voc� j� assina o f�rum. Voc� poder� receber notifica��es repetidas.) + Por favor confirme a seguinte mensagem: + Por favor entre a mensagem + Por favor entre o assunto + Usu�rios Podem Criar Novas Discuss�es + Gostaria de anexar um arquivo a esta mensagem? + Gostario de receber respostas? + Voc� precisa enviar mensagem em um f�rum ou em resposta a outra mensagem + Gerencia + Gerenciar F�rum: + Gerenciar/Moderar + ID da Mensagem + Assunto + Moderado + moderado + Mover a Mensagem + Mover a mensagem para o f�rum: + Mover mensagem para a mensagem + Mover linha + Mover linha para o f�rum + Mover a mensagem para outra mensagem + Mover linha para outro f�rum + Mover linha para outra linha + Mover linha para linha + Mover linha para outra linha + Mover para + Mover para outra linha + Nome + Nome + Nome do F�rum + Novo F�rum + N�o + Nenhum F�rum + Nenhuma Mensagem + Nenhuma Mensagem Enviada. + Nenhum + N�mero de Posts + do f�rum + Uma Mensagem + Uma Discuss�o + aberto(s) + Par�metros + ID do pai + Pendente + Discuss�es Pendentes + Permiss�es para "%name%" + Permiss�es para todos os f�runs. + Postar + Enviar uma Mensagem + Enviar uma Nova Mensagem + Enviar uma Resposta + Enviar Mensagem ao F�rum: + Enviados + Postado por + Data de Envio + Hist�rico de Mensagens Enviadas + Hist�rico de Mensagens Enviadas de + Pol�tica de Envios + Apresenta��o + Prever + Res: + rejeitar + Rejeitado + Respostas + Responder + Responder � primeira postagem do assunto + Responder � primeira postagem nesta p�gina + Busca: + Busca + Busca: + Buscar nos F�rums + Selecionado + Sinto muito. Voc� n�o pode mover esta mensagem. N�o h� outras linhas neste f�rum. + Sinto Muito. Voc� n�o pode mover esta linha. N�o h� outras linhas. + Sinto Muito. Voc� n�o pode mover esta linha. N�o h� outros f�runs. + Estat�sticas + Assunto + Assinar? + Inscrever outros + N�mero de inscri��es para este f�rum: + Sum�rio + Sunm�rio da hist�ria das postagens + texto + Este f�rum � + F�rum %forum.name%: %message.subject% + Por discuss�es + Discuss�es + Usu�rio + Usu�rios que escreveram no f�rum + Ver + Sim + Voc� pode + Seu Coment�rio + Index: dotlrn_packages/packages/forums/catalog/forums.pt_PT.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.pt_PT.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.pt_PT.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,109 @@ + + + + Administrar + Administra��o + aprovar + Tem a certeza de que quer eliminar esta mensagem e <strong>todas as respostas a esta</strong>? + Anexar? + Anexos: + Autor + Corpo + por Data + por Forum + Descri��o + fechado + Confirmar? + Confirmar Elimina��o: + Confirmar Envio de Mensagem para o Forum: + Criar um Novo Forum + Criar Novo Forum + eliminar + desactivar + desactiv�-lo + desactivado + Editar + editar + Editar forum + Editar Mensagem: + Enviar por Correio Electr�nico + Enviar Mensagem por Correio Electr�nico: + Enviar por correio electr�nico a um amigo + activar + activ�-lo + activado + Discuss�o Completa + Plano + Formato + Forum + Forum: + ID do Forum + ID do forum + Nome do Forum + Envio de Mensagem para o Forum + IDForum + Forums + Forums: Hist�rico de mensagens para + Enc: + html + �ltima Mensagem + �ltima mensagem relativa a este assunto + Enviar por correio electr�nico uma c�pia da seguinte mensagem: + Primeira mensagem relativa a este assunto + Administra��o dos Forums + Necessita fornecer uma mensagem para apresentar. + necessita fornecer uma mensagem para apresentar os anexos! + (Note que j� se encontra subscrito para o forum como um todo. Pode receber notifica��es duplicadas.) + Por favor confirme a seguinte mensagem: + Por favor entre uma mensagem + Por favor entre um assunto + Os Utilizadores Podem Criar Novas Discuss�es + Gostaria de anexar um ficheiro a esta mensagem? + Gostaria de subscrever-se para receber respostas? + Deve enviar a mensagem para um forum ou em resposta a outra mensagem + Gerir + Gerir Forum: + Gerir/Moderar + ID da Mensagem + moderado + Nome + Novo Forum + N�o + N�o h� Forums + N�o h� Mensagens + N�o h� mensagens enviadas. + Nenhum + Uma Mensagem + Uma Discuss�o + aberto + ID do pai + Discuss�es Pendentes + Enviar uma Mensagem + Enviar uma Nova Mensagem + Enviar uma Resposta + Enviar mensagem para o Forum: + Enviada + Data de Envio + Hist�rico das Mensagens Enviadas + Hist�rico das mensagens enviadas para + Politica de envio de mensagens + Apresenta��o + Res: + rejeitar + Respostas + responder + Pesquisar: + Pesquisar + Pesquisar: + Pesquisar Forums + Assunto + Subscrever? + texto + Este forum � + Por Discuss�es + Discuss�es + Ver + Sim + Pode + Sua Nota + Index: dotlrn_packages/packages/forums/catalog/forums.ro_RO.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.ro_RO.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.ro_RO.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + Administrează + Administraţie + Anonim + aprobă + Sunteţi sigur că vreţi să ştergeţi acest mesaj si <strong>toate replicile la acest mesaj</strong>? + Ataşează? + Ataşamente: + Autor + Înapoi la %forum.name% + <a href="%thread_url%">Înapoi</a> la %forum.name% + Corp + după Dată + după Forum + Set de Reguli + închis + Confirmi ? + Confirmă Ştergerea: + Confirmă Postarea către Forum: + Creează un Forum Nou + Creează un Forum Nou + Şterge + dezactivează + dezactivează-l + dezactivat + Modifică + Modifică + Modifică din nou + Modifică Forumul + Modifică Mesajul: + Email + Pe data de %posting_date%, %user_name% a scris: + Trimite Mesajul prin Email: + Trimite Email unui prieten + activează + activează-l + activat + Tot Şirul + Prima Postare + Plat + Format + Forum + Forum: + Forum ID + forum ID + Numele Forumului + Postare în Forum + ForumID + Forumuri + Forumuri: istoricul postărilor pentru + Trimite mai departe + Fwd: + HTML + Ultiima Postare + Ultima postare pe acest subiect + Trimite pe email o copie a următorului mesaj + Prima postare pe acests subiect: + Administrare de Forumuri + Este necesar un mesaj pentru afişare + e nevoie să oferiţi un mesaj pentru a afişa fişierele ataşate! + (De observat că deja aţi subscris la forum în ansamblul lui. E posibil să primiţi notificări duble.) + Vă rugăm să confirmaţi următoarea postare + Vă rugăm scrieţi un mesaj + Vă rugăm scrieţi un subiect + Utilizatorii Pot Iniţia Şiruri Noi + Vreţi să ataşaţi un fişier la acest mesaj? + Vreţi să vă abonaţi la răspunsuri? + Trebuie fie să postaţi la un forum sau în răspuns la alt mesaj + Administrează + Administrează Forumul: + Administrează/Moderează + Message ID + Moderează + Moderat + Nume + Forum Nou + Nr + Nr Forumuri + Nu sunt Mesaje + Nr Postări + Nici Unul + Un Mesaj + Un Şir + deschis + Parametrii + parent ID + În Aşteptare + Şiruri în Aşteptare + Postare + Postează un Mesaj + Postează un Mesaj Nou + Postează un Răspuns + Postează pentru Forumul: + Postat + Postat de către + Data Postării + Istoricul Postărilor + Istoricul postărilor pentru + Regulile Forumului + Prezentare + Preview + Re: + respins + Respins + Răspunsuri + Răspunde + Răspunde la prima postare din şir + Răspunde la prima postare din această pagină + Caută: + Caută + Caută: + Caută în Forumuri + Subiect + Te abonezi? + Simplu Text + Acest forum este + Organizat pe şiruri + Şiruri + Vezi + Da + Poţi + Notiţa Ta + Index: dotlrn_packages/packages/forums/catalog/forums.ru_RU.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.ru_RU.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.ru_RU.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,20 @@ + + + + Администрировать + Администрирование + Аноним + разрешить + Вы действительно хотите удалить это сообщение вместе со <strong>всеми ответами на него</strong>? + Прикрепить? + Вложения: + Автор + Вернуться в %forum.name% + <a href="%thread_url%">Вернуться</a> в %forum.name% + Текст сообщения + по дате + Нет + Re: + Да + Вы можете + Index: dotlrn_packages/packages/forums/catalog/forums.sh_HR.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.sh_HR.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.sh_HR.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,50 @@ + + + + Administriraj + Administracija + potvrditi + Jeste li sigurni da zelite da obrisete ovu poruku i <strong> sve odgovore na nju <strong>? + Prilozi? + Prilozi: + Pisac + Telo + prema Datumu + prema Froumu + Znak + zatvoren + Potvrdi? + Potvrdi uklanjanje: + Potvrdi prilog za forum: + Formiraj novi forum + Formiraj novi forum + izbrisi + deaktiviraj + deaktiviraj + deaktiviran + Izmena + izmeni + Izmeni forum + Izmeni poruku: + Elektronska posta + Email poruka: + Email prijatelju + aktiviraj + aktiviraj + aktiviran + Citav lanac + Format + Forum + Forum: + Forum ID + forum ID + Ime foruma + Posta foruma + ForumID + Forumi + Forumi: Slanje istorije za + Prosledi: + Zadnja poruka + Email kopiju sledece poruke: + Administracija foruma + Index: dotlrn_packages/packages/forums/catalog/forums.sv_SE.ISO-8859-1.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.sv_SE.ISO-8859-1.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.sv_SE.ISO-8859-1.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,126 @@ + + + + Administrera + + Administration + Anonym + godk�nn + �r du s�ker p� att du vill radera det h�r meddelandet och <strong>alla dess svar</strong>? + Bifoga? + Bifogade filer: + F�rfattare + Tillbaka till %forum.name% + <a href="%thread_url%">Tillbaka</a> till %forum.name% + Text + datumvis + forumvis + Beskrivning + st�ngt + Bekr�fta? + Bekr�fta radering: + Bekr�fta postning till forum: + Skapa ett nytt forum + Skapa nytt forum + radera + avaktivera + avaktivera det + avaktiverat + Redigera + redigera + Redigera igen + Redigera forum + Redigera meddelande: + E-posta + %posting_date% skrev %user_name%: + E-postmeddelande: + E-posta till en v�n + aktivera + aktivera det + aktiverat + Hela tr�den + F�rsta postningen + Platt + Format + Forum + Forum: + Forum ID + forum ID + Forumnamn + Forumpostning + ForumID + Forum + Forum: Postningshistorik f�r + Vidarebefordra + Vidarebefordra: + HTML + Senaste inl�gg + Senaste inl�gg i �mnet + E-posta en kopia av f�ljande meddelande: + F�rsta inl�gget i �rendet + Administration av forum + M�ste tillhandah�lla ett meddelande att visa. + m�ste tillhandah�lla ett meddelande f�r att visa bifogade filer. + (Observera att du redan prenumererar p� forumet i sin helhet. Du kan f� dubbla notifieringar.) + Var god konfirmera f�ljande postning: + Var god fyll i ett meddelande + Var god fyll i ett �mne + Anv�ndare kan skapa nya tr�dar + Vill du bifoga en fil till det h�r meddelandet? + Vill du prenumerera p� svar? + Du m�ste antingen posta till ett forum eller som svar p� en annan postning + Handha + Handha forum: + Handha/moderera + Meddelande-ID + Moderera + modererat + Namn + Nytt forum + Ingen + Inga forum + Inga meddelanden + Inga postningar. + Inga + Ett meddelande + En tr�d + �ppet + Parametrar + f�r�lder-ID + Avvaktande + Avvaktande tr�dar + Postning + Posta ett meddelande + Posta ett nytt meddelande + Posta ett svar + Posta till forum: + Postat + Postad av + Postningsdatum + Postningshistorik + Postningshistorik f�r + Postningspolicy + Presentation + F�rhandsgranskning + Svar: + avsl� + Ratade + Svar + svar + Svara p� f�rsta postningen i tr�den + Svara p� f�rsta postningen p� denna sida + S�k: + S�k + S�k: + Genoms�k forumen + �mne + Prenumerera? + Vanlig text + Det h�r forumet �r + Tr�dat + Tr�dar + Visa + Ja + Du kan + Din anteckning + Index: dotlrn_packages/packages/forums/catalog/forums.zh_CN.utf-8.xml =================================================================== diff -u --- dotlrn_packages/packages/forums/catalog/forums.zh_CN.utf-8.xml (revision 0) +++ dotlrn_packages/packages/forums/catalog/forums.zh_CN.utf-8.xml (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,125 @@ + + + + 管理 + 管理 + 匿名 + 批准 + 确实要删除此信息及<strong>全部回复</strong>吗? + 要添加吗? + 附件: + 作者 + 回到%forum.name% + <a href="%thread_url%">返回</a>到%forum.name% + 内容 + 按日期 + 按论坛 + 章程 + 已关闭 + 确定吗? + 确认删除: + 确认发布帖子到论坛: + 创建新论坛 + 创建新论坛 + 删除 + 使不能 + 使不能 + 使不能 + 编辑 + 编辑 + 重新编辑 + 编辑论坛 + 编辑信息: + Email + %posting_date%日,%user_name%写到: + Email信息: + Email给朋友 + 使能 + 使能 + 使能 + 全Thread + 第一帖 + 普通的 + 格式 + 论坛 + 论坛: + 论坛ID + 论坛ID + 论坛名称 + 论坛帖子 + 论坛ID + 论坛 + 论坛:发布帖子历史记录 + 向前 + 转发: + HTML + 最后一帖 + 此主题最后一帖 + Email下列信息的拷贝: + 此主题第一帖 + 论坛管理 + 需要提供显示信息。 + 需要提供显示附件信息! + (注意:你已整体订阅论坛,可能收到重复的通知。) + 请确认下面的帖子: + 请输入信息 + 请输入主题 + 用户可创建新线程 + 要为此信息附加文件吗? + 要订阅回复吗? + 可以在论坛发布帖子,也可以回复信息。 + 管理 + 管理论坛: + 管理/修改 + 消息ID + 修改 + 已修改 + 名称 + 新论坛 + + 没有论坛 + 没有消息 + 没有帖子。 + 没有 + 一条信息 + 单线程 + 打开 + 参数 + 父ID + 排队 + 排队线程 + 发布 + 发布消息 + 发布新消息 + 回复帖子 + 发布帖子到论坛: + 已发布 + 发布 + 发布日期 + 发布历史记录 + 发布历史记录 + 发布方法 + 显示 + 预览 + 回复: + 拒绝 + 已拒绝 + 回复 + 回复 + 回复此线程第一帖 + 回复此页第一帖 + 搜索: + 搜索 + 搜索: + 搜索论坛 + 主题 + 要订阅吗? + 普通文本 + 此论坛是 + 线程的 + 线程 + 查看 + + 你可能 + 注意 + Index: dotlrn_packages/packages/forums/forums.info =================================================================== diff -u --- dotlrn_packages/packages/forums/forums.info (revision 0) +++ dotlrn_packages/packages/forums/forums.info (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,43 @@ + + + + + Forums + Forums + f + f + + + OpenACS + Online discussion forums. + 2007-06-15 + OpenACS + This online discussion board software is the successor of the original bboard package. The biggest improvement is a scalable datamodel. Forums supports threaded and flat view, moderation, a stand alone search function as well as integration with the OpenACS search package and integration with the notifications package for email alerts. It also supports reply via email. + 0 + #forums.Forums# + + + + + + + + + + + + + + + + + + + + + + + + + + Index: dotlrn_packages/packages/forums/lib/forums-portlet-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/forums-portlet-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/forums-portlet-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,49 @@ + +oracle8.1.6 + + + +SELECT r.* FROM ( +SELECT + b.subject AS subject, + b.message_id AS thread_id, + a.message_id AS message_id +FROM + (SELECT message_id, tree_sortkey, posting_date + FROM forums_messages + WHERE forum_id IN + (SELECT forum_id FROM forums_forums WHERE package_id = + :package_id and enabled_p = 't') + ORDER BY posting_date DESC) a, + forums_messages b +WHERE + b.parent_id IS NULL + AND b.tree_sortkey = tree.ancestor_key(a.tree_sortkey, 1) + AND b.forum_id IN + (SELECT forum_id FROM forums_forums WHERE package_id = :package_id + and enabled_p = 't') +ORDER BY a.posting_date DESC +) r WHERE rownum <= $n + + + + + +SELECT r.* +FROM +(SELECT + subject, message_id +FROM + forums_messages_approved +WHERE + forum_id IN + (SELECT forum_id FROM forums_forums WHERE package_id = :package_id + and enabled_p = 't') + AND parent_id IS NULL +ORDER BY + posting_date DESC) r +WHERE rownum <= $n + + + + \ No newline at end of file Index: dotlrn_packages/packages/forums/lib/forums-portlet-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/forums-portlet-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/forums-portlet-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,39 @@ + +postgresql7.3 + + +SELECT + b.subject AS subject, + b.message_id AS thread_id, + a.message_id AS message_id +FROM + (SELECT message_id, tree_sortkey, posting_date + FROM forums_messages + WHERE forum_id IN + (SELECT forum_id FROM forums_forums WHERE package_id = :package_id + and enabled_p = 't') + ORDER BY posting_date DESC LIMIT $n) a, + forums_messages b +WHERE + b.parent_id IS NULL + AND b.tree_sortkey = tree_root_key(a.tree_sortkey) + AND b.forum_id IN + (SELECT forum_id FROM forums_forums WHERE package_id = :package_id + and enabled_p = 't'); + + + +SELECT + subject, message_id +FROM + forums_messages_approved +WHERE + forum_id IN + (SELECT forum_id FROM forums_forums WHERE package_id = :package_id + and enabled_p = 't') + AND parent_id IS NULL +ORDER BY + posting_date DESC +LIMIT $n + + \ No newline at end of file Index: dotlrn_packages/packages/forums/lib/forums-portlet.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/forums-portlet.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/forums-portlet.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,36 @@ + + +

@title@

+ +

Hot topics

+

None

+

+ @hot_topics.name@
+

+
+ +

New topics

+

None

+

+ @new_topics.name@
+

+
+
+ +

@title@

+ +

Hot Topics

+

None

+

+ @hot_topics.name@
+

+
+ +

New Topics

+

None

+

+ @new_topics.name@
+

+
+
+
Index: dotlrn_packages/packages/forums/lib/forums-portlet.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/forums-portlet.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/forums-portlet.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,78 @@ +ad_page_contract { +

Include for displaying the latest threads/posts in a forums instance. + Note this takes the following parameters - not declared with + ad_page_contract because it's an include: + +

+} + +# validate args +if { ![exists_and_not_null package_id] + && ![exists_and_not_null base_url] } { + error "package_id and/or base_url must be given" +} +if { [info exists n] } { + # need to do a type check, as this is interpolated into the PG query + # (PG LIMIT clause doesn't accept bind vars) + if { ![string is integer $n] || ![expr $n > 0] } { + error "n must be an integer greater than 0" + } +} else { + set n 2 +} +if { ![info exists cache] || [expr $cache < 0] } { + set cache 0 +} +if { ![exists_and_not_null package_id] } { + set package_id [site_node::get_element \ + -url $base_url -element object_id] +} +if { ![exists_and_not_null base_url] } { + set base_url [lindex [site_node::get_url_from_object_id \ + -object_id $package_id] 0] +} +if { ![info exists title] } { + set title [apm_instance_name_from_id $package_id] +} +if { ![info exists show_empty_p] } { + set show_empty_p 1 +} + + +# obtain data (use list rather than multirow, as its easier to cache) +# identification problems (need package_id + n as part of key) +set new_topics_script "# /packages/forums/lib/forums-portlet.tcl +set n $n +db_list_of_lists new_topics {} -bind { package_id $package_id }" +set hot_topics_script "# /packages/forums/lib/forums-portlet.tcl +set n $n +db_list_of_lists hot_topics {} -bind { package_id $package_id }" +set new_topics_ds [util_memoize $new_topics_script $cache] +set hot_topics_ds [util_memoize $hot_topics_script $cache] + +multirow create new_topics name url +foreach row $new_topics_ds { + set name [lindex $row 0] + set thread_id [lindex $row 1] + set url "${base_url}message-view?message_id=$thread_id" + multirow append new_topics $name $url +} + +multirow create hot_topics name url +foreach row $hot_topics_ds { + set name [lindex $row 0] + set thread_id [lindex $row 1] + set message_id [lindex $row 2] + set url "${base_url}message-view?message_id=${thread_id}&\#${message_id}" + multirow append hot_topics $name $url +} + +ad_return_template Index: dotlrn_packages/packages/forums/lib/message/attachment-list.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/attachment-list.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/attachment-list.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,7 @@ + Index: dotlrn_packages/packages/forums/lib/message/attachment-list.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/attachment-list.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/attachment-list.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,24 @@ +ad_page_contract { + a message attachment chunk to be included to display attachments + + @author ben (ben@openforce.net) + @creation-date 2002-07-02 + @cvs-id $Id$ +} + +if {![array exists message]} { + ad_return_complaint 1 "[_ forums.lt_need_to_provide_a_mes]" +} + +if {![exists_and_not_null bgcolor]} { + set bgcolor "#ffffff" +} + +# get the attachments +set attachments [attachments::get_attachments -object_id $message(message_id)] + +set attachment_graphic [attachments::graphic_url] + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} Index: dotlrn_packages/packages/forums/lib/message/choose-forum-move.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose-forum-move.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose-forum-move.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,17 @@ +@title;noquote@ +@context;noquote@ + +

#forums.Move_thread_to_forum#

+ +
+
+
+ +

#forums.Sorry_you_can_not_move_this_thread_There_are_no_other_forums# + + + +

+
+ + Index: dotlrn_packages/packages/forums/lib/message/choose-forum-move.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose-forum-move.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose-forum-move.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,49 @@ +# packages/forums/admin/moderate/choose_forum_move.tcl + +ad_page_contract { + + Show a list of available forums so that user can choose one. + + @author Natalia Perez (nperper@it.uc3m.es) + @creation-date 2005-03-15 +} { + {return_url "../message-view"} +} -properties { + context:onevalue +} -validate { +} -errors { +} + + + template::list::create \ + -name available_forums \ + -multirow forums \ + -key forum_id \ + -elements { + selected { + label #forums.Selected# + display_template { + + } + } + forum_id { + hide_p 1 + } + forum_name { + label #forums.Forum_Name# + display_col name + } + } + +db_0or1row get_package_id "select distinct(package_id) from forums_forums where forum_id = $message(forum_id)" +db_multirow forums get_forums " + select forum_id, name from forums_forums where forum_id <> $message(forum_id) and package_id = :package_id and enabled_p = 't' +" + +set message_id $message(message_id) + +# set context & title +set context [list "[_ forums.Available_Forums]"] +set title "[_ forums.Available_Forums]" + + Index: dotlrn_packages/packages/forums/lib/message/choose-message-move-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose-message-move-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose-message-move-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,26 @@ + + + + oracle8.1.6 + + + + select substr(tree_sortkey, 0, 6) as father_tree_sortkey + from forums_messages + where message_id=$message(message_id) + + + + + + + + select parent_id + from forums_messages + where forum_id = $message(forum_id) and tree_sortkey between tree.left('$father_tree_sortkey') and tree.right('$father_tree_sortkey') + order by tree_sortkey desc + + + + + Index: dotlrn_packages/packages/forums/lib/message/choose-message-move-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose-message-move-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose-message-move-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,26 @@ + + + + postgresql7.1 + + + + select substring(tree_sortkey, 0, 9) as father_tree_sortkey + from forums_messages + where message_id=$message(message_id) + + + + + + + + select parent_id + from forums_messages + where forum_id = $message(forum_id) and tree_sortkey between tree_left('$father_tree_sortkey') and tree_right('$father_tree_sortkey') + order by tree_sortkey desc + + + + + Index: dotlrn_packages/packages/forums/lib/message/choose-message-move.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose-message-move.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose-message-move.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,17 @@ +@title;noquote@ +@context;noquote@ + +

#forums.Move_message_to_message#

+ +
+
+
+ +

#forums.Sorry_you_can_not_move_this_message_There_are_no_other_threads#

+
+ + +

+
+
+
Index: dotlrn_packages/packages/forums/lib/message/choose-message-move.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose-message-move.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose-message-move.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,51 @@ +# packages/forums/admin/moderate/choose_message_move.tcl + +ad_page_contract { + + Show a list of available messages so that user can choose one. + + @author Natalia Perez (nperper@it.uc3m.es) + @creation-date 2005-03-17 +} { + {return_url "../message-view"} +} -properties { + context:onevalue +} -validate { +} -errors { +} + + template::list::create \ + -name available_messages \ + -multirow messages \ + -key message_id \ + -elements { + selected { + label #forums.Selected# + display_template { + + } + } + message_id { + hide_p 1 + } + message_subject { + label #forums.Message_Subject# + display_col subject + } + } + +db_0or1row get_tree_sortkey { } + +db_foreach get_parent_id { } { + db_multirow messages get_messages " + select message_id, subject from forums_messages where forum_id = $message(forum_id) and message_id <> $message(message_id) and parent_id is null and message_id <> :parent_id + " +} + +set msg_id $message(message_id) + +# set context & title +set context [list "[_ forums.Available_Messages]"] +set title "[_ forums.Available_Messages]" + + Index: dotlrn_packages/packages/forums/lib/message/choose-thread-move.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose-thread-move.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose-thread-move.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,17 @@ +@title;noquote@ +@context;noquote@ + +

#forums.Move_thread_to_thread#

+ +
+
+
+ +

#forums.Sorry_you_can_not_move_this_thread_There_are_no_more_threads#

+
+ + +

+
+
+
Index: dotlrn_packages/packages/forums/lib/message/choose-thread-move.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose-thread-move.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose-thread-move.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,58 @@ +# packages/forums/admin/moderate/choose_message_move.tcl + +ad_page_contract { + + Show a list of available messages so that user can choose one. + + @author Natalia Perez (nperper@it.uc3m.es) + @creation-date 2005-03-17 +} { + {return_url "../message-view"} +} -properties { + context:onevalue +} -validate { +} -errors { +} + + template::list::create \ + -name available_messages \ + -multirow messages \ + -key message_id \ + -elements { + selected { + label #forums.Selected# + display_template { + + } + } + message_id { + hide_p 1 + } + forum_id { + label #forums.Name_of_forum# + display_col name + } + message_subject { + label #forums.Message_Subject# + display_col subject + } + } + + +db_0or1row get_package_id "select distinct(package_id) from forums_forums where forum_id = $message(forum_id)" +db_multirow messages get_messages " + select fm.forum_id, fm.message_id, fm.subject, ff.name + from forums_messages fm, forums_forums ff + where ff.package_id = :package_id and ff.enabled_p='t' and fm.message_id <> $message(message_id) and fm.parent_id is null + and fm.forum_id = ff.forum_id + order by fm.forum_id +" + + +set msg_id $message(message_id) + +# set context & title +set context [list "[_ forums.Available_Messages]"] +set title "[_ forums.Available_Messages]" + + Index: dotlrn_packages/packages/forums/lib/message/choose_forum_move.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose_forum_move.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose_forum_move.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,17 @@ +@title;noquote@ +@context;noquote@ + +

#forums.Move_thread_to_forum#

+ +
+ + + +

#forums.Sorry_you_can_not_move_this_thread_There_are_no_other_forums# + + + +

+ + + \ No newline at end of file Index: dotlrn_packages/packages/forums/lib/message/choose_forum_move.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose_forum_move.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose_forum_move.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,49 @@ +# packages/forums/admin/moderate/choose_forum_move.tcl + +ad_page_contract { + + Show a list of available forums so that user can choose one. + + @author Natalia Perez (nperper@it.uc3m.es) + @creation-date 2005-03-15 +} { + {return_url "../message-view"} +} -properties { + context:onevalue +} -validate { +} -errors { +} + + + template::list::create \ + -name available_forums \ + -multirow forums \ + -key forum_id \ + -elements { + selected { + label #forums.Selected# + display_template { + + } + } + forum_id { + hide_p 1 + } + forum_name { + label #forums.Forum_Name# + display_col name + } + } + +db_0or1row get_package_id "select distinct(package_id) from forums_forums where forum_id = $message(forum_id)" +db_multirow forums get_forums " + select forum_id, name from forums_forums where forum_id <> $message(forum_id) and package_id = :package_id and enabled_p = 't' +" + +set message_id $message(message_id) + +# set context & title +set context [list "[_ forums.Available_Forums]"] +set title "[_ forums.Available_Forums]" + + Index: dotlrn_packages/packages/forums/lib/message/choose_message_move-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose_message_move-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose_message_move-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,26 @@ + + + + oracle8.1.6 + + + + select substr(tree_sortkey, 0, 6) as father_tree_sortkey + from forums_messages + where message_id=$message(message_id) + + + + + + + + select parent_id + from forums_messages + where forum_id = $message(forum_id) and tree_sortkey between tree.left('$father_tree_sortkey') and tree.right('$father_tree_sortkey') + order by tree_sortkey desc + + + + + Index: dotlrn_packages/packages/forums/lib/message/choose_message_move-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose_message_move-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose_message_move-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,26 @@ + + + + postgresql7.1 + + + + select substring(tree_sortkey, 0, 9) as father_tree_sortkey + from forums_messages + where message_id=$message(message_id) + + + + + + + + select parent_id + from forums_messages + where forum_id = $message(forum_id) and tree_sortkey between tree_left('$father_tree_sortkey') and tree_right('$father_tree_sortkey') + order by tree_sortkey desc + + + + + Index: dotlrn_packages/packages/forums/lib/message/choose_message_move.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose_message_move.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose_message_move.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,17 @@ +@title;noquote@ +@context;noquote@ + +

#forums.Move_message_to_message#

+ +
+ + + +

#forums.Sorry_you_can_not_move_this_message_There_are_no_other_threads#

+
+ + +

+ +
+
\ No newline at end of file Index: dotlrn_packages/packages/forums/lib/message/choose_message_move.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose_message_move.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose_message_move.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,51 @@ +# packages/forums/admin/moderate/choose_message_move.tcl + +ad_page_contract { + + Show a list of available messages so that user can choose one. + + @author Natalia Perez (nperper@it.uc3m.es) + @creation-date 2005-03-17 +} { + {return_url "../message-view"} +} -properties { + context:onevalue +} -validate { +} -errors { +} + + template::list::create \ + -name available_messages \ + -multirow messages \ + -key message_id \ + -elements { + selected { + label #forums.Selected# + display_template { + + } + } + message_id { + hide_p 1 + } + message_subject { + label #forums.Message_Subject# + display_col subject + } + } + +db_0or1row get_tree_sortkey { } + +db_foreach get_parent_id { } { + db_multirow messages get_messages " + select message_id, subject from forums_messages where forum_id = $message(forum_id) and message_id <> $message(message_id) and parent_id is null and message_id <> :parent_id + " +} + +set msg_id $message(message_id) + +# set context & title +set context [list "[_ forums.Available_Messages]"] +set title "[_ forums.Available_Messages]" + + Index: dotlrn_packages/packages/forums/lib/message/choose_thread_move.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose_thread_move.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose_thread_move.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,17 @@ +@title;noquote@ +@context;noquote@ + +

#forums.Move_thread_to_thread#

+ +
+ + + + #forums.Sorry_you_can_not_move_this_thread_There_are_no_more_threads# + + + +

+ +
+
\ No newline at end of file Index: dotlrn_packages/packages/forums/lib/message/choose_thread_move.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/choose_thread_move.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/choose_thread_move.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,58 @@ +# packages/forums/admin/moderate/choose_message_move.tcl + +ad_page_contract { + + Show a list of available messages so that user can choose one. + + @author Natalia Perez (nperper@it.uc3m.es) + @creation-date 2005-03-17 +} { + {return_url "../message-view"} +} -properties { + context:onevalue +} -validate { +} -errors { +} + + template::list::create \ + -name available_messages \ + -multirow messages \ + -key message_id \ + -elements { + selected { + label #forums.Selected# + display_template { + + } + } + message_id { + hide_p 1 + } + forum_id { + label #forums.Name_of_forum# + display_col name + } + message_subject { + label #forums.Message_Subject# + display_col subject + } + } + + +db_0or1row get_package_id "select distinct(package_id) from forums_forums where forum_id = $message(forum_id)" +db_multirow messages get_messages " + select fm.forum_id, fm.message_id, fm.subject, ff.name + from forums_messages fm, forums_forums ff + where ff.package_id = :package_id and ff.enabled_p='t' and fm.message_id <> $message(message_id) and fm.parent_id is null + and fm.forum_id = ff.forum_id + order by fm.forum_id +" + + +set msg_id $message(message_id) + +# set context & title +set context [list "[_ forums.Available_Messages]"] +set title "[_ forums.Available_Messages]" + + Index: dotlrn_packages/packages/forums/lib/message/content-updater-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/content-updater-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/content-updater-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,46 @@ + + + + oracle8.1.6 + + + + select message_id, + 0 as n_attachments, + subject, + content, + format, + person.name(user_id) as user_name, + to_char(posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + tree.tree_level(tree_sortkey) as tree_level, + state, + user_id, + parent_id + from $table_name + where forum_id = :forum_id + and tree_sortkey between tree.left(:tree_sortkey) and tree.right(:tree_sortkey) + order by $order_by + + + + + + select message_id, + (select count(*) from attachments where object_id = message_id) as n_attachments, + subject, + content, + format, + person.name(user_id) as user_name, + to_char(posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + tree.tree_level(tree_sortkey) as tree_level, + state, + user_id, + parent_id + from $table_name + where forum_id = :forum_id + and tree_sortkey between tree.left(:tree_sortkey) and tree.right(:tree_sortkey) + order by $order_by + + + + Index: dotlrn_packages/packages/forums/lib/message/content-updater-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/content-updater-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/content-updater-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,51 @@ + + + + postgresql7.1 + + + + select message_id, + 0 as n_attachments, + subject, + content, + format, + person__name(user_id) as user_name, + to_char(posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + tree_level(tree_sortkey) as tree_level, + state, + user_id, + parent_id, + open_p, + max_child_sortkey + from $table_name + where forum_id = :forum_id + and tree_sortkey between tree_left(:tree_sortkey) and tree_right(:tree_sortkey) + order by $order_by + + + + + + select message_id, + (select count(*) from attachments where object_id = message_id) as n_attachments, + subject, + content, + format, + person__name(user_id) as user_name, + to_char(posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + tree_level(tree_sortkey) as tree_level, + state, + user_id, + parent_id, + open_p, + max_child_sortkey + from $table_name + where forum_id = :forum_id + and tree_sortkey between tree_left(:tree_sortkey) and tree_right(:tree_sortkey) + order by $order_by + + + + + Index: dotlrn_packages/packages/forums/lib/message/content-updater.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/content-updater.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/content-updater.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,8 @@ +@message.content;noquote@ + +
+ #forums.Attachments# + +
+
+ Index: dotlrn_packages/packages/forums/lib/message/content-updater.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/content-updater.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/content-updater.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,39 @@ +ad_page_contract { + + Gets the content of an specified message + + @author Veronica De La Cruz (veronica@viaro.net) + @creation-date 2006-04-21 + + +} + + + + +# Set some sql variables + +set forum_id $message(forum_id) +set tree_sortkey $message(tree_sortkey) + +if {[forum::attachments_enabled_p]} { + set query select_message_responses_attachments +} else { + set query select_message_responses +} + +# Find the ordering of messages so it can be consistent +# with the code that is in thread-chunk + +if { [string equal $forum(presentation_type) flat] } { + set order_by "fma.posting_date, fma.tree_sortkey" +} else { + set order_by "fma.tree_sortkey" +} + + +set message(content) [ad_html_text_convert -from $message(format) -to text/html -- $message(content)] + +# convert emoticons to images if the parameter is set +if { [string is true [parameter::get -parameter DisplayEmoticonsAsImagesP -default 0]] } { + set message(content) [forum::format::emoticons -content $message(content)]} Index: dotlrn_packages/packages/forums/lib/message/delete.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/delete.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/delete.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,12 @@ +

#forums.Are_you_sure_you_want_to_delete_lt#

+ +
+ +
+ + Index: dotlrn_packages/packages/forums/lib/message/delete.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/delete.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/delete.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,31 @@ +ad_page_contract { + + Delete a Message + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-24 + @cvs-id $Id$ + +} + +set table_border_color [parameter::get -parameter table_border_color] + +# Confirmed? +if {$confirm_p} { + # Delete the message and all children + forum::message::delete -message_id $message(message_id) + + # Redirect to the forum + ad_returnredirect "../forum-view?forum_id=$message(forum_id)" + ad_script_abort +} + +set message_id $message(message_id) + +set message(tree_level) 0 + +set confirm_url [export_vars -base "message-delete" {message_id return_url {confirm_p 1}}] + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} Index: dotlrn_packages/packages/forums/lib/message/edit.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/edit.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/edit.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1 @@ + Index: dotlrn_packages/packages/forums/lib/message/edit.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/edit.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/edit.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,42 @@ +ad_page_contract { + + Form to edit a message + + @author Ben Adida (ben@openforce.net) + @creation-date 2003-12-09 + @cvs-id $Id$ + +} + +form create message + +element create message message_id \ + -label [_ forums.Message_ID] \ + -datatype integer \ + -widget hidden + +forums::form::message message + +if {[form is_valid message]} { + template::form get_values message message_id subject message_body + set content [string trimright [template::util::richtext::get_property contents $message_body]] + set format [string trimright [template::util::richtext::get_property format $message_body]] + + forum::message::edit \ + -message_id $message_id \ + -subject $subject \ + -content $content \ + -format $format + + ad_returnredirect "$return_url?message_id=$message_id" + ad_script_abort +} + +# Prepare the other data +element set_properties message message_id -value $message(message_id) +element set_properties message subject -value $message(subject) +element set_properties message message_body -value [list $message(content) $message(format)] + +if {[info exists alt_template]} { + ad_return_template $alt_template +} Index: dotlrn_packages/packages/forums/lib/message/messages-list.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/messages-list.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/messages-list.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,9 @@ +

Recent messages

+ + + + +none + Index: dotlrn_packages/packages/forums/lib/message/messages-list.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/messages-list.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/messages-list.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,12 @@ +set package_id [site_node::get_element -url $url -element package_id] + +db_multirow -extend {link} messages messages { + select m.subject, count(*) as n, max(m.message_id) as message_id,to_date(max(m.posting_date), 'YYYY-MM-DD HH24:MI:SS') as posted + from forums_forums f, forums_messages m + where f.package_id = :package_id + and m.forum_id = f.forum_id + and posting_date > now() - '5 days'::interval group by subject order by max(m.posting_date) desc +} { + set posted [lc_time_fmt $posted "%x %X"] + set link "message-view?message_id=$message_id" +} Index: dotlrn_packages/packages/forums/lib/message/messages-table.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/messages-table.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/messages-table.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1 @@ + \ No newline at end of file Index: dotlrn_packages/packages/forums/lib/message/messages-table.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/messages-table.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/messages-table.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,33 @@ +ad_page_contract { + + Search messages for a string + + @author Rob Denison (rob@thaum.net) + @creation-date 2003-12-08 + @cvs-id $Id$ + +} + +set useScreenNameP [parameter::get -parameter "UseScreenNameP" -default 0] + +template::list::create -name results -multirow messages -no_data "#forums.No_Messages#" -elements { + subject { + label "#forums.Subject#" + display_template { + @messages.subject@ + } + } + author { + label "#forums.Author#" + display_template { + @messages.author@ + } + } + posting_date_pretty { + label "#forums.Posting_Date#" + } +} + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} Index: dotlrn_packages/packages/forums/lib/message/pending-list-chunk-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/pending-list-chunk-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/pending-list-chunk-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,20 @@ + + + + oracle8.1.6 + + + + select message_id, + subject + from forums_messages + where forum_id = :forum_id + and tree_sortkey in (select substr(tree_sortkey, 1, 6) + from forums_messages_pending + where forum_id = :forum_id) + order by tree_sortkey + + + + + Index: dotlrn_packages/packages/forums/lib/message/pending-list-chunk-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/pending-list-chunk-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/pending-list-chunk-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,20 @@ + + + + postgresql7.1 + + + + select message_id, + subject + from forums_messages + where forum_id = :forum_id + and tree_sortkey in (select tree_ancestor_key(tree_sortkey, 1) + from forums_messages_pending + where forum_id = :forum_id) + order by tree_sortkey + + + + + Index: dotlrn_packages/packages/forums/lib/message/pending-list-chunk.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/pending-list-chunk.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/pending-list-chunk.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,10 @@ + Index: dotlrn_packages/packages/forums/lib/message/pending-list-chunk.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/pending-list-chunk.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/pending-list-chunk.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,16 @@ +ad_page_contract { + + Moderate a Forum + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-24 + @cvs-id $Id$ + +} + +# Get the threads that need approval +db_multirow pending_threads select_pending_threads {} + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} Index: dotlrn_packages/packages/forums/lib/message/post-confirm.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/post-confirm.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/post-confirm.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,19 @@ +

#forums.lt_Please_confirm_the_fo#

+
+ +
+
+ + @exported_vars;noquote@ + + #forums.lt_Would_you_like_to_sub# + #forums.No# + #forums.Yes# + + +
#forums.lt_Note_that_you_are_alr# +
+
+ + +
Index: dotlrn_packages/packages/forums/lib/message/post-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/post-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/post-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,21 @@ + + + oracle8.1.6 + + + + select to_char(sysdate, 'YYYY-MM-DD HH24:MI:SS') + from dual + + + + + + begin + forum_reading_info.remove_msg(:parent_id); + end; + + + + + Index: dotlrn_packages/packages/forums/lib/message/post-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/post-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/post-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,22 @@ + + + + postgresql7.1 + + + + select to_char(current_timestamp, 'YYYY-MM-DD HH24:MI:SS') + + + + + + select forums_reading_info__remove_msg ( + :parent_id + ); + + + + + + Index: dotlrn_packages/packages/forums/lib/message/post.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/post.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/post.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,8 @@ + +
+ +
+
+#forums.in_this_forum_your_screename_is_used# "@screen_name@"
+#forums.anonymious_posts_are_allowed# + Index: dotlrn_packages/packages/forums/lib/message/post.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/post.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/post.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,216 @@ +ad_page_contract { + + Form to create message and insert it + + @author Ben Adida (ben@openforce.net) + @creation-date 2003-12-09 + @cvs-id $Id$ + +} + +set user_id [ad_conn user_id] +set screen_name [db_string select_screen_name { select screen_name from users where user_id = :user_id}] +set useScreenNameP [parameter::get -parameter "UseScreenNameP" -default 0] +set pvt_home [ad_pvt_home] + +if {[array exists parent_message]} { + set parent_id $parent_message(message_id) +} else { + set parent_id "" +} + +set table_border_color [parameter::get -parameter table_border_color] +set table_bgcolor [parameter::get -parameter table_bgcolor] + + +############################## +# Form definition +# + +set edit_buttons [list [list [_ forums.Post] post] \ + [list [_ forums.Preview] preview]] + +set form_elements { + {message_id:key} + {subject:text(text) + {html {size 60}} + {label "[_ forums.Subject]"} + } + {message_body:richtext(richtext) + {html {rows 20 cols 60}} + {label "[_ forums.Body]"} + } + {forum_id:integer(hidden) + } + {parent_id:integer(hidden),optional + } + {subscribe_p:text(hidden),optional + } + {confirm_p:text(hidden),optional + } +} + +# Deal with anonymous postings +if {[expr {$user_id != 0 && $anonymous_allowed_p}]} { + append form_elements { + {anonymous_p:integer(checkbox),optional + {options {{"[_ forums.post_anonymously]" 1}}} + {label "[_ forums.Anonymous]"} + } + } +} else { + append form_elements { + {anonymous_p:integer(hidden),optional + } + } +} + +# Attachments +if {$user_id != 0} { + append form_elements { + {attach_p:integer(radio),optional + {options {{[_ acs-kernel.common_No] 0} {[_ acs-kernel.common_Yes] 1}}} + {label "[_ forums.Attach]"} + } + } +} else { + append form_elements { + {attach_p:integer(hidden),optional + } + } +} + +ad_form -html {enctype multipart/form-data} \ + -name message \ + -edit_buttons $edit_buttons \ + -form $form_elements \ + -new_request { + ############################## + # Form initialisation + # + set message_id [db_nextval acs_object_id_seq] + if {[empty_string_p $parent_id]} { + set parent_id "" + } else { + set forum_id $parent_message(forum_id) + set subject [forum::format::reply_subject $parent_message(subject)] + } + + set confirm_p 0 + set subscribe_p 0 + set anonymous_p 0 + set attach_p 0 + } -on_submit { + + ############################## + # Form processing + # + + if { [empty_string_p $anonymous_p] } { set anonymous_p 0 } + + + set action [template::form::get_button message] + + # Make post the default action + if {$action eq ""} { + set action preview + } + + set displayed_user_id [ad_decode \ + [expr {$anonymous_allowed_p && $anonymous_p}] \ + 0 $user_id \ + 0] + + if { [string equal $action "preview"] } { + + set confirm_p 1 + set subject.spellcheck ":nospell:" + set content.spellcheck ":nospell:" + set content [template::util::richtext::get_property content $message_body] + set format [template::util::richtext::get_property format $message_body] + + set exported_vars [export_vars -form {message_id forum_id parent_id subject {message_body $content} {message_body.format $format} confirm_p subject.spellcheck content.spellcheck anonymous_p attach_p}] + + set message(format) $format + set message(subject) $subject + set message(content) $content + set message(user_id) $displayed_user_id + set message(user_name) [db_string select_name {}] + set message(screen_name) $screen_name + set message(posting_date_ansi) [db_string select_date {}] + set message(posting_date_pretty) [lc_time_fmt $message(posting_date_ansi) "%x %X"] + + # Let's check if this person is subscribed to the forum + # in case we might want to subscribe them to the thread + if {[empty_string_p $parent_id]} { + if {![empty_string_p [notification::request::get_request_id \ + -type_id [notification::type::get_type_id -short_name forums_forum_notif] \ + -object_id $forum_id \ + -user_id [ad_conn user_id]]]} { + set forum_notification_p 1 + } else { + set forum_notification_p 0 + } + } + + ad_return_template "/packages/forums/lib/message/post-confirm" + } + + # DRB: Malte: this redirect_url var isn't used as it is reset in the code below. Please + # review and either discard this line or fix the stuff below ... +# set redirect_url "[ad_conn package_url]message-view?message_id=[set redirect_message_id]&\#$message_id" + + if { [string equal $action "post"] } { + set content [template::util::richtext::get_property content $message_body] + set format [template::util::richtext::get_property format $message_body] + + forum::message::new \ + -forum_id $forum_id \ + -message_id $message_id \ + -parent_id $parent_id \ + -subject $subject \ + -content $content \ + -format $format \ + -user_id $displayed_user_id + + # DRB: Black magic cache flush call which will disappear when list builder is + # rewritten to paginate internally rather than use the template paginator. + cache flush "messages,forum_id=$forum_id*" + +if { [forum::use_ReadingInfo_p] } { + # remove reading info for this thread for all users (mark it unread) + set db_antwort [db_exec_plsql forums_reading_info__remove_msg {}] +} + # VGUERRA Redirecting to the first message ALWAYS + forum::message::get -message_id $message_id -array msg + set redirect_url "[ad_conn package_url]message-view?message_id=$msg(root_message_id)" + + # Wrap the notifications URL + if {![empty_string_p $subscribe_p] && $subscribe_p && [empty_string_p $parent_id]} { + set notification_url [notification::display::subscribe_url \ + -type forums_message_notif \ + -object_id $message_id \ + -url $redirect_url \ + -user_id $user_id] + + # redirect to notification stuff + set redirect_url $notification_url + } + + # Wrap the attachments URL + if {$attachments_enabled_p} { + if { ![empty_string_p $attach_p] && $attach_p} { + set redirect_url [attachments::add_attachment_url -object_id $message_id -return_url $redirect_url -pretty_name "[_ forums.Forum_Posting] \"$subject\""] + } + } + + # Do the redirection + ad_returnredirect $redirect_url + ad_script_abort + } + } + + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} Index: dotlrn_packages/packages/forums/lib/message/post.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/post.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/post.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,21 @@ + + + + + + + select first_names || ' ' || last_name + from persons + where person_id = :user_id + + + + + + select forum_id + from forums_messages + where message_id = :parent_id + + + + Index: dotlrn_packages/packages/forums/lib/message/row.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/row.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/row.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,69 @@ +
+
+ + + +
+
+ + +
+ + +
+ @message.number@: + @message.subject@ + + +
@message.subject@ + + + +
@message.number@ + + + (response to @message.parent_number@) + +
+
+ #forums.Posted_by# + @message.screen_name@ + @message.user_name@ #forums.on# +
+
+ +
+
@message.content;noquote@ + +
+ #forums.Attachments# + +
+
+
+
+
Index: dotlrn_packages/packages/forums/lib/message/row.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/row.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/row.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,51 @@ +ad_page_contract { + + a message chunk to be included in a table listing of messages + + @author yon (yon@openforce.net) + @author arjun (arjun@openforce.net) + @creation-date 2002-06-02 + @cvs-id $Id$ + +} + +set viewer_id [ad_conn user_id] +set useScreenNameP [parameter::get -parameter "UseScreenNameP" -default 0] +set screen_name [db_string select_screen_name { select screen_name from users where user_id = :viewer_id}] + +if {![exists_and_not_null rownum]} { + set rownum 1 +} + +if {![exists_and_not_null presentation_type]} { + set presentation_type "" +} + +set message(content) [ad_html_text_convert -from $message(format) -to text/html -- $message(content)] +set message(screen_name) $screen_name + +# convert emoticons to images if the parameter is set +if { [string is true [parameter::get -parameter DisplayEmoticonsAsImagesP -default 0]] } { + set message(content) [forum::format::emoticons -content $message(content)] +} + +# JCD: display subject only if changed from the root subject +if {![info exists root_subject]} { + set display_subject_p 1 +} else { + regsub {^(Response to |\s*Re:\s*)*} $message(subject) {} subject + set display_subject_p [expr ![string equal $subject $root_subject]] +} + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} +if {![info exists message(message_id)]} { + set message(message_id) none +} +if {![info exists message(tree_level)] || $presentation_type eq "flat"} { + set message(tree_level) 0 +} + +set allow_edit_own_p [parameter::get -parameter AllowUsersToEditOwnPostsP -default 0] +set own_p [expr [string equal $message(user_id) $viewer_id] && $allow_edit_own_p] Index: dotlrn_packages/packages/forums/lib/message/row2.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/row2.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/row2.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,121 @@ +
+
+ + + + + + + +
+
+ + + + #forums.Expand_only_direct_reply_of_message# + #forums.Expand_all_messages# + #forums.Collapse_all_messages# + +
+ + +
+ + +
+   + @message.number@: + @message.subject@ + + +
@message.subject@ + + + +
@message.number@ + + + (response to @message.parent_number@) + +
+
#forums.Posted_by# @message.user_name@ on
+
+
+ + +
+ +
+ + + +
+
+ + @message.content;noquote@ + +
+ #forums.Attachments# + +
+
+
+
+
+
+ + + + + + + + + + + Index: dotlrn_packages/packages/forums/lib/message/row2.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/row2.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/row2.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,90 @@ + +ad_page_contract { + + a message chunk to be included in a table listing of messages + + @author yon (yon@openforce.net) + @author arjun (arjun@openforce.net) + @creation-date 2002-06-02 + @cvs-id $Id$ + +} + +set viewer_id [ad_conn user_id] + + +if {![exists_and_not_null rownum]} { + set rownum 1 +} + +set message(content) [ad_html_text_convert -from $message(format) -to text/html -- $message(content)] + +# convert emoticons to images if the parameter is set +if { [string is true [parameter::get -parameter DisplayEmoticonsAsImagesP -default 0]] } { + set message(content) [forum::format::emoticons -content $message(content)]} + +# JCD: display subject only if changed from the root subject +if {![info exists root_subject]} { + set display_subject_p 1 +} else {thr regsub {^(Response to |\s*Re:\s*)*} $message(subject) {} subject + set display_subject_p [expr ![string equal $subject $root_subject]] +} + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} +if {![info exists message(message_id)]} { + set message(message_id) none +} +if {![info exists message(tree_level)]} { + set message(tree_level) 0 +} + + + + +## New ## + +set max_number_messages [parameter::get -parameter max_number_messages_with_effects -default 120] + +set parent $message(message_id) +set direct_children_list [db_list children_list_name "select message_id from $table_name where message_id = $parent or parent_id = $parent order by message_id"] +set message_children_list [db_list select_message_children " SELECT fma.message_id \ + FROM forums_messages_approved fma \ + WHERE fma.forum_id = $forum_id \ + and fma.tree_sortkey between (select fm.tree_sortkey from forums_messages fm where fm.message_id = $parent) \ + and (select tree_right(fm.tree_sortkey) from forums_messages fm where fm.message_id = $parent) \ + ORDER BY fma.message_id "] + +# List of all the children given a message_id +if {[llength $message_children_list] == 0 } { + + set children_string "null" +} + +set children_string $message_children_list + +# List of the direct children of a message + +if {[llength $direct_children_list] == 0} { + + set children_direct_list "null" + } + + set children_direct_list "$direct_children_list" + +# Gets all the direct children of the main message +set childs [db_list get_childs "select message_id from $table_name where parent_id = $main_message_id or message_id = $main_message_id order by message_id"] + +set is_direct_child 0 + +set is_direct_children [lsearch $childs $parent] +if {$is_direct_children == -1 } { + set is_direct_child 0 +} else { + set is_direct_child 1 +} + +## Ends New ## +set allow_edit_own_p [parameter::get -parameter AllowUsersToEditOwnPostsP -default 0] +set own_p [expr [string equal $message(user_id) $viewer_id] && $allow_edit_own_p] Index: dotlrn_packages/packages/forums/lib/message/thread-chunk-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/thread-chunk-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/thread-chunk-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,59 @@ + + + + oracle8.1.6 + + + + select fma.message_id + from forums_messages fm, + forums_messages_approved fma + where fm.message_id = :root_message_id + and fma.forum_id = :forum_id + and fma.tree_sortkey between fm.tree_sortkey and tree.right(fm.tree_sortkey) + order by fma.message_id + + + + + + select message_id, + 0 as n_attachments, + subject, + content, + format, + person.name(user_id) as user_name, + to_char(posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + tree.tree_level(tree_sortkey) as tree_level, + state, + user_id, + parent_id + from $table_name t + where forum_id = :forum_id + and tree_sortkey between tree.left(:tree_sortkey) and tree.right(:tree_sortkey) + order by $order_by + + + + + + select message_id, + (select count(*) from attachments where object_id = message_id) as n_attachments, + subject, + content, + format, + person.name(user_id) as user_name, + to_char(posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + tree.tree_level(tree_sortkey) as tree_level, + state, + user_id, + parent_id + from $table_name t + where forum_id = :forum_id + and tree_sortkey between tree.left(:tree_sortkey) and tree.right(:tree_sortkey) + order by $order_by + + + + + Index: dotlrn_packages/packages/forums/lib/message/thread-chunk-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/thread-chunk-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/thread-chunk-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,66 @@ + + + + postgresql7.1 + + + + SELECT fma.message_id + FROM forums_messages_approved fma + WHERE fma.forum_id = :forum_id + and fma.tree_sortkey between (select fm.tree_sortkey from forums_messages fm where fm.message_id = :root_message_id) + and (select tree_right(fm.tree_sortkey) from forums_messages fm where fm.message_id = :root_message_id) + ORDER BY fma.message_id + + + + + + select message_id, + 0 as n_attachments, + t.subject, + t.content, + t.format, + person__name(t.user_id) as user_name, + to_char(t.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + tree_level(t.tree_sortkey) as tree_level, + t.state, + t.user_id, + t.parent_id, + t.open_p, + t.max_child_sortkey, + u.screen_name + from $table_name t, users u + where t.forum_id = :forum_id + and u.user_id = t.user_id + and t.tree_sortkey between tree_left(:tree_sortkey) and tree_right(:tree_sortkey) + order by $order_by + + + + + + select message_id, + (select count(*) from attachments where object_id = t.message_id) as n_attachments, + t.subject, + t.content, + t.format, + person__name(t.user_id) as user_name, + to_char(t.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + tree_level(t.tree_sortkey) as tree_level, + t.state, + t.user_id, + t.parent_id, + t.open_p, + t.max_child_sortkey, + u.screen_name + from $table_name t, users u + where t.forum_id = :forum_id + and u.user_id = t.user_id + and t.tree_sortkey between tree_left(:tree_sortkey) and tree_right(:tree_sortkey) + order by $order_by + + + + + Index: dotlrn_packages/packages/forums/lib/message/thread-chunk.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/thread-chunk.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/thread-chunk.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,19 @@ +
+ + + + + + +
+@response_arrays_stub;noquote@ Index: dotlrn_packages/packages/forums/lib/message/thread-chunk.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/thread-chunk.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/thread-chunk.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,153 @@ +ad_page_contract { + + view a message (and its children) + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-25 + @cvs-id $Id$ + +} + +if {$forum(posting_policy) == "moderated"} { + set forum_moderated_p 1 +} else { + set forum_moderated_p 0 +} + +# get the colors from the params +set table_border_color [parameter::get -parameter table_border_color] +set table_bgcolor [parameter::get -parameter table_bgcolor] +set table_other_bgcolor [parameter::get -parameter table_other_bgcolor] + +# Check preferences for user + +# Set some variables for easy SQL access +set forum_id $message(forum_id) +set tree_sortkey $message(tree_sortkey) + +if {[forum::attachments_enabled_p]} { + set query select_message_responses_attachments +} else { + set query select_message_responses +} + +# We set a Tcl variable for moderation now (Ben) +if { $permissions(moderate_p) } { + set table_name "forums_messages" +} else { + set table_name "forums_messages_approved" +} + +##### +# +# Find ordering of messages +# +##### + +if { [string equal $forum(presentation_type) flat] } { + set order_by "fma.posting_date, fma.tree_sortkey" +} else { + set order_by "fma.tree_sortkey" +} + +set root_message_id $message(root_message_id) +set message_id_list [db_list select_message_ordering {}] + +set direct_url_base [export_vars -base [ad_conn url] { { message_id $message(root_message_id) } }] +set message(direct_url) "$direct_url_base\#msg_$message(message_id)" + +set message(number) [expr [lsearch $message_id_list $message(message_id)] + 1] +set message(parent_number) {} +set message(parent_direct_url) "" +if { [exists_and_not_null message(parent_id)] } { + set message(parent_number) [expr [lsearch $message_id_list $message(parent_id)] + 1] + set message(parent_direct_url) "$direct_url_base\#msg_$message(parent_id)" + set message(parent_root_url) [export_vars -base [ad_conn url] { { message_id $message(parent_id) } }] +} + +set message(open_p) "t" +set message(reply_p) [expr [string equal $message(open_p) "t"] || [string equal $message(user_id) [ad_conn user_id]]] +set message(tree_level) 0 + + +##### +# +# Find responses +# +##### + +# More Tcl vars (we might as well use them - Ben) +if { [string equal $forum(presentation_type) flat] } { + set order_by "t.posting_date, tree_sortkey" +} else { + set order_by "tree_sortkey" +} + +set old_tree_level 0 +set old_message_id 0 +set message_ids {} + +db_multirow -extend { posting_date_pretty direct_url number parent_number parent_direct_url reply_p viewed_p open_p} responses $query {} { + set open_p t + set tree_level [min [expr {$tree_level - $message(tree_level)}] 10] + set posting_date_ansi [lc_time_system_to_conn $posting_date_ansi] + set posting_date_pretty [lc_time_fmt $posting_date_ansi "%x %X"] + set direct_url "$direct_url_base\#msg_$message_id" + set number [expr [lsearch $message_id_list $message_id] + 1] + set parent_number [expr [lsearch $message_id_list $parent_id] + 1] + set parent_direct_url "$direct_url_base\#msg_$parent_id" + set parent_root_url [export_vars -base [ad_conn url] {{message_id $parent_id}}] + set reply_p [expr [string equal $open_p "t"] || [string equal $user_id [ad_conn user_id]]] + + # DEDS: get the response ids the tcl way or else we need to hit + # the db for each response to count its children + if {$tree_level == 1} { + # leftmost so this is a new parent. truncate the list of ids. + set message_ids {} + } else { + if {$tree_level > $old_tree_level} { + # increase in level. previous id is a parent too. + lappend message_ids $old_message_id + foreach one_parent_id $message_ids { + lappend parent_message($one_parent_id) $message_id + } + } elseif {$tree_level < $old_tree_level} { + # decrease in level. let us pop the last id. + set message_ids_last [expr [llength $message_ids] - 1] + set message_ids [lreplace $message_ids $message_ids_last $message_ids_last] + } else { + foreach one_parent_id $message_ids { + lappend parent_message($one_parent_id) $message_id + } + } + } + # keep track of what level and message we are in + set old_tree_level $tree_level + set old_message_id $message_id + + # make sure we also populate the original message id + lappend parent_message($message(message_id)) $message_id +} + +set message(tree_level) 0 + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} + +set response_arrays_stub " +" + +set return_url [ad_return_url] Index: dotlrn_packages/packages/forums/lib/message/threads-chunk-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/threads-chunk-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/threads-chunk-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,70 @@ + + + oracle8.1.6 + + + + select fm.message_id, + fm.subject, + person.name(fm.user_id) as user_name, + to_char(fm.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + $replies as n_messages, + to_char(fm.last_child_post, 'YYYY-MM-DD HH24:MI:SS') as last_child_post_ansi + from forums_messages_approved fm + where fm.forum_id = :forum_id + and fm.parent_id is null + [template::list::orderby_clause -orderby -name "messages"] + + + + + + select fm.message_id, + fm.subject, + fm.last_poster as user_id, + person.name(fm.last_poster) as user_name, + to_char(fm.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + fm.state, + $replies as n_messages, + to_char(fm.last_child_post, 'YYYY-MM-DD HH24:MI:SS') as last_child_post_ansi, + u.screen_name, + $unread_or_new_query_clause + from forums_messages_approved fm $unread_join, users u + where fm.forum_id = :forum_id + and fm.user_id = u.user_id + and fm.parent_id is null + [template::list::page_where_clause -and -name messages -key fm.message_id] + [template::list::orderby_clause -orderby -name "messages"] + + + + + + user_name desc + + + + + user_name asc + + + + + + case when fi.reading_date is null then 't' else 'f' end as unread_p + + + + + + left join forums_reading_info fi on fm.message_id=fi.root_message_id and fi.user_id = :user_id + + + + + + case when fm.last_child_post > sysdate-1 then 't' else 'f' end as unread_p + + + + Index: dotlrn_packages/packages/forums/lib/message/threads-chunk-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/threads-chunk-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/message/threads-chunk-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,73 @@ + + + postgresql7.1 + + + + select fm.message_id, + fm.subject, + person__name(fm.user_id) as user_name, + $replies as n_messages, + to_char(fm.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi + from forums_messages_approved fm + where fm.forum_id = :forum_id + and fm.parent_id is null + [template::list::orderby_clause -orderby -name messages] + + + + + + select fm.message_id, + fm.subject, + fm.last_poster as user_id, + person__name(fm.last_poster) as user_name, + to_char(fm.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + fm.state, + $replies as n_messages, + to_char(fm.last_child_post, 'YYYY-MM-DD HH24:MI:SS') as last_child_post_ansi, + u.screen_name, + $unread_or_new_query_clause + from forums_messages_approved fm $unread_join, + users u + where fm.forum_id = :forum_id + and fm.user_id = u.user_id + and fm.parent_id is null + [template::list::page_where_clause -and -name messages -key fm.message_id] + [template::list::orderby_clause -orderby -name messages] + + + + + + lower(person__name(fm.last_poster)) desc + + + + + lower(person__name(fm.last_poster)) asc + + + + + + case when fi.reading_date is null then 't' else 'f' end as unread_p + + + + + + left join forums_reading_info fi on fm.message_id=fi.root_message_id and fi.user_id = :user_id + + + + + + case when fm.last_child_post > (now() - interval '1 day') then 't' else 'f' end as new_p + + + + + + + Index: dotlrn_packages/packages/forums/lib/message/threads-chunk.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/threads-chunk.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/message/threads-chunk.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1 @@ + Index: dotlrn_packages/packages/forums/lib/message/threads-chunk.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/message/threads-chunk.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/message/threads-chunk.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,183 @@ +ad_page_contract { + one forum view + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-24 + @cvs-id $Id$ +} + +if {![info exists flush_p]} {set flush_p 0} + +set user_id [ad_verify_and_get_user_id] +# Get forum data + +forum::get -forum_id $forum_id -array forum + +set useReadingInfo [forum::use_ReadingInfo_p] +if { $useReadingInfo } { + set unread_or_new_query_clause [db_map unread_query] + set unread_join [db_map unread_join] +} else { + set unread_or_new_query_clause [db_map new_query] + set unread_join "" +} +if {![info exists base_url]} { + set base_url "" +} + +if {$moderate_p} { + set replies reply_count +} else { + set replies approved_reply_count +} + +set actions [list] + +if {![exists_and_not_null page_size]} { + set page_size 30 +} + +if {![exists_and_not_null base_url]} { + set base_url "" +} + +# new postings are allowed if + +# 1. Users can create new threads AND the posting policy is open or +# moderated 2. User is a moderator or adminsitrator + +if {([forum::new_questions_allowed_p -forum_id $forum_id] && ($forum(posting_policy) == "open" || $forum(posting_policy) == "moderated")) || [template::util::is_true $permissions(admin_p)] || [template::util::is_true $permissions(moderate_p)] } { + lappend actions [_ forums.Post_a_New_Message] [export_vars -base "${base_url}message-post" { forum_id }] [_ forums.Post_a_New_Message] +} + +if { [template::util::is_true $permissions(admin_p)] } { + lappend actions [_ forums.Administer] [export_vars \ + -base "${base_url}admin/forum-edit" {forum_id {return_url [ad_return_url]}}] [_ forums.Administer] +} + +if { [template::util::is_true $permissions(moderate_p)] } { + lappend actions [_ forums.ManageModerate] [export_vars -base "${base_url}moderate/forum" { forum_id }] [_ forums.ManageModerate] +} + +lappend actions [_ forums.mark_all_as_read] [export_vars -base "${base_url}mark_all_readed" { forum_id }] {} + +template::list::create \ + -name messages \ + -multirow messages \ + -page_size $page_size \ + -page_flush_p $flush_p \ + -page_query_name messages_select_paginate \ + -pass_properties {moderate_p useReadingInfo} \ + -actions $actions \ + -elements { + subject { + label "#forums.Subject#" + link_url_col message_url + link_html {title "\#forums.goto_thread_subject\#"} + display_template { + + + @messages.subject@ + + @messages.subject@ + + + + @messages.subject@ + + @messages.subject@ + + } + } + state_pretty { + label "\#forums.Moderate\#" + hide_p {[ad_decode $moderate_p 1 0 1]} + } + user_name { + label "#forums.Author#" + link_url_col user_url + link_html {title "\#forums.show_history_user_name\#"} + } + n_messages { + label "#forums.Replies#" + display_col n_messages_pretty + html {align right} + } + posting_date { + label "#forums.First_Post#" + display_col posting_date_pretty + } + last_child_post { + label "#forums.Last_Post#" + display_col last_child_post_pretty + } + } -orderby { + posting_date { + label "#forums.First_Post#" + orderby posting_date + default_direction desc + } + last_child_post { + label "#forums.Last_Post#" + orderby last_child_post + default_direction desc + } + subject { + label "#forums.Subject#" + orderby upper(subject) + } + user_name { + label "#forums.Author#" + orderby_asc_name "orderby_user_name_asc" + orderby_desc_name "orderby_user_name_desc" + } + n_messages { + label "#forums.Replies#" + orderby_asc {n_messages asc, posting_date desc} + orderby_desc {n_messages desc, posting_date desc} + } + } -filters { + forum_id {} + } + +set useScreenNameP [parameter::get -parameter "UseScreenNameP" -default 0] + +db_multirow -extend { + last_child_post_pretty + posting_date_pretty + message_url + user_url + n_messages_pretty + state_pretty +} messages messages_select {} { + set last_child_post_ansi [lc_time_system_to_conn $last_child_post_ansi] + set last_child_post_pretty [lc_time_fmt $last_child_post_ansi "%x %X"] + + set posting_date_ansi [lc_time_system_to_conn $posting_date_ansi] + set posting_date_pretty [lc_time_fmt $posting_date_ansi "%x %X"] + + set message_url [export_vars -base "${base_url}message-view" { message_id }] + if { $useScreenNameP } { + set user_name $screen_name + set user_url "" + } else { + set user_url [export_vars -base "${base_url}user-history" { user_id }] + } + set n_messages_pretty [lc_numeric $n_messages] + + switch $state { + pending { + set state_pretty [_ forums.Pending] + } + rejected { + set state_pretty [_ forums.Rejected] + } + default { + set state_pretty {} + } + } +} + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} Index: dotlrn_packages/packages/forums/lib/search/search-chunk-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/search/search-chunk-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/search/search-chunk-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,76 @@ + + + + oracle8.1.6 + + + + select forums_messages.*, + person.name(forums_messages.user_id) as user_name, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + 100 as the_score + from forums_messages, + forums_forums + where forums_messages.forum_id = forums_forums.forum_id + and forums_forums.package_id = :package_id + and forums_messages.state = 'approved' + and upper(forums_messages.subject || ' ' || dbms_lob.substr(forums_messages.content,2500) || ' ' || person.name(forums_messages.user_id)) + like '%' || upper(:search_text) || '%' + order by forums_messages.posting_date desc + + + + + + select forums_messages.*, + person.name(forums_messages.user_id) as user_name, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + 100 as the_score + from forums_messages, + forums_forums + where forums_forums.forum_id = :forum_id + and forums_forums.package_id = :package_id + and forums_messages.forum_id = forums_forums.forum_id + and forums_messages.state = 'approved' + and upper(forums_messages.subject || ' ' || dbms_lob.substr(forums_messages.content,3500) || ' ' || person.name(forums_messages.user_id)) + like '%' || upper(:search_text) || '%' + order by forums_messages.posting_date desc + + + + + + select forums_messages.*, + person.name(forums_messages.user_id) as user_name, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + score(1) as the_score + from forums_messages, + forums_forums + where forums_messages.forum_id = forums_forums.forum_id + and forums_forums.package_id = :package_id + and forums_messages.state = 'approved' + and contains(forums_messages.content, '%' || :search_text || '%', 1) > 0 + order by the_score desc, + forums_messages.posting_date desc + + + + + + select forums_messages.*, + person.name(forums_messages.user_id) as user_name, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + score(1) as the_score + from forums_messages, + forums_forums + where forums_forums.forum_id = :forum_id + and forums_forums.package_id = :package_id + and forums_messages.forum_id = forums_forums.forum_id + and forums_messages.state = 'approved' + and contains(forums_messages.content, '%' || :search_text || '%', 1) > 0 + order by the_score desc, + forums_messages.posting_date desc + + + + Index: dotlrn_packages/packages/forums/lib/search/search-chunk-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/search/search-chunk-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/search/search-chunk-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,41 @@ + + + + postgresql7.1 + + + + select forums_messages.*, + person__name(forums_messages.user_id) as user_name, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + 100 as the_score + from forums_messages, + forums_forums + where forums_messages.forum_id = forums_forums.forum_id + and forums_forums.package_id = :package_id + and forums_messages.state = 'approved' + and upper(forums_messages.subject || ' ' || forums_messages.content || ' ' || person__name(forums_messages.user_id)) + like '%' || upper(:search_text) || '%' + order by forums_messages.posting_date desc + + + + + + select forums_messages.*, + person__name(forums_messages.user_id) as user_name, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + 100 as the_score + from forums_messages, + forums_forums + where forums_forums.forum_id = :forum_id + and forums_forums.package_id = :package_id + and forums_messages.forum_id = forums_forums.forum_id + and forums_messages.state = 'approved' + and upper(forums_messages.subject || ' ' || forums_messages.content || ' ' || person__name(forums_messages.user_id)) + like '%' || upper(:search_text) || '%' + order by forums_messages.posting_date desc + + + + Index: dotlrn_packages/packages/forums/lib/search/search-chunk.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/search/search-chunk.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/search/search-chunk.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,16 @@ + +
+ +
+
+ +
+
+
+ +
+ +
+
Index: dotlrn_packages/packages/forums/lib/search/search-chunk.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/search/search-chunk.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/search/search-chunk.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,47 @@ +ad_page_contract { + + @author yon@openforce.net + @creation-date 2002-07-01 + @cvs-id $Id$ + +} +set package_id [ad_conn package_id] +set useScreenNameP [parameter::get -parameter "UseScreenNameP" -default 0] + +set searchbox_p [parameter::get -parameter ForumsSearchBoxP -package_id $package_id -default 1] +if {$searchbox_p} { + form create search + forums::form::search search + + if {[form is_valid search]} { + form get_values search search_text forum_id + + # remove any special characters from the search text so we + # don't crash interMedia + regsub -all {[^[:alnum:]_[:blank:]]} $search_text {} search_text + + set query search_all_forums + if {![empty_string_p $forum_id]} { + set query search_one_forum + } + + if { [parameter::get -parameter UseIntermediaForSearchP -default 0] } { + append query "_intermedia" + } + + db_multirow -extend { author posting_date_pretty} messages $query {} { + set posting_date_pretty [lc_time_fmt $posting_date_ansi "%x %X"] + if { $useScreenNameP } { + set author [db_string select_screen_name {select screen_name from users where user_id = :user_id}] + } else { + set author $user_name + } + } + } else { + set messages:rowcount 0 + } + + if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template + } +} Index: dotlrn_packages/packages/forums/lib/search/search-form.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/search/search-form.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/search/search-form.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,10 @@ +
+ +
+
+ +
+
+
Index: dotlrn_packages/packages/forums/lib/search/search-form.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/search/search-form.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/search/search-form.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,14 @@ +# packages/forums/lib/search/search-form.tcl +# +# Form for search box +# +# @author Emmanuelle Raffenne (eraffenne@gmail.com) +# @creation-date 2007-12-23 +# @cvs-id $Id$ + +form create search -action search +forums::form::search search + +if { [form is_request search] && [info exists forum_id] } { + element set_properties search forum_id -value $forum_id +} Index: dotlrn_packages/packages/forums/lib/user/post-history-chunk.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/user/post-history-chunk.adp (revision 0) +++ dotlrn_packages/packages/forums/lib/user/post-history-chunk.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,17 @@ +
+ +

+ #forums.Posting_history_for# + + @screen_name@ + @user_link;noquote@ + +

+ +
@dimensional_chunk;noquote@
+ + +

#forums.Summary_Posting_history_for#

+ + +
Index: dotlrn_packages/packages/forums/lib/user/post-history-chunk.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/user/post-history-chunk.tcl (revision 0) +++ dotlrn_packages/packages/forums/lib/user/post-history-chunk.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,121 @@ +ad_page_contract { + + Posting History for a User + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-29 + @cvs-id $Id$ + +} { + groupby:optional +} + +set package_id [ad_conn package_id] + +# provide screen_name functionality +set useScreenNameP [parameter::get -parameter "UseScreenNameP" -default 0] +set screen_name [db_string select_screen_name { select screen_name from users where user_id = :user_id}] +set user_link [acs_community_member_link -user_id $user_id] + +# choosing the view +set dimensional_list " + { + view \"[_ forums.View]:\" date { + {date \"[_ forums.by_Date]\" {}} + {forum \"[_ forums.by_Forum]\" {}} + } + } +" + +set query select_messages +if {[string equal $view forum]} { + set query select_messages_by_forum + template::list::create \ + -html {style "width: 50%; text-align: center; margin: auto"} \ + -name messages \ + -multirow messages \ + -no_data "#forums.No_Postings#" \ + -key message_id \ + -elements { + forum_name { + label "\#forums.Forum\#" + hide_p t + html {align left} + display_template {@messages.forum_name@} + } + subject { + label "\#forums.Subject\#" + html {align left} + display_template {@messages.subject@} + } + posting_date_pretty { + label "\#forums.Posted\#" + html {align right} + } + } -groupby { + label "\#forums.Forum\#" + values { "\#forums.Forum\#" {{groupby forum_name} {orderby forum_name,desc}}} + } +} else { + template::list::create \ + -html {style "width: 50%; text-align: center; margin: auto"} \ + -name messages \ + -multirow messages \ + -no_data "#forums.No_Postings#" \ + -key message_id \ + -elements { + forum_name { + label "\#forums.Forum\#" + html {align left} + display_template {@messages.forum_name@} + } + subject { + label "\#forums.Subject\#" + html {align left} + display_template {@messages.subject@} + } + posting_date_pretty { + label "\#forums.Posted\#" + html {align right} + } + } +} + + +# Select the postings +db_multirow -extend { posting_date_pretty } messages $query {} { + set posting_date_pretty [lc_time_fmt $posting_date_ansi "%x %X"] +} + +template::list::create \ + -name posts \ + -html {style "width: 50%; text-align: center; margin: auto"} \ + -multirow posts \ + -no_data "#forums.No_Postings#" \ + -key message_id \ + -elements { + name { + label "\#forums.Forum\#" + html {align left} + display_template {@posts.name@} + } + num_msg { + label "\#forums.Number_of_Posts\#" + html {align left} + } + posting_date_pretty { + label "\#forums.Posted\#" + html {align right} + } + } + +# select number of post from this user +db_multirow -extend { posting_date_pretty } posts select_num_post {} { + set posting_date_pretty [lc_time_fmt $last_post "%x %X"] +} + +set dimensional_chunk [ad_dimensional $dimensional_list] + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} Index: dotlrn_packages/packages/forums/lib/user/post-history-chunk.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/lib/user/post-history-chunk.xql (revision 0) +++ dotlrn_packages/packages/forums/lib/user/post-history-chunk.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,66 @@ + + + + + + + select forums_messages.message_id, + forums_forums.forum_id, + forums_messages.subject, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + forums_forums.forum_id, + forums_forums.name as forum_name + from forums_messages, + forums_forums + where forums_messages.user_id = :user_id + and forums_messages.forum_id = forums_forums.forum_id + and forums_forums.package_id = :package_id + + + + + + select forums_messages.message_id, + forums_forums.forum_id, + forums_messages.subject, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + forums_forums.forum_id, + forums_forums.name as forum_name + from forums_messages, + forums_forums + where forums_messages.user_id = :user_id + and forums_messages.forum_id = forums_forums.forum_id + and forums_forums.package_id = :package_id + order by forums_forums.name asc, forums_messages.posting_date desc + + + + + + select count(user_id) as num_msg, to_char(max(last_child_post), 'YYYY-MM-DD HH24:MI:SS') as last_post, forums_forums.name, forums_forums.forum_id + from forums_messages, forums_forums + where forums_messages.user_id = :user_id and forums_forums.forum_id = forums_messages.forum_id and package_id = :package_id + group by forums_forums.name, forums_forums.forum_id + order by forums_forums.name asc + + + + + + select forums_messages.message_id, + forums_messages.subject, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi, + forums_forums.forum_id, + forums_forums.name as forum_name + from forums_messages, + forums_forums + where forums_messages.user_id = :user_id + [template::list::filter_where_clauses -and -name messages] + forums_messages.forum_id = forums_forums.forum_id + and forums_forums.package_id = :package_id + order by forums_messages.posting_date desc + + + + + Index: dotlrn_packages/packages/forums/sql/oracle/forums-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,28 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert's UBB forums. Thanks Orchard Labs. +-- + +-- The basic forum constructs +@ forums-forums-create.sql +@ forums-forums-package-create.sql + +-- The messages +@ forums-messages-create.sql +@ forums-messages-package-create.sql + +-- tree stuff +@ forums-tree-create.sql + +-- notifications +@ forums-notifications-init.sql + +-- reading info +@ forums-reading-info-create.sql +@ forums-reading-info-package-create.sql \ No newline at end of file Index: dotlrn_packages/packages/forums/sql/oracle/forums-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,24 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert's UBB forums. Thanks Orchard Labs. +-- + +-- notifications +@ forums-notifications-sanitize.sql + +-- tree stuff +@ forums-tree-drop.sql + +-- The messages +@ forums-messages-drop.sql +@ forums-messages-package-drop.sql + +-- The basic forum constructs +@ forums-forums-drop.sql +@ forums-forums-package-drop.sql Index: dotlrn_packages/packages/forums/sql/oracle/forums-forums-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-forums-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-forums-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,89 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs. +-- + +-- privileges +declare +begin + -- The standard privilege 'admin' on a package allows a user to + -- create forums (enforced by URL). + -- The standard privilege 'create' on a forum allows a user to + -- create new threads. + -- The standard privilege 'write' on a message allows a user to + -- post a follow up message. + + -- forum_moderate lets us grant moderation without granting full admin + acs_privilege.create_privilege('forum_moderate',null,null); + acs_privilege.add_child('admin','forum_moderate'); + acs_privilege.add_child('forum_moderate','create'); + acs_privilege.add_child('forum_moderate','delete'); + acs_privilege.add_child('forum_moderate','read'); + acs_privilege.add_child('forum_moderate','write'); + +end; +/ +show errors + +create table forums_forums ( + forum_id integer + constraint forums_forum_id_fk + references acs_objects (object_id) + constraint forums_forums_pk + primary key, + name varchar(200) + constraint forums_name_nn + not null, + charter varchar(4000), + presentation_type varchar(100) + constraint forums_presentation_type_nn + not null + constraint forums_presentation_type_ck + check (presentation_type in ('flat','threaded')), + posting_policy varchar(100) + constraint forums_posting_policy_nn + not null + constraint forums_posting_policy_ck + check (posting_policy in ('open','moderated','closed')), + max_child_sortkey raw(100), + enabled_p char(1) + default 't' + constraint forums_enabled_p_nn + not null + constraint forums_enabled_p_ck + check (enabled_p in ('t','f')), + package_id integer + constraint forums_package_id_nn + not null, + thread_count integer default 0, + approved_thread_count integer default 0, + last_post date +); + +create view forums_forums_enabled +as + select * + from forums_forums + where enabled_p = 't'; + +declare +begin + acs_object_type.create_type( + supertype => 'acs_object', + object_type => 'forums_forum', + pretty_name => 'Forums Forum', + pretty_plural => 'Forums Forums', + table_name => 'forums_forums', + id_column => 'forum_id', + package_name => 'forums_forum', + name_method => 'forums_forum.name' + ); +end; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/forums-forums-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-forums-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-forums-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,62 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs. +-- + +-- privileges +declare +begin + + delete from acs_permissions where privilege in ('forum_moderate'); + + -- remove children + acs_privilege.remove_child('admin','forum_moderate'); + acs_privilege.remove_child('forum_moderate','create'); + acs_privilege.remove_child('forum_moderate','delete'); + acs_privilege.remove_child('forum_moderate','read'); + acs_privilege.remove_child('forum_moderate','write'); + + acs_privilege.drop_privilege('forum_moderate'); +end; +/ +show errors + + +-- +-- The Data Model +-- + +drop view forums_forums_enabled; + +drop table forums_forums; + +-- +-- Object Type +-- + +declare + v_object_id integer; +begin + + select MAX(object_id) into v_object_id from acs_objects where object_type='forums_forum'; + While (v_object_id > 0) loop + delete from ncanotes where object_id=v_object_id; + acs_object.del( + v_object_id -- object_id + ); + select MAX(object_id) into v_object_id from acs_objects where object_type='forums_forum'; + End loop; + + acs_object_type.drop_type ( + object_type => 'forums_forum' + ); + +end; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/forums-forums-package-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-forums-package-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-forums-package-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,105 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- The Package +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs! +-- + +create or replace package forums_forum +as + + function new ( + forum_id in forums_forums.forum_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_forum', + name in forums_forums.name%TYPE, + charter in forums_forums.charter%TYPE default null, + presentation_type in forums_forums.presentation_type%TYPE, + posting_policy in forums_forums.posting_policy%TYPE, + package_id in forums_forums.package_id%TYPE, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_forums.forum_id%TYPE; + + function name ( + forum_id in forums_forums.forum_id%TYPE + ) return varchar; + + procedure del ( + forum_id in forums_forums.forum_id%TYPE + ); + +end forums_forum; +/ +show errors + +create or replace package body forums_forum +as + + function new ( + forum_id in forums_forums.forum_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_forum', + name in forums_forums.name%TYPE, + charter in forums_forums.charter%TYPE default null, + presentation_type in forums_forums.presentation_type%TYPE, + posting_policy in forums_forums.posting_policy%TYPE, + package_id in forums_forums.package_id%TYPE, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_forums.forum_id%TYPE + is + v_forum_id forums_forums.forum_id%TYPE; + begin + v_forum_id := acs_object.new( + object_id => forum_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, package_id), + package_id => forums_forum.new.package_id, + title => name + ); + + insert into forums_forums + (forum_id, name, charter, presentation_type, posting_policy, package_id) + values + (v_forum_id, name, charter, presentation_type, posting_policy, package_id); + + return v_forum_id; + end new; + + function name ( + forum_id in forums_forums.forum_id%TYPE + ) return varchar + is + v_name forums_forums.name%TYPE; + begin + select name + into v_name + from forums_forums + where forum_id = name.forum_id; + + return v_name; + end name; + + procedure del ( + forum_id in forums_forums.forum_id%TYPE + ) + is + begin + acs_object.del(forum_id); + end del; + +end forums_forum; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/forums-forums-package-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-forums-package-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-forums-package-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,15 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- The Package +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs! +-- +-- drop script + +drop package forums_forum; Index: dotlrn_packages/packages/forums/sql/oracle/forums-messages-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-messages-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-messages-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,95 @@ +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert. Thanks Orchard Labs! +-- + +create table forums_messages ( + message_id integer + constraint forums_message_id_fk + references acs_objects (object_id) + constraint forums_messages_pk + primary key, + forum_id integer + constraint forums_mess_forum_id_fk + references forums_forums (forum_id), + subject varchar(200), + content clob, + user_id integer + constraint forums_mess_user_id_fk + references users(user_id) + constraint forums_mess_user_id_nn + not null, + posting_date date + default sysdate + constraint forum_mess_post_date_nn + not null, + state varchar(100) + constraint forum_mess_state_ck + check (state in ('pending','approved','rejected')), + format varchar2(30) + default 'text/plain', + -- Hierarchy of messages + parent_id integer + constraint forum_mess_parent_id_fk + references forums_messages (message_id), + open_p char(1) + default 't' + constraint forum_mess_open_p_nn + not null + constraint forum_mess_open_p_ck + check (open_p in ('t','f')), + tree_sortkey raw(240), + max_child_sortkey raw(100), + last_child_post date, + reply_count integer default 0 + constraint forums_mess_reply_count_ck + check (reply_count >= 0), + approved_reply_count integer default 0 + constraint forums_mess_app_rep_count_ck + check (approved_reply_count >= 0), + last_poster integer + constraint forums_mess_last_poster_fk + references users(user_id), + constraint forums_mess_sk_forum_un + unique (tree_sortkey, forum_id) +); + +-- We do a some big queries on forum_id (thread count on index.tcl) so create a second index +-- ordered so it's useful for them +create unique index forums_mess_forum_sk_un on forums_messages(forum_id, tree_sortkey); +-- Need these for RI checks +create index forums_messages_user_id_idx on forums_messages(user_id); +create index forums_messages_parent_id_idx on forums_messages(parent_id); +create index forum_messages_date_idx on forums_messages (forum_id, posting_date) compress 1; + + +create view forums_messages_approved as + select * + from forums_messages + where state = 'approved'; + +create view forums_messages_pending as + select * + from forums_messages + where state = 'pending'; + +declare +begin + acs_object_type.create_type ( + supertype => 'acs_object', + object_type => 'forums_message', + pretty_name => 'Forums Message', + pretty_plural => 'Forums Messages', + table_name => 'forums_messages', + id_column => 'message_id', + package_name => 'forums_message', + name_method => 'forums_message.name' + ); +end; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/forums-messages-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-messages-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-messages-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,36 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert. Thanks Orchard Labs! +-- + +-- privileges +-- NO PRIVILEGES FOR MESSAGES +-- we don't individually permission messages + +-- +-- The Data Model +-- + +drop table forums_messages; + +-- +-- Object Type +-- + +declare +begin + acs_object_type.drop_type ( + object_type => 'forums_message' + ); +end; +/ +show errors + +drop view forums_messages_pending; +drop view forums_messages_approved; \ No newline at end of file Index: dotlrn_packages/packages/forums/sql/oracle/forums-messages-package-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-messages-package-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-messages-package-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,384 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- The Package for Messages +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs! +-- + +create or replace package forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + format in forums_messages.format%TYPE default 'text/plain', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ); + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ); + + procedure del ( + message_id in forums_messages.message_id%TYPE + ); + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ); + + procedure set_state( + message_id in forums_messages.message_id%TYPE, + state in forums_messages.state%TYPE + ); + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar; + +end forums_message; +/ +show errors + +create or replace package body forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + format in forums_messages.format%TYPE default 'text/plain', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE + is + v_message_id acs_objects.object_id%TYPE; + v_package_id acs_objects.package_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + begin + select package_id into v_package_id from forums_forums where forum_id = new.forum_id; + + v_message_id := acs_object.new( + object_id => message_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, forum_id), + title => subject, + package_id => v_package_id + ); + + if state is null + then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id= new.forum_id; + + if v_forum_policy = 'moderated' then + v_state := 'pending'; + else + v_state := 'approved'; + end if; + else + v_state := state; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, format, user_id, posting_date, last_child_post, parent_id, state, last_poster) + values + (v_message_id, forum_id, subject, content, format, user_id, posting_date, posting_date, parent_id, v_state, user_id); + + select tree_sortkey into v_sortkey + from forums_messages + where message_id = v_message_id; + + update forums_forums + set last_post = forums_message.new.posting_date + where forum_id = forums_message.new.forum_id; + + -- DRB: Can't use root_message_id() here because it triggers a "mutating table" error + + if parent_id is null then + if v_state = 'approved' then + update forums_forums + set thread_count = thread_count + 1, + approved_thread_count = approved_thread_count + 1 + where forum_id = forums_message.new.forum_id; + else + update forums_forums + set thread_count = thread_count + 1 + where forum_id=forums_message.new.forum_id; + end if; + else + if v_state = 'approved' then + update forums_messages + set approved_reply_count = approved_reply_count + 1, + reply_count = reply_count + 1, + last_poster = forums_message.new.user_id, + last_child_post = forums_message.new.posting_date + where forum_id = forums_message.new.forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + else + update forums_messages + set reply_count = reply_count + 1 + where forum_id = forums_message.new.forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + end if; + end if; + + return v_message_id; + + end new; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE + is + v_message_id forums_messages.message_id%TYPE; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = root_message_id.message_id; + + select message_id + into v_message_id + from forums_messages + where forum_id = v_forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + + return v_message_id; + end root_message_id; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_open.message_id; + + update forums_messages + set open_p = 't' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 't' + where message_id = thread_open.message_id; + end thread_open; + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_close.message_id; + + update forums_messages + set open_p = 'f' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 'f' + where message_id = thread_close.message_id; + end thread_close; + + procedure del ( + message_id in forums_messages.message_id%TYPE + ) + is + v_cur forums_messages%ROWTYPE; + begin + + -- Maintain the forum thread counts + + select * into v_cur + from forums_messages + where message_id = forums_message.del.message_id; + + if v_cur.parent_id is null then + if v_cur.state = 'approved' then + update forums_forums + set thread_count = thread_count - 1, + approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + else + update forums_forums + set thread_count = thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + elsif v_cur.state = 'approved' then + update forums_messages + set approved_reply_count = approved_reply_count - 1, + reply_count = reply_count - 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + else + update forums_messages + set reply_count = reply_count - 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + end if; + + acs_object.del(message_id); + + end del; + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_message forums_messages%ROWTYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = delete_thread.message_id; + + -- if it's already deleted + if SQL%NOTFOUND then + return; + end if; + + -- delete all children + -- order by tree_sortkey desc to guarantee + -- that we never delete a parent before its child + -- sortkeys are beautiful + for v_message in (select * + from forums_messages + where forum_id = v_forum_id + and tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + order by tree_sortkey desc) + loop + forums_message.del(v_message.message_id); + end loop; + + -- delete the message itself + forums_message.del(delete_thread.message_id); + end delete_thread; + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar + is + v_name forums_messages.subject%TYPE; + begin + select subject + into v_name + from forums_messages + where message_id = forums_message.name.message_id; + + return v_name; + end name; + + procedure set_state( + message_id in forums_messages.message_id%TYPE, + state in forums_messages.state%TYPE + ) + is + v_cur forums_messages%ROWTYPE; + v_last_child_post forums_messages.last_child_post%TYPE; + begin + + select * into v_cur + from forums_messages + where message_id = forums_message.set_state.message_id; + + if v_cur.parent_id is null then + if state = 'approved' and v_cur.state <> 'approved' then + update forums_forums + set approved_thread_count = approved_thread_count + 1 + where forum_id=v_cur.forum_id; + elsif state <> 'approved' and v_cur.state = 'approved' then + update forums_forums + set approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + else + if state = 'approved' and v_cur.state <> 'approved' then + select last_child_post into v_last_child_post + from forums_messages + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + if v_cur.posting_date > v_last_child_post then + update forums_messages + set approved_reply_count = approved_reply_count + 1, + last_poster = v_cur.user_id, + last_child_post = v_cur.posting_date + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + else + update forums_messages + set approved_reply_count = approved_reply_count + 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + end if; + elsif state <> 'approved' and v_cur.state = 'approved' then + update forums_messages + set approved_reply_count = approved_reply_count - 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + end if; + end if; + + update forums_messages + set state = forums_message.set_state.state + where message_id = forums_message.set_state.message_id; + + end set_state; + +end forums_message; +/ +show errors + Index: dotlrn_packages/packages/forums/sql/oracle/forums-messages-package-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-messages-package-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-messages-package-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,14 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- The Package for Messages +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs! +-- + +drop package forums_message; Index: dotlrn_packages/packages/forums/sql/oracle/forums-notifications-init.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-notifications-init.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-notifications-init.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,118 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert's UBB forums. Thanks Orchard Labs. +-- + +-- the integration with Notifications + +declare + impl_id integer; + v_foo integer; +begin + -- the notification type impl + impl_id := acs_sc_impl.new ( + impl_contract_name => 'NotificationType', + impl_name => 'forums_forum_notif_type', + impl_pretty_name => 'forums_forum_notif_type', + impl_owner_name => 'forums' + ); + + v_foo := acs_sc_impl.new_alias ( + 'NotificationType', + 'forums_forum_notif_type', + 'GetURL', + 'forum::notification::get_url', + 'TCL' + ); + + v_foo := acs_sc_impl.new_alias ( + 'NotificationType', + 'forums_forum_notif_type', + 'ProcessReply', + 'forum::notification::process_reply', + 'TCL' + ); + + acs_sc_binding.new ( + contract_name => 'NotificationType', + impl_name => 'forums_forum_notif_type' + ); + + v_foo:= notification_type.new ( + short_name => 'forums_forum_notif', + sc_impl_id => impl_id, + pretty_name => 'Forum Notification', + description => 'Notifications for Entire Forums', + creation_user => NULL, + creation_ip => NULL + ); + + -- enable the various intervals and delivery methods + insert into notification_types_intervals + (type_id, interval_id) + select v_foo, interval_id + from notification_intervals where name in ('instant','hourly','daily'); + + insert into notification_types_del_methods + (type_id, delivery_method_id) + select v_foo, delivery_method_id + from notification_delivery_methods where short_name in ('email'); + + -- the notification type impl + impl_id := acs_sc_impl.new ( + impl_contract_name => 'NotificationType', + impl_name => 'forums_message_notif_type', + impl_pretty_name => 'forums_message_notif_type', + impl_owner_name => 'forums' + ); + + v_foo := acs_sc_impl.new_alias ( + 'NotificationType', + 'forums_message_notif_type', + 'GetURL', + 'forum::notification::get_url', + 'TCL' + ); + + v_foo := acs_sc_impl.new_alias ( + 'NotificationType', + 'forums_message_notif_type', + 'ProcessReply', + 'forum::notification::process_reply', + 'TCL' + ); + + acs_sc_binding.new ( + contract_name => 'NotificationType', + impl_name => 'forums_message_notif_type' + ); + + v_foo:= notification_type.new ( + short_name => 'forums_message_notif', + sc_impl_id => impl_id, + pretty_name => 'Message Notification', + description => 'Notifications for Message Thread', + creation_user => NULL, + creation_ip => NULL + ); + + -- enable the various intervals and delivery methods + insert into notification_types_intervals + (type_id, interval_id) + select v_foo, interval_id + from notification_intervals where name in ('instant','hourly','daily'); + + insert into notification_types_del_methods + (type_id, delivery_method_id) + select v_foo, delivery_method_id + from notification_delivery_methods where short_name in ('email'); + +end; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/forums-notifications-sanitize.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-notifications-sanitize.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-notifications-sanitize.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,128 @@ +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert's UBB forums. Thanks Orchard Labs. +-- + +declare + v_foo integer; + v_impl_id integer; +begin + -- forums_forum + v_impl_id := acs_sc_impl.get_id ( + 'NotificationType', -- impl_contract_name + 'forums_forum_notif_type' -- impl_name + ); + + select type_id into v_foo from notification_types + where sc_impl_id = v_impl_id and short_name = 'forums_forum_notif'; + + delete from notification_types_intervals + where type_id = v_foo + and interval_id in ( + select interval_id + from notification_intervals + where name in ('instant','hourly','daily') + ); + + delete from notification_types_del_methods + where type_id = v_foo + and delivery_method_id in ( + select delivery_method_id + from notification_delivery_methods + where short_name in ('email') + ); + + for row in (select type_id + from notification_types + where short_name in ('forums_forum_notif')) + loop + notification_type.del(row.type_id); + end loop; + + acs_sc_binding.del( + contract_name => 'NotificationType', + impl_name => 'forums_forum_notif_type' + ); + + v_foo := acs_sc_impl.delete_alias( + 'NotificationType', + 'forums_forum_notif_type', + 'GetURL' + ); + + v_foo := acs_sc_impl.delete_alias( + 'NotificationType', + 'forums_forum_notif_type', + 'ProcessReply' + ); + + acs_sc_impl.del( + 'NotificationType', + 'forums_forum_notif_type' + ); + + -- forums_message + v_impl_id := acs_sc_impl.get_id ( + 'NotificationType', -- impl_contract_name + 'forums_message_notif_type' -- impl_name + ); + + select type_id into v_foo from notification_types + where sc_impl_id = v_impl_id and short_name = 'forums_message_notif'; + + delete from notification_types_intervals + where type_id = v_foo + and interval_id in ( + select interval_id + from notification_intervals + where name in ('instant','hourly','daily') + ); + + delete from notification_types_del_methods + where type_id = v_foo + and delivery_method_id in ( + select delivery_method_id + from notification_delivery_methods + where short_name in ('email') + ); + + for row in (select type_id + from notification_types + where short_name in ('forums_message_notif')) + loop + notification_type.del(row.type_id); + end loop; + + acs_sc_binding.del( + contract_name => 'NotificationType', + impl_name => 'forums_message_notif_type' + ); + + v_foo := acs_sc_impl.delete_alias( + 'NotificationType', + 'forums_message_notif_type', + 'GetURL' + ); + + v_foo := acs_sc_impl.delete_alias( + 'NotificationType', + 'forums_message_notif_type', + 'ProcessReply' + ); + + acs_sc_impl.del( + 'NotificationType', + 'forums_message_notif_type' + ); +end; +/ +show errors + + + + Index: dotlrn_packages/packages/forums/sql/oracle/forums-reading-info-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-reading-info-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-reading-info-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,50 @@ +-- +-- The Forums Package +-- +-- @author David Arroyo darroyo@innova.uned.es +-- @creation-date 01-06-2007 +-- @version $Id$ +-- +-- This is free software distributed under the terms of the GNU Public +-- License version 2 or later. Full text of the license is available from the GNU Project: +-- http://www.fsf.org/copyleft/gpl.html + + +-- Tables to reading information + + +create table forums_reading_info ( + root_message_id integer + constraint forums_read_i_parent_id_fk + references forums_messages (message_id) + on delete cascade, + user_id integer + constraint forums_read_i_user_id_fk + references users(user_id) + constraint forums_read_i_user_id_nn + not null, + reading_date date + default sysdate + constraint forums_read_i_datetime_nn + not null, + constraint forums_reading_info_pk primary key (root_message_id,user_id) +); +create index forums_reading_info_user_index on forums_reading_info (user_id); +create index forums_reading_info_forum_idx on forums_reading_info (root_message_id); + +create table forums_reading_info_user ( + forum_id integer + constraint forums_read_iu_forum_id_fk + references forums_forums (forum_id) on delete cascade, + user_id integer + constraint forums_read_iu_user_id_fk + references users(user_id) on delete cascade + constraint forums_read_iu_user_id_nn + not null, + threads_read integer + default 0 + not null, + constraint forums_reading_info_user_pk primary key (forum_id,user_id) +); + + Index: dotlrn_packages/packages/forums/sql/oracle/forums-reading-info-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-reading-info-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-reading-info-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,18 @@ +-- +-- The Forums Package +-- +-- @author David Arroyo darroyo@innova.uned.es +-- @creation-date 01-06-2007 +-- @version $Id$ +-- +-- This is free software distributed under the terms of the GNU Public +-- License version 2 or later. Full text of the license is available from the GNU Project: +-- http://www.fsf.org/copyleft/gpl.html + + +-- Tables to reading information + +drop table forums_reading_info_user; +drop index forums_reading_info_forum_idx; +drop index forums_reading_info_user_index; +drop table forums_reading_info; \ No newline at end of file Index: dotlrn_packages/packages/forums/sql/oracle/forums-reading-info-package-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-reading-info-package-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-reading-info-package-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,213 @@ + +-- +-- The Forums Package +-- +-- @author David Arroyo Menéndez darroyo@innova.uned.es +-- @creation-date 2007-05-30 +-- +-- The Package for Reading Info +-- +-- + +create or replace package forum_reading_info +as +-- remove reading_info for thread (upon new message, upon message deletion, or state change) + procedure remove_msg ( + p_message_id in forums_messages.message_id%TYPE + ); + +-- mark_all_read + procedure user_add_forum ( + p_forum_id in forums_forums.forum_id%TYPE, + p_user_id in users.user_id%TYPE + ); + +-- mark message read for user + procedure user_add_msg ( + p_root_message_id in forums_messages.message_id%TYPE, + p_user_id in users.user_id%TYPE + ); + +-- move thread to other forum + procedure move_update ( + p_message_id in forums_messages.message_id%TYPE, + p_old_forum_id in forums_forums.forum_id%TYPE, + p_new_forum_id in forums_forums.forum_id%TYPE + ); + +-- move thread to other thread + procedure move_thread_th_update ( + p_source_message_id in forums_messages.message_id%TYPE, + p_source_forum_id in forums_forums.forum_id%TYPE, + p_target_message_id in forums_messages.message_id%TYPE + ); + +-- move message to other thread + procedure move_thread_update ( + p_source_message_id in forums_messages.message_id%TYPE, + p_source_old_root_message_id in forums_messages.message_id%TYPE, + p_target_message_id in forums_messages.message_id%TYPE + ); + +-- recount reading_info_user from reading_info +-- procedure repair_reading_info (); + +end forum_reading_info; +/ +show errors + + + +create or replace package body forum_reading_info +as +-- remove reading_info for thread (upon new message, upon message deletion, or state change) + procedure remove_msg ( + p_message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id integer; + cursor c_reading is select user_id from forums_reading_info where root_message_id = p_message_id; + begin + select forum_id into v_forum_id from forums_messages where message_id = p_message_id; + for v_reading in c_reading + loop + delete from forums_reading_info + where root_message_id = p_message_id and + user_id = v_reading.user_id; + update forums_reading_info_user set threads_read=threads_read-1 where forum_id=v_forum_id and user_id=v_reading.user_id; + end loop; + end remove_msg; + +-- mark_all_read: + procedure user_add_forum ( + p_forum_id in forums_forums.forum_id%TYPE, + p_user_id in users.user_id%TYPE + ) + is + v_message forums_messages_approved%ROWTYPE; + v_read_p forums_reading_info%ROWTYPE; + begin + for v_message in (select message_id + from forums_messages_approved + where forum_id = p_forum_id + and parent_id is null) + loop + begin + select * into v_read_p from forums_reading_info where user_id = p_user_id and root_message_id = v_message.message_id; + exception + when others then + if sql%notfound then -- check for 'no data found' + insert into forums_reading_info + (root_message_id,user_id) + values + (v_message.message_id,p_user_id); + end if; + end; + end loop; + end user_add_forum; + +-- mark message read for user + procedure user_add_msg ( + p_root_message_id in forums_messages.message_id%TYPE, + p_user_id in users.user_id%TYPE + ) + is + v_forum_id integer; + v_read_p varchar(1); + v_exists varchar(1); + begin + select forum_id into v_forum_id from forums_messages where message_id = p_root_message_id; + begin + select 1 into v_read_p from forums_reading_info where user_id = p_user_id and root_message_id = p_root_message_id; + insert into forums_reading_info (root_message_id,user_id) values (p_root_message_id,p_user_id); + exception + when others then + if sql%notfound then -- check for 'no data found' + insert into forums_reading_info (root_message_id,user_id) values (p_root_message_id,p_user_id); + begin + INSERT INTO forums_reading_info_user(forum_id,user_id,threads_read) VALUES (v_forum_id,p_user_id,1); + SELECT 1 into v_exists FROM forums_reading_info_user WHERE forum_id=v_forum_id AND user_id=p_user_id; + exception + when others then + if sql%notfound then -- check for 'no data found' + UPDATE forums_reading_info_user SET threads_read=threads_read+1 WHERE forum_id=v_forum_id AND user_id=p_user_id; + end if; + end; + end if; + end; + end user_add_msg; + +-- move thread to other forum + procedure move_update ( + p_message_id in forums_messages.message_id%TYPE, + p_old_forum_id in forums_forums.forum_id%TYPE, + p_new_forum_id in forums_forums.forum_id%TYPE + ) is + v_users forums_reading_info%ROWTYPE; + v_threads integer; + begin + for v_users in (select user_id from forums_reading_info where root_message_id = p_message_id) + loop + -- down the number of threads read in old forum + update forums_reading_info_user set threads_read=threads_read-1 where forum_id=p_old_forum_id and user_id=v_users.user_id; + -- up the number of thread read in new forum + select count(*) into v_threads from forums_reading_info_user where forum_id = p_new_forum_id and user_id = v_users.user_id; + if v_threads = 0 then + insert into forums_reading_info_user (forum_id,user_id,threads_read) + values (p_new_forum_id,v_users.user_id,1); + else + update forums_reading_info_user set threads_read = threads_read + 1 + where forum_id = p_new_forum_id and user_id = v_users.user_id; + end if; + + end loop; + end move_update; + +-- move thread to other thread + procedure move_thread_th_update ( + p_source_message_id in forums_messages.message_id%TYPE, + p_source_forum_id in forums_forums.forum_id%TYPE, + p_target_message_id in forums_messages.message_id%TYPE + ) is + v_target_forum_id forums_forums.forum_id%TYPE; + v_users forums_reading_info%ROWTYPE; + begin + select forum_id into v_target_forum_id from forums_messages where message_id = p_target_message_id; + -- for all users that have read target, but not the source, remove target_info + for v_users in (select user_id from forums_reading_info fri where root_message_id = p_target_message_id and not exists (select 1 from forums_reading_info where root_message_id = p_source_message_id and user_id = fri.user_id)) + loop + delete from forums_reading_info where root_message_id = p_target_message_id and user_id = v_users.user_id; + -- down the number of threads read in target forum + update forums_reading_info_user set threads_read=threads_read-1 where forum_id = v_target_forum_id and user_id = v_users.user_id; + end loop; + -- for all users that have read source, down the nummber of thread in source forum and remove reading info four source message since it no longer is root_message_id + for v_users in (select user_id from forums_reading_info where root_message_id = p_source_message_id) + loop + delete from forums_reading_info where root_message_id=p_source_message_id and user_id=v_users.user_id; + update forums_reading_info_user set threads_read=threads_read-1 where forum_id = p_source_forum_id and user_id = v_users.user_id; + end loop; + end move_thread_th_update; + +-- move message to other thread + procedure move_thread_update ( + p_source_message_id in forums_messages.message_id%TYPE, + p_source_old_root_message_id in forums_messages.message_id%TYPE, + p_target_message_id in forums_messages.message_id%TYPE + ) is + v_target_forum_id forums_forums.forum_id%TYPE; + v_users forums_reading_info%ROWTYPE; + begin + select forum_id from forums_messages where message_id = p_target_message_id into v_target_forum_id; + for v_users in (select user_id from forums_reading_info fri where root_message_id = p_target_message_id and not exists(select 1 from forums_reading_info where root_message_id = p_source_old_root_message_id and user_id = fri.user_id)) + loop + delete from forums_reading_info where root_message_id = p_target_message_id and user_id = v_users.user_id; + -- down the number of threads read in target forum + update forums_reading_info_user set threads_read = threads_read-1 + where forum_id = v_target_forum_id and user_id = v_users.user_id; + end loop; + + end move_thread_update; + +end forum_reading_info; +/ +show errors \ No newline at end of file Index: dotlrn_packages/packages/forums/sql/oracle/forums-search-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-search-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-search-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,273 @@ +-- +-- Copyright (C) 2001, 2002 MIT +-- +-- This file is part of dotLRN. +-- +-- dotLRN is free software; you can redistribute it and/or modify it under the +-- terms of the GNU General Public License as published by the Free Software +-- Foundation; either version 2 of the License, or (at your option) any later +-- version. +-- +-- dotLRN is distributed in the hope that it will be useful, but WITHOUT ANY +-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +-- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +-- details. +-- + +-- +-- Support for searching of forum messages +-- +-- @author yon@openforce.net +-- @creation-date 2002-07-01 +-- @version $Id$ +-- + + + +-- Call this script like this: +-- +-- sqlplus /nolog @forums-search-create.sql +-- +-- &1 = ctxsys password +-- &2 = OpenACS database user +-- &3 = OpenACS database password + + +connect &2/&3; + +-- as normal user +create or replace procedure index_message ( + rid in rowid, + tlob in out NOCOPY clob +) +is + offset number := 1; +begin + + for row in (select forums_messages.subject, + forums_messages.content, + persons.first_names, + persons.last_name + from forums_messages, + persons + where forums_messages.rowid = rid + and forums_messages.user_id = persons.person_id) + loop + dbms_lob.writeappend(tlob, length(row.subject) + 1, ' ' || row.subject); + dbms_lob.append(tlob, row.content); + dbms_lob.writeappend(tlob, length(row.first_names) + 1, ' ' || row.first_names); + dbms_lob.writeappend(tlob, length(row.last_name) + 1, ' ' || row.last_name); + end loop; + +end; +/ +show errors + +-- as ctxsys +connect ctxsys/&1; + +create or replace procedure s_index_message ( + rid in rowid, + tlob in out NOCOPY clob +) +is +begin + &2..index_message(rid, tlob); +end; +/ +show errors + +grant execute on s_index_message to &2; +grant execute on ctx_ddl to &2; + +-- as normal user +connect &2/&3; + +execute ctx_ddl.create_preference('forums_user_datastore', 'user_datastore'); +execute ctx_ddl.set_attribute('forums_user_datastore', 'procedure', 's_index_message'); + +create index forums_content_idx + on forums_messages (content) + indextype is ctxsys.context + parameters ('datastore forums_user_datastore'); + +declare + v_job number; +begin + dbms_job.submit( + job => v_job, + what => 'ctxsys.ctx_ddl.sync_index(''forums_content_idx'');', + interval => 'sysdate + 1/24' + ); +end; +/ +show errors + +-- ripped off from site-wide-search + +-- if we pass in a very long string to im_convert, we will end up with internal +-- strings that are too long. Because this is relatively hard to debug, +-- we wrote im_convert_length_check to throw a more appropriate error message +-- Note that we raise an exception because passing such a long query to +-- interMedia is pretty slow. Alternative to the application error are to +-- 1. return the string as is +-- 2. increase the max length from 256 to 1024 +-- mbryzek@arsdigita.com, 7/6/2000 +create or replace procedure im_convert_length_check ( + p_string in varchar2, + p_number_chars_to_append in number, + p_max_length in number, + p_variable_name in varchar2 +) +is +begin + if nvl(length(p_string),0) + p_number_chars_to_append > p_max_length + then + raise_application_error(-20000, 'Variable "' || p_variable_name || '" exceeds ' || p_max_length || ' character declaration'); + end if; +end; +/ +show errors; + +-- this proc takes user supplied free text and transforms it into an interMedia +-- friendly query string. (provided by oracle). +create or replace function im_convert ( + query in varchar2 default null +) return varchar2 +is + i number := 0; + len number := 0; + char varchar2(1); + minusString varchar2(256) := ''; + plusString varchar2(256) := ''; + mainString varchar2(256) := ''; + mainAboutString varchar2(500) := ''; + finalString varchar2(500) := ''; + hasMain number := 0; + hasPlus number := 0; + hasMinus number := 0; + token varchar2(256); + tokenStart number := 1; + tokenFinish number := 0; + inPhrase number := 0; + inPlus number := 0; + inWord number := 0; + inMinus number := 0; + completePhrase number := 0; + completeWord number := 0; + code number := 0; +begin + + len := length(query); + + -- we iterate over the string to find special web operators + for i in 1..len loop + char := substr(query,i,1); + if(char = '"') then + if(inPhrase = 0) then + inPhrase := 1; + tokenStart := i; + else + inPhrase := 0; + completePhrase := 1; + tokenFinish := i-1; + end if; + elsif(char = ' ') then + if(inPhrase = 0) then + completeWord := 1; + tokenFinish := i-1; + end if; + elsif(char = '+') then + inPlus := 1; + tokenStart := i+1; + elsif((char = '-') and (i = tokenStart)) then + inMinus :=1; + tokenStart := i+1; + end if; + + if(completeWord=1) then + token := '{ '||substr(query,tokenStart,tokenFinish-tokenStart+1)||' }'; + if(inPlus=1) then + im_convert_length_check(plusString, 4+length(token), 256, 'plusString'); + plusString := plusString||','||token||'*10'; + hasPlus :=1; + elsif(inMinus=1) then + im_convert_length_check(minusString, 4+length(token), 256, 'minusString'); + minusString := minusString||'OR '||token||' '; + hasMinus :=1; + else + im_convert_length_check(mainString, 6+length(token), 256, 'mainString'); + mainString := mainString||' NEAR '||token; + im_convert_length_check(mainAboutString, 1+length(token), 500, 'mainAboutString'); + mainAboutString := mainAboutString||' '||token; + hasMain :=1; + end if; + tokenStart :=i+1; + tokenFinish :=0; + inPlus := 0; + inMinus :=0; + end if; + completePhrase := 0; + completeWord :=0; + end loop; + + -- find the last token + token := '{ '||substr(query,tokenStart,len-tokenStart+1)||' }'; + if(inPlus=1) then + im_convert_length_check(plusString, 4+length(token), 256, 'plusString'); + plusString := plusString||','||token||'*10'; + hasPlus :=1; + elsif(inMinus=1) then + im_convert_length_check(minusString, 4+length(token), 256, 'minusString'); + minusString := minusString||'OR '||token||' '; + hasMinus :=1; + else + im_convert_length_check(mainString, 6+length(token), 256, 'mainString'); + mainString := mainString||' NEAR '||token; + im_convert_length_check(mainAboutString, 1+length(token), 500, 'mainAboutString'); + mainAboutString := mainAboutString||' '||token; + hasMain :=1; + end if; + + mainString := substr(mainString,6,length(mainString)-5); + mainAboutString := replace(mainAboutString,'{',' '); + mainAboutString := replace(mainAboutString,'}',' '); + mainAboutString := replace(mainAboutString,')',' '); + mainAboutString := replace(mainAboutString,'(',' '); + plusString := substr(plusString,2,length(plusString)-1); + minusString := substr(minusString,4,length(minusString)-4); + + -- let's just check once for the length of finalString... note this uses the + -- longest possible string that is created in the rest of this function + im_convert_length_check(finalString, nvl(length(mainString),0) + nvl(length(mainAboutString),0) + nvl(length(minusString),0) + nvl(length(plusString),0) + 30, 500, 'finalString'); + + -- we find the components present and then process them based on the specific combinations + code := hasMain*4+hasPlus*2+hasMinus; + if(code = 7) then + finalString := '('||plusString||','||mainString||'*2.0,about('||mainAboutString||')*0.5) NOT ('||minusString||')'; + elsif (code = 6) then + finalString := plusString||','||mainString||'*2.0'||',about('||mainAboutString||')*0.5'; + elsif (code = 5) then + finalString := '('||mainString||',about('||mainAboutString||')) NOT ('||minusString||')'; + elsif (code = 4) then + finalString := mainString; + finalString := replace(finalString,'*1,',NULL); + finalString := '('||finalString||')*2.0,about('||mainAboutString||')'; + elsif (code = 3) then + finalString := '('||plusString||') NOT ('||minusString||')'; + elsif (code = 2) then + finalString := plusString; + elsif (code = 1) then + -- not is a binary operator for intermedia text + finalString := 'totallyImpossibleString'||' NOT ('||minusString||')'; + elsif (code = 0) then + finalString := ''; + end if; + + return finalString; +end; +/ +show errors; + +exit + Index: dotlrn_packages/packages/forums/sql/oracle/forums-search-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-search-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-search-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,66 @@ +-- +-- Copyright (C) 2001, 2002 MIT +-- +-- This file is part of dotLRN. +-- +-- dotLRN is free software; you can redistribute it and/or modify it under the +-- terms of the GNU General Public License as published by the Free Software +-- Foundation; either version 2 of the License, or (at your option) any later +-- version. +-- +-- dotLRN is distributed in the hope that it will be useful, but WITHOUT ANY +-- WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS +-- FOR A PARTICULAR PURPOSE. See the GNU General Public License for more +-- details. +-- + +-- +-- Support for searching of forum messages +-- +-- @author yon@openforce.net +-- @creation-date 2002-07-01 +-- @version $Id$ +-- + +-- Call this script like this: +-- +-- sqlplus /nolog @forums-search-create.sql +-- +-- &1 = ctxsys password +-- &2 = OpenACS database user +-- &3 = OpenACS database password + + +connect &2/&3; + +drop function im_convert; +drop procedure im_convert_length_check; + +declare +begin + for row in (select job + from user_jobs + where what like '%&2..forums_content_idx%') + loop + dbms_job.remove(job => row.job); + end loop; +end; +/ +show errors + +drop index forums_content_idx; + +execute ctx_ddl.unset_attribute('forums_user_datastore', 'procedure'); +execute ctx_ddl.drop_preference('forums_user_datastore'); + +-- as ctxsys +connect ctxsys/&1; + +drop procedure s_index_message; + +-- as normal user +connect &2/&3; + +drop procedure index_message; + +exit Index: dotlrn_packages/packages/forums/sql/oracle/forums-tree-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-tree-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-tree-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,59 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert. Thanks Orchard Labs! +-- + +-- +-- This is the sortkey code +-- + +create or replace trigger forums_mess_insert_tr +before insert on forums_messages +for each row +declare + v_max_child_sortkey forums_messages.max_child_sortkey%TYPE; + v_parent_sortkey forums_messages.tree_sortkey%TYPE; +begin + + if :new.parent_id is null + then + + select '', max_child_sortkey + into v_parent_sortkey, v_max_child_sortkey + from forums_forums + where forum_id = :new.forum_id + for update of max_child_sortkey; + + v_max_child_sortkey := tree.increment_key(v_max_child_sortkey); + + update forums_forums + set max_child_sortkey = v_max_child_sortkey + where forum_id = :new.forum_id; + + else + + select nvl(tree_sortkey, ''), max_child_sortkey + into v_parent_sortkey, v_max_child_sortkey + from forums_messages + where message_id = :new.parent_id + for update of max_child_sortkey; + + v_max_child_sortkey := tree.increment_key(v_max_child_sortkey); + + update forums_messages + set max_child_sortkey = v_max_child_sortkey + where message_id = :new.parent_id; + + end if; + + :new.tree_sortkey := v_parent_sortkey || v_max_child_sortkey; + +end forums_mess_insert_tr; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/forums-tree-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/forums-tree-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/forums-tree-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,12 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert. Thanks Orchard Labs! +-- + +drop trigger forums_mess_insert_tr; Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-0.1d-0.2d.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-0.1d-0.2d.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-0.1d-0.2d.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,328 @@ +alter table forums_forums add (last_post date); +alter table forums_messages add (last_child_post date); + +declare + v_date date; +begin + + for row in (select forum_id + from forums_forums) + loop + + select last_modified into v_date + from acs_objects + where object_id = row.forum_id; + + update forums_forums + set last_post = v_date + where forum_id = row.forum_id; + + end loop; + + for row in (select message_id + from forums_messages + where parent_id is null) + loop + + -- forums 0.1d did not properly set the last_modified field of the object + -- row associated with the root message of a thread, so we need to calculate + -- it here. + + select max(o.last_modified) into v_date + from acs_objects o, forums_messages fm + where forums_message.root_message_id(fm.message_id) = row.message_id + and object_id = fm.message_id; + + update forums_messages + set last_child_post = v_date + where message_id = row.message_id; + + end loop; + +end; +/ +show errors; + +drop view forums_messages_approved; +create view forums_messages_approved +as + select * + from forums_messages + where state = 'approved'; + +drop view forums_messages_pending; +create view forums_messages_pending +as + select * + from forums_messages + where state= 'pending'; + +drop view forums_forums_enabled; +create view forums_forums_enabled +as + select * + from forums_forums + where enabled_p = 't'; + +create or replace package body forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + html_p in forums_messages.html_p%TYPE default 'f', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE + is + v_message_id acs_objects.object_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + begin + + v_message_id := acs_object.new( + object_id => message_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, forum_id) + ); + + if state is null + then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id= new.forum_id; + + if v_forum_policy = 'moderated' then + v_state := 'pending'; + else + v_state := 'approved'; + end if; + else + v_state := state; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, html_p, user_id, posting_date, parent_id, state) + values + (v_message_id, forum_id, subject, content, html_p, user_id, posting_date, parent_id, v_state); + + -- DRB: Can't use root_message_id() here because it triggers a "mutating table" error + + select tree_sortkey into v_sortkey + from forums_messages + where message_id = v_message_id; + + update forums_forums + set last_post = posting_date + where forum_id = forums_message.new.forum_id; + + update forums_messages + set last_child_post = posting_date + where forum_id = forums_message.new.forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + + return v_message_id; + end new; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE + is + v_message_id forums_messages.message_id%TYPE; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = root_message_id.message_id; + + select message_id + into v_message_id + from forums_messages + where forum_id = v_forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + + return v_message_id; + end root_message_id; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_open.message_id; + + update forums_messages + set open_p = 't' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 't' + where message_id = thread_open.message_id; + end thread_open; + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_close.message_id; + + update forums_messages + set open_p = 'f' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 'f' + where message_id = thread_close.message_id; + end thread_close; + + procedure delete ( + message_id in forums_messages.message_id%TYPE + ) + is + begin + acs_object.delete(message_id); + end delete; + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_message forums_messages%ROWTYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = delete_thread.message_id; + + -- if it's already deleted + if SQL%NOTFOUND then + return; + end if; + + -- delete all children + -- order by tree_sortkey desc to guarantee + -- that we never delete a parent before its child + -- sortkeys are beautiful + for v_message in (select * + from forums_messages + where forum_id = v_forum_id + and tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + order by tree_sortkey desc) + loop + forums_message.delete(v_message.message_id); + end loop; + + -- delete the message itself + forums_message.delete(delete_thread.message_id); + end delete_thread; + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar + is + v_name forums_messages.subject%TYPE; + begin + select subject + into v_name + from forums_messages + where message_id = forums_message.name.message_id; + + return v_name; + end name; + +end forums_message; +/ +show errors + +create or replace package body forums_forum +as + + function new ( + forum_id in forums_forums.forum_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_forum', + name in forums_forums.name%TYPE, + charter in forums_forums.charter%TYPE default null, + presentation_type in forums_forums.presentation_type%TYPE, + posting_policy in forums_forums.posting_policy%TYPE, + package_id in forums_forums.package_id%TYPE, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_forums.forum_id%TYPE + is + v_forum_id forums_forums.forum_id%TYPE; + begin + v_forum_id := acs_object.new( + object_id => forum_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, package_id) + ); + + insert into forums_forums + (forum_id, name, charter, presentation_type, posting_policy, package_id) + values + (v_forum_id, name, charter, presentation_type, posting_policy, package_id); + + return v_forum_id; + end new; + + function name ( + forum_id in forums_forums.forum_id%TYPE + ) return varchar + is + v_name forums_forums.name%TYPE; + begin + select name + into v_name + from forums_forums + where forum_id = name.forum_id; + + return v_name; + end name; + + procedure delete ( + forum_id in forums_forums.forum_id%TYPE + ) + is + begin + acs_object.delete(forum_id); + end delete; + +end forums_forum; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-0.2d-0.3d.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-0.2d-0.3d.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-0.2d-0.3d.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,6 @@ +-- forums/sql/oracle/upgrade-0.2d-0.3d.sql +-- +-- Changes for scalability davis@xarg.net + +create unique index forums_mess_forum_sk_un on forums_messages(forum_id, tree_sortkey); + Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-0.3d-0.4d.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-0.3d-0.4d.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-0.3d-0.4d.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,3 @@ +-- Need these two for RI checks +create index forums_messages_user_id_idx ON forums_messages(user_id); +create index forums_messages_parent_id_idx ON forums_messages(parent_id); Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0.6-1.0.7d.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0.6-1.0.7d.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0.6-1.0.7d.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,492 @@ +alter table forums_forums add (thread_count integer default 0); +alter table forums_forums add (approved_thread_count integer default 0); + +alter table forums_messages add (reply_count integer default 0); +alter table forums_messages add (approved_reply_count integer default 0); + +create or replace view forums_forums_enabled +as + select * + from forums_forums + where enabled_p = 't'; + +create or replace view forums_messages_approved +as + select * + from forums_messages + where state = 'approved'; + +create or replace view forums_messages_pending +as + select * + from forums_messages + where state= 'pending'; + +update forums_forums +set approved_thread_count = (select count(message_id) + from forums_messages_approved fm + where fm.forum_id=forums_forums.forum_id + and fm.parent_id is null), + thread_count = (select count(message_id) + from forums_messages fm + where fm.forum_id=forums_forums.forum_id + and fm.parent_id is null); + +update forums_messages +set approved_reply_count = (select count(*) + from forums_messages_approved fm1 + where fm1.tree_sortkey + between tree.left(forums_messages.tree_sortkey) + and tree.right(forums_messages.tree_sortkey) + and forums_messages.forum_id = fm1.forum_id), + reply_count = (select count(*) + from forums_messages fm1 + where fm1.tree_sortkey + between tree.left(forums_messages.tree_sortkey) + and tree.right(forums_messages.tree_sortkey) + and forums_messages.forum_id = fm1.forum_id) +where parent_id is null; + +create or replace package forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + format in forums_messages.format%TYPE default 'text/plain', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ); + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ); + + procedure del ( + message_id in forums_messages.message_id%TYPE + ); + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ); + + procedure set_state( + message_id in forums_messages.message_id%TYPE, + state in forums_messages.state%TYPE + ); + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar; + +end forums_message; +/ +show errors + +create or replace package body forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + format in forums_messages.format%TYPE default 'text/plain', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE + is + v_message_id acs_objects.object_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + begin + + v_message_id := acs_object.new( + object_id => message_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, forum_id) + ); + + if state is null + then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id= new.forum_id; + + if v_forum_policy = 'moderated' then + v_state := 'pending'; + else + v_state := 'approved'; + end if; + else + v_state := state; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, format, user_id, posting_date, last_child_post, parent_id, state) + values + (v_message_id, forum_id, subject, content, format, user_id, posting_date, posting_date, parent_id, v_state); + + select tree_sortkey into v_sortkey + from forums_messages + where message_id = v_message_id; + + update forums_forums + set last_post = forums_message.new.posting_date + where forum_id = forums_message.new.forum_id; + + -- DRB: Can't use root_message_id() here because it triggers a "mutating table" error + + if parent_id is null then + if v_state = 'approved' then + update forums_forums + set thread_count = thread_count + 1, + approved_thread_count = approved_thread_count + 1 + where forum_id = forums_message.new.forum_id; + else + update forums_forums + set thread_count = thread_count + 1 + where forum_id=forums_message.new.forum_id; + end if; + else + if v_state = 'approved' then + update forums_messages + set approved_reply_count = approved_reply_count + 1, + reply_count = reply_count + 1, + last_child_post = sysdate + where forum_id = forums_message.new.forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + else + update forums_messages + set reply_count = reply_count + 1, + last_child_post = sysdate + where forum_id = forums_message.new.forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + end if; + end if; + + return v_message_id; + + end new; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE + is + v_message_id forums_messages.message_id%TYPE; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = root_message_id.message_id; + + select message_id + into v_message_id + from forums_messages + where forum_id = v_forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + + return v_message_id; + end root_message_id; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_open.message_id; + + update forums_messages + set open_p = 't' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 't' + where message_id = thread_open.message_id; + end thread_open; + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_close.message_id; + + update forums_messages + set open_p = 'f' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 'f' + where message_id = thread_close.message_id; + end thread_close; + + procedure del ( + message_id in forums_messages.message_id%TYPE + ) + is + v_cur forums_messages%ROWTYPE; + begin + + -- Maintain the forum thread counts + + select * into v_cur + from forums_messages + where message_id = forums_message.del.message_id; + + if v_cur.parent_id is null then + if v_cur.state = 'approved' then + update forums_forums + set thread_count = thread_count - 1, + approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + else + update forums_forums + set thread_count = thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + elsif v_cur.state = 'approved' then + update forums_messages + set approved_reply_count = approved_reply_count - 1, + reply_count = reply_count - 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + else + update forums_messages + set reply_count = reply_count - 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + end if; + + acs_object.del(message_id); + + end del; + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_message forums_messages%ROWTYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = delete_thread.message_id; + + -- if it's already deleted + if SQL%NOTFOUND then + return; + end if; + + -- delete all children + -- order by tree_sortkey desc to guarantee + -- that we never delete a parent before its child + -- sortkeys are beautiful + for v_message in (select * + from forums_messages + where forum_id = v_forum_id + and tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + order by tree_sortkey desc) + loop + forums_message.del(v_message.message_id); + end loop; + + -- delete the message itself + forums_message.del(delete_thread.message_id); + end delete_thread; + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar + is + v_name forums_messages.subject%TYPE; + begin + select subject + into v_name + from forums_messages + where message_id = forums_message.name.message_id; + + return v_name; + end name; + + procedure set_state( + message_id in forums_messages.message_id%TYPE, + state in forums_messages.state%TYPE + ) + is + v_cur forums_messages%ROWTYPE; + begin + + select * into v_cur + from forums_messages + where message_id = forums_message.set_state.message_id; + + if v_cur.parent_id is null then + if state = 'approved' and v_cur.state <> 'approved' then + update forums_forums + set approved_thread_count = approved_thread_count + 1 + where forum_id=v_cur.forum_id; + elsif state <> 'approved' and v_cur.state = 'approved' then + update forums_forums + set approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + else + if state = 'approved' and v_cur.state <> 'approved' then + update forums_messages + set approved_reply_count = approved_reply_count + 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + elsif state <> 'approved' and v_cur.state = 'approved' then + update forums_messages + set approved_reply_count = approved_reply_count - 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + end if; + end if; + + update forums_messages + set state = forums_message.set_state.state + where message_id = forums_message.set_state.message_id; + + end set_state; + +end forums_message; +/ +show errors + +create or replace package forums_forum +as + + function new ( + forum_id in forums_forums.forum_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_forum', + name in forums_forums.name%TYPE, + charter in forums_forums.charter%TYPE default null, + presentation_type in forums_forums.presentation_type%TYPE, + posting_policy in forums_forums.posting_policy%TYPE, + package_id in forums_forums.package_id%TYPE, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_forums.forum_id%TYPE; + + function name ( + forum_id in forums_forums.forum_id%TYPE + ) return varchar; + + procedure del ( + forum_id in forums_forums.forum_id%TYPE + ); + +end forums_forum; +/ +show errors + +create or replace package body forums_forum +as + + function new ( + forum_id in forums_forums.forum_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_forum', + name in forums_forums.name%TYPE, + charter in forums_forums.charter%TYPE default null, + presentation_type in forums_forums.presentation_type%TYPE, + posting_policy in forums_forums.posting_policy%TYPE, + package_id in forums_forums.package_id%TYPE, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_forums.forum_id%TYPE + is + v_forum_id forums_forums.forum_id%TYPE; + begin + v_forum_id := acs_object.new( + object_id => forum_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, package_id) + ); + + insert into forums_forums + (forum_id, name, charter, presentation_type, posting_policy, package_id) + values + (v_forum_id, name, charter, presentation_type, posting_policy, package_id); + + return v_forum_id; + end new; + + function name ( + forum_id in forums_forums.forum_id%TYPE + ) return varchar + is + v_name forums_forums.name%TYPE; + begin + select name + into v_name + from forums_forums + where forum_id = name.forum_id; + + return v_name; + end name; + + procedure del ( + forum_id in forums_forums.forum_id%TYPE + ) + is + begin + acs_object.del(forum_id); + end del; + +end forums_forum; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0d2-1.0d3.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0d2-1.0d3.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0d2-1.0d3.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,260 @@ + +-- +-- Upgrade script for oracle 1.0d2 - 1.0d3 +-- +-- @author Lars Pind (lars@collaboraid.biz) +-- @creation-date 2003-10-3 +-- +-- The forums_message.new function updated the thread's last post date to the posting date +-- of the first post (!), because the code inadvertedly referred to the posting_date +-- column instead of the posting_date parameter. +-- + +create or replace package forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + html_p in forums_messages.html_p%TYPE default 'f', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ); + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ); + + procedure del ( + message_id in forums_messages.message_id%TYPE + ); + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ); + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar; + +end forums_message; +/ +show errors + +create or replace package body forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + html_p in forums_messages.html_p%TYPE default 'f', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE + is + v_message_id acs_objects.object_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + begin + + v_message_id := acs_object.new( + object_id => message_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, forum_id) + ); + + if state is null + then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id= new.forum_id; + + if v_forum_policy = 'moderated' then + v_state := 'pending'; + else + v_state := 'approved'; + end if; + else + v_state := state; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, html_p, user_id, posting_date, parent_id, state) + values + (v_message_id, forum_id, subject, content, html_p, user_id, posting_date, parent_id, v_state); + + -- DRB: Can't use root_message_id() here because it triggers a "mutating table" error + + select tree_sortkey into v_sortkey + from forums_messages + where message_id = v_message_id; + + update forums_forums + set last_post = forums_message.new.posting_date + where forum_id = forums_message.new.forum_id; + + update forums_messages + set last_child_post = forums_message.new.posting_date + where forum_id = forums_message.new.forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + + return v_message_id; + end new; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE + is + v_message_id forums_messages.message_id%TYPE; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = root_message_id.message_id; + + select message_id + into v_message_id + from forums_messages + where forum_id = v_forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + + return v_message_id; + end root_message_id; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_open.message_id; + + update forums_messages + set open_p = 't' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 't' + where message_id = thread_open.message_id; + end thread_open; + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_close.message_id; + + update forums_messages + set open_p = 'f' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 'f' + where message_id = thread_close.message_id; + end thread_close; + + procedure del ( + message_id in forums_messages.message_id%TYPE + ) + is + begin + acs_object.del(message_id); + end del; + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_message forums_messages%ROWTYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = delete_thread.message_id; + + -- if it's already deleted + if SQL%NOTFOUND then + return; + end if; + + -- delete all children + -- order by tree_sortkey desc to guarantee + -- that we never delete a parent before its child + -- sortkeys are beautiful + for v_message in (select * + from forums_messages + where forum_id = v_forum_id + and tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + order by tree_sortkey desc) + loop + forums_message.del(v_message.message_id); + end loop; + + -- delete the message itself + forums_message.del(delete_thread.message_id); + end delete_thread; + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar + is + v_name forums_messages.subject%TYPE; + begin + select subject + into v_name + from forums_messages + where message_id = forums_message.name.message_id; + + return v_name; + end name; + +end forums_message; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0d3-1.0d4.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0d3-1.0d4.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0d3-1.0d4.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,364 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- The Package +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs! +-- + +create or replace package forums_forum +as + + function new ( + forum_id in forums_forums.forum_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_forum', + name in forums_forums.name%TYPE, + charter in forums_forums.charter%TYPE default null, + presentation_type in forums_forums.presentation_type%TYPE, + posting_policy in forums_forums.posting_policy%TYPE, + package_id in forums_forums.package_id%TYPE, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_forums.forum_id%TYPE; + + function name ( + forum_id in forums_forums.forum_id%TYPE + ) return varchar; + + procedure del ( + forum_id in forums_forums.forum_id%TYPE + ); + +end forums_forum; +/ +show errors + +create or replace package body forums_forum +as + + function new ( + forum_id in forums_forums.forum_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_forum', + name in forums_forums.name%TYPE, + charter in forums_forums.charter%TYPE default null, + presentation_type in forums_forums.presentation_type%TYPE, + posting_policy in forums_forums.posting_policy%TYPE, + package_id in forums_forums.package_id%TYPE, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_forums.forum_id%TYPE + is + v_forum_id forums_forums.forum_id%TYPE; + begin + v_forum_id := acs_object.new( + object_id => forum_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, package_id) + ); + + insert into forums_forums + (forum_id, name, charter, presentation_type, posting_policy, package_id) + values + (v_forum_id, name, charter, presentation_type, posting_policy, package_id); + + return v_forum_id; + end new; + + function name ( + forum_id in forums_forums.forum_id%TYPE + ) return varchar + is + v_name forums_forums.name%TYPE; + begin + select name + into v_name + from forums_forums + where forum_id = name.forum_id; + + return v_name; + end name; + + procedure del ( + forum_id in forums_forums.forum_id%TYPE + ) + is + begin + acs_object.del(forum_id); + end del; + +end forums_forum; +/ +show errors + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- The Package for Messages +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs! +-- + +create or replace package forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + html_p in forums_messages.html_p%TYPE default 'f', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ); + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ); + + procedure del ( + message_id in forums_messages.message_id%TYPE + ); + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ); + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar; + +end forums_message; +/ +show errors + +create or replace package body forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + html_p in forums_messages.html_p%TYPE default 'f', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE + is + v_message_id acs_objects.object_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + begin + + v_message_id := acs_object.new( + object_id => message_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, forum_id) + ); + + if state is null + then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id= new.forum_id; + + if v_forum_policy = 'moderated' then + v_state := 'pending'; + else + v_state := 'approved'; + end if; + else + v_state := state; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, html_p, user_id, posting_date, parent_id, state) + values + (v_message_id, forum_id, subject, content, html_p, user_id, posting_date, parent_id, v_state); + + -- DRB: Can't use root_message_id() here because it triggers a "mutating table" error + + select tree_sortkey into v_sortkey + from forums_messages + where message_id = v_message_id; + + update forums_forums + set last_post = posting_date + where forum_id = forums_message.new.forum_id; + + update forums_messages + set last_child_post = posting_date + where forum_id = forums_message.new.forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + + return v_message_id; + end new; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE + is + v_message_id forums_messages.message_id%TYPE; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = root_message_id.message_id; + + select message_id + into v_message_id + from forums_messages + where forum_id = v_forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + + return v_message_id; + end root_message_id; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_open.message_id; + + update forums_messages + set open_p = 't' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 't' + where message_id = thread_open.message_id; + end thread_open; + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_close.message_id; + + update forums_messages + set open_p = 'f' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 'f' + where message_id = thread_close.message_id; + end thread_close; + + procedure del ( + message_id in forums_messages.message_id%TYPE + ) + is + begin + acs_object.del(message_id); + end del; + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_message forums_messages%ROWTYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = delete_thread.message_id; + + -- if it's already deleted + if SQL%NOTFOUND then + return; + end if; + + -- delete all children + -- order by tree_sortkey desc to guarantee + -- that we never delete a parent before its child + -- sortkeys are beautiful + for v_message in (select * + from forums_messages + where forum_id = v_forum_id + and tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + order by tree_sortkey desc) + loop + forums_message.del(v_message.message_id); + end loop; + + -- delete the message itself + forums_message.del(delete_thread.message_id); + end delete_thread; + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar + is + v_name forums_messages.subject%TYPE; + begin + select subject + into v_name + from forums_messages + where message_id = forums_message.name.message_id; + + return v_name; + end name; + +end forums_message; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0d4-1.0.1d2.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0d4-1.0.1d2.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.0d4-1.0.1d2.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,285 @@ +alter table forums_messages add format varchar2(30) default 'text/plain'; + +update forums_messages +set format = 'text/html' +where html_p = 't'; +update forums_messages +set format = 'text/plain' +where html_p = 'f'; + +alter table forums_messages add constraint forums_mess_format_ck check (format in ('text/enhanced', 'text/plain', 'text/fixed-width', 'text/html')); +alter table forums_messages drop column html_p; + +-- forums-messages-package-create.sql +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- The Package for Messages +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs! +-- + +create or replace package forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + format in forums_messages.format%TYPE default 'text/plain', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ); + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ); + + procedure del ( + message_id in forums_messages.message_id%TYPE + ); + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ); + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar; + +end forums_message; +/ +show errors + +create or replace package body forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + format in forums_messages.format%TYPE default 'text/plain', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE + is + v_message_id acs_objects.object_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + begin + + v_message_id := acs_object.new( + object_id => message_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, forum_id) + ); + + if state is null + then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id= new.forum_id; + + if v_forum_policy = 'moderated' then + v_state := 'pending'; + else + v_state := 'approved'; + end if; + else + v_state := state; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, format, user_id, posting_date, parent_id, state) + values + (v_message_id, forum_id, subject, content, format, user_id, posting_date, parent_id, v_state); + + -- DRB: Can't use root_message_id() here because it triggers a "mutating table" error + + select tree_sortkey into v_sortkey + from forums_messages + where message_id = v_message_id; + + update forums_forums + set last_post = forums_message.new.posting_date + where forum_id = forums_message.new.forum_id; + + update forums_messages + set last_child_post = forums_message.new.posting_date + where forum_id = forums_message.new.forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + + return v_message_id; + end new; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE + is + v_message_id forums_messages.message_id%TYPE; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = root_message_id.message_id; + + select message_id + into v_message_id + from forums_messages + where forum_id = v_forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + + return v_message_id; + end root_message_id; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_open.message_id; + + update forums_messages + set open_p = 't' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 't' + where message_id = thread_open.message_id; + end thread_open; + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_close.message_id; + + update forums_messages + set open_p = 'f' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 'f' + where message_id = thread_close.message_id; + end thread_close; + + procedure del ( + message_id in forums_messages.message_id%TYPE + ) + is + begin + acs_object.del(message_id); + end del; + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_message forums_messages%ROWTYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = delete_thread.message_id; + + -- if it's already deleted + if SQL%NOTFOUND then + return; + end if; + + -- delete all children + -- order by tree_sortkey desc to guarantee + -- that we never delete a parent before its child + -- sortkeys are beautiful + for v_message in (select * + from forums_messages + where forum_id = v_forum_id + and tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + order by tree_sortkey desc) + loop + forums_message.del(v_message.message_id); + end loop; + + -- delete the message itself + forums_message.del(delete_thread.message_id); + end delete_thread; + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar + is + v_name forums_messages.subject%TYPE; + begin + select subject + into v_name + from forums_messages + where message_id = forums_message.name.message_id; + + return v_name; + end name; + +end forums_message; +/ +show errors + + +create or replace view forums_messages_approved as + select * + from forums_messages + where state = 'approved'; + +create or replace view forums_messages_pending as + select * + from forums_messages + where state = 'pending'; + Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.1.1-1.1.2d1.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.1.1-1.1.2d1.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.1.1-1.1.2d1.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,35 @@ +update acs_permissions + set privilege = 'read' + where privilege = 'forum_read' + and not exists (select 1 + from acs_permissions p1 + where p1.object_id = acs_permissions.object_id + and p1.grantee_id = acs_permissions.grantee_id + and p1.privilege = 'read'); + +delete from acs_permissions + where privilege = 'forum_read'; + +update acs_permissions + set privilege = 'write' + where privilege = 'forum_write' + and not exists (select 1 + from acs_permissions p1 + where p1.object_id = acs_permissions.object_id + and p1.grantee_id = acs_permissions.grantee_id + and p1.privilege = 'write'); + +delete from acs_permissions + where privilege = 'forum_write'; + +update acs_permissions + set privilege = 'create' + where privilege = 'forum_create' + and not exists (select 1 + from acs_permissions p1 + where p1.object_id = acs_permissions.object_id + and p1.grantee_id = acs_permissions.grantee_id + and p1.privilege = 'create'); + +delete from acs_permissions + where privilege = 'forum_create'; Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.1.2d4-1.1.2d5.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.1.2d4-1.1.2d5.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.1.2d4-1.1.2d5.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,48 @@ +-- +-- Most of the forum_* privileges are now deprecated. A notable exception is +-- forum_moderate, which is little used but provides a way to grant moderation +-- privileges without granting full admin privileges. +-- +-- This script, plus accompanying changes in other parts of this package, +-- finishes that job started in upgrade-1.1.1-1.1.2d1.sql. +-- + +update acs_permissions +set privilege = 'read' +where privilege = 'forum_read'; + +update acs_permissions +set privilege = 'write' +where privilege = 'forum_write'; + +update acs_permissions +set privilege = 'create' +where privilege = 'forum_create'; + +update acs_permissions +set privilege = 'delete' +where privilege = 'forum_delete'; + +-- As best as we can tell this is never used even though it's granted +-- by dotlrn-forums. + +delete from acs_permissions where privilege = 'forum_post'; + +begin + acs_privilege.remove_child('read','forum_read'); + acs_privilege.remove_child('create','forum_create'); + acs_privilege.remove_child('write','forum_write'); + acs_privilege.remove_child('delete','forum_delete'); + acs_privilege.remove_child('forum_moderate','forum_read'); + acs_privilege.remove_child('forum_moderate','forum_post'); + acs_privilege.remove_child('forum_write','forum_read'); + acs_privilege.remove_child('forum_write','forum_post'); + + acs_privilege.drop_privilege('forum_read'); + acs_privilege.drop_privilege('forum_create'); + acs_privilege.drop_privilege('forum_write'); + acs_privilege.drop_privilege('forum_post'); + acs_privilege.drop_privilege('forum_delete'); +end; +/ +show errors; Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.1d1-1.1d2.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.1d1-1.1d2.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.1d1-1.1d2.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,2 @@ +@@ ../forums-messages-package-create.sql +@@ ../forums-forums-package-create.sql Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.2.0d3-1.2.0d4.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.2.0d3-1.2.0d4.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.2.0d3-1.2.0d4.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,12 @@ +-- +-- packages/forums/sql/oracle/upgrade/upgrade-1.2.0d3-1.2.0d4.sql +-- +-- @author Deds Castillo (deds@i-manila.com.ph) +-- @creation-date 2006-05-10 +-- @arch-tag: 0584c03b-94d4-4356-93bd-593b737805a2 +-- @cvs-id $Id$ +-- + +-- increase charter to 4000 chars + +alter table forums_forums modify charter varchar(4000); Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.2.0d4-1.3d1.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.2.0d4-1.3d1.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.2.0d4-1.3d1.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,11 @@ +-- Update the package ids for projects +declare + cursor ct is + select package_id, forum_id from forums_forums; +begin + for v_ct in ct loop + update acs_objects set package_id = v_ct.package_id where object_id = v_ct.forum_id; + end loop; +end; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.2d1-1.2d2.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.2d1-1.2d2.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.2d1-1.2d2.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,408 @@ +-- @author Jeff Davis davis@xarg.net +-- +-- bug 1807 last_poster rather than first poster should be shown in forums index page +-- add a last_poster to support this and update triggers to support it. + +alter table forums_messages add last_poster integer + constraint forums_mess_last_poster_fk + references users(user_id); + +-- Now populate the new column +update forums_messages +set last_poster = (select fm1.user_id +from forums_messages fm1 +where fm1.message_id = (select max(fm2.message_id) + from forums_messages fm2 + connect by prior fm2.message_id=fm2.parent_id + start with fm2.message_id = forums_messages.message_id)) +where forums_messages.parent_id is null; + +create or replace view forums_messages_approved +as + select * + from forums_messages + where state = 'approved'; + +create or replace view forums_messages_pending +as + select * + from forums_messages + where state= 'pending'; + + + +-- +-- Replace the procs which manipulate state and new message to save last_poster. +-- + +create or replace package forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + format in forums_messages.format%TYPE default 'text/plain', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ); + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ); + + procedure del ( + message_id in forums_messages.message_id%TYPE + ); + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ); + + procedure set_state( + message_id in forums_messages.message_id%TYPE, + state in forums_messages.state%TYPE + ); + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar; + +end forums_message; +/ +show errors + +create or replace package body forums_message +as + + function new ( + message_id in forums_messages.message_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_message', + forum_id in forums_messages.forum_id%TYPE, + subject in forums_messages.subject%TYPE, + content in varchar, + format in forums_messages.format%TYPE default 'text/plain', + user_id in forums_messages.user_id%TYPE, + posting_date in forums_messages.posting_date%TYPE default sysdate, + state in forums_messages.state%TYPE default null, + parent_id in forums_messages.parent_id%TYPE default null, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_messages.message_id%TYPE + is + v_message_id acs_objects.object_id%TYPE; + v_package_id acs_objects.package_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + begin + select package_id into v_package_id from forums_forums where forum_id = new.forum_id; + + v_message_id := acs_object.new( + object_id => message_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, forum_id), + title => subject, + package_id => v_package_id + ); + + if state is null + then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id= new.forum_id; + + if v_forum_policy = 'moderated' then + v_state := 'pending'; + else + v_state := 'approved'; + end if; + else + v_state := state; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, format, user_id, posting_date, last_child_post, parent_id, state, last_poster) + values + (v_message_id, forum_id, subject, content, format, user_id, posting_date, posting_date, parent_id, v_state, user_id); + + select tree_sortkey into v_sortkey + from forums_messages + where message_id = v_message_id; + + update forums_forums + set last_post = forums_message.new.posting_date + where forum_id = forums_message.new.forum_id; + + -- DRB: Can't use root_message_id() here because it triggers a "mutating table" error + + if parent_id is null then + if v_state = 'approved' then + update forums_forums + set thread_count = thread_count + 1, + approved_thread_count = approved_thread_count + 1 + where forum_id = forums_message.new.forum_id; + else + update forums_forums + set thread_count = thread_count + 1 + where forum_id=forums_message.new.forum_id; + end if; + else + if v_state = 'approved' then + update forums_messages + set approved_reply_count = approved_reply_count + 1, + reply_count = reply_count + 1, + last_poster = forums_message.new.user_id, + last_child_post = forums_message.new.posting_date + where forum_id = forums_message.new.forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + else + update forums_messages + set reply_count = reply_count + 1 + where forum_id = forums_message.new.forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + end if; + end if; + + return v_message_id; + + end new; + + function root_message_id ( + message_id in forums_messages.message_id%TYPE + ) return forums_messages.message_id%TYPE + is + v_message_id forums_messages.message_id%TYPE; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = root_message_id.message_id; + + select message_id + into v_message_id + from forums_messages + where forum_id = v_forum_id + and tree_sortkey = tree.ancestor_key(v_sortkey, 1); + + return v_message_id; + end root_message_id; + + procedure thread_open ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_open.message_id; + + update forums_messages + set open_p = 't' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 't' + where message_id = thread_open.message_id; + end thread_open; + + procedure thread_close ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = thread_close.message_id; + + update forums_messages + set open_p = 'f' + where tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = 'f' + where message_id = thread_close.message_id; + end thread_close; + + procedure del ( + message_id in forums_messages.message_id%TYPE + ) + is + v_cur forums_messages%ROWTYPE; + begin + + -- Maintain the forum thread counts + + select * into v_cur + from forums_messages + where message_id = forums_message.del.message_id; + + if v_cur.parent_id is null then + if v_cur.state = 'approved' then + update forums_forums + set thread_count = thread_count - 1, + approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + else + update forums_forums + set thread_count = thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + elsif v_cur.state = 'approved' then + update forums_messages + set approved_reply_count = approved_reply_count - 1, + reply_count = reply_count - 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + else + update forums_messages + set reply_count = reply_count - 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + end if; + + acs_object.del(message_id); + + end del; + + procedure delete_thread ( + message_id in forums_messages.message_id%TYPE + ) + is + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_message forums_messages%ROWTYPE; + begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = delete_thread.message_id; + + -- if it's already deleted + if SQL%NOTFOUND then + return; + end if; + + -- delete all children + -- order by tree_sortkey desc to guarantee + -- that we never delete a parent before its child + -- sortkeys are beautiful + for v_message in (select * + from forums_messages + where forum_id = v_forum_id + and tree_sortkey between tree.left(v_sortkey) and tree.right(v_sortkey) + order by tree_sortkey desc) + loop + forums_message.del(v_message.message_id); + end loop; + + -- delete the message itself + forums_message.del(delete_thread.message_id); + end delete_thread; + + function name ( + message_id in forums_messages.message_id%TYPE + ) return varchar + is + v_name forums_messages.subject%TYPE; + begin + select subject + into v_name + from forums_messages + where message_id = forums_message.name.message_id; + + return v_name; + end name; + + procedure set_state( + message_id in forums_messages.message_id%TYPE, + state in forums_messages.state%TYPE + ) + is + v_cur forums_messages%ROWTYPE; + v_last_child_post forums_messages.last_child_post%TYPE; + begin + + select * into v_cur + from forums_messages + where message_id = forums_message.set_state.message_id; + + if v_cur.parent_id is null then + if state = 'approved' and v_cur.state <> 'approved' then + update forums_forums + set approved_thread_count = approved_thread_count + 1 + where forum_id=v_cur.forum_id; + elsif state <> 'approved' and v_cur.state = 'approved' then + update forums_forums + set approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + else + if state = 'approved' and v_cur.state <> 'approved' then + select last_child_post into v_last_child_post + from forums_messages + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + if v_cur.posting_date > v_last_child_post then + update forums_messages + set approved_reply_count = approved_reply_count + 1, + last_poster = v_cur.user_id, + last_child_post = v_cur.posting_date + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + else + update forums_messages + set approved_reply_count = approved_reply_count + 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + end if; + elsif state <> 'approved' and v_cur.state = 'approved' then + update forums_messages + set approved_reply_count = approved_reply_count - 1 + where forum_id = v_cur.forum_id + and tree_sortkey = tree.ancestor_key(v_cur.tree_sortkey, 1); + end if; + end if; + + update forums_messages + set state = forums_message.set_state.state + where message_id = forums_message.set_state.message_id; + + end set_state; + +end forums_message; +/ +show errors + Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.3d3-1.3d4.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.3d3-1.3d4.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.3d3-1.3d4.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,96 @@ +-- Make sure that forums actually have the package_id set. +update acs_objects set package_id = context_id where object_type = 'forums_forum'; + + +create or replace package forums_forum +as + + function new ( + forum_id in forums_forums.forum_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_forum', + name in forums_forums.name%TYPE, + charter in forums_forums.charter%TYPE default null, + presentation_type in forums_forums.presentation_type%TYPE, + posting_policy in forums_forums.posting_policy%TYPE, + package_id in forums_forums.package_id%TYPE, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_forums.forum_id%TYPE; + + function name ( + forum_id in forums_forums.forum_id%TYPE + ) return varchar; + + procedure del ( + forum_id in forums_forums.forum_id%TYPE + ); + +end forums_forum; +/ +show errors + +create or replace package body forums_forum +as + + function new ( + forum_id in forums_forums.forum_id%TYPE default null, + object_type in acs_objects.object_type%TYPE default 'forums_forum', + name in forums_forums.name%TYPE, + charter in forums_forums.charter%TYPE default null, + presentation_type in forums_forums.presentation_type%TYPE, + posting_policy in forums_forums.posting_policy%TYPE, + package_id in forums_forums.package_id%TYPE, + creation_date in acs_objects.creation_date%TYPE default sysdate, + creation_user in acs_objects.creation_user%TYPE, + creation_ip in acs_objects.creation_ip%TYPE, + context_id in acs_objects.context_id%TYPE default null + ) return forums_forums.forum_id%TYPE + is + v_forum_id forums_forums.forum_id%TYPE; + begin + v_forum_id := acs_object.new( + object_id => forum_id, + object_type => object_type, + creation_date => creation_date, + creation_user => creation_user, + creation_ip => creation_ip, + context_id => nvl(context_id, package_id), + package_id => forums_forum.new.package_id, + title => name + ); + + insert into forums_forums + (forum_id, name, charter, presentation_type, posting_policy, package_id) + values + (v_forum_id, name, charter, presentation_type, posting_policy, package_id); + + return v_forum_id; + end new; + + function name ( + forum_id in forums_forums.forum_id%TYPE + ) return varchar + is + v_name forums_forums.name%TYPE; + begin + select name + into v_name + from forums_forums + where forum_id = name.forum_id; + + return v_name; + end name; + + procedure del ( + forum_id in forums_forums.forum_id%TYPE + ) + is + begin + acs_object.del(forum_id); + end del; + +end forums_forum; +/ +show errors Index: dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.3d5-1.3d6.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.3d5-1.3d6.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/oracle/upgrade/upgrade-1.3d5-1.3d6.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,2 @@ +@forums-reading-info-create.sql +@forums-reading-info-package-create.sql \ No newline at end of file Index: dotlrn_packages/packages/forums/sql/postgresql/forums-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,31 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert's UBB forums. Thanks Orchard Labs. +-- + +-- The basic forum constructs +\i forums-forums-create.sql +\i forums-forums-package-create.sql + +-- The messages +\i forums-messages-create.sql +\i forums-messages-package-create.sql + +-- tree stuff +\i forums-tree-create.sql + +-- notifications +\i forums-notifications-init.sql + +-- Search +\i forums-sc-create.sql + +-- Reading info +\i forums-reading-info-create.sql + Index: dotlrn_packages/packages/forums/sql/postgresql/forums-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,29 @@ +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert's UBB forums. Thanks Orchard Labs. +-- + +-- Reading info +\i forums-reading-info-drop.sql + +-- Search +\i forums-sc-drop.sql + +-- notifications +\i forums-notifications-sanitize.sql + +-- tree stuff +\i forums-tree-drop.sql + +-- the messages +\i forums-messages-package-drop.sql +\i forums-messages-drop.sql + +-- The basic forum constructs +\i forums-forums-package-drop.sql +\i forums-forums-drop.sql Index: dotlrn_packages/packages/forums/sql/postgresql/forums-forums-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-forums-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-forums-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,101 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs. +-- + +-- privileges +begin; + -- The standard privilege 'admin' on a package allows a user to + -- create forums (enforced by URL). + -- The standard privilege 'create' on a forum allows a user to + -- create new threads. + -- The standard privilege 'write' on a message allows a user to + -- post a follow up message. + + -- forum_moderate lets us grant moderation without granting full admin + select acs_privilege__create_privilege('forum_moderate',null,null); + select acs_privilege__add_child('admin','forum_moderate'); + select acs_privilege__add_child('forum_moderate','create'); + select acs_privilege__add_child('forum_moderate','delete'); + select acs_privilege__add_child('forum_moderate','read'); + select acs_privilege__add_child('forum_moderate','write'); + + --return null; +end; + +create table forums_forums ( + forum_id integer + constraint forums_forum_id_nn + not null + constraint forums_forum_id_fk + references acs_objects (object_id) + constraint forums_forum_id_pk + primary key, + name varchar(200) + constraint forums_name_nn + not null, + charter varchar(4000), + presentation_type varchar(100) + constraint forums_presentation_type_nn + not null + constraint forums_presentation_type_ck + check (presentation_type in ('flat','threaded')), + posting_policy varchar(100) + constraint forums_posting_policy_nn + not null + constraint forums_posting_policy_ck + check (posting_policy in ('open','moderated','closed')), + max_child_sortkey varbit, + enabled_p char(1) + default 't' + constraint forums_enabled_p_nn + not null + constraint forums_enabled_p_ck + check (enabled_p in ('t','f')), + package_id integer + constraint forums_package_id_nn + not null, + thread_count integer default 0, + approved_thread_count integer default 0, + forums_forums integer default 0, + last_post timestamptz +); + +CREATE INDEX forums_forums_pkg_enable_idx + ON forums_forums + USING btree + (package_id, enabled_p); + +create view forums_forums_enabled +as + select * + from forums_forums + where enabled_p = 't'; + +create function inline_0 () +returns integer as' +begin + perform acs_object_type__create_type( + ''forums_forum'', + ''Forums Forum'', + ''Forums Forums'', + ''acs_object'', + ''forums_forums'', + ''forum_id'', + ''forums_forum'', + ''f'', + null, + ''forums_forum__name'' + ); + + return null; +end;' language 'plpgsql'; + +select inline_0(); +drop function inline_0(); Index: dotlrn_packages/packages/forums/sql/postgresql/forums-forums-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-forums-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-forums-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,49 @@ +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs. +-- + +-- privileges + +create function inline_0 () +returns integer as ' +begin + + delete from acs_permissions where privilege in (''forum_moderate''); + + -- remove children + perform acs_privilege__remove_child(''admin'',''forum_moderate''); + perform acs_privilege__remove_child(''forum_moderate'',''create''); + perform acs_privilege__remove_child(''forum_moderate'',''delete''); + perform acs_privilege__remove_child(''forum_moderate'',''read''); + perform acs_privilege__remove_child(''forum_moderate'',''write''); + + perform acs_privilege__drop_privilege(''forum_moderate''); + + return null; +end;' language 'plpgsql'; + +select inline_0(); +drop function inline_0 (); + +DROP INDEX forums_forums_pkg_enable_idx; +drop view forums_forums_enabled; +drop table forums_forums; + +create function inline_0 () +returns integer as ' +begin + perform acs_object_type__drop_type ( + ''forums_forum'', ''f'' + ); + + return null; +end;' language 'plpgsql'; + +select inline_0(); +drop function inline_0 (); Index: dotlrn_packages/packages/forums/sql/postgresql/forums-forums-package-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-forums-package-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-forums-package-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,74 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- The Package +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs! +-- + +select define_function_args('forums_forum__new','forum_id,object_type;forums_forum,name,charter,presentation_type,posting_policy,package_id,creation_date,creation_user,creation_ip,context_id'); + +create or replace function forums_forum__new (integer,varchar,varchar,varchar,varchar,varchar,integer,timestamptz,integer,varchar,integer) +returns integer as ' +declare + p_forum_id alias for $1; + p_object_type alias for $2; + p_name alias for $3; + p_charter alias for $4; + p_presentation_type alias for $5; + p_posting_policy alias for $6; + p_package_id alias for $7; + p_creation_date alias for $8; + p_creation_user alias for $9; + p_creation_ip alias for $10; + p_context_id alias for $11; + v_forum_id integer; +begin + v_forum_id:= acs_object__new( + p_forum_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + coalesce(p_context_id, p_package_id), + ''t'', + p_name, + p_package_id + ); + + insert into forums_forums + (forum_id, name, charter, presentation_type, posting_policy, package_id) + values + (v_forum_id, p_name, p_charter, p_presentation_type, p_posting_policy, p_package_id); + + return v_forum_id; +end; +' language 'plpgsql'; + +select define_function_args('forums_forum__name','forum_id'); + +create or replace function forums_forum__name(integer) +returns varchar as ' +declare + p_forum_id alias for $1; +begin + return name from forums_forums where forum_id = p_forum_id; +end; +' language 'plpgsql'; + +select define_function_args('forums_forum__delete','forum_id'); + +create or replace function forums_forum__delete(integer) +returns integer as ' +declare + p_forum_id alias for $1; +begin + perform acs_object__delete(p_forum_id); + return 0; +end; +' language 'plpgsql'; Index: dotlrn_packages/packages/forums/sql/postgresql/forums-forums-package-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-forums-package-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-forums-package-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,18 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- The Package +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs! +-- + +drop function forums_forum__new (integer,varchar,varchar,varchar,varchar,varchar,integer,timestamptz,integer,varchar,integer); + +drop function forums_forum__name(integer); + +drop function forums_forum__delete(integer); Index: dotlrn_packages/packages/forums/sql/postgresql/forums-messages-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-messages-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-messages-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,102 @@ +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert. Thanks Orchard Labs! +-- + +create table forums_messages ( + message_id integer + constraint forums_message_id_fk + references acs_objects (object_id) + constraint forums_messages_pk + primary key, + forum_id integer + constraint forums_mess_forum_id_fk + references forums_forums (forum_id), + subject varchar(200), + content text, + user_id integer + constraint forums_mess_user_id_fk + references users(user_id) + constraint forums_mess_user_id_nn + not null, + posting_date timestamptz + default current_timestamp + constraint forum_mess_post_date_nn + not null, + state varchar(100) + constraint forum_mess_state_ck + check (state in ('pending','approved','rejected')), + format varchar(30) + default 'text/plain', + -- Hierarchy of messages + parent_id integer + constraint forum_mess_parent_id_fk + references forums_messages (message_id), + open_p char(1) + default 't' + constraint forum_mess_open_p_nn + not null + constraint forum_mess_open_p_ck + check (open_p in ('t','f')), + tree_sortkey varbit, + max_child_sortkey varbit, + last_child_post timestamptz, + reply_count integer + constraint forums_mess_reply_count_ck + check (reply_count >= 0) default 0, + approved_reply_count integer + constraint forums_mess_app_rep_count_ck + check (approved_reply_count >= 0) default 0, + last_poster integer + constraint forums_mess_last_poster_fk + references users(user_id), + constraint forums_mess_sk_forum_un + unique (tree_sortkey, forum_id) +); + +-- We do a some big queries on forum_id (thread count on index.tcl) so create a second index +-- ordered so it's useful for them +create unique index forums_mess_forum_sk_un on forums_messages(forum_id, tree_sortkey); +-- Need these two for RI checks +create index forums_messages_user_id_idx on forums_messages(user_id); +create index forums_messages_parent_id_idx on forums_messages(parent_id); +create index forum_messages_date_idx on forums_messages (forum_id, posting_date); + +create or replace view forums_messages_approved +as + select * + from forums_messages + where state = 'approved'; + +create or replace view forums_messages_pending +as + select * + from forums_messages + where state= 'pending'; + +create or replace function inline_0 () +returns integer as ' +begin + perform acs_object_type__create_type( + ''forums_message'', + ''Forums Message'', + ''Forums Messages'', + ''acs_object'', + ''forums_messages'', + ''message_id'', + ''forums_message'', + ''f'', + null, + ''forums_message__name'' + ); + + return null; +end;' language 'plpgsql'; + +select inline_0(); +drop function inline_0 (); Index: dotlrn_packages/packages/forums/sql/postgresql/forums-messages-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-messages-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-messages-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,26 @@ +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert. Thanks Orchard Labs! +-- + +drop view forums_messages_pending; +drop view forums_messages_approved; +drop table forums_messages; + +create function inline_0 () +returns integer as ' +begin + perform acs_object_type__drop_type ( + ''forums_message'', ''f'' + ); + + return null; +end;' language 'plpgsql'; + +select inline_0(); +drop function inline_0 (); Index: dotlrn_packages/packages/forums/sql/postgresql/forums-messages-package-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-messages-package-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-messages-package-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,330 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- @cvs-id $Id$ +-- +-- The Package for Messages +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs! +-- + +select define_function_args ('forums_message__new', 'message_id,object_type;forums_message,forum_id,subject,content,format,user_id,state,parent_id,creation_date,creation_user,creation_ip,context_id'); + +-- Get rid of the old version so we'll throw an error if the admin forgets to reboot +-- OpenACS after the upgrade (package_instantiate_object caches param lists) +create or replace function forums_message__new (integer,varchar,integer,varchar,text,char,integer,varchar,integer,timestamptz,integer,varchar,integer) +returns integer as ' +declare + p_message_id alias for $1; + p_object_type alias for $2; + p_forum_id alias for $3; + p_subject alias for $4; + p_content alias for $5; + p_format alias for $6; + p_user_id alias for $7; + p_state alias for $8; + p_parent_id alias for $9; + p_creation_date alias for $10; + p_creation_user alias for $11; + p_creation_ip alias for $12; + p_context_id alias for $13; + v_message_id integer; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + v_posting_date forums_messages.posting_date%TYPE; + v_package_id acs_objects.package_id%TYPE; +begin + + select package_id into v_package_id from forums_forums where forum_id = p_forum_id; + + if v_package_id is null then + raise exception ''forums_message__new: forum_id % not found'', p_forum_id; + end if; + + v_message_id := acs_object__new( + p_message_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + coalesce(p_context_id, p_forum_id), + ''t'', + p_subject, + v_package_id + ); + + if p_state is null then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id = p_forum_id; + + if v_forum_policy = ''moderated'' + then v_state := ''pending''; + else v_state := ''approved''; + end if; + else + v_state := p_state; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, format, user_id, parent_id, state, last_child_post, last_poster) + values + (v_message_id, p_forum_id, p_subject, p_content, p_format, p_user_id, p_parent_id, + v_state, current_timestamp, p_user_id); + + update forums_forums + set last_post = current_timestamp + where forum_id = p_forum_id; + + if p_parent_id is null then + if v_state = ''approved'' then + update forums_forums + set thread_count = thread_count + 1, + approved_thread_count = approved_thread_count + 1 + where forum_id=p_forum_id; + else + update forums_forums + set thread_count = thread_count + 1 + where forum_id=p_forum_id; + end if; + else + if v_state = ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count + 1, + reply_count = reply_count + 1, + last_poster = p_user_id, + last_child_post = current_timestamp + where message_id = forums_message__root_message_id(v_message_id); + else + -- dont update last_poster, last_child_post when not approved + update forums_messages + set reply_count = reply_count + 1 + where message_id = forums_message__root_message_id(v_message_id); + end if; + end if; + + return v_message_id; + +end;' language 'plpgsql'; + +select define_function_args ('forums_message__root_message_id', 'message_id'); + +create or replace function forums_message__root_message_id (integer) +returns integer as ' +declare + p_message_id alias for $1; + v_message_id forums_messages.message_id%TYPE; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; +begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = p_message_id; + + select message_id + into v_message_id + from forums_messages + where forum_id = v_forum_id + and tree_sortkey = tree_ancestor_key(v_sortkey, 1); + + return v_message_id; +end; +' language 'plpgsql' stable strict; + +select define_function_args ('forums_message__thread_open', 'message_id'); + +create or replace function forums_message__thread_open (integer) +returns integer as ' +declare + p_message_id alias for $1; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; +begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = p_message_id; + + update forums_messages + set open_p = ''t'' + where tree_sortkey between tree_left(v_sortkey) and tree_right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = ''t'' + where message_id = p_message_id; + + return 0; +end; +' language 'plpgsql'; + +select define_function_args ('forums_message__thread_close', 'message_id'); + +create or replace function forums_message__thread_close (integer) +returns integer as ' +declare + p_message_id alias for $1; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; +begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = p_message_id; + + update forums_messages + set open_p = ''f'' + where tree_sortkey between tree_left(v_sortkey) and tree_right(v_sortkey) + and forum_id = v_forum_id; + + update forums_messages + set open_p = ''f'' + where message_id = p_message_id; + + return 0; +end; +' language 'plpgsql'; + +select define_function_args ('forums_message__set_state', 'message_id,state'); + +create or replace function forums_message__set_state(integer,varchar) returns integer as ' +declare + p_message_id alias for $1; + p_state alias for $2; + v_cur record; +begin + + select into v_cur * + from forums_messages + where message_id = p_message_id; + + if v_cur.parent_id is null then + if p_state = ''approved'' and v_cur.state <> ''approved'' then + update forums_forums + set approved_thread_count = approved_thread_count + 1 + where forum_id=v_cur.forum_id; + elsif p_state <> ''approved'' and v_cur.state = ''approved'' then + update forums_forums + set approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + else + if p_state = ''approved'' and v_cur.state <> ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count + 1, + last_poster = (case when v_cur.posting_date > last_child_post then v_cur.user_id else last_poster end), + last_child_post = (case when v_cur.posting_date > last_child_post then v_cur.posting_date else last_child_post end) + where message_id = forums_message__root_message_id(v_cur.message_id); + elsif p_state <> ''approved'' and v_cur.state = ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count - 1 + where message_id = forums_message__root_message_id(v_cur.message_id); + end if; + end if; + + update forums_messages + set state = p_state + where message_id = p_message_id; + + return 0; + +end;' language 'plpgsql'; + +select define_function_args ('forums_message__delete', 'message_id'); + +create or replace function forums_message__delete (integer) +returns integer as ' +declare + p_message_id alias for $1; + v_cur record; +begin + + -- Maintain the forum thread counts + + select into v_cur * + from forums_messages + where message_id = p_message_id; + + if v_cur.parent_id is null then + if v_cur.state = ''approved'' then + update forums_forums + set thread_count = thread_count - 1, + approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + else + update forums_forums + set thread_count = thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + elsif v_cur.state = ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count - 1, + reply_count = reply_count - 1 + where message_id = forums_message__root_message_id(v_cur.message_id); + else + update forums_messages + set reply_count = reply_count - 1 + where message_id = forums_message__root_message_id(v_cur.message_id); + end if; + + perform acs_object__delete(p_message_id); + return 0; +end;' language 'plpgsql'; + +select define_function_args ('forums_message__delete_thread', 'message_id'); + +create or replace function forums_message__delete_thread (integer) +returns integer as ' +declare + p_message_id alias for $1; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_message RECORD; +begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = p_message_id; + + -- if it is already deleted + if v_forum_id is null + then return 0; + end if; + + -- delete all children + -- order by tree_sortkey desc to guarantee + -- that we never delete a parent before its child + -- sortkeys are beautiful + for v_message in select * + from forums_messages + where forum_id = v_forum_id + and tree_sortkey between tree_left(v_sortkey) and tree_right(v_sortkey) + order by tree_sortkey desc + loop + -- Avoid the count bookkeeping down in forums_message__delete + perform forums_message__delete(v_message.message_id); + end loop; + + -- delete the message itself + perform forums_message__delete(p_message_id); + + return 0; +end;' language 'plpgsql'; + + +select define_function_args('forums_message__name','message_id'); + +create or replace function forums_message__name (integer) +returns varchar as ' +declare + p_message_id alias for $1; +begin + return subject from forums_messages where message_id = p_message_id; +end; +' language 'plpgsql'; Index: dotlrn_packages/packages/forums/sql/postgresql/forums-messages-package-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-messages-package-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-messages-package-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,26 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- The Package for Messages +-- +-- This code is newly concocted by Ben, but with heavy concepts and heavy code +-- chunks lifted from Gilbert. Thanks Orchard Labs! +-- + +drop function forums_message__new (integer,varchar,integer,varchar,text,char,integer,varchar,integer,timestamptz,integer,varchar,integer); + +drop function forums_message__root_message_id (integer); + +drop function forums_message__thread_open (integer); + +drop function forums_message__thread_close (integer); + +drop function forums_message__delete (integer); + +drop function forums_message__delete_thread (integer); + +drop function forums_message__name (integer); Index: dotlrn_packages/packages/forums/sql/postgresql/forums-notifications-init.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-notifications-init.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-notifications-init.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,126 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert's UBB forums. Thanks Orchard Labs. +-- + +-- the integration with Notifications + +create function inline_0() returns integer as ' +declare + impl_id integer; + v_foo integer; +begin + -- the notification type impl + impl_id := acs_sc_impl__new ( + ''NotificationType'', + ''forums_forum_notif_type'', + ''forums'' + ); + + v_foo := acs_sc_impl_alias__new ( + ''NotificationType'', + ''forums_forum_notif_type'', + ''GetURL'', + ''forum::notification::get_url'', + ''TCL'' + ); + + v_foo := acs_sc_impl_alias__new ( + ''NotificationType'', + ''forums_forum_notif_type'', + ''ProcessReply'', + ''forum::notification::process_reply'', + ''TCL'' + ); + + PERFORM acs_sc_binding__new ( + ''NotificationType'', + ''forums_forum_notif_type'' + ); + + v_foo:= notification_type__new ( + NULL, + impl_id, + ''forums_forum_notif'', + ''Forum Notification'', + ''Notifications for Entire Forums'', + now(), + NULL, + NULL, + NULL + ); + + -- enable the various intervals and delivery methods + insert into notification_types_intervals + (type_id, interval_id) + select v_foo, interval_id + from notification_intervals where name in (''instant'',''hourly'',''daily''); + + insert into notification_types_del_methods + (type_id, delivery_method_id) + select v_foo, delivery_method_id + from notification_delivery_methods where short_name in (''email''); + + -- the notification type impl + impl_id := acs_sc_impl__new ( + ''NotificationType'', + ''forums_message_notif_type'', + ''forums'' + ); + + v_foo := acs_sc_impl_alias__new ( + ''NotificationType'', + ''forums_message_notif_type'', + ''GetURL'', + ''forum::notification::get_url'', + ''TCL'' + ); + + v_foo := acs_sc_impl_alias__new ( + ''NotificationType'', + ''forums_message_notif_type'', + ''ProcessReply'', + ''forum::notification::process_reply'', + ''TCL'' + ); + + PERFORM acs_sc_binding__new ( + ''NotificationType'', + ''forums_message_notif_type'' + ); + + v_foo:= notification_type__new ( + NULL, + impl_id, + ''forums_message_notif'', + ''Message Notification'', + ''Notifications for Message Thread'', + now(), + NULL, + NULL, + NULL + ); + + -- enable the various intervals and delivery methods + insert into notification_types_intervals + (type_id, interval_id) + select v_foo, interval_id + from notification_intervals where name in (''instant'',''hourly'',''daily''); + + insert into notification_types_del_methods + (type_id, delivery_method_id) + select v_foo, delivery_method_id + from notification_delivery_methods where short_name in (''email''); + + return (0); +end; +' language 'plpgsql'; + +select inline_0(); +drop function inline_0(); \ No newline at end of file Index: dotlrn_packages/packages/forums/sql/postgresql/forums-notifications-sanitize.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-notifications-sanitize.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-notifications-sanitize.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,136 @@ +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert's UBB forums. Thanks Orchard Labs. +-- + +create function inline_0 () +returns integer as ' +declare + row record; +begin + for row in select nt.type_id + from notification_types nt + where nt.short_name in (''forums_forum_notif'', ''forums_message_notif'') + loop + perform notification_type__delete(row.type_id); + end loop; + + return null; +end;' language 'plpgsql'; + +select inline_0(); +drop function inline_0 (); + +-- +-- Service contract drop stuff was missing - Roberto Mello +-- + +create function inline_0() returns integer as ' +declare + impl_id integer; + v_foo integer; +begin + + -- the notification type impl + impl_id := acs_sc_impl__get_id ( + ''NotificationType'', -- impl_contract_name + ''forums_forum_notif_type'' -- impl_name + ); + + PERFORM acs_sc_binding__delete ( + ''NotificationType'', + ''forums_forum_notif_type'' + ); + + v_foo := acs_sc_impl_alias__delete ( + ''NotificationType'', -- impl_contract_name + ''forums_forum_notif_type'', -- impl_name + ''GetURL'' -- impl_operation_name + ); + + v_foo := acs_sc_impl_alias__delete ( + ''NotificationType'', -- impl_contract_name + ''forums_forum_notif_type'', -- impl_name + ''ProcessReply'' -- impl_operation_name + ); + + select into v_foo type_id + from notification_types + where sc_impl_id = impl_id + and short_name = ''forums_forum_notif''; + + perform notification_type__delete (v_foo); + + delete from notification_types_intervals + where type_id = v_foo + and interval_id in ( + select interval_id + from notification_intervals + where name in (''instant'',''hourly'',''daily'') + ); + + delete from notification_types_del_methods + where type_id = v_foo + and delivery_method_id in ( + select delivery_method_id + from notification_delivery_methods + where short_name in (''email'') + ); + + -- the notification type impl + impl_id := acs_sc_impl__get_id ( + ''NotificationType'', + ''forums_message_notif_type'' + ); + + PERFORM acs_sc_binding__delete ( + ''NotificationType'', + ''forums_message_notif_type'' + ); + + v_foo := acs_sc_impl_alias__delete ( + ''NotificationType'', + ''forums_message_notif_type'', + ''GetURL'' + ); + + v_foo := acs_sc_impl_alias__delete ( + ''NotificationType'', + ''forums_message_notif_type'', + ''ProcessReply'' + ); + + select into v_foo type_id + from notification_types + where sc_impl_id = impl_id + and short_name = ''forums_message_notif''; + + perform notification_type__delete (v_foo); + + delete from notification_types_intervals + where type_id = v_foo + and interval_id in ( + select interval_id + from notification_intervals + where name in (''instant'',''hourly'',''daily'') + ); + + delete from notification_types_del_methods + where type_id = v_foo + and delivery_method_id in ( + select delivery_method_id + from notification_delivery_methods + where short_name in (''email'') + ); + + return (0); +end; +' language 'plpgsql'; + +select inline_0(); +drop function inline_0(); Index: dotlrn_packages/packages/forums/sql/postgresql/forums-reading-info-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-reading-info-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-reading-info-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,226 @@ +create table forums_reading_info ( + root_message_id integer + constraint forum_read_parent_id_fk + references forums_messages (message_id) + on delete cascade, + user_id integer + constraint forums_read_user_id_fk + references users(user_id) + constraint forums_read_user_id_nn + not null, + reading_date timestamp + default current_timestamp + constraint forum_read_datetime_nn + not null, + constraint forums_reading_info_pk primary key (root_message_id,user_id) +); + +create index forums_reading_info_user_index on forums_reading_info (user_id); +create index forums_reading_info_forum_message_index on forums_reading_info (root_message_id); + +create table forums_reading_info_user ( + forum_id integer + constraint forums_read_forum_id_fk + references forums_forums (forum_id) on delete cascade, + user_id integer + constraint forums_read_user_id_fk + references users(user_id) on delete cascade + constraint forums_read_user_id_nn + not null, + threads_read integer + default 0 + not null, + constraint forums_reading_info_user_pk primary key (forum_id,user_id) +); + + +-- remove reading_info for thread (upon new message, upon message deletion, or state change) +create or replace function forums_reading_info__remove_msg (integer) +returns integer as ' +declare + p_message_id alias for $1; + v_forum_id integer; + v_reading RECORD; +begin + select forum_id from forums_messages where message_id = p_message_id into v_forum_id; + for v_reading in select user_id + from forums_reading_info + where root_message_id = p_message_id + loop + delete from forums_reading_info + where root_message_id = p_message_id and + user_id = v_reading.user_id; + UPDATE forums_reading_info_user SET threads_read=threads_read-1 WHERE forum_id= v_forum_id and user_id = v_reading.user_id; + end loop; + + return 0; +end; +' language 'plpgsql'; + + +-- mark_all_read: +create or replace function forums_reading_info__user_add_forum (integer,integer) +returns integer as ' +declare + p_forum_id alias for $1; + p_user_id alias for $2; + v_message RECORD; + v_read_p RECORD; +begin + for v_message in select message_id + from forums_messages_approved + where forum_id = p_forum_id + and parent_id is null + loop + select into v_read_p * from forums_reading_info where user_id = p_user_id and root_message_id = v_message.message_id; + if NOT FOUND + then + insert into forums_reading_info + (root_message_id,user_id) + values + (v_message.message_id,p_user_id); + end if; + end loop; + delete from forums_reading_info_user where forum_id = p_forum_id and user_id = p_user_id; + insert into forums_reading_info_user (forum_id,user_id,threads_read) VALUES (p_forum_id,p_user_id,(select approved_thread_count from forums_forums where forum_id = p_forum_id)); + return 0; +end; +' language 'plpgsql'; + +-- mark message read for user +create or replace function forums_reading_info__user_add_msg (integer,integer) +returns integer as ' +declare + p_root_message_id alias for $1; + p_user_id alias for $2; + v_read_p RECORD; + v_forum_id integer; + v_exists boolean; +begin + select forum_id from forums_messages where message_id = p_root_message_id into v_forum_id; + select into v_read_p * from forums_reading_info where user_id = p_user_id and root_message_id = p_root_message_id; + if NOT FOUND + then + insert into forums_reading_info + (root_message_id,user_id) + values + (p_root_message_id,p_user_id); + SELECT EXISTS(SELECT 1 FROM forums_reading_info_user WHERE forum_id=v_forum_id AND user_id=p_user_id) INTO v_exists; + if v_exists = true then + UPDATE forums_reading_info_user SET threads_read=threads_read+1 WHERE forum_id=v_forum_id AND user_id=p_user_id; + else + INSERT INTO forums_reading_info_user(forum_id,user_id,threads_read) VALUES (v_forum_id,p_user_id,1); + end if; + end if; + + return 0; +end; +' language 'plpgsql'; + +-- move thread to other forum +create or replace function forums_message__move_update_reading_info (integer,integer,integer) +returns integer as ' +declare + p_message_id alias for $1; + p_old_forum_id alias for $2; + p_new_forum_id alias for $3; + v_message record; + v_users record; + v_read_p record; + v_threads integer; +begin + raise notice ''updating for message %'', p_message_id; + for v_users in select user_id from forums_reading_info where root_message_id = p_message_id + loop + raise notice ''updating for user %'', v_users.user_id; + -- down the number of threads read in old forum + update forums_reading_info_user set threads_read = threads_read - 1 + where forum_id = p_old_forum_id and user_id = v_users.user_id; + -- up the number of thread read in new forum + select count(*) into v_threads from forums_reading_info_user + where forum_id = p_new_forum_id and user_id = v_users.user_id; + if v_threads = 0 then + insert into forums_reading_info_user (forum_id,user_id,threads_read) + values (p_new_forum_id,v_users.user_id,1); + else + update forums_reading_info_user set threads_read = threads_read + 1 + where forum_id = p_new_forum_id and user_id = v_users.user_id; + end if; + end loop; + + return 1; + +end;' language 'plpgsql'; + + +-- move thread to other thread +create or replace function forums_message__move_thread_thread_update_reading_info (integer,integer, integer) +returns integer as ' +declare + p_source_message_id alias for $1; + p_source_forum_id alias for $2; + p_target_message_id alias for $3; + v_target_forum_id integer; + v_users record; +begin + select forum_id from forums_messages where message_id = p_target_message_id into v_target_forum_id; + -- for all users that have read target, but not the source, remove target_info + for v_users in select user_id from forums_reading_info fri where root_message_id = p_target_message_id and not exists(select 1 from forums_reading_info where root_message_id = p_source_message_id and user_id = fri.user_id) + loop + delete from forums_reading_info where root_message_id = p_target_message_id and user_id = v_users.user_id; + -- down the number of threads read in target forum + update forums_reading_info_user set threads_read = threads_read - 1 + where forum_id = v_target_forum_id and user_id = v_users.user_id; + end loop; + -- for all users that have read source, down the nummber of thread in source forum and remove reading info four source message since it no longer is root_message_id + for v_users in select user_id from forums_reading_info where root_message_id = p_source_message_id + loop + delete from forums_reading_info where root_message_id = p_source_message_id and user_id = v_users.user_id; + update forums_reading_info_user set threads_read = threads_read - 1 + where forum_id = p_source_forum_id and user_id = v_users.user_id; + end loop; + return 1; + +end;' language 'plpgsql'; + +-- move message to other thread +create or replace function forums_message__move_thread_update_reading_info (integer,integer,integer) +returns integer as ' +declare + p_source_message_id alias for $1; + p_source_old_root_message_id alias for $2; + p_target_message_id alias for $3; + v_target_forum_id integer; + v_users record; +begin + select forum_id from forums_messages where message_id = p_target_message_id into v_target_forum_id; + raise notice ''v_target_forum_id %'', v_target_forum_id; + -- for all users that have read target, but not the source, remove target_info + for v_users in select user_id from forums_reading_info fri where root_message_id = p_target_message_id and not exists(select 1 from forums_reading_info where root_message_id = p_source_old_root_message_id and user_id = fri.user_id) + loop + delete from forums_reading_info where root_message_id = p_target_message_id and user_id = v_users.user_id; + -- down the number of threads read in target forum + update forums_reading_info_user set threads_read = threads_read - 1 + where forum_id = v_target_forum_id and user_id = v_users.user_id; + end loop; + return 1; + +end;' language 'plpgsql'; + + +-- recount reading_info_user from reading_info +create or replace function forums_message__repair_reading_info () +returns integer as ' +declare +v_users record; +begin +delete from forums_reading_info_user; +for v_users in +select user_id,(select forum_id from forums_messages where message_id = root_message_id) as forum_id, count(root_message_id) as threads_read from forums_reading_info group by forum_id,user_id +loop +insert into forums_reading_info_user (forum_id,user_id,threads_read) +values +(v_users.forum_id,v_users.user_id,v_users.threads_read); +end loop; +return 1; +end;' language 'plpgsql'; Index: dotlrn_packages/packages/forums/sql/postgresql/forums-reading-info-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-reading-info-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-reading-info-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,22 @@ +-- +-- The Forums Package +-- +-- @author David Arroyo darroyo@innova.uned.es +-- @creation-date 01-06-2007 +-- @version $Id$ +-- +-- This is free software distributed under the terms of the GNU Public +-- License version 2 or later. Full text of the license is available from the GNU Project: +-- http://www.fsf.org/copyleft/gpl.html + +drop function forums_message__repair_reading_info (); +drop function forums_message__move_thread_update_reading_info (integer,integer,integer); +drop function forums_message__move_thread_thread_update_reading_info (integer,integer, integer); +drop function forums_message__move_update_reading_info (integer,integer,integer); +drop function forums_reading_info__user_add_msg (integer,integer); +drop function forums_reading_info__user_add_forum (integer,integer); +drop function forums_reading_info__remove_msg (integer); +drop table forums_reading_info_user; +drop index forums_reading_info_forum_message_index; +drop index forums_reading_info_user_index ; +drop table forums_reading_info; \ No newline at end of file Index: dotlrn_packages/packages/forums/sql/postgresql/forums-sc-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-sc-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-sc-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,95 @@ +-- forums service contracts for Search package +-- dave bauer +-- August 7, 2002 + +-- jcd: 2004-04-01 moved the sc create to the tcl callbacks, and added one for forum_forum objtype +-- TODO-JCD: trigger for forums_forums + +-- til: only indexing full threads. changes to child messages will be treated as +-- change to the thread. + +create or replace function forums_message_search__itrg () +returns trigger as ' +begin + if new.parent_id is null then + perform search_observer__enqueue(new.message_id,''INSERT''); + else + perform search_observer__enqueue(forums_message__root_message_id(new.parent_id),''UPDATE''); + end if; + return new; +end;' language 'plpgsql'; + +create or replace function forums_message_search__dtrg () +returns trigger as ' +declare + v_root_message_id forums_messages.message_id%TYPE; +begin + -- if the deleted msg has a parent then its an UPDATE to a thread, otherwise a DELETE. + + if old.parent_id is null then + perform search_observer__enqueue(old.message_id,''DELETE''); + else + v_root_message_id := forums_message__root_message_id(old.parent_id); + if not v_root_message_id is null then + perform search_observer__enqueue(v_root_message_id,''UPDATE''); + end if; + end if; + + return old; +end;' language 'plpgsql'; + +create or replace function forums_message_search__utrg () +returns trigger as ' +begin + perform search_observer__enqueue(forums_message__root_message_id (old.message_id),''UPDATE''); + return old; +end;' language 'plpgsql'; + + +create trigger forums_message_search__itrg after insert on forums_messages +for each row execute procedure forums_message_search__itrg (); + +create trigger forums_message_search__dtrg after delete on forums_messages +for each row execute procedure forums_message_search__dtrg (); + +create trigger forums_message_search__utrg after update on forums_messages +for each row execute procedure forums_message_search__utrg (); + + + +-- forums_forums indexing trigger +create or replace function forums_forums_search__itrg () +returns trigger as ' +begin + perform search_observer__enqueue(new.forum_id,''INSERT''); + + return new; +end;' language 'plpgsql'; + +create or replace function forums_forums_search__utrg () +returns trigger as ' +begin + perform search_observer__enqueue(new.forum_id,''UPDATE''); + + return new; +end;' language 'plpgsql'; + +create or replace function forums_forums_search__dtrg () +returns trigger as ' +begin + perform search_observer__enqueue(old.forum_id,''DELETE''); + + return old; +end;' language 'plpgsql'; + + + +create trigger forums_forums_search__itrg after insert on forums_forums +for each row execute procedure forums_forums_search__itrg (); + +create trigger forums_forums_search__utrg after update on forums_forums +for each row execute procedure forums_forums_search__utrg (); + +create trigger forums_forums_search__dtrg after delete on forums_forums +for each row execute procedure forums_forums_search__dtrg (); + Index: dotlrn_packages/packages/forums/sql/postgresql/forums-sc-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-sc-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-sc-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,24 @@ +-- /packages/news/sql/news-sc-drop.sql +-- +-- @author Robert Locke (rlocke@infiniteinfo.com) +-- @created 2001-10-23 +-- @cvs-id $Id$ +-- +-- Removes search support from news module. +-- +drop trigger forums_message_search__itrg on forums_messages; +drop trigger forums_message_search__dtrg on forums_messages; +drop trigger forums_message_search__utrg on forums_messages; + +drop function forums_message_search__itrg (); +drop function forums_message_search__dtrg (); +drop function forums_message_search__utrg (); + +drop trigger forums_forums_search__itrg on forums_forums; +drop trigger forums_forums_search__dtrg on forums_forums; +drop trigger forums_forums_search__utrg on forums_forums; + +drop function forums_forums_search__itrg (); +drop function forums_forums_search__dtrg (); +drop function forums_forums_search__utrg (); + Index: dotlrn_packages/packages/forums/sql/postgresql/forums-tree-create.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-tree-create.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-tree-create.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,62 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert. Thanks Orchard Labs! +-- + +-- +-- This is the sortkey code +-- + +create function forums_mess_insert_tr () +returns opaque as ' +declare + v_max_child_sortkey forums_forums.max_child_sortkey%TYPE; + v_parent_sortkey forums_messages.tree_sortkey%TYPE; +begin + + if new.parent_id is null + then + + select '''', max_child_sortkey + into v_parent_sortkey, v_max_child_sortkey + from forums_forums + where forum_id = new.forum_id + for update; + + v_max_child_sortkey := tree_increment_key(v_max_child_sortkey); + + update forums_forums + set max_child_sortkey = v_max_child_sortkey + where forum_id = new.forum_id; + + else + + select coalesce(tree_sortkey, ''''), max_child_sortkey + into v_parent_sortkey, v_max_child_sortkey + from forums_messages + where message_id = new.parent_id + for update; + + v_max_child_sortkey := tree_increment_key(v_max_child_sortkey); + + update forums_messages + set max_child_sortkey = v_max_child_sortkey + where message_id = new.parent_id; + + end if; + + new.tree_sortkey := v_parent_sortkey || v_max_child_sortkey; + + return new; +end;' language 'plpgsql'; + +create trigger forums_mess_insert_tr +before insert on forums_messages +for each row +execute procedure forums_mess_insert_tr(); Index: dotlrn_packages/packages/forums/sql/postgresql/forums-tree-drop.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/forums-tree-drop.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/forums-tree-drop.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,17 @@ + +-- +-- The Forums Package +-- +-- @author gwong@orchardlabs.com,ben@openforce.biz +-- @creation-date 2002-05-16 +-- +-- This code is newly concocted by Ben, but with significant concepts and code +-- lifted from Gilbert. Thanks Orchard Labs! +-- + +-- +-- This is the sortkey code +-- + +drop trigger forums_mess_insert_tr on forums_messages; +drop function forums_mess_insert_tr (); Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-0.1d-0.2d.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-0.1d-0.2d.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-0.1d-0.2d.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,173 @@ +alter table forums_forums add column last_post timestamptz; +alter table forums_messages add column last_child_post timestamptz; + +create or replace function t () returns integer as ' +declare + v_record record; + v_timestamp timestamptz; +begin + + for v_record in select forum_id + from forums_forums + loop + + select last_modified into v_timestamp + from acs_objects + where object_id = v_record.forum_id; + + update forums_forums + set last_post = v_timestamp + where forum_id = v_record.forum_id; + + end loop; + + for v_record in select message_id + from forums_messages + where parent_id is null + loop + + -- forums 0.1d did not properly set the last_modified field of the object + -- row associated with the root message of a thread, so we need to calculate + -- it here. + + select max(o.last_modified) into v_timestamp + from acs_objects o, forums_messages fm + where forums_message__root_message_id(fm.message_id) = v_record.message_id + and object_id = fm.message_id; + + update forums_messages + set last_child_post = v_timestamp + where message_id = v_record.message_id; + + end loop; + + return 1; + +end;' language 'plpgsql'; + +select t(); + +drop view forums_messages_approved; +create view forums_messages_approved +as + select * + from forums_messages + where state = 'approved'; + +drop view forums_messages_pending; +create view forums_messages_pending +as + select * + from forums_messages + where state= 'pending'; + +drop view forums_forums_enabled; +create view forums_forums_enabled +as + select * + from forums_forums + where enabled_p = 't'; + +create or replace function forums_message__new (integer,varchar,integer,varchar,text,char,integer,timestamptz,varchar,integer,timestamptz,integer,varchar,integer) +returns integer as ' +declare + p_message_id alias for $1; + p_object_type alias for $2; + p_forum_id alias for $3; + p_subject alias for $4; + p_content alias for $5; + p_html_p alias for $6; + p_user_id alias for $7; + p_posting_date alias for $8; + p_state alias for $9; + p_parent_id alias for $10; + p_creation_date alias for $11; + p_creation_user alias for $12; + p_creation_ip alias for $13; + p_context_id alias for $14; + v_message_id integer; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + v_posting_date forums_messages.posting_date%TYPE; +begin + v_message_id := acs_object__new( + p_message_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + coalesce(p_context_id, p_forum_id) + ); + + if p_state is null then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id = p_forum_id; + + if v_forum_policy = ''moderated'' + then v_state := ''pending''; + else v_state := ''approved''; + end if; + else + v_state := p_state; + end if; + + if p_posting_date is null then + v_posting_date = now(); + else + v_posting_date = p_posting_date; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, html_p, user_id, posting_date, parent_id, state) + values + (v_message_id, p_forum_id, p_subject, p_content, p_html_p, p_user_id, v_posting_date, p_parent_id, v_state); + + update forums_forums + set last_post = v_posting_date + where forum_id = p_forum_id; + + update forums_messages + set last_child_post = v_posting_date + where message_id = forums_message__root_message_id(v_message_id); + + return v_message_id; + +end; +' language 'plpgsql'; + +create or replace function forums_forum__new (integer,varchar,varchar,varchar,varchar,varchar,integer,timestamptz,integer,varchar,integer) +returns integer as ' +declare + p_forum_id alias for $1; + p_object_type alias for $2; + p_name alias for $3; + p_charter alias for $4; + p_presentation_type alias for $5; + p_posting_policy alias for $6; + p_package_id alias for $7; + p_creation_date alias for $8; + p_creation_user alias for $9; + p_creation_ip alias for $10; + p_context_id alias for $11; + v_forum_id integer; +begin + v_forum_id:= acs_object__new( + p_forum_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + coalesce(p_context_id, p_package_id) + ); + + insert into forums_forums + (forum_id, name, charter, presentation_type, posting_policy, package_id) + values + (v_forum_id, p_name, p_charter, p_presentation_type, p_posting_policy, p_package_id); + + return v_forum_id; +end; +' language 'plpgsql'; + Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-0.2d-0.3d.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-0.2d-0.3d.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-0.2d-0.3d.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,28 @@ +-- forums/sql/postgresql/upgrade-0.2d-0.3d.sql +-- +-- Changes for scalability davis@xarg.net + +create unique index forums_mess_forum_sk_un on forums_messages(forum_id, tree_sortkey); + +create or replace function forums_message__root_message_id (integer) +returns integer as ' +declare + p_message_id alias for $1; + v_message_id forums_messages.message_id%TYPE; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; +begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = p_message_id; + + select message_id + into v_message_id + from forums_messages + where forum_id = v_forum_id + and tree_sortkey = tree_ancestor_key(v_sortkey, 1); + + return v_message_id; +end; +' language 'plpgsql' with(isstrict,iscachable); Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-0.3d-0.4d.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-0.3d-0.4d.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-0.3d-0.4d.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,3 @@ +-- Need these two for RI checks +create index forums_messages_user_id_idx ON forums_messages(user_id); +create index forums_messages_parent_id_idx ON forums_messages(parent_id); Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.0.6-1.0.7d.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.0.6-1.0.7d.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.0.6-1.0.7d.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,274 @@ +alter table forums_forums add column thread_count integer; +alter table forums_forums alter thread_count set default 0; + +alter table forums_forums add column approved_thread_count integer; +alter table forums_forums alter approved_thread_count set default 0; + +update forums_forums +set approved_thread_count = (select count(message_id) + from forums_messages_approved fm + where fm.forum_id=forums_forums.forum_id + and fm.parent_id is null), + thread_count = (select count(message_id) + from forums_messages fm + where fm.forum_id=forums_forums.forum_id + and fm.parent_id is null); + +alter table forums_messages add column reply_count integer; +alter table forums_messages alter reply_count set default 0; + +alter table forums_messages add column approved_reply_count integer; +alter table forums_messages alter approved_reply_count set default 0; + +-- Need to drop and recreate because Postgres doesn't allow one to change the +-- number of columns in a view when you do a "replace". + +drop view forums_forums_enabled; +create view forums_forums_enabled +as + select * + from forums_forums + where enabled_p = 't'; + +drop view forums_messages_approved; +create or replace view forums_messages_approved +as + select * + from forums_messages + where state = 'approved'; + +drop view forums_messages_pending; +create or replace view forums_messages_pending +as + select * + from forums_messages + where state= 'pending'; + +update forums_messages +set approved_reply_count = (select count(*) + from forums_messages_approved fm1 + where fm1.tree_sortkey + between tree_left(forums_messages.tree_sortkey) + and tree_right(forums_messages.tree_sortkey) + and forums_messages.forum_id = fm1.forum_id), + reply_count = (select count(*) + from forums_messages fm1 + where fm1.tree_sortkey + between tree_left(forums_messages.tree_sortkey) + and tree_right(forums_messages.tree_sortkey) + and forums_messages.forum_id = fm1.forum_id) +where parent_id is null; + +select define_function_args ('forums_message__new', 'message_id,object_type;forums_message,forum_id,subject,content,format,user_id,state,parent_id,creation_date,creation_user,creation_ip,context_id'); + +-- Get rid of the old version so we'll throw an error if the admin forgets to reboot +-- OpenACS after the upgrade (package_instantiate_object caches param lists) + +drop function forums_message__new (integer,varchar,integer,varchar,text,char,integer,timestamptz,varchar,integer,timestamptz,integer,varchar,integer); + +create or replace function forums_message__new (integer,varchar,integer,varchar,text,char,integer,varchar,integer,timestamptz,integer,varchar,integer) +returns integer as ' +declare + p_message_id alias for $1; + p_object_type alias for $2; + p_forum_id alias for $3; + p_subject alias for $4; + p_content alias for $5; + p_format alias for $6; + p_user_id alias for $7; + p_state alias for $8; + p_parent_id alias for $9; + p_creation_date alias for $10; + p_creation_user alias for $11; + p_creation_ip alias for $12; + p_context_id alias for $13; + v_message_id integer; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; +begin + v_message_id := acs_object__new( + p_message_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + coalesce(p_context_id, p_forum_id) + ); + + if p_state is null then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id = p_forum_id; + + if v_forum_policy = ''moderated'' + then v_state := ''pending''; + else v_state := ''approved''; + end if; + else + v_state := p_state; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, format, user_id, parent_id, state, last_child_post) + values + (v_message_id, p_forum_id, p_subject, p_content, p_format, p_user_id, p_parent_id, + v_state, current_timestamp); + + update forums_forums + set last_post = current_timestamp + where forum_id = p_forum_id; + + if p_parent_id is null then + if v_state = ''approved'' then + update forums_forums + set thread_count = thread_count + 1, + approved_thread_count = approved_thread_count + 1 + where forum_id=p_forum_id; + else + update forums_forums + set thread_count = thread_count + 1 + where forum_id=p_forum_id; + end if; + else + if v_state = ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count + 1, + reply_count = reply_count + 1, + last_child_post = current_timestamp + where message_id = forums_message__root_message_id(v_message_id); + else + update forums_messages + set reply_count = reply_count + 1, + last_child_post = current_timestamp + where message_id = forums_message__root_message_id(v_message_id); + end if; + end if; + + return v_message_id; + +end;' language 'plpgsql'; + +select define_function_args ('forums_message__set_state', 'message_id,state'); + +create or replace function forums_message__set_state(integer,varchar) returns integer as ' +declare + p_message_id alias for $1; + p_state alias for $2; + v_cur record; +begin + + select into v_cur * + from forums_messages + where message_id = p_message_id; + + if v_cur.parent_id is null then + if p_state = ''approved'' and v_cur.state <> ''approved'' then + update forums_forums + set approved_thread_count = approved_thread_count + 1 + where forum_id=v_cur.forum_id; + elsif p_state <> ''approved'' and v_cur.state = ''approved'' then + update forums_forums + set approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + else + if p_state = ''approved'' and v_cur.state <> ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count + 1 + where message_id = forums_message__root_message_id(v_cur.message_id); + elsif p_state <> ''approved'' and v_cur.state = ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count - 1 + where message_id = forums_message__root_message_id(v_cur.message_id); + end if; + end if; + + update forums_messages + set state = p_state + where message_id = p_message_id; + + return 0; + +end;' language 'plpgsql'; + +create or replace function forums_message__delete (integer) +returns integer as ' +declare + p_message_id alias for $1; + v_cur record; +begin + + -- Maintain the forum thread counts + + select into v_cur * + from forums_messages + where message_id = p_message_id; + + if v_cur.parent_id is null then + if v_cur.state = ''approved'' then + update forums_forums + set thread_count = thread_count - 1, + approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + else + update forums_forums + set thread_count = thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + elsif v_cur.state = ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count - 1, + reply_count = reply_count - 1 + where message_id = forums_message__root_message_id(v_cur.message_id); + else + update forums_messages + set reply_count = reply_count - 1 + where message_id = forums_message__root_message_id(v_cur.message_id); + end if; + + perform acs_object__delete(p_message_id); + return 0; + +end;' language 'plpgsql'; + +select define_function_args ('forums_message__delete_thread', 'message_id'); + +create or replace function forums_message__delete_thread (integer) +returns integer as ' +declare + p_message_id alias for $1; + v_forum_id forums_messages.forum_id%TYPE; + v_sortkey forums_messages.tree_sortkey%TYPE; + v_message RECORD; +begin + select forum_id, tree_sortkey + into v_forum_id, v_sortkey + from forums_messages + where message_id = p_message_id; + + -- if it is already deleted + if v_forum_id is null + then return 0; + end if; + + -- delete all children + -- order by tree_sortkey desc to guarantee + -- that we never delete a parent before its child + -- sortkeys are beautiful + for v_message in select * + from forums_messages + where forum_id = v_forum_id + and tree_sortkey between tree_left(v_sortkey) and tree_right(v_sortkey) + order by tree_sortkey desc + loop + -- Avoid the count bookkeeping down in forums_message__delete + perform forums_message__delete(v_message.message_id); + end loop; + + -- delete the message itself + perform forums_message__delete(p_message_id); + + return 0; +end;' language 'plpgsql'; + Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.0d4-1.0.1d2.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.0d4-1.0.1d2.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.0d4-1.0.1d2.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,99 @@ +alter table forums_messages add format varchar(30); +alter table forums_messages alter column format set default 'text/plain'; +alter table forums_messages add constraint forums_mess_format_ck check (format in ('text/enhanced', 'text/plain', 'text/fixed-width', 'text/html')); + +update forums_messages +set format = 'text/html' +where html_p = 't'; +update forums_messages +set format = 'text/plain' +where html_p = 'f'; + +alter table forums_messages drop column html_p cascade; + +-- recreate the views +create or replace view forums_messages_approved +as + select * + from forums_messages + where state = 'approved'; + +create or replace view forums_messages_pending +as + select * + from forums_messages + where state= 'pending'; + + +-- taken from forums-messages-package-create.sql + +select define_function_args ('forums_message__new', 'message_id,object_type;forums_message,forum_id,subject,content,format,user_id,posting_date,state,parent_id,creation_date,creation_user,creation_ip,context_id'); + +create or replace function forums_message__new (integer,varchar,integer,varchar,text,char,integer,timestamptz,varchar,integer,timestamptz,integer,varchar,integer) +returns integer as ' +declare + p_message_id alias for $1; + p_object_type alias for $2; + p_forum_id alias for $3; + p_subject alias for $4; + p_content alias for $5; + p_format alias for $6; + p_user_id alias for $7; + p_posting_date alias for $8; + p_state alias for $9; + p_parent_id alias for $10; + p_creation_date alias for $11; + p_creation_user alias for $12; + p_creation_ip alias for $13; + p_context_id alias for $14; + v_message_id integer; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + v_posting_date forums_messages.posting_date%TYPE; +begin + v_message_id := acs_object__new( + p_message_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + coalesce(p_context_id, p_forum_id) + ); + + if p_state is null then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id = p_forum_id; + + if v_forum_policy = ''moderated'' + then v_state := ''pending''; + else v_state := ''approved''; + end if; + else + v_state := p_state; + end if; + + if p_posting_date is null then + v_posting_date = now(); + else + v_posting_date = p_posting_date; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, format, user_id, posting_date, parent_id, state) + values + (v_message_id, p_forum_id, p_subject, p_content, p_format, p_user_id, v_posting_date, p_parent_id, v_state); + + update forums_forums + set last_post = v_posting_date + where forum_id = p_forum_id; + + update forums_messages + set last_child_post = v_posting_date + where message_id = forums_message__root_message_id(v_message_id); + + return v_message_id; + +end; +' language 'plpgsql'; Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.1.1-1.1.2d1.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.1.1-1.1.2d1.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.1.1-1.1.2d1.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,35 @@ +update acs_permissions + set privilege = 'read' + where privilege = 'forum_read' + and not exists (select 1 + from acs_permissions p1 + where p1.object_id = acs_permissions.object_id + and p1.grantee_id = acs_permissions.grantee_id + and p1.privilege = 'read'); + +delete from acs_permissions + where privilege = 'forum_read'; + +update acs_permissions + set privilege = 'write' + where privilege = 'forum_write' + and not exists (select 1 + from acs_permissions p1 + where p1.object_id = acs_permissions.object_id + and p1.grantee_id = acs_permissions.grantee_id + and p1.privilege = 'write'); + +delete from acs_permissions + where privilege = 'forum_write'; + +update acs_permissions + set privilege = 'create' + where privilege = 'forum_create' + and not exists (select 1 + from acs_permissions p1 + where p1.object_id = acs_permissions.object_id + and p1.grantee_id = acs_permissions.grantee_id + and p1.privilege = 'create'); + +delete from acs_permissions + where privilege = 'forum_create'; Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.1.2d4-1.1.2d5.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.1.2d4-1.1.2d5.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.1.2d4-1.1.2d5.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,52 @@ +-- +-- Most of the forum_* privileges are now deprecated. A notable exception is +-- forum_moderate, which is little used but provides a way to grant moderation +-- privileges without granting full admin privileges. +-- + +update acs_permissions +set privilege = 'read' +where privilege = 'forum_read'; + +update acs_permissions +set privilege = 'write' +where privilege = 'forum_write'; + +update acs_permissions +set privilege = 'create' +where privilege = 'forum_create'; + +update acs_permissions +set privilege = 'delete' +where privilege = 'forum_delete'; + +-- As best as we can tell this is never used even though it's granted +-- by dotlrn-forums. + +delete from acs_permissions where privilege = 'forum_post'; + +create function inline_0 () +returns integer as' +begin + perform acs_privilege__remove_child(''read'',''forum_read''); + perform acs_privilege__remove_child(''create'',''forum_create''); + perform acs_privilege__remove_child(''write'',''forum_write''); + perform acs_privilege__remove_child(''delete'',''forum_delete''); + perform acs_privilege__remove_child(''forum_moderate'',''forum_read''); + perform acs_privilege__remove_child(''forum_moderate'',''forum_post''); + perform acs_privilege__remove_child(''forum_write'',''forum_read''); + perform acs_privilege__remove_child(''forum_write'',''forum_post''); + + perform acs_privilege__drop_privilege(''forum_read''); + perform acs_privilege__drop_privilege(''forum_create''); + perform acs_privilege__drop_privilege(''forum_write''); + perform acs_privilege__drop_privilege(''forum_post''); + perform acs_privilege__drop_privilege(''forum_delete''); + + return null; +end;' language 'plpgsql'; + +select inline_0(); +drop function inline_0(); + + Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.1d1-1.1d2.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.1d1-1.1d2.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.1d1-1.1d2.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,119 @@ +-- replace new functions with ones that set acs_object.title, package_id + +create or replace function forums_forum__new (integer,varchar,varchar,varchar,varchar,varchar,integer,timestamptz,integer,varchar,integer) +returns integer as ' +declare + p_forum_id alias for $1; + p_object_type alias for $2; + p_name alias for $3; + p_charter alias for $4; + p_presentation_type alias for $5; + p_posting_policy alias for $6; + p_package_id alias for $7; + p_creation_date alias for $8; + p_creation_user alias for $9; + p_creation_ip alias for $10; + p_context_id alias for $11; + v_forum_id integer; +begin + v_forum_id:= acs_object__new( + p_forum_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + coalesce(p_context_id, p_package_id), + ''t'', + p_name, + p_package_id + ); + + insert into forums_forums + (forum_id, name, charter, presentation_type, posting_policy, package_id) + values + (v_forum_id, p_name, p_charter, p_presentation_type, p_posting_policy, p_package_id); + + return v_forum_id; +end; +' language 'plpgsql'; + + +create or replace function forums_message__new (integer,varchar,integer,varchar,text,char,integer,timestamptz,varchar,integer,timestamptz,integer,varchar,integer) +returns integer as ' +declare + p_message_id alias for $1; + p_object_type alias for $2; + p_forum_id alias for $3; + p_subject alias for $4; + p_content alias for $5; + p_html_p alias for $6; + p_user_id alias for $7; + p_posting_date alias for $8; + p_state alias for $9; + p_parent_id alias for $10; + p_creation_date alias for $11; + p_creation_user alias for $12; + p_creation_ip alias for $13; + p_context_id alias for $14; + v_message_id integer; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + v_posting_date forums_messages.posting_date%TYPE; + v_package_id acs_objects.package_id%TYPE; +begin + + select package_id into v_package_id from forums_forums where forum_id = p_forum_id; + + if v_package_id is null then + raise exception ''forums_message__new: forum_id % not found'', p_forum_id; + end if; + + v_message_id := acs_object__new( + p_message_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + coalesce(p_context_id, p_forum_id), + ''t'', + p_subject, + v_package_id + ); + + if p_state is null then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id = p_forum_id; + + if v_forum_policy = ''moderated'' + then v_state := ''pending''; + else v_state := ''approved''; + end if; + else + v_state := p_state; + end if; + + if p_posting_date is null then + v_posting_date = now(); + else + v_posting_date = p_posting_date; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, html_p, user_id, posting_date, parent_id, state) + values + (v_message_id, p_forum_id, p_subject, p_content, p_html_p, p_user_id, v_posting_date, p_parent_id, v_state); + + update forums_forums + set last_post = v_posting_date + where forum_id = p_forum_id; + + update forums_messages + set last_child_post = v_posting_date + where message_id = forums_message__root_message_id(v_message_id); + + return v_message_id; + +end; +' language 'plpgsql'; Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2.0d3-1.2.0d4.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2.0d3-1.2.0d4.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2.0d3-1.2.0d4.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,22 @@ +-- +-- packages/forums/sql/postgresql/upgrade/upgrade-1.2.0d3-1.2.0d4.sql +-- +-- @author Deds Castillo (deds@i-manila.com.ph) +-- @creation-date 2006-05-10 +-- @arch-tag: 3b12c94c-beed-4b92-a2bb-f07a2856154e +-- @cvs-id $Id$ +-- + +-- increase charter to 4000 chars + +alter table forums_forums add charter_temp varchar(4000); +update forums_forums set charter_temp = charter; +drop view forums_forums_enabled; +alter table forums_forums drop charter; +alter table forums_forums rename charter_temp to charter; + +create view forums_forums_enabled +as + select * + from forums_forums + where enabled_p = 't'; Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2.0d4-1.3d1.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2.0d4-1.3d1.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2.0d4-1.3d1.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,16 @@ +-- Update the package ids for projects +create function inline_0 () +returns integer as ' +declare + ct RECORD; +begin + for ct in select package_id, forum_id from forums_forums + loop + update acs_objects set package_id = ct.package_id where object_id = ct.forum_id; + end loop; + + return null; +end;' language 'plpgsql'; + +select inline_0(); +drop function inline_0(); Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2d1-1.2d2.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2d1-1.2d2.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2d1-1.2d2.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,238 @@ +-- @author Jeff Davis davis@xarg.net +-- +-- bug 1807 last_poster rather than first poster should be shown in forums index page +-- add a last_poster to support this and update triggers to support it. + +alter table forums_messages add column last_poster integer + constraint forums_mess_last_poster_fk + references users(user_id); + +-- Now populate the new column +-- this depends on last_child_post being properly set. +-- use min(user_id) just in case there are two that have the same timestamp) + +update forums_messages set last_poster = (select min(user_id) + from forums_messages fm1 + where fm1.posting_date = forums_messages.last_child_post + and forums_messages.forum_id = fm1.forum_id + and fm1.tree_sortkey + between tree_left(forums_messages.tree_sortkey) + and tree_right(forums_messages.tree_sortkey) ) +where parent_id is null; + +-- the better method above fails for some things (like notably openacs.org where +-- the last_child_post may not exist in the child posts due to import and upgrade +-- glitches. try this one which will give us a name no matter what. +update forums_messages +set last_poster = (select user_id + from forums_messages fm1 + where fm1.message_id = (select max(message_id) + from forums_messages fm2 + where forums_messages.forum_id = fm2.forum_id + and fm2.tree_sortkey + between tree_left(forums_messages.tree_sortkey) + and tree_right(forums_messages.tree_sortkey) )) +where parent_id is null and last_poster is null; + + +-- Need to drop and recreate because Postgres doesn't allow one to change the +-- number of columns in a view when you do a "replace". +drop view forums_messages_approved; +create or replace view forums_messages_approved +as + select * + from forums_messages + where state = 'approved'; + +drop view forums_messages_pending; +create or replace view forums_messages_pending +as + select * + from forums_messages + where state= 'pending'; + + +-- +-- Replace the procs which manipulate state and new message to save last_poster. +-- +create or replace function forums_message__new (integer,varchar,integer,varchar,text,char,integer,varchar,integer,timestamptz,integer,varchar,integer) +returns integer as ' +declare + p_message_id alias for $1; + p_object_type alias for $2; + p_forum_id alias for $3; + p_subject alias for $4; + p_content alias for $5; + p_format alias for $6; + p_user_id alias for $7; + p_state alias for $8; + p_parent_id alias for $9; + p_creation_date alias for $10; + p_creation_user alias for $11; + p_creation_ip alias for $12; + p_context_id alias for $13; + v_message_id integer; + v_forum_policy forums_forums.posting_policy%TYPE; + v_state forums_messages.state%TYPE; + v_posting_date forums_messages.posting_date%TYPE; + v_package_id acs_objects.package_id%TYPE; +begin + + select package_id into v_package_id from forums_forums where forum_id = p_forum_id; + + if v_package_id is null then + raise exception ''forums_message__new: forum_id % not found'', p_forum_id; + end if; + + v_message_id := acs_object__new( + p_message_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + coalesce(p_context_id, p_forum_id), + ''t'', + p_subject, + v_package_id + ); + + if p_state is null then + select posting_policy + into v_forum_policy + from forums_forums + where forum_id = p_forum_id; + + if v_forum_policy = ''moderated'' + then v_state := ''pending''; + else v_state := ''approved''; + end if; + else + v_state := p_state; + end if; + + insert into forums_messages + (message_id, forum_id, subject, content, format, user_id, parent_id, state, last_child_post, last_poster) + values + (v_message_id, p_forum_id, p_subject, p_content, p_format, p_user_id, p_parent_id, + v_state, current_timestamp, p_user_id); + + update forums_forums + set last_post = current_timestamp + where forum_id = p_forum_id; + + if p_parent_id is null then + if v_state = ''approved'' then + update forums_forums + set thread_count = thread_count + 1, + approved_thread_count = approved_thread_count + 1 + where forum_id=p_forum_id; + else + update forums_forums + set thread_count = thread_count + 1 + where forum_id=p_forum_id; + end if; + else + if v_state = ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count + 1, + reply_count = reply_count + 1, + last_poster = p_user_id, + last_child_post = current_timestamp + where message_id = forums_message__root_message_id(v_message_id); + else + -- dont update last_poster, last_child_post when not approved + update forums_messages + set reply_count = reply_count + 1 + where message_id = forums_message__root_message_id(v_message_id); + end if; + end if; + + return v_message_id; + +end;' language 'plpgsql'; + +select define_function_args ('forums_message__set_state', 'message_id,state'); + +create or replace function forums_message__set_state(integer,varchar) returns integer as ' +declare + p_message_id alias for $1; + p_state alias for $2; + v_cur record; +begin + + select into v_cur * + from forums_messages + where message_id = p_message_id; + + if v_cur.parent_id is null then + if p_state = ''approved'' and v_cur.state <> ''approved'' then + update forums_forums + set approved_thread_count = approved_thread_count + 1 + where forum_id=v_cur.forum_id; + elsif p_state <> ''approved'' and v_cur.state = ''approved'' then + update forums_forums + set approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + else + if p_state = ''approved'' and v_cur.state <> ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count + 1, + last_poster = (case when v_cur.posting_date > last_child_post then v_cur.user_id else last_poster end), + last_child_post = (case when v_cur.posting_date > last_child_post then v_cur.posting_date else last_child_post end) + where message_id = forums_message__root_message_id(v_cur.message_id); + elsif p_state <> ''approved'' and v_cur.state = ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count - 1 + where message_id = forums_message__root_message_id(v_cur.message_id); + end if; + end if; + + update forums_messages + set state = p_state + where message_id = p_message_id; + + return 0; + +end;' language 'plpgsql'; + +select define_function_args ('forums_message__delete', 'message_id'); + +create or replace function forums_message__delete (integer) +returns integer as ' +declare + p_message_id alias for $1; + v_cur record; +begin + + -- Maintain the forum thread counts + + select into v_cur * + from forums_messages + where message_id = p_message_id; + + if v_cur.parent_id is null then + if v_cur.state = ''approved'' then + update forums_forums + set thread_count = thread_count - 1, + approved_thread_count = approved_thread_count - 1 + where forum_id=v_cur.forum_id; + else + update forums_forums + set thread_count = thread_count - 1 + where forum_id=v_cur.forum_id; + end if; + elsif v_cur.state = ''approved'' then + update forums_messages + set approved_reply_count = approved_reply_count - 1, + reply_count = reply_count - 1 + where message_id = forums_message__root_message_id(v_cur.message_id); + else + update forums_messages + set reply_count = reply_count - 1 + where message_id = forums_message__root_message_id(v_cur.message_id); + end if; + + perform acs_object__delete(p_message_id); + return 0; +end;' language 'plpgsql'; Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2d2-1.2d3.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2d2-1.2d3.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.2d2-1.2d3.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,4 @@ +CREATE INDEX forums_forums_pkg_enable_idx + ON forums_forums + USING btree + (package_id, enabled_p); Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.3d3-1.3d4.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.3d3-1.3d4.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.3d3-1.3d4.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,42 @@ +-- Make sure that forums actually have the package_id set. +update acs_objects set package_id = context_id where object_type = 'forums_forum'; + +-- And now rewrite the new function as old installations will not have this updated version that stores the package_id +select define_function_args('forums_forum__new','forum_id,object_type;forums_forum,name,charter,presentation_type,posting_policy,package_id,creation_date,creation_user,creation_ip,context_id'); + +create or replace function forums_forum__new (integer,varchar,varchar,varchar,varchar,varchar,integer,timestamptz,integer,varchar,integer) +returns integer as ' +declare + p_forum_id alias for $1; + p_object_type alias for $2; + p_name alias for $3; + p_charter alias for $4; + p_presentation_type alias for $5; + p_posting_policy alias for $6; + p_package_id alias for $7; + p_creation_date alias for $8; + p_creation_user alias for $9; + p_creation_ip alias for $10; + p_context_id alias for $11; + v_forum_id integer; +begin + v_forum_id:= acs_object__new( + p_forum_id, + p_object_type, + p_creation_date, + p_creation_user, + p_creation_ip, + coalesce(p_context_id, p_package_id), + ''t'', + p_name, + p_package_id + ); + + insert into forums_forums + (forum_id, name, charter, presentation_type, posting_policy, package_id) + values + (v_forum_id, p_name, p_charter, p_presentation_type, p_posting_policy, p_package_id); + + return v_forum_id; +end; +' language 'plpgsql'; Index: dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.3d5-1.3d6.sql =================================================================== diff -u --- dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.3d5-1.3d6.sql (revision 0) +++ dotlrn_packages/packages/forums/sql/postgresql/upgrade/upgrade-1.3d5-1.3d6.sql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1 @@ +\i forums-reading-info-create.sql \ No newline at end of file Index: dotlrn_packages/packages/forums/tcl/form-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/form-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/form-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,182 @@ +ad_library { + + Reusable forms in the forums package + + @author lee@thaum.net + @creation-date 2003-11-12 +} + +namespace eval forums {} +namespace eval forums::form {} + +ad_proc -public forums::form::message { + {-optional:boolean} + {-prefix {}} + form_name +} { + adds form elements to form_name which represent the data held in a forum + message +} { + + ############################## + # Form definition + # + + if { $optional_p } { + set optional_switch "-optional" + } else { + set optional_switch "" + } + + template::element create $form_name ${prefix}subject \ + -label [_ forums.Subject] \ + -datatype text \ + -widget text \ + -html {size 60} \ + $optional_switch + + template::element create $form_name ${prefix}message_body \ + -label [_ forums.Body] \ + -datatype richtext \ + -widget richtext \ + -html {rows 20 cols 60 style {width:100%}} \ + $optional_switch + +} + +ad_proc -public forums::form::post_message { + {-optional:boolean} + {-show_anonymous_p 1} + {-show_attachments_p 1} + {-prefix {}} + form_name +} { + adds form elements to a form for the default post message form +} { + template::element create $form_name ${prefix}forum_id \ + -label [_ forums.forum_ID] \ + -datatype integer \ + -widget hidden + + template::element create $form_name ${prefix}parent_id \ + -label [_ forums.parent_ID] \ + -datatype integer \ + -widget hidden \ + -optional + + template::element create $form_name ${prefix}subscribe_p \ + -label [_ forums.Subscribe] \ + -datatype text \ + -widget hidden \ + -optional + + set options [list [list [_ forums.post_anonymously] 1 ] ] + + template::element create $form_name ${prefix}anonymous_p \ + -label [_ forums.Anonymous] \ + -datatype integer \ + -widget [ad_decode $show_anonymous_p 0 "hidden" "checkbox"] \ + -options $options \ + -optional + + set options [list [list [_ forums.No] 0] [list [_ forums.Yes] 1]] + + template::element create $form_name ${prefix}attach_p \ + -label [_ forums.Attach] \ + -datatype text \ + -widget [ad_decode $show_attachments_p 0 "hidden" "radio"] \ + -options $options + + if {$optional_p} { + template::element set_properties $form_name ${prefix}forum_id -optional + template::element set_properties $form_name ${prefix}attach_p -optional + } +} + +ad_proc -public forums::form::forward_message { + {-prefix {}} + form_name +} { + adds form elements to form_name to allow the user to enter the details + of a message they want to forward by email +} { + template::element create $form_name ${prefix}to_email \ + -label [_ forums.Email] \ + -datatype email \ + -widget text \ + -html {size 60} + + template::element create $form_name ${prefix}subject \ + -label [_ forums.Subject] \ + -datatype text \ + -widget text \ + -html {size 80} + + template::element create $form_name ${prefix}pre_body \ + -label [_ forums.Your_Note] \ + -datatype text \ + -widget textarea \ + -html {cols 80 rows 10} +} + +ad_proc -public forums::form::search { + {-prefix {}} + form_name +} { + Constructs the elements of a form for searching for a term + optionally in a particular forum +} { + template::element create $form_name ${prefix}search_text \ + -label [_ forums.Search_1] \ + -datatype text \ + -widget text + + template::element create $form_name ${prefix}forum_id \ + -label [_ forums.ForumID] \ + -datatype text \ + -widget hidden \ + -optional +} + +ad_proc -public forums::form::forum { + {-prefix {}} + form_name +} { + Constructs the elements of a form for creating/editing a forum +} { + template::element create $form_name ${prefix}name \ + -label [_ forums.Name] \ + -datatype text \ + -widget text \ + -html {size 60} \ + -validate { {expr ![empty_string_p [string trim $value]]} {Forum Name can not be blank} } + + template::element create $form_name ${prefix}charter \ + -label [_ forums.Charter] \ + -datatype richtext \ + -widget richtext \ + -html {cols 60 rows 10} \ + -validate { {expr [string length $value] <= 4000 } {#forums.charter_max_chars#} } \ + -optional + + template::element create $form_name ${prefix}presentation_type \ + -label [_ forums.Presentation] \ + -datatype text \ + -widget select \ + -help_text [_ forums.help_presentation] \ + -options [list [list [_ forums.Flat] flat] [list [_ forums.Threaded] threaded]] + + template::element create $form_name ${prefix}posting_policy \ + -label [_ forums.Posting_Policy] \ + -datatype text \ + -widget select \ + -help_text [_ forums.help_posting_policy] \ + -options [list [list [_ forums.open] open] [list [_ forums.moderated] moderated] [list [_ forums.closed] closed] ] + + template::element create $form_name ${prefix}new_threads_p \ + -label [_ forums.lt_Users_Can_Create_New_] \ + -datatype integer \ + -widget radio \ + -help_text [_ forums.help_new_threads] \ + -options [list [list [_ forums.Yes] 1] [list [_ forums.No] 0] ] +} Index: dotlrn_packages/packages/forums/tcl/forum-message-reply-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forum-message-reply-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/forum-message-reply-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,29 @@ +ad_library { + + Forums Library - Reply Handling + + @creation-date 2002-05-17 + @author Ben Adida + @cvs-id $Id$ + +} + +namespace eval forum::message::notification { + + ad_proc -public get_url { + object_id + } { + + } + + ad_proc -public process_reply { + reply_id + } { + + } + + +} + + + Index: dotlrn_packages/packages/forums/tcl/forum-reply-procs-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forum-reply-procs-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/tcl/forum-reply-procs-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,26 @@ + + + oracle8.1.6 + + + + select site_node.url(node_id) + from site_nodes + where object_id = (select package_id + from forums_forums + where forums_forums.forum_id = :forum_id) + + + + + + + + + + + + + + + Index: dotlrn_packages/packages/forums/tcl/forum-reply-procs-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forum-reply-procs-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/tcl/forum-reply-procs-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,18 @@ + + + postgresql7.1 + + + + select site_node__url(node_id) + from site_nodes + where object_id = (select package_id + from forums_forums + where forums_forums.forum_id = :forum_id) + + + + + + + Index: dotlrn_packages/packages/forums/tcl/forum-reply-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forum-reply-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/forum-reply-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,64 @@ +ad_library { + + Forums Library - Reply Handling + + @creation-date 2002-05-17 + @author Ben Adida + @cvs-id $Id$ + +} + +namespace eval forum::notification { + + ad_proc -public get_url { + object_id + } { + returns a full url to the object_id. + handles messages and forums. + } { + + set object_type [db_string select_object_type {}] + + if {[string compare $object_type "forums_message"] == 0} { + + # object is a message + set message_id $object_id + forum::message::get -message_id $message_id -array message + set forum_id $message(forum_id) + set forum_url "[ad_url][db_string select_forums_package_url {}]" + return ${forum_url}message-view?message_id=$message(root_message_id) + + } else { + + # object_type is a forum + set forum_id $object_id + set forum_url "[ad_url][db_string select_forums_package_url {}]" + return ${forum_url}forum-view?forum_id=$forum_id + + } + } + + ad_proc -public process_reply { + reply_id + } { + ns_log debug "forum::notification::process_reply: processing reply $reply_id" + + # Get the data + notification::reply::get -reply_id $reply_id -array reply + + # Get the message information + forum::message::get -message_id $reply(object_id) -array message + + # Insert the message + forum::message::new -forum_id $message(forum_id) \ + -parent_id $message(message_id) \ + -subject $reply(subject) \ + -content $reply(content) \ + -user_id $reply(from_user) + } + + +} + + + Index: dotlrn_packages/packages/forums/tcl/forum-reply-procs.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forum-reply-procs.xql (revision 0) +++ dotlrn_packages/packages/forums/tcl/forum-reply-procs.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,22 @@ + + + + + + select object_type + from acs_objects + where object_id = :object_id + + + + + + + + + + + + + + Index: dotlrn_packages/packages/forums/tcl/forums-callback-procs-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forums-callback-procs-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/tcl/forums-callback-procs-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,43 @@ + + + + + + + + + + + oracle8.1.6 + + + + select site_node.url(min(node_id)) + from site_nodes + where object_id = (select package_id + from forums_forums + where forums_forums.forum_id = :forum_id) + + + + + + select site_node.url(min(node_id)) + from site_nodes + where object_id = (select package_id + from forums_forums + where forums_forums.forum_id = :forum_id) + + + + + + select subject, content, format + from forums_messages + start with message_id=:message_id + connect by prior message_id = parent_id + + + + Index: dotlrn_packages/packages/forums/tcl/forums-callback-procs-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forums-callback-procs-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/tcl/forums-callback-procs-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,44 @@ + + + + + + + + + + + postgresql7.4 + + + + select site_node__url(min(node_id)) + from site_nodes + where object_id = (select package_id + from forums_forums + where forums_forums.forum_id = :forum_id) + + + + + + select site_node__url(min(node_id)) + from site_nodes + where object_id = (select package_id + from forums_forums + where forums_forums.forum_id = :forum_id) + + + + + + select subject, content, format + from forums_messages + where message_id=:message_id or (tree_sortkey between tree_left(:tree_sortkey) and tree_right(:tree_sortkey)) + and forum_id=:forum_id + order by tree_sortkey + + + + Index: dotlrn_packages/packages/forums/tcl/forums-callback-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forums-callback-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/forums-callback-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,373 @@ +ad_library { + Forum callbacks. + + Navigation callbacks. + + @author Jeff Davis + @creation-date 2005-03-11 + @cvs-id $Id$ +} + +ad_proc -public -callback navigation::package_admin -impl forums {} { + return the admin actions for the forum package. +} { + set actions {} + + # Check for admin on the package... + if {[permission::permission_p -object_id $package_id -privilege admin -party_id $user_id]} { + lappend actions [list LINK admin/ [_ acs-kernel.common_Administration] {} [_ forums.Admin_for_all]] + + lappend actions [list LINK \ + [export_vars -base admin/permissions {{object_id $package_id}}] \ + [_ acs-kernel.common_Permissions] {} [_ forums.Permissions_for_all]] + lappend actions [list LINK admin/forum-new [_ forums.Create_a_New_Forum] {} {}] + } + + # check for admin on the individual forums. + db_foreach forums { + select forum_id, name, enabled_p + from forums_forums + where package_id = :package_id + and exists (select 1 from acs_object_party_privilege_map pm + where pm.object_id = forum_id + and pm.party_id = :user_id + and pm.privilege = 'admin') + } { + lappend actions [list SECTION "Forum $name ([ad_decode $enabled_p t [_ forums.enabled] [_ forums.disabled]])" {}] + + lappend actions [list LINK [export_vars -base admin/forum-edit forum_id] \ + [_ forums.Edit_forum_name] {} {}] + lappend actions [list LINK [export_vars -base admin/permissions {{object_id $forum_id} return_url}] \ + [_ forums.Permission_forum_name] {} {}] + } + return $actions +} + +ad_proc -public -callback forum::forum_new { + {-package_id:required} + {-forum_id:required} +} { +} + +ad_proc -public -callback forum::forum_edit { + {-package_id:required} + {-forum_id:required} +} { +} + +ad_proc -public -callback forum::forum_delete { + {-package_id:required} + {-forum_id:required} +} { +} + +ad_proc -public -callback forum::message_new { + {-package_id:required} + {-message_id:required} +} { +} + +ad_proc -public -callback forum::message_edit { + {-package_id:required} + {-message_id:required} +} { +} + +ad_proc -public -callback forum::message_delete { + {-package_id:required} + {-message_id:required} +} { +} + +ad_proc -public -callback pm::project_new -impl forums { + {-package_id:required} + {-project_id:required} + {-data:required} +} { + create a new forum for each new project +} { + set pm_name [pm::project::name -project_item_id $project_id] + + foreach forum_package_id [application_link::get_linked -from_package_id $package_id -to_package_key "forums"] { + set forum_id [forum::new \ + -name $pm_name \ + -package_id $forum_package_id \ + -no_callback] + + # Automatically allow new threads on this forum + forum::new_questions_allow -forum_id $forum_id + + application_data_link::new -this_object_id $project_id -target_object_id $forum_id + } +} + +ad_proc -public -callback search::datasource -impl forums_message {} { + + @author dave@thedesignexperience.org + @creation_date 2005-06-07 + + returns a datasource for the search package + this is the content that will be indexed by the full text + search engine. + + We expect message_id to be a root message of a thread only, + and return the text of all the messages below + +} { + set message_id $object_id + # If there is no connection than this proc is called from the + # search indexer. In that case we set the locale to the + # system-wide default locale, since locale is needed for some part + # of the message formatting. + if { ![ad_conn isconnected] } { + ad_conn -set locale [lang::system::site_wide_locale] + } + + forum::message::get -message_id $message_id -array message + + if { ![empty_string_p $message(parent_id)] } { + ns_log debug "forum::message::datasource was called with a message_id that has a parent - skipping: $message_id" + set empty(object_id) $message_id + set empty(title) "" + set empty(content) "" + set empty(keywords) "" + set empty(storage_type) "text" + set empty(mime) "text/plain" + return [array get empty] + } + set relevant_date $message(posting_date) + ns_log debug "DIRK1 -${message(posting_date)}-" + + set tree_sortkey $message(tree_sortkey) + set forum_id $message(forum_id) + set combined_content "" + set subjects [list] + lappend subjects $message(subject) + array set forum [forum::get -forum_id $message(forum_id) -array forum] + set package_id $forum(package_id) + db_foreach messages "" { + + # include the subject in the text if it is different from the thread's subject + set root_subject $message(subject) + regexp {^(?:Re: )+(.*)$} $subject match subject + + if { [string compare $subject $root_subject] != 0 } { + # different subject + append combined_content "$subject\n\n" + } + + append combined_content [ad_html_text_convert -from $format -to text/plain -- $content] + + # In case this text is not only used for indexing but also for display, beautify it + append combined_content "\n\n" + set relevant_date $message(posting_date) + ns_log debug "DIRK2 -${message(posting_date)}-" + } + + return [list object_id $message(message_id) \ + title $message(subject) \ + content $combined_content \ + relevant_date $relevant_date \ + community_id [db_null] \ + keywords {} \ + storage_type text \ + mime text/plain \ + package_id $package_id] +} + +ad_proc -public -callback search::url -impl forums_message {} { + + @author dave@thedesignexperience.org + @creation_date 2005-06-08 + + returns a url for a message to the search package + +} { + set message_id $object_id + forum::message::get -message_id $message_id -array message + set forum_id $message(forum_id) + + return "[ad_url][db_string select_forums_package_url {}]message-view?message_id=$message_id" +} + +ad_proc -callback application-track::getApplicationName -impl forums {} { + callback implementation + } { + return "forums" + } + + ad_proc -callback application-track::getGeneralInfo -impl forums {} { + callback implementation + } { + db_1row my_query { + SELECT count(1) as result + from acs_objects o, forums_forums f, acs_objects o2, dotlrn_communities_full com + where f.forum_id=o.object_id + and com.community_id=:comm_id + and o.package_id= o2.object_id + and o2.context_id=com.package_id + + } + + return "$result" + } + + ad_proc -callback application-track::getSpecificInfo -impl forums {} { + callback implementation + } { + + upvar $query_name my_query + upvar $elements_name my_elements + + set my_query { + SELECT f.name as name,f.thread_count as threads, + f.last_post, + to_char(o.creation_date, 'YYYY-MM-DD HH24:MI:SS') as creation_date + from acs_objects o, forums_forums f, acs_objects o2, dotlrn_communities_full com + where f.forum_id=o.object_id + and com.community_id=:class_instance_id + and o.package_id= o2.object_id + and o2.context_id=com.package_id + } + + set my_elements { + name { + label "Name" + display_col name + html {align center} + + } + threads { + label "Threads" + display_col threads + html {align center} + } + creation_date { + label "creation_date" + display_col creation_date + html {align center} + } + last_post { + label "last_post" + display_col last_post + html {align center} + } + + + } + + return "OK" + } + +ad_proc -callback merge::MergeShowUserInfo -impl forums { + -user_id:required +} { + Merge the *forums* of two users. + The from_user_id is the user_id of the user + that will be deleted and all the *forums* + of this user will be mapped to the to_user_id. + +} { + set msg "Forums items of $user_id" + ns_log Notice $msg + set result [list $msg] + + set last_poster [db_list_of_lists sel_poster {*SQL*} ] + set msg "Last Poster of $last_poster" + lappend result $msg + + set poster [db_list_of_lists sel_user_id {*SQL*} ] + set msg "Poster of $poster" + lappend result $msg + + return $result +} + +ad_proc -callback merge::MergePackageUser -impl forums { + -from_user_id:required + -to_user_id:required +} { + Merge the *forums* of two users. + The from_user_id is the user_id of the user + that will be deleted and all the *forums* + of this user will be mapped to the to_user_id. + +} { + set msg "Merging forums" + ns_log Notice $msg + set result [list $msg] + + db_dml upd_poster { *SQL* } + db_dml upd_user_id { *SQL* } + + lappend result "Merge of forums is done" + + return $result +} + +#Callbacks for application-track + +ad_proc -callback application-track::getApplicationName -impl forums {} { + callback implementation + } { + return "forums" + } + +ad_proc -callback application-track::getGeneralInfo -impl forums {} { + callback implementation + } { + db_1row my_query { + select count(f.forum_id) as result + FROM forums_forums f, dotlrn_communities_full com + WHERE com.community_id=:comm_id + and apm_package__parent_id(f.package_id) = com.package_id + } + + return "$result" + } + +ad_proc -callback application-track::getSpecificInfo -impl forums {} { + callback implementation + } { + + upvar $query_name my_query + upvar $elements_name my_elements + + set my_query { + SELECT f.name as name,f.thread_count as threads, + f.last_post, + to_char(o.creation_date, 'YYYY-MM-DD HH24:MI:SS') as creation_date + FROM forums_forums f,dotlrn_communities_full com,acs_objects o + WHERE com.community_id=:class_instance_id + and f.forum_id = o.object_id + and apm_package__parent_id(f.package_id) = com.package_id + } + + set my_elements { + name { + label "Name" + display_col name + html {align center} + + } + threads { + label "Threads" + display_col threads + html {align center} + } + creation_date { + label "creation_date" + display_col creation_date + html {align center} + } + last_post { + label "last_post" + display_col last_post + html {align center} + } + + + } + + return "OK" + } Index: dotlrn_packages/packages/forums/tcl/forums-callback-procs.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forums-callback-procs.xql (revision 0) +++ dotlrn_packages/packages/forums/tcl/forums-callback-procs.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,36 @@ + + + + + + update forums_messages + set last_poster = :to_user_id + where last_poster = :from_user_id + + + + + + update forums_messages + set user_id = :to_user_id + where user_id = :from_user_id + + + + + + select message_id, subject + from forums_messages + where user_id = :user_id + + + + + + select message_id, subject + from forums_messages + where last_poster = :user_id + + + + Index: dotlrn_packages/packages/forums/tcl/forums-email-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forums-email-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/forums-email-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,42 @@ +ad_library { + + Forums Library + + @creation-date 2002-05-17 + @author Ben Adida + @cvs-id $Id$ + +} + +namespace eval forum { namespace eval email {} } + +ad_proc -public forum::email::create_forward_email { + {-pre_body:required} + message_passed +} { + create email content to forward a message +} { + # Get the message data array + upvar $message_passed message + + # Variables for I18N message lookup: + set posting_date $message(posting_date_ansi) + set useScreenNameP [parameter::get -parameter "UseScreenNameP" -default 0] + if {$useScreenNameP != 0} { + set user_name $message(screen_name) + } else { + set user_name $message(user_name) + } + + # Set up the message body + set new_body "[ad_html_to_text -- $pre_body]" + append new_body "\n\n===================================\n\n" + append new_body "[_ forums.email_alert_body_header] +[_ forums.Forum_1] $message(forum_name) +Thread: $message(root_subject)\n\n" + append new_body [ad_html_text_convert -from $message(format) -to text/plain -- $message(content)] + + append new_body "\n\n-- \n[ad_url][ad_conn package_url]message-view?[export_vars -anchor $message(message_id) [list [list message_id $message(root_message_id)]]]\n" + + return $new_body +} Index: dotlrn_packages/packages/forums/tcl/forums-install-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forums-install-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/forums-install-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,66 @@ +ad_library { + Forums install callbacks + + @creation-date 2004-04-01 + @author Jeff Davis davis@xarg.net + @cvs-id $Id$ +} + +namespace eval forum::install {} + +ad_proc -private forum::install::package_install {} { + package install callback +} { + forum::sc::register_implementations +} + +ad_proc -private forum::install::package_uninstall {} { + package uninstall callback +} { + forum::sc::unregister_implementations +} + +ad_proc -private forum::install::package_upgrade { + {-from_version_name:required} + {-to_version_name:required} +} { + Package before-upgrade callback +} { + apm_upgrade_logic \ + -from_version_name $from_version_name \ + -to_version_name $to_version_name \ + -spec { + 1.1d3 1.1d4 { + # just need to install the forum_forum callback + forum::sc::register_forum_fts_impl + } + } +} + +ad_proc -private ::install::xml::action::forum-create { node } { + Create a forum instance from an install.xml file +} { + set url [apm_required_attribute_value $node url] + set name [apm_required_attribute_value $node name] + set presentation [apm_attribute_value -default "flat" $node presentation] + set id [apm_attribute_value -default "" $node id] + set posting_policy [apm_attribute_value -default "open" $node posting-policy] + + + set charter_node [lindex [xml_node_get_children_by_name [lindex $node 0] charter] 0] + set charter [xml_node_get_content $charter_node] + + set package_id [site_node::get_element -url $url -element package_id] + + set forum_id [forum::new \ + -name $name \ + -charter $charter \ + -presentation_type $presentation \ + -posting_policy $posting_policy \ + -package_id $package_id] + + if {![string equal $id ""]} { + set ::install::xml::ids($id) $forum_id + } +} + Index: dotlrn_packages/packages/forums/tcl/forums-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forums-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/forums-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,172 @@ +ad_library { + + Forums Library + + @creation-date 2002-05-17 + @author Ben Adida + @cvs-id $Id$ + +} + +namespace eval forum {} + + +ad_proc -public forum::new { + {-forum_id ""} + {-name:required} + {-charter ""} + {-presentation_type flat} + {-posting_policy open} + {-package_id:required} + -no_callback:boolean +} { + create a new forum +} { + set var_list [list \ + [list forum_id $forum_id] \ + [list name $name] \ + [list charter $charter] \ + [list presentation_type $presentation_type] \ + [list posting_policy $posting_policy] \ + [list package_id $package_id]] + + set forum_id [package_instantiate_object -var_list $var_list forums_forum] + + if {!$no_callback_p} { + callback forum::forum_new -package_id $package_id -forum_id $forum_id + } + + return $forum_id +} + +ad_proc -public forum::edit { + {-forum_id:required} + {-name:required} + {-charter ""} + {-presentation_type flat} + {-posting_policy open} + -no_callback:boolean +} { + edit a forum +} { + # This is a straight DB update + db_dml update_forum {} + db_dml update_forum_object {} + + if {!$no_callback_p} { + callback forum::forum_edit -package_id [ad_conn package_id] -forum_id $forum_id + } +} + +ad_proc -public forum::attachments_enabled_p {} { + if {[string eq forums [ad_conn package_key]]} { + set package_id [site_node_apm_integration::child_package_exists_p \ + -package_key attachments + ] + } else { + return 0 + } +} + +ad_proc -public forum::list_forums { + {-package_id:required} +} { + List all forums in a package +} { + return [db_list_of_ns_sets select_forums {}] +} + +ad_proc -public forum::get { + {-forum_id:required} + {-array:required} +} { + get the fields for a forum + + @return +} { + # Select the info into the upvar'ed Tcl Array + upvar $array row + if {![db_0or1row select_forum {} -column_array row]} { + error "Forum $forum_id not found" {} NOT_FOUND + } +} + +ad_proc -public forum::posting_policy_set { + {-posting_policy:required} + {-forum_id:required} +} { + # JCD: this is potentially bad since we are + # just assuming registered_users is the + # right group to be granting write to. + + if {![string equal closed $posting_policy]} { + permission::grant -object_id $forum_id \ + -party_id [acs_magic_object registered_users] \ + -privilege write + } else { + permission::revoke -object_id $forum_id \ + -party_id [acs_magic_object registered_users] \ + -privilege write + } + +} + +ad_proc -public forum::new_questions_allow { + {-forum_id:required} + {-party_id ""} +} { + if { [empty_string_p $party_id] } { + set party_id [acs_magic_object registered_users] + } + # Give the public the right to ask new questions + permission::grant -object_id $forum_id \ + -party_id $party_id \ + -privilege create + util_memoize_flush_regexp $forum_id +} + +ad_proc -public forum::new_questions_deny { + {-forum_id:required} + {-party_id ""} +} { + if { [empty_string_p $party_id] } { + set party_id [acs_magic_object registered_users] + } + # Revoke the right from the public to ask new questions + permission::revoke -object_id $forum_id \ + -party_id $party_id \ + -privilege create + util_memoize_flush_regexp $forum_id +} + +ad_proc -public forum::new_questions_allowed_p { + {-forum_id:required} + {-party_id ""} +} { + if { [empty_string_p $party_id] } { + set party_id [acs_magic_object registered_users] + } + permission::permission_p -object_id $forum_id \ + -party_id $party_id \ + -privilege create +} + +ad_proc -public forum::enable { + {-forum_id:required} +} { + # Enable the forum, no big deal + db_dml update_forum_enabled_p {} +} + +ad_proc -public forum::disable { + {-forum_id:required} +} { + db_dml update_forum_disabled_p {} +} + +ad_proc -public forum::use_ReadingInfo_p {} { + # this depends on site-wide package parameters implemented in openacs core + # http://openacs.org/bugtracker/openacs/patch?patch%5fnumber=845 + # return [parameter::get_from_package_key -package_key forums -parameter UseReadingInfo] + return 0 +} \ No newline at end of file Index: dotlrn_packages/packages/forums/tcl/forums-procs.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forums-procs.xql (revision 0) +++ dotlrn_packages/packages/forums/tcl/forums-procs.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,59 @@ + + + + + + update forums_forums + set name= :name, + charter= :charter, + presentation_type= :presentation_type, + posting_policy= :posting_policy + where forum_id = :forum_id + + + + + + update acs_objects + set title= :name + where object_id = :forum_id + + + + + + select forum_id, + name, + posting_policy, + presentation_type + from forums_forums + where package_id = :package_id + order by name + + + + + + select forums_forums.* + from forums_forums + where forums_forums.forum_id = :forum_id + + + + + + update forums_forums + set enabled_p = 't' + where forum_id = :forum_id + + + + + + update forums_forums + set enabled_p = 'f' + where forum_id = :forum_id + + + + Index: dotlrn_packages/packages/forums/tcl/forums-sc-procs-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forums-sc-procs-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/tcl/forums-sc-procs-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,46 @@ + + + + postgresql7.1 + + + + select site_node__url(node_id) + from site_nodes + where object_id = (select package_id + from forums_forums + where forums_forums.forum_id = :forum_id) + + + + + + select site_node__url(min(node_id)) + from site_nodes + where object_id = (select package_id + from forums_forums + where forums_forums.forum_id = :forum_id) + + + + + + select site_node__url(min(node_id)) + from site_nodes + where object_id = (select package_id + from forums_forums + where forums_forums.forum_id = :forum_id) + + + + + + select subject, content, format + from forums_messages + where message_id=:message_id or (tree_sortkey between tree_left(:tree_sortkey) and tree_right(:tree_sortkey)) + and forum_id=:forum_id + order by tree_sortkey + + + + Index: dotlrn_packages/packages/forums/tcl/forums-sc-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forums-sc-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/forums-sc-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,179 @@ +ad_library { + + Forums Library - Search Service Contracts + + @creation-date 2002-08-07 + @author Dave Bauer + @cvs-id $Id$ +} + +namespace eval forum::message {} + +ad_proc -private forum::message::datasource { message_id } { + @param message_id + @author dave@thedesignexperience.org + @creation_date 2002-08-07 + + returns a datasource for the search package + this is the content that will be indexed by the full text + search engine. + + We expect message_id to be a root message of a thread only, + and return the text of all the messages below + +} { + + # If there is no connection than this proc is called from the + # search indexer. In that case we set the locale to the + # system-wide default locale, since locale is needed for some part + # of the message formatting. + if { ![ad_conn isconnected] } { + ad_conn -set locale [lang::system::site_wide_locale] + } + + forum::message::get -message_id $message_id -array message + + if { ![empty_string_p $message(parent_id)] } { + ns_log Notice "forum::message::datasource was called with a message_id that has a parent - skipping: $message_id" + return {object_id {} name {} charter {} mime {} storage_type {}} + } + + set tree_sortkey $message(tree_sortkey) + set forum_id $message(forum_id) + set combined_content "" + set subjects [list] + lappend subjects $message(subject) + + db_foreach messages "" { + + # include the subject in the text if it is different from the thread's subject + set root_subject $message(subject) + regexp {^(?:Re: )+(.*)$} $subject match subject + + if { [string compare $subject $root_subject] != 0 } { + # different subject + append combined_content "$subject\n\n" + } + + append combined_content [ad_html_text_convert -from $format -to text/plain -- $content] + + # In case this text is not only used for indexing but also for display, beautify it + append combined_content "\n\n" + } + + return [list object_id $message(message_id) \ + title $message(subject) \ + content $combined_content \ + keywords {} \ + storage_type text \ + mime text/plain ] +} + +ad_proc -private forum::message::url { message_id } { + @param message_id + @author dave@thedesignexperience.org + @creation_date 2002-08-07 + + returns a url for a message to the search package + +} { + forum::message::get -message_id $message_id -array message + set forum_id $message(forum_id) + + + return "[db_string select_forums_package_url {}]message-view?message_id=$message_id" +} + + + +namespace eval forum::forum {} + +ad_proc -private forum::forum::datasource { + forum_id +} { + Datasource for the FtsContentProvider contract. + + @param forum_id + + @author Jeff Davis davis@xarg.net + @creation_date 2004-04-01 +} { + if {![db_0or1row datasource { + select + forum_id as object_id, + name as title, + charter as content, + 'text/plain' as mime, + 'text' as storage_type, + '' as keywords + from forums_forums + where forum_id = :forum_id + } -column_array datasource]} { + return {object_id {} name {} charter {} mime {} storage_type {}} + } + + return [array get datasource] +} + +ad_proc -private forum::forum::url { + forum_id +} { + url method for the FtsContentProvider contract + + @param forum_id + + @author Jeff Davis davis@xarg.net + @creation_date 2004-04-01 +} { + + return "[db_string select_forums_package_url {}]forum-view?forum_id=$forum_id" +} + + +namespace eval forum::sc {} + +ad_proc -private forum::sc::register_implementations {} { + Register the forum_forum and forum_message content type fts contract +} { + db_transaction { + forum::sc::register_forum_fts_impl + forum::sc::register_message_fts_impl + } +} + +ad_proc -private forum::sc::unregister_implementations {} { + db_transaction { + acs_sc::impl::delete -contract_name FtsContentProvider -impl_name forum_message + acs_sc::impl::delete -contract_name FtsContentProvider -impl_name forum_forum + } +} + +ad_proc -private forum::sc::register_forum_fts_impl {} { + set spec { + name "forums_forum" + aliases { + datasource forum::forum::datasource + url forum::forum::url + } + contract_name FtsContentProvider + owner forums + } + + acs_sc::impl::new_from_spec -spec $spec +} + + +ad_proc -private forum::sc::register_message_fts_impl {} { + set spec { + name "forums_message" + aliases { + datasource forum::message::datasource + url forum::message::url + } + contract_name FtsContentProvider + owner forums + } + + acs_sc::impl::new_from_spec -spec $spec +} + Index: dotlrn_packages/packages/forums/tcl/forums-security-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/forums-security-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/forums-security-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,161 @@ +ad_library { + + Forums Security Library + + @creation-date 2002-05-25 + @author Ben Adida + @cvs-id $Id$ + +} + +namespace eval forum::security { + + ad_proc -private do_abort {} { + do an abort if security violation + } { + if { [ad_conn user_id] == 0 } { + ad_redirect_for_registration + } else { + ad_returnredirect "not-allowed" + } + ad_script_abort + } + + ad_proc -public can_read_forum_p { + {-user_id ""} + {-forum_id:required} + } { + return [permission::permission_p -party_id $user_id -object_id $forum_id -privilege read] + } + + ad_proc -public require_read_forum { + {-user_id ""} + {-forum_id:required} + } { + if {![can_read_forum_p -user_id $user_id -forum_id $forum_id]} { + do_abort + } + } + + ad_proc -public can_read_message_p { + {-user_id ""} + {-message_id:required} + } { + # if the user is a guest, they can't see any forum messages at all + if { ![acs_privacy::user_can_read_private_data_p -user_id $user_id -object_id [ad_conn package_id]] } { + return 0 + } else { + return [permission::permission_p -party_id $user_id -object_id $message_id -privilege read] + } + } + + ad_proc -public require_read_message { + {-user_id ""} + {-message_id:required} + } { + if {![can_read_message_p -user_id $user_id -message_id $message_id]} { + do_abort + } + } + + ad_proc -public can_post_forum_p { + {-user_id ""} + {-forum_id:required} + } { + return [permission::permission_p -party_id $user_id -object_id $forum_id -privilege create] + } + + ad_proc -public require_post_forum { + {-user_id ""} + {-forum_id:required} + } { + if {![can_post_forum_p -user_id $user_id -forum_id $forum_id]} { + do_abort + } + } + + ad_proc -public can_post_message_p { + {-user_id ""} + {-message_id:required} + } { + return [permission::permission_p -party_id $user_id -object_id $message_id -privilege write] + } + + ad_proc -public require_post_message { + {-user_id ""} + {-message_id:required} + } { + if {![can_post_message_p -user_id $user_id -message_id $message_id]} { + do_abort + } + } + + ad_proc -public can_moderate_forum_p { + {-user_id ""} + {-forum_id:required} + } { + return [permission::permission_p -party_id $user_id -object_id $forum_id -privilege forum_moderate] + } + + ad_proc -public require_moderate_forum { + {-user_id ""} + {-forum_id:required} + } { + if {![can_moderate_forum_p -user_id $user_id -forum_id $forum_id]} { + do_abort + } + } + + ad_proc -public can_moderate_message_p { + {-user_id ""} + {-message_id:required} + } { + return [permission::permission_p -party_id $user_id -object_id $message_id -privilege forum_moderate] + } + + ad_proc -public require_moderate_message { + {-user_id ""} + {-message_id:required} + } { + if {![can_moderate_message_p -user_id $user_id -message_id $message_id]} { + do_abort + } + } + + ad_proc -public can_admin_forum_p { + {-user_id ""} + {-forum_id:required} + } { + return [permission::permission_p -party_id $user_id -object_id $forum_id -privilege forum_moderate] + } + + ad_proc -public require_admin_forum { + {-user_id ""} + {-forum_id:required} + } { + if {![can_admin_forum_p -user_id $user_id -forum_id $forum_id]} { + do_abort + } + } + + ad_proc -public permissions { + {-forum_id:required} + array_name + } { + upvar $array_name array + + array set array [list admin_p [forum::security::can_admin_forum_p -forum_id $forum_id]] + + if { !$array(admin_p) } { + array set array [list moderate_p [forum::security::can_moderate_forum_p -forum_id $forum_id]] + if { !$array(moderate_p) } { + array set array [list post_p [expr { [ad_conn user_id] == 0 || [forum::security::can_post_forum_p -forum_id $forum_id] }]] + } else { + array set array [list post_p 1] + } + } else { + array set array [list moderate_p 1] + array set array [list post_p 1] + } + } +} Index: dotlrn_packages/packages/forums/tcl/messages-format-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/messages-format-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/messages-format-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,52 @@ +ad_library { + message formatting procs +} + +namespace eval forum::format { + + ad_proc -public reply_subject { parent_subject } { + + Generates a subject string for a reply to an existing message. + + } { + set subject "[_ forums.Re] $parent_subject" + + # trim multiple leading Re: + regsub {^(\s*Re:\s*)*} $subject {Re: } subject + + return $subject + } + + ad_proc emoticons { + {-content:required} + } { + Convert smileys (emoticons) to img references. It constructs a relative + image reference to graphics/imagename.gif, so it will only work when + used from pages that are directly under the forums/www/ directory. + +

+ + If you change the images make sure to also adapt the image sizes in + the img tag that gets constructed here. + } { + set emoticons_map [list] + + # if you change this list, consider changing + # www/doc/emoticons.adp as well + foreach { emoticon image } { + ":-)" "smile" + ";-)" "wink" + ":-D" "bigsmile" + "8-)" "smile8" + ":-(" "sad" + ";-(" "cry" + ":-O" "scream" + ":-/" "think" + } { + lappend emoticons_map $emoticon + lappend emoticons_map "\"$emoticon\"" + } + return [string map $emoticons_map $content] + } + +} Index: dotlrn_packages/packages/forums/tcl/messages-procs-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/messages-procs-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/tcl/messages-procs-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,66 @@ + + + + oracle8.1.6 + + + + select forums_messages.*, + 0 as n_attachments, + person.name(forums_messages.user_id) as user_name, + party.email(forums_messages.user_id) as user_email, + forums_forum.name(forums_messages.forum_id) as forum_name, + forums_message.root_message_id(forums_messages.message_id) as root_message_id, + (select fm2.subject + from forums_messages fm2 + where fm2.message_id = forums_message.root_message_id(forums_messages.message_id)) as root_subject, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi + from forums_messages + where forums_messages.message_id = :message_id + + + + + + select forums_messages.*, + (select count(*) from attachments where object_id= message_id) as n_attachments, + person.name(forums_messages.user_id) as user_name, + party.email(forums_messages.user_id) as user_email, + forums_forum.name(forums_messages.forum_id) as forum_name, + forums_message.root_message_id(forums_messages.message_id) as root_message_id, + (select fm2.subject + from forums_messages fm2 + where fm2.message_id = forums_message.root_message_id(forums_messages.message_id)) as root_subject, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi + from forums_messages + where forums_messages.message_id = :message_id + + + + + + select site_node.url(node_id) + from site_nodes + where object_id = (select package_id + from forums_forums + where forums_forums.forum_id = :forum_id) + + + + + + declare begin + forums_message.thread_close(:message_id); + end; + + + + + + declare begin + forums_message.thread_open(:message_id); + end; + + + + Index: dotlrn_packages/packages/forums/tcl/messages-procs-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/messages-procs-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/tcl/messages-procs-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,66 @@ + + + + postgresql7.1 + + + + select forums_messages.*, + tree_level(forums_messages.tree_sortkey) as tree_level, + person__name(forums_messages.user_id) as user_name, + party__email(forums_messages.user_id) as user_email, + forums_forum__name(forums_messages.forum_id) as forum_name, + forums_message__root_message_id(forums_messages.message_id) as root_message_id, + users.screen_name, + (select fm2.subject + from forums_messages fm2 + where fm2.message_id = forums_message__root_message_id(forums_messages.message_id)) as root_subject, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi + from forums_messages, users + where forums_messages.message_id= :message_id + and forums_messages.user_id = users.user_id + + + + + + select forums_messages.*, + (select count(*) from attachments where object_id= message_id) as n_attachments, + person__name(forums_messages.user_id) as user_name, + party__email(forums_messages.user_id) as user_email, + forums_forum__name(forums_messages.forum_id) as forum_name, + forums_message__root_message_id(forums_messages.message_id) as root_message_id, + users.screen_name, + (select fm2.subject + from forums_messages fm2 + where fm2.message_id = forums_message__root_message_id(forums_messages.message_id)) as root_subject, + to_char(forums_messages.posting_date, 'YYYY-MM-DD HH24:MI:SS') as posting_date_ansi + from forums_messages, users + where forums_messages.message_id= :message_id + and forums_messages.user_id = users.user_id + + + + + + select site_node__url(node_id) + from site_nodes + where object_id = (select package_id + from forums_forums + where forums_forums.forum_id = :forum_id) + + + + + + select forums_message__thread_close(:message_id); + + + + + + select forums_message__thread_open(:message_id); + + + + Index: dotlrn_packages/packages/forums/tcl/messages-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/messages-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/messages-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,371 @@ +ad_library { + + Forums Library - for Messages + + @creation-date 2002-05-20 + @author Ben Adida + @cvs-id $Id$ + +} + +namespace eval forum::message {} + +ad_proc -public forum::message::new { + {-forum_id:required} + {-message_id ""} + {-parent_id ""} + {-subject:required} + {-content:required} + {-format "text/plain"} + {-user_id ""} + -no_callback:boolean +} { + create a new message +} { + # If no user_id is provided, we set it + # to the currently logged-in user + if {[empty_string_p $user_id]} { + set user_id [ad_conn user_id] + } + + set original_message_id $message_id + + db_transaction { + + set var_list [list \ + [list forum_id $forum_id] \ + [list message_id $message_id] \ + [list parent_id $parent_id] \ + [list subject $subject] \ + [list content $content] \ + [list format $format] \ + [list user_id $user_id]] + + + set message_id [package_instantiate_object -var_list $var_list forums_message] + + get -message_id $message_id -array message + if {[info exists message(state)] && [string equal $message(state) approved]} { + do_notifications -message_id $message_id -user_id $user_id + } + + } on_error { + + db_abort_transaction + + # Check to see if the message with a message_id matching the + # message_id arguement was in the database before calling + # this procedure. If so, the error is due to a double click + # and we should continue without returning an error. + + if {![empty_string_p $original_message_id]} { + # The was a non-null message_id arguement + if {[db_string message_exists_p { *SQL* }]} { + return $message_id + } else { + # OK - it wasn't a simple double-click, so bomb + ad_return_error \ + "OACS Internal Error" \ + "Error in forums::message::new - $errmsg" + } + } + } + + return $message_id +} + +ad_proc -public forum::message::do_notifications { + {-message_id:required} + {-user_id ""} +} { + # Select all the important information + forum::message::get -message_id $message_id -array message + + set forum_id $message(forum_id) + set url "[ad_url][db_string select_forums_package_url {}]" + + set useScreenNameP [parameter::get -parameter "UseScreenNameP" -default 0] + if {($useScreenNameP == 0) && ($user_id != 0)} { + if {[empty_string_p $user_id]} { + set user_id [ad_conn user_id] + } + } else { + set user_id [party::get_by_email -email [ad_parameter -package_id [ad_acs_kernel_id] HostAdministrator]] + } + set notif_user $user_id + + set attachments [attachments::get_attachments -object_id $message(message_id)] + + set message_text [ad_html_text_convert -from $message(format) -to text/plain -- $message(content)] + set message_html [ad_html_text_convert -from $message(format) -to text/html -- $message(content)] + + set html_version "" + append html_version "Forum: $message(forum_name)
\n" + append html_version "Thread: $message(root_subject)
\n" + if {$useScreenNameP == 0} { + append html_version "Author: $message(user_name)
\n" + } else { + append html_version "Author: $message(screen_name)
\n" + } + append html_version "Posted: $message(posting_date)
" + append html_version "\n
\n" + append html_version $message_html + append html_version "

" + + if {[llength $attachments] > 0} { + append html_version "Attachments: +

    " + + foreach attachment $attachments { + append html_version "
  • [lindex $attachment 1]
  • " + } + append html_version "
" + + } + + set html_version $html_version + + set text_version "" + append text_version " +Forum: $message(forum_name) +Thread: $message(root_message_id)\n" + if {$useScreenNameP == 0} { + append text_version "Author: $message(user_name)" + } else { + append text_version "Author: $message(screen_name)" + } + append text_version " +Posted: $message(posting_date) +---------------------------------- +$message_text +--------------------------------- +To post a reply to this email or view this message go to: +${url}message-view?message_id=$message(root_message_id) + +To view Forum $message(forum_name) go to: +${url}forum-view?forum_id=$message(forum_id) +" + # Do the notification for the forum + notification::new \ + -type_id [notification::type::get_type_id \ + -short_name forums_forum_notif] \ + -object_id $message(forum_id) \ + -response_id $message(message_id) \ + -notif_subject "\[$message(forum_name)\] $message(subject)" \ + -notif_text $text_version \ + -notif_html $html_version + + + # Eventually we need notification for the root message too + notification::new \ + -type_id [notification::type::get_type_id \ + -short_name forums_message_notif] \ + -object_id $message(root_message_id) \ + -response_id $message(message_id) \ + -notif_subject "\[$message(forum_name)\] $message(subject)" \ + -notif_text $text_version \ + -notif_html $html_version +} + +ad_proc -public forum::message::edit { + {-message_id:required} + {-subject:required} + {-content:required} + {-format:required} + -no_callback:boolean +} { + Editing a message. There is no versioning here! + This means this function is for admins only! +} { + # do the update + db_dml update_message {} + db_dml update_message_title {} + + if {!$no_callback_p} { + callback forum::message_edit -package_id [ad_conn package_id] -message_id $message_id + } +} + +ad_proc -public forum::message::set_format { + {-message_id:required} + {-format:required} +} { + set whether a message is HTML or not +} { + # Straight update to the DB + db_dml update_message_format +} + +ad_proc -public forum::message::get { + {-message_id:required} + {-array:required} +} { + get the fields for a message +} { + # Select the info into the upvar'ed Tcl Array + upvar $array row + + set query select_message + + if {[ad_conn isconnected] && [forum::attachments_enabled_p]} { + set query select_message_with_attachment + } + + if {![db_0or1row $query {} -column_array row]} { + if {[array exists row]} { + array unset row + } + } else { + # Convert to user's date/time format + set row(posting_date_ansi) [lc_time_system_to_conn $row(posting_date_ansi)] + set row(posting_date_pretty) [lc_time_fmt $row(posting_date_ansi) "%x %X"] + } +} + +ad_proc -private forum::message::set_state { + {-message_id:required} + {-state:required} +} { + Set the new state for a message + Usually used for approval +} { + set var_list [list \ + [list message_id $message_id] \ + [list state $state]] + package_exec_plsql -var_list $var_list forums_message set_state +} + +ad_proc -public forum::message::reject { + {-message_id:required} +} { + Reject a message +} { + set_state -message_id $message_id -state rejected +} + +ad_proc -public forum::message::approve { + {-message_id:required} +} { + approve a message +} { + db_transaction { + set_state -message_id $message_id -state approved + do_notifications -message_id $message_id + } +} + +ad_proc -public forum::message::delete { + {-message_id:required} + -no_callback:boolean +} { + delete a message and obviously all of its descendents +} { + db_transaction { + if {!$no_callback_p} { + callback forum::message_delete -package_id [ad_conn package_id] -message_id $message_id + } + + if { [forum::use_ReadingInfo_p] && [expr { [db_string is_root "select parent_id from forums_messages where message_id = :message_id"] == "" } ] } { + set db_antwort [db_string forums_reading_info__remove_msg { + select forums_reading_info__remove_msg ( + :message_id + ); + }] + } + + + # Remove the notifications + notification::request::delete_all -object_id $message_id + + # Remove the message + set var_list [list [list message_id $message_id]] + package_exec_plsql -var_list $var_list forums_message delete_thread + } +} + +ad_proc -public forum::message::close { + {-message_id:required} +} { + close a thread + This is not exactly a cheap operation if the thread is long +} { + db_exec_plsql thread_close {} +} + +ad_proc -public forum::message::open { + {-message_id:required} +} { + reopen a thread + This is not exactly a cheap operation if the thread is long +} { + db_exec_plsql thread_open {} +} + +ad_proc -public forum::message::get_attachments { + {-message_id:required} +} { + get the attachments for a message +} { + # If attachments aren't enabled, then we stop + if {![forum::attachments_enabled_p]} { + return [list] + } + + return [attachments::get_attachments -object_id $message_id] +} + +ad_proc -public forum::message::subject_sort_filter { + -forum_id:required + -order_by:required +} { + Return a piece of HTML for toggling the sort order of threads (subjects) + in a forum. The user can either sort by the first postings in subjects + (the creation date of the subjects) or the last one. + + @author Peter Marklund +} { + set subject_label "[_ forums.lt_First_post_in_subject]" + set child_label "[_ forums.Last_post_in_subject]" + set new_order_by [ad_decode $order_by posting_date last_child_post posting_date] + + set export_vars [ad_export_vars -override [list [list order_by $new_order_by]] {order_by forum_id}] + set toggle_url "[ad_conn url]?${export_vars}" + if { [string equal $order_by posting_date] } { + # subject selected + set subject_link "$subject_label" + set child_link "$child_label" + } else { + # child selected + set subject_link "$subject_label" + set child_link "$child_label" + } + set sort_filter "$subject_link | $child_link" + + return $sort_filter +} + +ad_proc -public forum::message::initial_message { + {-forum_id {}} + {-parent {}} + {-message:required} +} { + Create an array with values initialised for a new message. +} { + upvar $message init_msg + + if { [empty_string_p $forum_id] && [empty_string_p $parent] } { + return -code error [_ forums.lt_You_either_have_to] + } + + if { ![empty_string_p $parent] } { + upvar $parent parent_msg + + set init_msg(parent_id) $parent_msg(message_id) + set init_msg(forum_id) $parent_msg(forum_id) + set init_msg(subject) \ + [forum::format::reply_subject $parent_msg(subject)] + } else { + set init_msg(forum_id) $forum_id + set init_msg(parent_id) "" + } +} Index: dotlrn_packages/packages/forums/tcl/messages-procs.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/messages-procs.xql (revision 0) +++ dotlrn_packages/packages/forums/tcl/messages-procs.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,38 @@ + + + + + + update forums_messages + set format = :format + where message_id = :message_id + + + + + + update acs_objects + set title = :subject + where object_id = :message_id and object_type = 'forums_message' + + + + + + update forums_messages + set subject = :subject, + content = :content, + format = :format + where message_id = :message_id + + + + + + select count(message_id) + from forums_messages + where message_id = :message_id + + + + Index: dotlrn_packages/packages/forums/tcl/test/forums-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/test/forums-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/test/forums-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,303 @@ +ad_library { + Automated tests. + + @author Simon Carstensen + @creation-date 15 November 2003 + @author Gerardo Morales + @author Mounir Lallali + @cvs-id $Id$ +} + +aa_register_case -cats {api smoke} forum_new { + Test the forum::new proc. +} { + + aa_run_with_teardown \ + -rollback \ + -test_code { + + # Create forum + set forum_id [forum::new \ + -name "foo" \ + -package_id [ad_conn package_id]] + + set success_p [db_string success_p { + select 1 from forums_forums where forum_id = :forum_id + } -default "0"] + + aa_equals "forum was created succesfully" $success_p 1 + } +} + +aa_register_case -cats {api smoke} forum_message_new { + Test the forum::message::new proc. +} { + + aa_run_with_teardown \ + -rollback \ + -test_code { + + # Create forum + set forum_id [forum::new \ + -name "foo" \ + -package_id [ad_conn package_id]] + + # Create message + set message_id [forum::message::new \ + -forum_id $forum_id \ + -subject "foo" \ + -content "foo"] + + set success_p [db_string success_p { + select 1 from forums_messages where message_id = :message_id + } -default "0"] + + aa_equals "message was created succesfully" $success_p 1 + } +} + +aa_register_case -cats {db smoke} forum_count_test { + Test the thread count and reply count tracking code. +} { + + aa_run_with_teardown \ + -rollback \ + -test_code { + + # Create open forum + set forum_id [forum::new \ + -name foo \ + -package_id [ad_conn package_id]] + + forum::get -forum_id $forum_id -array forum + aa_equals "New forum has zero approved threads" $forum(approved_thread_count) 0 + aa_equals "New forum has zero threads" $forum(thread_count) 0 + + # Create message + set message_id [forum::message::new \ + -forum_id $forum_id \ + -subject foo \ + -content foo] + + forum::get -forum_id $forum_id -array forum + aa_equals "After post forum has one approved thread" $forum(approved_thread_count) 1 + aa_equals "After post forum has one threads" $forum(thread_count) 1 + + forum::message::get -message_id $message_id -array message + aa_equals "New post has zero approved replies" $message(approved_reply_count) 0 + aa_equals "New post has zero threads" $message(reply_count) 0 + + set reply_id [forum::message::new \ + -forum_id $forum_id \ + -parent_id $message_id \ + -subject foo \ + -content foo] + + forum::get -forum_id $forum_id -array forum + aa_equals "After reply forum has one approved thread" $forum(approved_thread_count) 1 + aa_equals "After reply forum has one thread" $forum(thread_count) 1 + + forum::message::get -message_id $message_id -array message + aa_equals "After reply post has one approved replies" $message(approved_reply_count) 1 + aa_equals "After reply post has one reply" $message(reply_count) 1 + + # Create moderated forum + set forum_id [forum::new \ + -name bar \ + -posting_policy moderated \ + -package_id [ad_conn package_id]] + + # Create message + set message_id [forum::message::new \ + -forum_id $forum_id \ + -subject "foo" \ + -content "foo"] + + forum::get -forum_id $forum_id -array forum + aa_equals "After post moderated forum has zero approved threads" $forum(approved_thread_count) 0 + aa_equals "After post moderated forum has one thread" $forum(thread_count) 1 + + set reply_id [forum::message::new \ + -forum_id $forum_id \ + -parent_id $message_id \ + -subject "foo" \ + -content "foo"] + + forum::message::get -message_id $message_id -array message + aa_equals "After reply moderated post has zero approved replies" $message(approved_reply_count) 0 + aa_equals "After reply moderated post has one reply" $message(reply_count) 1 + + forum::message::set_state -message_id $message_id -state approved + + forum::get -forum_id $forum_id -array forum + aa_equals "After approval moderated forum has one approved thread" $forum(approved_thread_count) 1 + aa_equals "After approval moderated forum has one thread" $forum(thread_count) 1 + + forum::message::set_state -message_id $reply_id -state approved + + forum::message::get -message_id $message_id -array message + aa_equals "After reply approval post has one approved reply" $message(approved_reply_count) 1 + aa_equals "After reply approval post has one reply" $message(reply_count) 1 + + forum::message::delete -message_id $message_id + + forum::get -forum_id $forum_id -array forum + aa_equals "After deletion moderated forum has zero approved threads" $forum(approved_thread_count) 0 + aa_equals "After deletion moderated forum has zero threads" $forum(thread_count) 0 + } +} + + +aa_register_case -cats {web smoke} -libraries tclwebtest web_forum_new { + Testing the creation of a forum via web +} { + + aa_run_with_teardown -test_code { + + tclwebtest::cookies clear + + # Login user + array set user_info [twt::user::create -admin] + twt::user::login $user_info(email) $user_info(password) + + # Create a new forum + set name [ad_generate_random_string] + set response [forums::twt::new "$name"] + aa_display_result -response $response -explanation {Webtest for the creation of a new Forum} + + twt::user::logout + } + +} + +aa_register_case -cats {web smoke} -libraries tclwebtest web_forum_edit { + Testing the edition of an existing forum +} { + + aa_run_with_teardown -test_code { + + tclwebtest::cookies clear + + # Login user + array set user_info [twt::user::create -admin] + twt::user::login $user_info(email) $user_info(password) + + # Create a forum + set name [ad_generate_random_string] + forums::twt::new "$name" + + # Edit the created forum + set response [forums::twt::edit "$name"] + aa_display_result -response $response -explanation {Webtest for the edition of a forum} + + twt::user::logout + } +} + +aa_register_case -cats {web smoke} -libraries tclwebtest web_message_new { + Posting a new message to an existing forum +} { + + + aa_run_with_teardown -test_code { + + tclwebtest::cookies clear + + # Login user + array set user_info [twt::user::create -admin] + twt::user::login $user_info(email) $user_info(password) + + # Create a forum + set name [ad_generate_random_string] + forums::twt::new "$name" + + # Post a message in the created forum + set subject [ad_generate_random_string] + set response [forums::twt::new_post "$name" "$subject"] + aa_display_result -response $response -explanation {Webtest for posting a message in a forum} + + twt::user::logout + } +} + +aa_register_case -cats {web smoke} -libraries tclwebtest web_message_edit { + Editing a message of a forum +} { + + aa_run_with_teardown -test_code { + + tclwebtest::cookies clear + + # Login user + array set user_info [twt::user::create -admin] + twt::user::login $user_info(email) $user_info(password) + + # Create a forum + set name [ad_generate_random_string] + forums::twt::new "$name" + + # Post a message in the created forum + set subject [ad_generate_random_string] + forums::twt::new_post "$name" "$subject" + + # Edit the posted message + set response [forums::twt::edit_post "$name" "$subject"] + aa_display_result -response $response -explanation {Webtest for editing the message of a forum} + + twt::user::logout + } +} + +aa_register_case -cats {web smoke} -libraries tclwebtest web_message_reply { + Post a reply a message in the forum +} { + aa_run_with_teardown -test_code { + + tclwebtest::cookies clear + + # Login user + array set user_info [twt::user::create -admin] + twt::user::login $user_info(email) $user_info(password) + + # Create a forum + set name [ad_generate_random_string] + forums::twt::new "$name" + + # Post a message in the created forum + set subject [ad_generate_random_string] + forums::twt::new_post "$name" "$subject" + + # Edit the posted message + set response [forums::twt::reply_msg "$name" "$subject"] + aa_display_result -response $response -explanation {Webtest for posting a reply to a msg in the forum} + + twt::user::logout + } +} + +aa_register_case -cats {web smoke} -libraries tclwebtest web_message_delete { + Delete a message in the forum +} { + aa_run_with_teardown -test_code { + + tclwebtest::cookies clear + + # Login user + array set user_info [twt::user::create -admin] + twt::user::login $user_info(email) $user_info(password) + + # Create a forum + set name [ad_generate_random_string] + forums::twt::new "$name" + + # Post a message in the created forum + set subject [ad_generate_random_string] + forums::twt::new_post "$name" "$subject" + + # Edit the posted message + set response [forums::twt::delete_post "$name" "$subject"] + aa_display_result -response $response -explanation {Webtest for deleting a message posted in the forum} + + twt::user::logout + } +} \ No newline at end of file Index: dotlrn_packages/packages/forums/tcl/test/tclwebtest-procs.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/tcl/test/tclwebtest-procs.tcl (revision 0) +++ dotlrn_packages/packages/forums/tcl/test/tclwebtest-procs.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,273 @@ +ad_library { + Automated tests. + @author Gerardo Morales (gerardo.morales@gmail.net) + @author Mounir Lallali + + @creation-date 14 June 2005 + +} + +namespace eval forums::twt { + + ad_proc new { name } { + + set response 0 + + # The Faq Admin page url + set forum_admin_page [aa_get_first_url -package_key forums] + ::twt::do_request $forum_admin_page + + # Seting the charter that would be used in the forum creation form + set charter "[ad_generate_random_string] [ad_generate_random_string]" + + # Follows the link of New Forum + tclwebtest::link follow "New Forum" + tclwebtest::form find ~n "forum" + tclwebtest::field find ~n "name" + tclwebtest::field fill "$name" + tclwebtest::field find ~n "charter" + tclwebtest::field fill "$charter" + tclwebtest::form submit + aa_log "Forum $name just to be created" + + set response_url [tclwebtest::response url] + aa_log $forum_admin_page + + if {[string first $forum_admin_page $response_url]!=-1} { + + if { [catch {tclwebtest::link find $name} testerror1] ||[catch {tclwebtest::assert text $charter} testerror2 ] } { + aa_error "The forum $name was not created. The forum name or the charter was not founded in the admin page of forums" + } else { + aa_log "The forum $name was succesfully created" + set response 1 + } + + } else { + aa_error "forums::twt::new failed, bad response url : $response_url" + } + + return $response + } + + ad_proc edit { name } { + + set response 0 + + # Call to the faq admin page + set forum_admin_page [aa_get_first_url -package_key forums] + ::twt::do_request $forum_admin_page + + # Follows the link of administration and then admin the forum + tclwebtest::link follow $name + tclwebtest::link follow "Administer" + aa_log "The data of the $name forum will be changed" + + set charter "[ad_generate_random_string] [ad_generate_random_string 8]" + + # Enter the new data and submit + tclwebtest::form find ~n "forum" + tclwebtest::field find ~n "name" + tclwebtest::field fill "Edited $name" + tclwebtest::field find ~n "charter" + tclwebtest::field fill "Edited $charter" + tclwebtest::form submit + aa_log "Form Submited" + + # Testing the edition + set response_url [tclwebtest::response url] + + if {[string first "forum-view" $response_url]!=-1 && [string first $forum_admin_page $response_url]!=-1 } { + + ::twt::do_request $forum_admin_page + + if { [catch {tclwebtest::link find "Edited $name"} testerror1] ||[catch {tclwebtest::assert text "$charter"} testerror2 ] } { + aa_error "The forum $name was not Edited. The forum name or the charter was not founded in the admin page of forums" + } else { + aa_log "The forum $name was succesfully edited, new name Edited $name" + set response 1 + } + + } else { + aa_error "forums::twt::edit failed, bad response url : $response_url" + } + + return $response + } + + ad_proc new_post {name subject} { + + set response 0 + # Seting the Subject and Body of the new post + set msgb "[ad_generate_random_string] [ad_generate_random_string 20]" + + # Call to the faq admin page + set forum_admin_page [aa_get_first_url -package_key forums] + ::twt::do_request $forum_admin_page + + # Follows the link of administration and then the Post a new message + tclwebtest::link follow $name + tclwebtest::link follow "Post a New Message" + + # Enter the data and submit + tclwebtest::form find ~n "message" + tclwebtest::field find ~n "subject" + tclwebtest::field fill "$subject" + tclwebtest::field find ~n "message_body" + tclwebtest::field fill "$msgb" + tclwebtest::form submit + aa_log "New message form submited" + + set response_url [tclwebtest::response url] + + if {[string first "message-view" $response_url]!=-1 && [string first $forum_admin_page $response_url]!=-1 } { + + tclwebtest::link follow "$name" + + # Testing the message + if {[catch {tclwebtest::link follow "$subject"}]} { + aa_error "The messaje was not posted" + } + + if { [catch {tclwebtest::assert text "$msgb"} testerror2 ] } { + aa_error "The body of the message was not correctly posted" + } else { + aa_log "The message was succesfully posted" + set response 1 + } + + } else { + aa_error "forums::twt::new_post failed, bad response url : $response_url" + } + + return $response + } + + ad_proc edit_post {name subject} { + + set response 0 + + # Seting the new body of the message + set msgb2 "[ad_generate_random_string] [ad_generate_random_string 20]" + + # Call to the faq admin page + set forum_admin_page [aa_get_first_url -package_key forums] + ::twt::do_request $forum_admin_page + + + # Follows the link of administration and then Edit the posted message + tclwebtest::link follow $name + tclwebtest::link follow $subject + tclwebtest::link follow Edit + + # Fill and submit the form for editing + tclwebtest::form find ~n "message" + tclwebtest::field find ~n "subject" + tclwebtest::field fill "Edited $subject" + tclwebtest::field find ~n "message_body" + tclwebtest::field fill "$msgb2" + tclwebtest::form submit + aa_log "Edit message form submited" + + set response_url [tclwebtest::response url] + + if {[string first "message-view" $response_url]!=-1 && [string first $forum_admin_page $response_url]!=-1 } { + + # Testing if the new text is in the message + if {[catch {tclwebtest::link follow "Edited $subject"}]} { + aa_error "The messaje was not edited" + } + + if { [catch {tclwebtest::assert text "$msgb2"} testerror2 ] } { + aa_error "The body of the message was not correctly edited" + } else { + aa_log "The message $subject of the forum $name was succesfully edited" + set response 1 + } + + } else { + aa_error "forums::twt::edit_post failed, bad response url : $response_url" + } + + return $response + } + + ad_proc delete_post {name subject} { + + set response 0 + # Call to the faq admin page + set forum_admin_page [aa_get_first_url -package_key forums] + ::twt::do_request $forum_admin_page + + # Follows the link of administration and then Edit the posted message + tclwebtest::link follow $name + tclwebtest::link follow $subject + tclwebtest::link follow Delete + tclwebtest::link follow Yes + + set response_url [tclwebtest::response url] + + # Testing if the the message is not in the forum + if {[string first "forum-view" $response_url]!=-1 && [string first $forum_admin_page $response_url]!=-1 } { + + if {[catch {tclwebtest::link follow "Edited $subject"}]} { + aa_log "The message $subject was succesfully deleted in the forum $name" + set response 1 + } else { + aa_error "The message $subject of the forum $name was not deleted" + } + + } else { + aa_error "forums::twt::delete_post failed, bad response url : $response_url" + } + + return $response + } + + ad_proc reply_msg {name subject} { + + set response 0 + + # Seting the new body of the message + set msgb_reply "[ad_generate_random_string] [ad_generate_random_string 20]" + + # Call to the faq admin page + set forum_admin_page [aa_get_first_url -package_key forums] + ::twt::do_request $forum_admin_page + + + # Follows the link of administration and then Edit the posted message + tclwebtest::link follow $name + tclwebtest::link follow $subject + tclwebtest::link follow "Post a Reply" + + # Fill and submit the form for editing + tclwebtest::form find ~n "message" + tclwebtest::field find ~n "message_body" + tclwebtest::field fill "$msgb_reply" + tclwebtest::form submit + aa_log "Reply message submitted" + + set response_url [tclwebtest::response url] + + # Testing if the new text is in the message + if {[string first "message-view" $response_url]!=-1 && [string first $forum_admin_page $response_url]!=-1 } { + + if {[catch {tclwebtest::link find "Re: $subject"}]} { + aa_error "The reply message was not posted" + } + + if { [catch {tclwebtest::assert text "$msgb_reply"} testerror2 ] } { + aa_error "The body of the replyed message was not correctly posted" + } else { + aa_log "The reply message to $subject of the forum $name was succesfully posted" + set response 1 + } + + } else { + aa_error "forums::twt::reply_msg failed, bad response url : $response_url" + } + + return $response + } + +} \ No newline at end of file Index: dotlrn_packages/packages/forums/www/admin/forum-disable.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/forum-disable.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/admin/forum-disable.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,18 @@ +ad_page_contract { + + Disable a Forum + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-28 + @cvs-id $Id$ + +} { + forum_id:integer,notnull +} + +forum::disable -forum_id $forum_id + +ad_returnredirect "." + + + Index: dotlrn_packages/packages/forums/www/admin/forum-edit.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/forum-edit.adp (revision 0) +++ dotlrn_packages/packages/forums/www/admin/forum-edit.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,14 @@ + +Edit Forum: @forum.name;noquote@ +@context;noquote@ +forum.name + + +#forums.This_forum_is# #forums.enabled#. #forums.You_may# #forums.disable_it#. + + +#forums.This_forum_is# #forums.disabled#. #forums.You_may# #forums.enable_it#. + +

+ + Index: dotlrn_packages/packages/forums/www/admin/forum-edit.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/forum-edit.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/admin/forum-edit.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,25 @@ +ad_page_contract { + + Edit a Forum + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-25 + @cvs-id $Id$ + +} { + forum_id:integer,notnull + {return_url "."} +} + +# Select the info +set package_id [ad_conn package_id] +forum::get -forum_id $forum_id -array forum + +# Proper scoping? +if {$package_id != $forum(package_id)} { + ns_log Error "Forum Administration: Bad Scoping of Forum #$forum_id in Forum Editing" + ad_returnredirect "./" + ad_script_abort +} + +set context [list [_ forums.Edit_forum]] Index: dotlrn_packages/packages/forums/www/admin/forum-enable.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/forum-enable.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/admin/forum-enable.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,18 @@ +ad_page_contract { + + Disable a Forum + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-28 + @cvs-id $Id$ + +} { + forum_id:integer,notnull +} + +forum::enable -forum_id $forum_id + +ad_returnredirect "." + + + Index: dotlrn_packages/packages/forums/www/admin/forum-new.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/forum-new.adp (revision 0) +++ dotlrn_packages/packages/forums/www/admin/forum-new.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,6 @@ + +#forums.Create_New_Forum# +@context;noquote@ +forum.name + + Index: dotlrn_packages/packages/forums/www/admin/forum-new.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/forum-new.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/admin/forum-new.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,15 @@ +ad_page_contract { + + Create a Forum + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-25 + @cvs-id $Id$ + +} -query { + {name ""} +} + +set context [list [_ forums.Create_New_Forum]] + +ad_return_template Index: dotlrn_packages/packages/forums/www/admin/index.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/index.adp (revision 0) +++ dotlrn_packages/packages/forums/www/admin/index.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,7 @@ + +#forums.lt_Forums_Administration# + + + + + Index: dotlrn_packages/packages/forums/www/admin/index.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/index.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/admin/index.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,10 @@ +ad_page_contract { + + Forums Administration + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-24 + @cvs-id $Id$ + +} + Index: dotlrn_packages/packages/forums/www/admin/permissions-user-add.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/permissions-user-add.adp (revision 0) +++ dotlrn_packages/packages/forums/www/admin/permissions-user-add.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,5 @@ + + @page_title@ + @context@ + + Index: dotlrn_packages/packages/forums/www/admin/permissions-user-add.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/permissions-user-add.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/admin/permissions-user-add.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,20 @@ +ad_page_contract { + Redirect page for adding users to the permissions list. + + @author Lars Pind (lars@collaboraid.biz) + @creation-date 2003-06-13 + @cvs-id $Id$ +} { + object_id:integer +} + +if { $object_id == [ad_conn package_id] } { + set what "Package" +} else { + forum::get -forum_id $object_id -array forum + set what "$forum(name)" +} + +set page_title "Add User on $what" + +set context [list [list [export_vars -base permissions { object_id }] "$what Permissions"] $page_title] Index: dotlrn_packages/packages/forums/www/admin/permissions.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/permissions.adp (revision 0) +++ dotlrn_packages/packages/forums/www/admin/permissions.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,5 @@ + + @page_title@ + @context@ + + Index: dotlrn_packages/packages/forums/www/admin/permissions.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/permissions.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/admin/permissions.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,19 @@ +ad_page_contract { + Permissions for the subsite itself. + + @author Lars Pind (lars@collaboraid.biz) + @creation-date 2003-06-13 + @cvs-id $Id$ +} { + object_id:integer +} + +if { $object_id == [ad_conn package_id] } { + set page_title "Permissions" +} else { + forum::get -forum_id $object_id -array forum + set page_title "$forum(name) Permissions" +} + +set context [list $page_title] + Index: dotlrn_packages/packages/forums/www/admin/subscribe-others-2.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/subscribe-others-2.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/admin/subscribe-others-2.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,154 @@ +ad_page_contract { + + Subscribe a list of email addresses to a forum (process form) + + @author Jade Rubick (jade@rubick.com) + @creation-date 2005-04-08 + @cvs-id $Id$ + +} { + forum_id:integer,notnull + type_id:integer,notnull + {lines ""} + {return_url "."} + interval:notnull + delivery_method:notnull + {emails ""} + {subscriber_ids:integer,multiple} + {create_new_users_p "f"} +} + +# Select the info +set package_id [ad_conn package_id] +forum::get -forum_id $forum_id -array forum + +# Proper scoping? +if {$package_id != $forum(package_id)} { + ns_log Error "Forum Administration: Bad Scoping of Forum #$forum_id in Forum Editing" + ad_returnredirect -message "Forum Administration: Bad Scoping of Forum #$forum_id in Forum Editing" "./" + ad_script_abort +} + +set pretty_name $forum(name) + +# Check that the object can be subcribed to +notification::security::require_notify_object -object_id $forum_id + +ns_write "Subscribing users" + +set lines [join $emails "\n"] + + + +db_transaction { + + # Delete all old requests of this type + foreach request_id [notification::request::request_ids -object_id $forum_id -type_id $type_id] { + notification::request::delete -request_id $request_id + } + + foreach subscriber_id $subscriber_ids { + ns_write "subscribing [party::name -party_id $subscriber_id]
" + notification::request::new \ + -type_id $type_id \ + -user_id $subscriber_id \ + -object_id $forum_id \ + -interval_id $interval \ + -delivery_method_id $delivery_method + } + + foreach line $lines { + + set rows [split $line ","] + set length [llength $rows] + + set email [lindex $rows 0] + if {$length > 1} { + set fname [lindex $rows 1] + } else { + set fname "(no first name)" + } + + if {$length > 2} { + set lname [lindex $rows 2] + } else { + set lname "(no last name)" + } + + ns_write "

---$email---" + + if {![util_email_valid_p $email]} { + set user_id "" + ns_write "
invalid email address" + } else { + + if {[db_0or1row get_party_id { + select party_id, first_names as fname, last_name as lname + from cc_users + where lower(email) = lower(:email) + limit 1 + }]} { + set user_id $party_id + ns_write "
account exists" + } else { + set user_id "" + } + + } + + ns_write "
Name:$fname $lname" + + + # user_id is blank if the account doesn't exist or if the + # email account looks invalid. + + if {[empty_string_p $user_id]} { + # shall we create the new user? + + if {[string is true $create_new_users_p]} { + + if {[util_email_valid_p $email]} { + ns_write "creating new user: $fname $lname ($email)
" + + # create new user + set user_exists_p [db_0or1row user_id "select party_id from parties where email = lower(:email) limit 1"] + + if {[string is false $user_exists_p]} { + set password [ad_generate_random_string] + + array set auth_status_array [auth::create_user -email $email -first_names $fname -last_name $lname -password $password] + + set user_id $auth_status_array(user_id) + } + } else { + ns_write "
invalid email address: $email" + } + } else { + ns_write "
skipping user (not creating): $fname $lname ($email)" + } + + } + + if {![empty_string_p $user_id]} { + + # Check if subscribed + set request_id [notification::request::get_request_id -type_id $type_id -object_id $forum_id -user_id $user_id] + + if {![empty_string_p $request_id]} { + ns_write "
already subscribed ($fname $lname ($email)
" + } else { + ns_write "subscribing ($fname $lname ($email)
" + notification::request::new \ + -type_id $type_id \ + -user_id $user_id \ + -object_id $forum_id \ + -interval_id $interval \ + -delivery_method_id $delivery_method + } + } + + } +} + +ns_write "

Complete

" +ns_write "return" \ No newline at end of file Index: dotlrn_packages/packages/forums/www/admin/subscribe-others.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/subscribe-others.adp (revision 0) +++ dotlrn_packages/packages/forums/www/admin/subscribe-others.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,33 @@ + +Subscribe others to forum: @forum.name;noquote@ +@context;noquote@ + +
+ +#forums.Enter_a_list_of_email# +
+user@example.com, Jane, Austin
+user2@example.com, Emily, Dickinson
+user3@example.com
+
+ +
+#forums.If_checked_create_users# + + +

+Additionally you can choose from any of the members below: +

@member_html;noquote@ +

+#notifications.Frequency#: @interval_html;noquote@ + +
+#notifications.Delivery_Method#: @delivery_html;noquote@ + + +@hidden_vars;noquote@ + +
+ + +

Index: dotlrn_packages/packages/forums/www/admin/subscribe-others.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/admin/subscribe-others.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/admin/subscribe-others.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,77 @@ +ad_page_contract { + + Subscribe a list of email addresses to a forum + + @author Jade Rubick (jade@rubick.com) + @creation-date 2005-04-08 + @cvs-id $Id$ + +} { + forum_id:integer,notnull + {return_url "."} +} + +# Select the info +set package_id [ad_conn package_id] +set subsite_id [ad_conn subsite_id] +set group_id [application_group::group_id_from_package_id -package_id $subsite_id] + +set member_ids [group::get_members -group_id $group_id] +set member_html "" +foreach member_id $member_ids { + append member_html " [party::name -party_id $member_id]
\n" +} + +forum::get -forum_id $forum_id -array forum + +# Proper scoping? +if {$package_id != $forum(package_id)} { + ns_log Error "Forum Administration: Bad Scoping of Forum #$forum_id in Forum Editing" + ad_returnredirect -message "Forum Administration: Bad Scoping of Forum #$forum_id in Forum Editing" "./" + ad_script_abort +} + +set context [list [_ forums.Subscribe_others]] + +set type forums_forum_notif +set type_id [notification::type::get_type_id -short_name $type] + +# Get the list for the members and the ones already subscribed +set subscribed_members_list [notification::request::subscribers -type_id $type_id -object_id $forum_id] +set member_ids [group::get_members -group_id $group_id] +set member_ids [lsort -integer -unique [concat $subscribed_members_list $member_ids]] + +set member_html "" +foreach member_id $member_ids { + if {[lsearch $subscribed_members_list $member_id] > -1} { + set checked_html "checked" + } else { + set checked_html "" + } + + append member_html " [party::name -party_id $member_id]
\n" +} + + +set hidden_vars [export_vars -form {forum_id type_id}] + +set intervals [notification::get_intervals -type_id $type_id] +set interval_html "" + +set delivery_methods [notification::get_delivery_methods -type_id $type_id] + +set delivery_html "" + + Index: dotlrn_packages/packages/forums/www/doc/emoticons.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/doc/emoticons.adp (revision 0) +++ dotlrn_packages/packages/forums/www/doc/emoticons.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,41 @@ + + +Currently the following emoticons (smileys) are available: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
:-)
;-)
:-D
8-)
:-(
;-(
:-O
:-/
+ +The listed smileys (e.g. ;-) ) will be automatically replaced with an +image if the package parameter DisplayEmoticonsAsImagesP is set to 1 +(1 by default). Index: dotlrn_packages/packages/forums/www/forum-view-statistic.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/forum-view-statistic.adp (revision 0) +++ dotlrn_packages/packages/forums/www/forum-view-statistic.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,6 @@ + +#forums.Forums_hist_lt# @name;noquote@ +@context;noquote@ + + + Index: dotlrn_packages/packages/forums/www/forum-view-statistic.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/forum-view-statistic.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/forum-view-statistic.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,16 @@ +ad_page_contract { + + Forums History + + @author Natalia P�rez (nperper@it.uc3m.es) + @creation-date 2005-03-17 + +} { + forum_id:integer,notnull +} + +# Get user information +db_1row get_forum_name "select name from forums_forums where forum_id= :forum_id" +set context [list [_ forums.Forums_History]] + +ad_return_template Index: dotlrn_packages/packages/forums/www/forum-view.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/forum-view.adp (revision 0) +++ dotlrn_packages/packages/forums/www/forum-view.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,15 @@ + + @page_title;noquote@ + @context;noquote@ + @forum_id;noquote@ + +

@page_title;noquote@

+ + + + +

+@notification_chunk;noquote@ +

+ + Index: dotlrn_packages/packages/forums/www/forum-view.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/forum-view.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/forum-view.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,67 @@ +ad_page_contract { + + one forum view + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-24 + @cvs-id $Id$ + +} -query { + forum_id:integer,notnull + {orderby "last_child_post,desc"} + {flush_p 0} + page:optional +} + + +# Get forum data +if {[catch {forum::get -forum_id $forum_id -array forum} errMsg]} { + if {[string equal $::errorCode NOT_FOUND]} { + ns_returnnotfound + ad_script_abort + } + error $errMsg $::errorInfo $::errorCode +} + +# If disabled! +if {$forum(enabled_p) != "t"} { + ad_returnredirect "./" + ad_script_abort +} + +forum::security::require_read_forum -forum_id $forum_id +forum::security::permissions -forum_id $forum_id permissions + +#it is confusing to provide a moderate link for non-moderated forums. +if { $forum(posting_policy) != "moderated" } { + set permissions(moderate_p) 0 +} + +# get the colors from the params +set table_border_color [parameter::get -parameter table_border_color] +set table_bgcolor [parameter::get -parameter table_bgcolor] +set table_other_bgcolor [parameter::get -parameter table_other_bgcolor] + +set admin_url [export_vars -base "admin/forum-edit" { forum_id {return_url [ad_return_url]}}] +set moderate_url [export_vars -base "moderate/forum" { forum_id }] +set post_url [export_vars -base "message-post" { forum_id }] + +# Show search box? +set searchbox_p [parameter::get -parameter ForumsSearchBoxP -default 1] + +# Need to quote forum(name) since it is noquoted on display as part of an +# HTML fragment. +set notification_chunk [notification::display::request_widget \ + -type forums_forum_notif \ + -object_id $forum_id \ + -pretty_name $forum(name) \ + -url [ad_conn url]?forum_id=$forum_id \ +] + +set page_title "[_ forums.Forum_1] $forum(name)" +set context [list [ad_quotehtml $forum(name)]] + +set type_id [notification::type::get_type_id -short_name forums_forum_notif] +set notification_count [notification::request::request_count \ + -type_id $type_id \ + -object_id $forum_id] \ No newline at end of file Index: dotlrn_packages/packages/forums/www/index.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/index.adp (revision 0) +++ dotlrn_packages/packages/forums/www/index.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,9 @@ + +#forums.Forums# +@context;noquote@ + + + + + + Index: dotlrn_packages/packages/forums/www/index.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/index.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/index.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,16 @@ +ad_page_contract { + + top level list of forums + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-24 + @cvs-id $Id$ + +} + +set package_id [ad_conn package_id] +set user_id [ad_conn user_id] +set admin_p [permission::permission_p -party_id $user_id -object_id $package_id -privilege admin] +set searchbox_p [parameter::get -parameter ForumsSearchBoxP -package_id $package_id -default 1] + +set context {} Index: dotlrn_packages/packages/forums/www/load-message-content.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/load-message-content.adp (revision 0) +++ dotlrn_packages/packages/forums/www/load-message-content.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,4 @@ + Index: dotlrn_packages/packages/forums/www/load-message-content.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/load-message-content.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/load-message-content.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,23 @@ +ad_page_contract { + + Update the content of an specified message, for preloading purpuoses + + @author Veronica De La Cruz (veronica@viaro.net) + @creation-date 2006-04-21 + + +} { + message_id:integer,notnull + {table_name "forums_messages" } +} + + +# Get the message information +forum::message::get -message_id $message_id -array message +if {![array exists message]} { + ns_returnnotfound + ad_script_abort +} + +# Load up the forum information +forum::get -forum_id $message(forum_id) -array forum Index: dotlrn_packages/packages/forums/www/mark_all_readed-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/mark_all_readed-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/www/mark_all_readed-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,16 @@ + + + + oracle8.1.6 + + + + begin + forum_reading_info.user_add_forum ( + :forum_id, + :user_id + ); + end; + + + \ No newline at end of file Index: dotlrn_packages/packages/forums/www/mark_all_readed-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/mark_all_readed-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/www/mark_all_readed-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,16 @@ + + + + postgresql7.1 + + + + + select forums_reading_info__user_add_forum ( + :forum_id, + :user_id + ); + + + + \ No newline at end of file Index: dotlrn_packages/packages/forums/www/mark_all_readed.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/mark_all_readed.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/mark_all_readed.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,16 @@ +ad_page_contract { + + one forum view + + @author Andreas Benisch (andreas.benisch@wu-wien.ac.at) + @creation-date 2004-09-06 + +} { + forum_id:integer,notnull +} + + set user_id [ad_verify_and_get_user_id] + set db_antwort [db_exec_plsql forums_reading_info__user_add_forum {}] + + +ad_returnredirect forum-view?forum_id=$forum_id \ No newline at end of file Index: dotlrn_packages/packages/forums/www/message-email.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/message-email.adp (revision 0) +++ dotlrn_packages/packages/forums/www/message-email.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,11 @@ + + #forums.Email_Message# @message.forum_name;noquote@ - @message.subject;noquote@ + @context;noquote@ + +

#forums.lt_Email_a_copy_of_the_f#

+ +
+ +
+ + Index: dotlrn_packages/packages/forums/www/message-email.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/message-email.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/message-email.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,63 @@ +ad_page_contract { + + Forward a message to a friend + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-28 + @cvs-id $Id$ + +} { + message_id:integer,notnull +} + +forum::security::require_read_message -message_id $message_id + +# Get the message information +forum::message::get -message_id $message_id -array message +set message(tree_level) 0 + +form create message + +element create message message_id \ + -label [_ forums.Message_ID] \ + -datatype integer \ + -widget hidden + +forums::form::forward_message message + +if {[form is_valid message]} { + template::form get_values message message_id to_email subject pre_body + + # Create the email body + set email_body [forum::email::create_forward_email -pre_body $pre_body message] + + # Send the email + acs_mail_lite::send -to_addr $to_email \ + -from_addr [cc_email_from_party [ad_conn user_id]] \ + -subject $subject \ + -body $email_body + + ad_returnredirect "message-view?message_id=$message_id" + ad_script_abort +} + +if {[template::form is_request message]} { + element set_properties message message_id -value $message_id + element set_properties message subject -value $message(subject) +} + +set context [list [list "./forum-view?forum_id=$message(forum_id)" "$message(forum_name)"]] +if {![empty_string_p $message(parent_id)]} { + lappend context [list "./message-view?message_id=$message(root_message_id)" "[_ forums.Entire_Thread]"] +} +lappend context [list "./message-view?message_id=$message(message_id)" "$message(subject)"] +lappend context [_ forums.Email_to_a_friend] + +set lang [ad_conn language] +template::head::add_css -href /resources/forums/forums.css -media all -lang $lang +template::head::add_css -alternate -href /resources/forums/flat.css -media all -lang $lang -title "flat" +template::head::add_css -alternate -href /resources/forums/flat-collapse.css -media all -lang $lang -title "flat-collapse" +template::head::add_css -alternate -href /resources/forums/collapse.css -media all -lang $lang -title "collapse" +template::head::add_css -alternate -href /resources/forums/expand.css -media all -lang $lang -title "expand" + +ad_return_template Index: dotlrn_packages/packages/forums/www/message-post-confirm.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/message-post-confirm.adp (revision 0) +++ dotlrn_packages/packages/forums/www/message-post-confirm.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,8 @@ + +#forums.Confirm_Post_to_Forum# @forum.name;noquote@ +@context;noquote@ + + Index: dotlrn_packages/packages/forums/www/message-post.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/message-post.adp (revision 0) +++ dotlrn_packages/packages/forums/www/message-post.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,9 @@ + +#forums.Post_to_Forum# @forum.name;noquote@ +@context;noquote@ +message.subject + + Index: dotlrn_packages/packages/forums/www/message-post.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/message-post.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/message-post.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,92 @@ +ad_page_contract { + + Form to create message and insert it + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-25 + @cvs-id $Id$ + +} -query { + {forum_id ""} + {parent_id ""} +} -validate { + forum_id_or_parent_id { + if {[empty_string_p $forum_id] && [empty_string_p $parent_id]} { + ad_complain [_ forums.lt_You_either_have_to] + } + } +} + +if { ![empty_string_p [ns_queryget formbutton:post]] } { + set action post +} elseif { ![empty_string_p [ns_queryget formbutton:preview]] } { + set action preview +} elseif { ![empty_string_p [ns_queryget formbutton:edit]] } { + set action edit +} else { + set action "" +} + +set user_id [auth::refresh_login] + +############################## +# Pull out required forum and parent data and +# perform security checks +# +if {[empty_string_p $parent_id]} { + # no parent_id, therefore new thread + # require thread creation privs + forum::security::require_post_forum -forum_id $forum_id + + forum::get -forum_id $forum_id -array forum +} else { + # get the parent message information + forum::message::get -message_id $parent_id -array parent_message + set parent_message(tree_level) 0 + + # see if they're allowed to add to this thread + forum::security::require_post_message -message_id $parent_id + + forum::get -forum_id $parent_message(forum_id) -array forum +} + +############################## +# Calculate users rights and forums policy +# +set anonymous_allowed_p [expr ([empty_string_p $forum_id] || \ + [forum::security::can_post_forum_p \ + -forum_id $forum_id -user_id 0]) && \ + ([empty_string_p $parent_id] || \ + [forum::security::can_post_message_p \ + -message_id $parent_id -user_id 0])] + +set attachments_enabled_p [forum::attachments_enabled_p] + +############################## +# Template variables +# + +set lang [ad_conn language] +template::head::add_css -href /resources/forums/forums.css -media all -lang $lang +#template::head::add_css -alternate -href /resources/forums/flat.css -media all -lang $lang -title "flat" +#template::head::add_css -alternate -href /resources/forums/flat-collapse.css -media all -lang $lang -title "flat-collapse" +#template::head::add_css -alternate -href /resources/forums/collapse.css -media all -lang $lang -title "collapse" +#template::head::add_css -alternate -href /resources/forums/expand.css -media all -lang $lang -title "expand" + +if {![string equal [template::form::get_button message] "preview"]} { + set context [list [list "./forum-view?forum_id=$forum_id" [ad_quotehtml $forum(name)]]] + + if {[empty_string_p $parent_id]} { + lappend context [_ forums.Post_a_Message] + } else { + lappend context [list "./message-view?message_id=$parent_message(message_id)" "$parent_message(subject)"] + lappend context [_ forums.Post_a_Reply] + } +} else { + set context [list [list "./forum-view?forum_id=$forum_id" [ad_quotehtml $forum(name)]]] + lappend context "[_ forums.Post_a_Message]" + + ad_return_template "message-post-confirm" +} + + Index: dotlrn_packages/packages/forums/www/message-view-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/message-view-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/www/message-view-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,16 @@ + + + + oracle8.1.6 + + + + begin + forum_reading_info.user_add_msg ( + :msg_id, + :user_id + ); + end; + + + \ No newline at end of file Index: dotlrn_packages/packages/forums/www/message-view-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/message-view-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/www/message-view-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,15 @@ + + + + postgresql7.1 + + + + select forums_reading_info__user_add_msg ( + :msg_id, + :user_id + ); + + + + \ No newline at end of file Index: dotlrn_packages/packages/forums/www/message-view.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/message-view.adp (revision 0) +++ dotlrn_packages/packages/forums/www/message-view.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,39 @@ + + @page_title;noquote@ + @context;noquote@ + @message_id@ + +

@page_title;noquote@

+ + + + + + + + +

@notification_chunk;noquote@

+ + + + + + #forums.Post_a_Reply# + + + #forums.Reply_to_first_post_on_page_label# + + + + Index: dotlrn_packages/packages/forums/www/message-view.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/message-view.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/message-view.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,133 @@ +ad_page_contract { + + view a message (and its children) + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-25 + @cvs-id $Id$ + +} { + message_id:integer,notnull + {display_mode ""} +} + +####################### +# +# First check all reasons why we might abort +# +####################### + +# Load up the message information +forum::message::get -message_id $message_id -array message +if {![array exists message]} { + ns_returnnotfound + ad_script_abort +} + +# Load up the forum information +forum::get -forum_id $message(forum_id) -array forum + +# If disabled! +if {$forum(enabled_p) != "t"} { + ad_returnredirect "./" + ad_script_abort +} + +forum::security::require_read_message -message_id $message_id +forum::security::permissions -forum_id $message(forum_id) permissions + +# Check if the user has admin on the message +set permissions(moderate_p) [forum::security::can_moderate_message_p -message_id $message_id] +if {!${permissions(moderate_p)}} { + set permissions(post_p) [forum::security::can_post_forum_p -forum_id $message(forum_id)] +} else { + set permissions(post_p) 1 +} + +# Check if the message is approved +if {!${permissions(moderate_p)} && ![string equal $message(state) approved]} { + ad_returnredirect "forum-view?forum_id=$message(forum_id)" + ad_script_abort +} + +############################################ +# +# Ok we're not aborting so lets do some work +# +############################################ + +# Show search box? +set searchbox_p [parameter::get -parameter ForumsSearchBoxP -default 1] + +# If this is a top-level thread, we allow subscriptions here +if { [empty_string_p $message(parent_id)] } { + set notification_chunk [notification::display::request_widget \ + -type forums_message_notif \ + -object_id $message(message_id) \ + -pretty_name $message(subject) \ + -url [ad_conn url]?message_id=$message(message_id) \ + ] +} else { + set notification_chunk "" +} + +if { [forum::use_ReadingInfo_p] && [string equal $message(state) approved] } { + set msg_id $message(root_message_id) + set user_id [ad_verify_and_get_user_id] + set db_antwort [db_exec_plsql forums_reading_info__user_add_msg {}] +} + +set context [list [list "./forum-view?forum_id=$message(forum_id)" "$message(forum_name)"]] +if {![empty_string_p $message(parent_id)]} { + lappend context [list "./message-view?message_id=$message(root_message_id)" "$message(root_subject)"] + lappend context [_ forums.One_Message] +} else { + lappend context "$message(subject)" +} + +if { $permissions(post_p) || [ad_conn user_id] == 0 } { + set reply_url [export_vars -base message-post { { parent_id $message(message_id) } }] +} + +set thread_url [export_vars -base forum-view { { forum_id $message(forum_id) } }] + +set dynamic_script " + +" + +if {$forum(presentation_type) eq "flat"} { + set display_mode flat +} + +# stylesheets +set lang [ad_conn language] +template::head::add_css -href /resources/forums/forums.css -media all -lang $lang +#template::head::add_css -alternate -href /resources/forums/collapse.css -media all -lang $lang -title "collapse" +#template::head::add_css -alternate -href /resources/forums/expand.css -media all -lang $lang -title "expand" +#template::head::add_css -alternate -href /resources/forums/print.css -media print -lang $lang + +# js scripts +template::head::add_script -type "text/javascript" -src "/resources/forums/forums.js" +template::head::add_script -type "text/javascript" -src "/resources/forums/dynamic-comments.js" +template::head::add_script -type "text/javascript" -script $dynamic_script + +# cookie handling for the expand/collpase +set onunload_script { + saveMsgsState(); +} + +set onload_script { + loadMsgsState(); +} + +template::add_body_handler -event onunload -script $onunload_script +template::add_body_handler -event onload -script $onload_script + +set page_title "#forums.Thread_title#" Index: dotlrn_packages/packages/forums/www/messages-get.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/messages-get.adp (revision 0) +++ dotlrn_packages/packages/forums/www/messages-get.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,18 @@ + + + nan + + + + + +
@message.content;noquote@
+ + Index: dotlrn_packages/packages/forums/www/messages-get.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/messages-get.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/messages-get.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,15 @@ +ad_page_contract { +} { + cid:integer + {op noop} + {sid nosid} + {dynamicmode:integer} +} + +if {$dynamicmode} { + forum::message::get -message_id $cid -array message + set message(content) [ad_html_text_convert -from $message(format) -to text/html -- $message(content)] +} else { + set message(content) {} +} + Index: dotlrn_packages/packages/forums/www/moderate/forum.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/forum.adp (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/forum.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,7 @@ + +#forums.Manage_Forum# @forum.name;noquote@ +#forums.Manage# + +

#forums.Pending_Threads#

+ + Index: dotlrn_packages/packages/forums/www/moderate/forum.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/forum.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/forum.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,19 @@ +ad_page_contract { + + Moderate a Forum + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-24 + @cvs-id $Id$ + +} { + forum_id:integer,notnull +} + +# Check that the user can moderate the forum +forum::security::require_moderate_forum -forum_id $forum_id + +# Get forum data +forum::get -forum_id $forum_id -array forum + +ad_return_template Index: dotlrn_packages/packages/forums/www/moderate/message-approve.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/message-approve.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/message-approve.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,23 @@ +ad_page_contract { + + Approve a Message + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-24 + @cvs-id $Id$ + +} { + message_id:integer,notnull + {return_url "../message-view"} +} + +# Check that the user can moderate the forum +forum::security::require_moderate_message -message_id $message_id + +# Approve the message +forum::message::approve -message_id $message_id + +ad_returnredirect "$return_url?message_id=$message_id" + + + Index: dotlrn_packages/packages/forums/www/moderate/message-delete.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/message-delete.adp (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/message-delete.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,5 @@ + + #forums.Confirm_Delete# @message.subject;noquote@ + #forums.delete# + + Index: dotlrn_packages/packages/forums/www/moderate/message-delete.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/message-delete.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/message-delete.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,39 @@ +ad_page_contract { + + Delete a Message + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-24 + @cvs-id $Id$ + +} { + message_id:integer,notnull + {return_url "../message-view"} + {confirm_p 0} +} + +# Check that the user can moderate the forum +forum::security::require_moderate_message -message_id $message_id + +# Select the stuff +forum::message::get -message_id $message_id -array message + +set dynamic_script " + +" +# stylesheets +set lang [ad_conn language] +template::head::add_css -href /resources/forums/forums.css -media all -lang $lang + +# js scripts +template::head::add_script -type "text/javascript" -src "/resources/forums/forums.js" +template::head::add_script -type "text/javascript" -script $dynamic_script + +ad_return_template Index: dotlrn_packages/packages/forums/www/moderate/message-edit.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/message-edit.adp (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/message-edit.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,5 @@ + +#forums.Edit_Message# @message.subject;noquote@ +#forums.Edit# + + Index: dotlrn_packages/packages/forums/www/moderate/message-edit.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/message-edit.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/message-edit.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,17 @@ +ad_page_contract { + + Form to edit a message + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-25 + @cvs-id $Id$ + +} { + message_id:integer,notnull + {return_url "../message-view"} +} + +forum::message::get -message_id $message_id -array message +forum::get -forum_id $message(forum_id) -array forum + +ad_return_template Index: dotlrn_packages/packages/forums/www/moderate/message-move.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/message-move.adp (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/message-move.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,5 @@ + +#forums.Confirm_Move_to# @message.subject;noquote@ +#forums.Move_to# + + Index: dotlrn_packages/packages/forums/www/moderate/message-move.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/message-move.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/message-move.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,20 @@ +ad_page_contract { + + Move a Message to other forum + + @author Natalia P�rez (nperper@it.uc3m.es) + @creation-date 2005-03-14 + +} { + message_id:integer,notnull + {return_url "../message-view"} + {confirm_p 0} +} + +# Check that the user can moderate the forum +forum::security::require_moderate_message -message_id $message_id + +# Select the stuff +forum::message::get -message_id $message_id -array message + +ad_return_template Index: dotlrn_packages/packages/forums/www/moderate/message-reject.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/message-reject.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/message-reject.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,23 @@ +ad_page_contract { + + Reject a Message + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-24 + @cvs-id $Id$ + +} { + message_id:integer,notnull + {return_url "../message-view"} +} + +# Check that the user can moderate the forum +forum::security::require_moderate_message -message_id $message_id + +# Reject the message +forum::message::reject -message_id $message_id + +ad_returnredirect "$return_url?message_id=$message_id" + + + Index: dotlrn_packages/packages/forums/www/moderate/move-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,45 @@ + + + + oracle8.1.6 + + + + + update forums_messages + set forum_id = :forum_id, + tree_sortkey = tree.increment_key(:max_tree_sortkey) + where message_id = $message(message_id) + + + + + + + select message_id, substr(tree_sortkey, 7, length(tree_sortkey)) as child_tree_sortkey + from forums_messages + where forum_id = $message(forum_id) and tree_sortkey between tree.left('$message(tree_sortkey)') and tree.right ('$message(tree_sortkey)') + order by tree_sortkey desc + + + + + + + update forums_forums + set thread_count = :thread_count + 1, approved_thread_count = :approved_thread_count + 1, max_child_sortkey = tree.increment_key(max_child_sortkey), last_post = (select max(last_child_post) + from forums_messages + where forum_id = :forum_id) + where forum_id = :forum_id + + + + + + update forums_messages + set forum_id = :forum_id, tree_sortkey = '000000' + where message_id = $message(message_id) + + + + Index: dotlrn_packages/packages/forums/www/moderate/move-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,44 @@ + + + + postgresql7.2 + + + + + update forums_messages + set forum_id = :forum_id, + tree_sortkey = tree_increment_key(:max_tree_sortkey) + where message_id = $message(message_id) + + + + + + + select message_id, substring(tree_sortkey, 9, length(tree_sortkey)) as child_tree_sortkey + from forums_messages + where forum_id = $message(forum_id) and tree_sortkey between tree_left('$message(tree_sortkey)') and tree_right ('$message(tree_sortkey)') order by tree_sortkey desc + + + + + + + update forums_forums + set thread_count = :thread_count + 1, approved_thread_count = :approved_thread_count + 1, max_child_sortkey = tree_increment_key(max_child_sortkey), last_post = (select max(last_child_post) + from forums_messages + where forum_id = :forum_id) + where forum_id = :forum_id + + + + + + update forums_messages + set forum_id = :forum_id, tree_sortkey = '00000000' + where message_id = $message(message_id) + + + + Index: dotlrn_packages/packages/forums/www/moderate/move-thread-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-thread-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-thread-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,55 @@ + + + + oracle8.1.6 + + + + update forums_messages + set reply_count = reply_count + 1, approved_reply_count = approved_reply_count + 1, max_child_sortkey = tree.increment_key(max_child_sortkey) + where message_id = :message_id + + + + + + + select message_id as msge_id, substr(tree_sortkey, 13, length(tree_sortkey)) as child_tree_sortkey + from forums_messages + where forum_id = :forum_id and tree_sortkey between tree.left('$message(tree_sortkey)') and tree.right('$message(tree_sortkey)') + order by tree_sortkey desc + + + + + + + select substr(tree_sortkey, 13, length(tree_sortkey)) as final_tree_sortkey, substr(tree_sortkey, 0, 6) as initial_tree_sortkey + from forums_messages + where message_id = $message(message_id) + + + + + + update forums_messages + set last_child_post = (select max(last_child_post) + from forums_messages + where forum_id = :forum_id and tree_sortkey between tree.left((select tree_sortkey from forums_messages where message_id = $father_message_id)) and tree.right((select tree_sortkey from forums_messages where message_id = $father_message_id)) + ) + where message_id = $father_message_id + + + + + + update forums_messages + set last_child_post = (select max(last_child_post) + from forums_messages + where forum_id = :forum_id and tree_sortkey between tree.left((select tree_sortkey from forums_messages where message_id = :message_id)) and tree.right((select tree_sortkey from forums_messages where message_id = :message_id)) + ) + where message_id = :message_id + + + + Index: dotlrn_packages/packages/forums/www/moderate/move-thread-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-thread-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-thread-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,55 @@ + + + + postgresql7.2 + + + + update forums_messages + set reply_count = reply_count + 1, approved_reply_count = approved_reply_count + 1, max_child_sortkey = tree_increment_key(max_child_sortkey) + where message_id = :message_id + + + + + + + select message_id as msge_id, substring(tree_sortkey, 17, length(tree_sortkey)) as child_tree_sortkey + from forums_messages + where forum_id = :forum_id and tree_sortkey between tree_left('$message(tree_sortkey)') and tree_right('$message(tree_sortkey)') + order by tree_sortkey desc + + + + + + + select substring(tree_sortkey, 17, length(tree_sortkey)) as final_tree_sortkey, substring(tree_sortkey, 0, 9) as initial_tree_sortkey + from forums_messages + where message_id = $message(message_id) + + + + + + update forums_messages + set last_child_post = (select max(last_child_post) + from forums_messages + where forum_id = :forum_id and tree_sortkey between tree_left((select tree_sortkey from forums_messages where message_id = $father_message_id)) and tree_right((select tree_sortkey from forums_messages where message_id = $father_message_id)) + ) + where message_id = $father_message_id + + + + + + update forums_messages + set last_child_post = (select max(last_child_post) + from forums_messages + where forum_id = :forum_id and tree_sortkey between tree_left((select tree_sortkey from forums_messages where message_id = :message_id)) and tree_right((select tree_sortkey from forums_messages where message_id = :message_id)) + ) + where message_id = :message_id + + + + Index: dotlrn_packages/packages/forums/www/moderate/move-thread-thread-oracle.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-thread-thread-oracle.xql (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-thread-thread-oracle.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,35 @@ + + + + oracle8.1.6 + + + + update forums_messages + set reply_count = reply_count + 1, approved_reply_count = approved_reply_count + 1, max_child_sortkey = tree.increment_key(max_child_sortkey) + where message_id = :message_id + + + + + + + select message_id as msge_id, substr(tree_sortkey, 7, length(tree_sortkey)) as child_tree_sortkey + from forums_messages + where forum_id = $message(forum_id) and tree_sortkey between tree.left('$message(tree_sortkey)') and tree.right('$message(tree_sortkey)') + order by tree_sortkey desc + + + + + + update forums_messages + set last_child_post = (select max(last_child_post) + from forums_messages + where forum_id = :forum_id and tree_sortkey between tree.left((select tree_sortkey from forums_messages where message_id = :message_id)) and tree.right((select tree_sortkey from forums_messages where message_id = :message_id))) + where message_id = :message_id + + + + + Index: dotlrn_packages/packages/forums/www/moderate/move-thread-thread-postgresql.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-thread-thread-postgresql.xql (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-thread-thread-postgresql.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,33 @@ + + + + postgresql7.2 + + + + update forums_messages + set reply_count = reply_count + 1, approved_reply_count = approved_reply_count + 1, max_child_sortkey = tree_increment_key(max_child_sortkey) + where message_id = :message_id + + + + + + + select message_id as msge_id, substring(tree_sortkey, 9, length(tree_sortkey)) as child_tree_sortkey + from forums_messages + where forum_id = $message(forum_id) and tree_sortkey between tree_left('$message(tree_sortkey)') and tree_right('$message(tree_sortkey)') order by tree_sortkey desc + + + + + + update forums_messages + set last_child_post = (select max(last_child_post) + from forums_messages + where forum_id = :forum_id and tree_sortkey between tree_left((select tree_sortkey from forums_messages where message_id = :message_id)) and tree_right((select tree_sortkey from forums_messages where message_id = :message_id))) + where message_id = :message_id + + + + Index: dotlrn_packages/packages/forums/www/moderate/move-thread-thread.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-thread-thread.adp (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-thread-thread.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,18 @@ + + + + #forums.Move_thread_to_the_thread# @subject@ #forums.of_forum# @name@ +

+ #forums.Are_you_sure_you_want_to_move_this_message_and_obviously_all_of_its_descendents_lt# +

+ +

+ +
+ +

+ + + + + Index: dotlrn_packages/packages/forums/www/moderate/move-thread-thread.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-thread-thread.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-thread-thread.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,91 @@ +ad_page_contract { + + Move a thread to other thread of same forum or other forum. + + @author Natalia P�rez (nperper@it.uc3m.es) + @creation-date 2005-03-29 + +} { + msg_id:integer,notnull + selected_message:integer,notnull + {confirm_p 0} +} + +set table_border_color [parameter::get -parameter table_border_color] + +# Check that the user can moderate the forum +forum::security::require_moderate_message -message_id $msg_id + +# Select the stuff +forum::message::get -message_id $msg_id -array message + +#form to confirm +ad_form -name confirmed_move -mode {display} -actions [list [list [_ forums.Yes] yes] [list No no] ] -export { msg_id return_url selected_message} -html {enctype multipart/form-data} -form { + {data:text(hidden) {value 0}} +} +#get the clicked button +set action [template::form::get_action confirmed_move] + +if {$action == "yes"} { + set confirm_p 1 +} +if {$action == "no"} { + set confirm_p 2 +} + +set message_id $selected_message +db_0or1row forums::move_thread_thread::get_forum_name { } + +# Confirmed +if {$confirm_p == 1} { + + #update the final message: increase reply_count, approved_reply_count and max_child_sortkey + db_dml forums::move_thread_thread::update_final_message {} + + #get the tree_sortkey and max_child_sortkey of final message + db_0or1row forums::move_thread_thread::get_father_tree_sortkey {} + + #get all descendents + db_foreach forums::move_thread_thread::get_all_child {} { + set join_tree_sortkey $father_tree_sortkey + append join_tree_sortkey $father_max_child_sortkey + append join_tree_sortkey $child_tree_sortkey + #update the children's initial message: update tree_sortkey + db_dml forums::move_thread_thread::update_child_thread_father {} + #update the final message: increase reply_count and approved_reply_count + db_dml forums::move_thread_thread::update_final_reply_count {} + } + + #update the initial message + set join_tree_sortkey $father_tree_sortkey + append join_tree_sortkey $father_max_child_sortkey + db_dml forums::move_thread_thread::update_thread_father {} + + #update last_child_post final father message + db_dml forums::move_thread_thread::update_last_child_post {} + + #update the initial forum: decrease thread_count, approved_thread_count and max_child_sortkey + db_0or1row forums::move_thread_thread::select_data_forum_initial {} + db_dml forums::move_thread_thread::update_forum_initial {} + + + #update the final forum + db_dml forums::move_thread_thread::update_forums_final {} + + # Redirect to the forum + ad_returnredirect "../forum-view?forum_id=$forum_id" + ad_script_abort +} + + +set msg_id $message(message_id) +set return_url "../message-view" + +if {$confirm_p == 2} { + ad_returnredirect "../message-view?message_id=$message(message_id)" +} +set url_vars [export_url_vars msg_id return_url selected_message] + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} Index: dotlrn_packages/packages/forums/www/moderate/move-thread-thread.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-thread-thread.xql (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-thread-thread.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,79 @@ + + + + + + select ff.name, fm.subject, fm.forum_id + from forums_forums ff, forums_messages fm + where fm.message_id =:message_id and ff.forum_id=fm.forum_id + + + + + + + select tree_sortkey as father_tree_sortkey, max_child_sortkey as father_max_child_sortkey + from forums_messages + where message_id= :message_id + + + + + + + update forums_messages + set forum_id = :forum_id, tree_sortkey = :join_tree_sortkey + where message_id = :msge_id + + + + + + + update forums_messages + set reply_count = reply_count + 1, approved_reply_count = approved_reply_count + 1 + where message_id = :message_id + + + + + + + update forums_messages + set parent_id = :message_id, tree_sortkey = :join_tree_sortkey, forum_id = :forum_id + where message_id = $message(message_id) + + + + + + + select ff.max_child_sortkey, ff.thread_count, ff.approved_thread_count + from forums_forums ff + where ff.forum_id = $message(forum_id) + + + + + + + update forums_forums + set thread_count = :thread_count - 1, approved_thread_count = :approved_thread_count - 1, last_post = (select max(fm.last_child_post) + from forums_messages fm + where fm.forum_id = $message(forum_id)) + where forum_id = $message(forum_id) + + + + + + + update forums_forums + set last_post = (select max(last_child_post) + from forums_messages + where forum_id = :forum_id) + where forum_id = :forum_id + + + + Index: dotlrn_packages/packages/forums/www/moderate/move-thread.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-thread.adp (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-thread.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,19 @@ + +@title;noquote@ +{@context;noquote@} +

@title;noquote@

+ + + + #forums.Are_you_sure_you_want_to_move_this_message_and_obviously_all_of_its_descendents_lt# +

+ +

+ +
+ +

+ + + + Index: dotlrn_packages/packages/forums/www/moderate/move-thread.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-thread.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-thread.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,99 @@ +ad_page_contract { + + Move a Message to other thread in the same forum. + + @author Natalia P�rez (nperper@it.uc3m.es) + @creation-date 2005-03-14 + +} { + msg_id:integer,notnull + selected_message:integer,notnull + {confirm_p 0} +} + +set table_border_color [parameter::get -parameter table_border_color] + +# Check that the user can moderate the forum +forum::security::require_moderate_message -message_id $msg_id + +# Select the stuff +forum::message::get -message_id $msg_id -array message + +#form to confirm +ad_form -name confirmed_move -mode {display} -actions [list [list [_ forums.Yes] yes] [list No no] ] -export { msg_id return_url selected_message} -html {enctype multipart/form-data} -form { + {data:text(hidden) {value 0}} +} +#get the clicked button +set action [template::form::get_action confirmed_move] +if {$action == "yes"} { + set confirm_p 1 +} +if {$action == "no"} { + set confirm_p 2 +} + +#information about final message +db_0or1row forums::move_thread::get_subject_message {} + +# Confirmed +if {$confirm_p == 1} { + + set message_id $selected_message + + #update the final message: increase reply_count, approved_reply_count and max_child_sortkey + db_dml forums::move_thread::update_final_message {} + + #get the tree_sortkey of final message + db_0or1row forums::move_thread::get_father_tree_sortkey {} + + #update the initial message + db_0or1row forums::move_thread::get_final_tree_sortkey {} + + #update the initial father message: decreasing reply_count and approved_reply_count + db_0or1row forums::move_thread::get_father_message_id {} + db_dml forums::move_thread::update_father_reply_count {} + + #get all descendents + db_foreach forums::move_thread::get_all_child {} { + #update los ocho primeros d�gitos de tree_sortkey + set join_tree_sortkey $father_tree_sortkey + append join_tree_sortkey $father_max_child_sortkey + append join_tree_sortkey $child_tree_sortkey + #update the children's initial message: update tree_sortkey + db_dml forums::move_thread::update_child_thread_father {} + #update the final message: increasing reply_count and approved_reply_count + db_dml forums::move_thread::update_final_reply_count {} + #update the initial father message: decreasing reply_count and approved_reply_count + db_dml forums::move_thread::update_father_reply_count {} + } + + #update the initial message + set join_tree_sortkey $father_tree_sortkey + append join_tree_sortkey $father_max_child_sortkey + db_dml forums::move_thread::update_thread_father {} + + #update the last_child_post final thread and last_child_post initial father thread + db_dml forums::move_thread::update_last_child_post_initial {} + db_dml forums::move_thread::update_last_child_post_final {} + + # Redirect to the forum + ad_returnredirect "../forum-view?forum_id=$message(forum_id)" + ad_script_abort +} + +set msg_id $message(message_id) +set return_url "../message-view" + +#if confirm is no +if {$confirm_p == 2} { + ad_returnredirect "../message-view?message_id=$message(message_id)" +} + +set url_vars [export_url_vars msg_id return_url selected_message] + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} + +set title "#forums.Move_message_to_thread# \"$subject\"" +set context $title \ No newline at end of file Index: dotlrn_packages/packages/forums/www/moderate/move-thread.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move-thread.xql (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move-thread.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,65 @@ + + + + + + select subject, forum_id + from forums_messages + where message_id=:selected_message + + + + + + + select tree_sortkey as father_tree_sortkey, max_child_sortkey as father_max_child_sortkey + from forums_messages + where message_id= :message_id + + + + + + select message_id as father_message_id + from forums_messages + where forum_id = $message(forum_id) and tree_sortkey = '$initial_tree_sortkey' + + + + + + + update forums_messages + set reply_count = reply_count - 1, approved_reply_count = approved_reply_count - 1 + where message_id = $father_message_id + + + + + + + update forums_messages + set tree_sortkey = :join_tree_sortkey + where message_id = :msge_id + + + + + + update forums_messages + set reply_count = reply_count + 1, approved_reply_count = approved_reply_count + 1 + where message_id = :message_id + + + + + + + update forums_messages + set parent_id = :message_id, tree_sortkey = :join_tree_sortkey + where message_id = $message(message_id) + + + + + \ No newline at end of file Index: dotlrn_packages/packages/forums/www/moderate/move.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move.adp (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,17 @@ + + + + #forums.Move_thread_to_forum# @name@ +

+ #forums.Are_you_sure_you_want_to_move_this_thread_and_obviously_all_of_its_descendents_lt# +

+ +

+ +
+ +

+ + + + Index: dotlrn_packages/packages/forums/www/moderate/move.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,89 @@ +ad_page_contract { + + Move a thread to other forum. + + @author Natalia P�rez (nperper@it.uc3m.es) + @creation-date 2005-03-14 + +} { + message_id:integer,notnull + selected_forum:integer,notnull + {confirm_p 0} +} + +set table_border_color [parameter::get -parameter table_border_color] + +# Check that the user can moderate the forum +forum::security::require_moderate_message -message_id $message_id + +# Select the stuff +forum::message::get -message_id $message_id -array message + +#form to confirm if a user want to move the thread +ad_form -name confirmed_move -mode {display} -actions [list [list [_ forums.Yes] yes] [list No no] ] -export { message_id return_url selected_forum} -html {enctype multipart/form-data} -form { + {data:text(hidden) {value 0}} +} +#get the clicked button +set action [template::form::get_action confirmed_move] + +if {$action == "yes"} { + set confirm_p 1 +} +if {$action == "no"} { + set confirm_p 2 +} + +#get the name of forum where the thread will be moved +db_0or1row get_forum_name "select name from forums_forums where forum_id=:selected_forum" + +# Confirmed +if {$confirm_p == 1} { + + set forum_id $selected_forum + + #update the initial father message: update forum_id and tree_sortkey. If in final forum there is no any thread then tree_sortkey is 0, + #else tree_sortkey=tree_sortkey+1 + db_0or1row forums::move_message::select_num_msg {} + if {$num_post == 0 } { + db_dml forums::move_message::update_msg {} + } else { + db_foreach forums::move_message::select_tree_sortkey {} { + set max_tree_sortkey $tree_sortkey + } + db_dml forums::move_message::update_moved_msg {} + } + + #get all descendents + db_0or1row forums::move_message::select_tree_sortkey_new {} + db_foreach forums::move_message::get_all_child {} { + set join_tree_sortkey $message_tree_sortkey + append join_tree_sortkey $child_tree_sortkey + #update children messages: forum_id and tree_sortkey + db_dml forums::move_message::update_children {} + } + + #update final forum: increase thread_count, approved_thread_count and max_child_sortkey, update last_post + db_0or1row forums::move_message::select_new_data_forums_forums {} + db_dml forums::move_message::update_forums_final {} + + #update initial forum: decrease thread_count, approved_thread_count and max_child_sortkey, update last_post + db_0or1row forums::move_message::select_data_forum_initial {} + db_dml forums::move_message::update_forum_initial {} + + # Redirect to the forum + ad_returnredirect "../forum-view?forum_id=$forum_id" + ad_script_abort +} + +set message_id $message(message_id) +set return_url "../message-view" + +if {$confirm_p == 2} { + #if confirm_p is no then return to the message view + ad_returnredirect "../message-view?message_id=$message(message_id)" +} +set url_vars [export_url_vars message_id return_url selected_forum] + +if {[exists_and_not_null alt_template]} { + ad_return_template $alt_template +} Index: dotlrn_packages/packages/forums/www/moderate/move.xql =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/move.xql (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/move.xql (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,64 @@ + + + + + + select count(forum_id) as num_post + from forums_messages + where forum_id = :forum_id + + + + + + + select tree_sortkey + from forums_messages + where forum_id = :forum_id and parent_id is null order by tree_sortkey asc + + + + + + + select tree_sortkey as message_tree_sortkey + from forums_messages + where message_id = $message(message_id) + + + + + + update forums_messages + set forum_id = :forum_id, tree_sortkey = :join_tree_sortkey + where message_id = :message_id + + + + + + select ff.max_child_sortkey, ff.thread_count, ff.approved_thread_count + from forums_forums ff + where ff.forum_id = :forum_id + + + + + + select ff.max_child_sortkey, ff.thread_count, ff.approved_thread_count + from forums_forums ff + where ff.forum_id = $message(forum_id) + + + + + + update forums_forums + set thread_count = :thread_count - 1, approved_thread_count = :approved_thread_count -1, last_post = (select max(fm.last_child_post) + from forums_messages fm + where fm.forum_id = $message(forum_id)) + where forum_id = $message(forum_id) + + + + Index: dotlrn_packages/packages/forums/www/moderate/thread-move-thread.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/thread-move-thread.adp (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/thread-move-thread.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,5 @@ + +#forums.Confirm_Move_to# @message.subject;noquote@ +#forums.Move_to# + + Index: dotlrn_packages/packages/forums/www/moderate/thread-move-thread.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/thread-move-thread.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/thread-move-thread.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,20 @@ +ad_page_contract { + + Move a thread to other thread + + @author Natalia P�rez (nperper@it.uc3m.es) + @creation-date 2005-03-14 + +} { + message_id:integer,notnull + {return_url "../message-view"} + {confirm_p 0} +} + +# Check that the user can moderate the forum +forum::security::require_moderate_message -message_id $message_id + +# Select the stuff +forum::message::get -message_id $message_id -array message + +ad_return_template Index: dotlrn_packages/packages/forums/www/moderate/thread-move.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/thread-move.adp (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/thread-move.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,5 @@ + +@title;noquote@ +{#forums.Move_thread#} +

@title;noquote@

+ Index: dotlrn_packages/packages/forums/www/moderate/thread-move.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/moderate/thread-move.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/moderate/thread-move.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,21 @@ +ad_page_contract { + + Move a thread to other forum + + @author Natalia P�rez (nperper@it.uc3m.es) + @creation-date 2005-03-14 + +} { + message_id:integer,notnull + {return_url "../message-view"} + {confirm_p 0} +} + +# Check that the user can moderate the forum +forum::security::require_moderate_message -message_id $message_id + +# Select the stuff +forum::message::get -message_id $message_id -array message +set title "#forums.Confirm_Move_to# \"$message(subject)\"" + +ad_return_template Index: dotlrn_packages/packages/forums/www/not-allowed.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/not-allowed.adp (revision 0) +++ dotlrn_packages/packages/forums/www/not-allowed.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,5 @@ + +Action Not Allowed +@context;noquote@ + +#forums.not_allowed# \ No newline at end of file Index: dotlrn_packages/packages/forums/www/not-allowed.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/not-allowed.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/not-allowed.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,10 @@ +ad_page_contract { + + Action not allowed. + + @author Lars Pind (lars@pinds.com) + @creation-date 2002-10-14 + @cvs-id $Id$ +} + +set context [list "Not Allowed"] Index: dotlrn_packages/packages/forums/www/resources/Collapse16.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/CollapseAll16.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/Expand16.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/ExpandAll16.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/Forward16.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/ReplyAll16.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/angel.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/bigsmile.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/burp.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/collapse.css =================================================================== diff -u --- dotlrn_packages/packages/forums/www/resources/collapse.css (revision 0) +++ dotlrn_packages/packages/forums/www/resources/collapse.css (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,6 @@ +#forum-thread .content { + display: none; +} +#forum-thread .action-list { + display: none; +} Index: dotlrn_packages/packages/forums/www/resources/collapseAll.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/collapse_all.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/collapse_content.css =================================================================== diff -u --- dotlrn_packages/packages/forums/www/resources/collapse_content.css (revision 0) +++ dotlrn_packages/packages/forums/www/resources/collapse_content.css (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,3 @@ +#forum-thread .content { + display: none; +} Index: dotlrn_packages/packages/forums/www/resources/crazy4.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/crossedlips.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/cry.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/del.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/delete.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/delete.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/dyn_wait.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/dynamic-comments.js =================================================================== diff -u --- dotlrn_packages/packages/forums/www/resources/dynamic-comments.js (revision 0) +++ dotlrn_packages/packages/forums/www/resources/dynamic-comments.js (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,254 @@ +// JavaScript used to manage dynamic-mode comments +// (c) 2002 Joe Groff. Use this code under whatever terms you wish, as long +// as you give me some credit. + +var nIframes = 0; + +// Block data which should be set from Scoop +var collapse_symbol; +var expand_symbol; +var loading_symbol; +var loading_message; +var rootdir; +var sid; + +// Internet Explorer on Windows prior to 5.5 doesn't support Array.push() +if(!Array.prototype.push) { + Array.prototype.push = function() { + var l = this.length; + for(var i = 0; i < arguments.length; ++i,++l) + this[l] = arguments[i]; + } +} + +// Arrays of cid indices for comment replies and new comments +var replies = new Array(); +var newcomments = new Array(); + +// Get an element by ID in a portable manner +function getid(id) { + if(document.getElementById) + return document.getElementById(id); + else if(document.all) + return document.all(id); + return false; +} + +// Get the document object inside an iframe in a portable manner +function getIframeDocument(id) { + if(document.frames) + return document.frames[id].document; + var ifrm = getid(id); + if(ifrm.contentDocument) + return ifrm.contentDocument; + else if(ifrm.contentWindow) + return ifrm.contentWindow.document; + else if(ifrm.document) + return ifrm.document; +} + +// Set the state of a comment. +// n is the cid of the comment to expand. +// move, if true, will cause the page to jump to that comment's header before +// changing its state. +// state, if set, will change the comment to that specific state (0 = collapsed +// 1 = expanded). If not set or set to null, the state will be toggled. +// rate, if set, will cause the comment to be given that specific rating. +function toggle(n,move,state,rate) { + var ifrmdoc = getIframeDocument('dynamic'); + var link = getid('toggle'+n); + var content = getid('content'+n); + if(!link || !content || !ifrmdoc) + return; + + // Initialise the link's expandStatus if it hasn't yet been set + if(link.className == '') { + if (content.className == 'dynexpanded') { + link.className = 'dynexpanded'; + } else { + link.className = 'dyncollapsed'; + } + } + if(link.className == 'dynexpanded') { + link.expandStatus = 1; + } else { + link.expandStatus = 0; + } + + var s; + if(state != null) + s = state; + + else if(link.className == 'dyncollapsed') + s = 1; // set to expand + else + s = 0; // set to collapse + + // Immediately return if we aren't changing state at all + if((s == link.expandStatus) && (rate == null)) + return; + + if(move) window.location.hash = 'toggle'+n; + + if(rate == null + && (((s == 1) && content.expandedContent) + || ((s == 0) && content.collapsedContent))) { + // If we've already grabbed the desired state for this comment, + // set it right here + setSavedState(n, s); + } + else { + // Otherwise grab it from the server using the iframe + setLoading(n); + var src = rootdir+"?cid="+n+"&sid="+sid+"&dynamicmode="+s; + if(rate != null) + src += ";rate=Rate;rating_"+n+"="+rate; + ifrmdoc.location.replace(src); + // The content will be set by the iframe's onLoad property + } +} + +// Set the state of all the comments listed in an array. +function toggleList(a,state) { + var fetch_cids = new Array(); // cids we need to ask the server for + var contentprop = (state? 'expandedContent' : 'collapsedContent'); + var content; + var ifrmdoc = getIframeDocument('dynamic'); + + if(!a.length) return; + for(var i = 0; i < a.length; ++i) { + content = getid('content'+a[i]); + if(!content) continue; + // Skip this one if it's already in the proper state + if((state && (content.className == 'dynexpanded')) + || (!state && (content.className == 'dyncollapsed'))) + continue; + // Check if we already have the desired content for this cid + if(content[contentprop]) + setSavedState(a[i], state); + else { + fetch_cids.push(a[i]); + setLoading(a[i]); + } + } + // Grab the remaining comments from the server + if(fetch_cids.length > 0) + ifrmdoc.location.replace(rootdir+"?cid="+fetch_cids.join('&cid=')+"&sid="+sid+"&dynamicmode="+state); +} + +// Function to set comment content from already-saved data +function setSavedState(n,s) { + var content = getid('content'+n); + // Fill in the comment + if(content.innerHTML) { + if((s == 1) && content.expandedContent) + content.innerHTML = content.expandedContent; + else if((s == 0) && content.collapsedContent) + content.innerHTML = content.collapsedContent; + } + else if(content.appendChild) { + var nodes; + if((s == 1) && content.expandedContent) + nodes = content.expandedContent; + else if((s == 0) && content.collapsedContent) + nodes = content.collapsedContent; + if(nodes) { + while(content.hasChildNodes()) + content.removeChild(content.firstChild); + for(var i = 0; i < nodes.length; ++i) + content.appendChild(nodes[i]); + } + } + // Set the link state + setState(n,s); +} + +// Set a link into waiting state +function setLoading(n) { + var link = getid('toggle'+n); + var content = getid('content'+n); + if(!link || !content) return; + + if(content.innerHTML) { + content.innerHTML = loading_message; + link.innerHTML = loading_symbol; + } + else if(content.appendChild) { + while(content.hasChildNodes()) + content.removeChild(content.firstChild); + content.appendChild(document.createTextNode(loading_message)); + + while(link.hasChildNodes()) + link.removeChild(link.firstChild); + link.appendChild(document.createTextNode(loading_symbol)); + } +} + +// Set a link into collapsed or expanded state +function setState(n,s) { + var link = getid('toggle'+n); + var content = getid('content'+n); + if(!link || !content) return; + + var symbol; + if (s) symbol = collapse_symbol; + else symbol = expand_symbol; + + if(link.innerHTML) + link.innerHTML = symbol; + else if(link.appendChild) { + while(link.hasChildNodes()) + link.removeChild(link.firstChild); + link.appendChild(document.createTextNode(symbol)); + } + + link.expandStatus = s; + + content.className = (s? 'dynexpanded' : 'dyncollapsed'); + link.className = (s? 'dynexpanded' : 'dyncollapsed'); +} + +// Called from the iframe's onload event to ship the content into the main +// page +function copyContent(no,s) { + if(window == top || !parent.setState) return true; + + var content; + var body = document.body; + var divs; + var n; + + // Get the set of comments out of the body + if(body.children) + divs = body.children.tags('DIV'); + else if(body.childNodes) { + divs = new Array(); + for(var i = 0; i < body.childNodes.length; ++i) + if(body.childNodes[i].tagName == 'DIV') + divs.push(body.childNodes[i]); + } + + for (var i = 0; i < divs.length; ++i) { + n = divs[i].getAttribute('id'); + content = parent.getid('content'+n); + if(!content) continue; + + if (content.innerHTML) { + content.innerHTML = divs[i].innerHTML; + if(s == 1) content.expandedContent = content.innerHTML; + else if(s == 0) content.collapsedContent = content.innerHTML; + } + else if(content.appendChild) { + while(content.hasChildNodes()) + content.removeChild(content.firstChild); + for(var i = 0; i < divs[i].childNodes.length; ++i) { + var nod = divs[i].childNodes[i].cloneNode(true); + content.appendChild(nod); + } + if(s == 1) content.expandedContent = content.childNodes; + else if(s == 0) content.collapsedContent = content.childNodes; + } + parent.setState(n,s); + } +} + Index: dotlrn_packages/packages/forums/www/resources/embarrassed.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/expand.css =================================================================== diff -u --- dotlrn_packages/packages/forums/www/resources/expand.css (revision 0) +++ dotlrn_packages/packages/forums/www/resources/expand.css (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,6 @@ +#forum-thread .content { + display: block; +} +#forum-thread .action-list { + display: inline; +} \ No newline at end of file Index: dotlrn_packages/packages/forums/www/resources/expand.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/expand2.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/expandAll.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/expandO.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/expand_all.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/farted.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/flat-collapse.css =================================================================== diff -u --- dotlrn_packages/packages/forums/www/resources/flat-collapse.css (revision 0) +++ dotlrn_packages/packages/forums/www/resources/flat-collapse.css (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,37 @@ +#forum-thread .level1 { + margin-left: 0em; +} +#forum-thread .level2 { + margin-left: 0em; +} +#forum-thread .level3 { + margin-left: 0em; +} +#forum-thread .level4 { + margin-left: 0em; +} +#forum-thread .level5 { + margin-left: 0em; +} +#forum-thread .level6 { + margin-left: 0em; +} +#forum-thread .level7 { + margin-left: 0em; +} +#forum-thread .level8 { + margin-left: 0em; +} +#forum-thread .level9 { + margin-left: 0em; +} +#forum-thread .level10 { + margin-left: 0em; +} + +#forum-thread .content { + display: none; +} +#forum-thread .action-list { + display: none; +} Index: dotlrn_packages/packages/forums/www/resources/flat.css =================================================================== diff -u --- dotlrn_packages/packages/forums/www/resources/flat.css (revision 0) +++ dotlrn_packages/packages/forums/www/resources/flat.css (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,30 @@ +#forum-thread .level1 { + margin-left: 0em; +} +#forum-thread .level2 { + margin-left: 0em; +} +#forum-thread .level3 { + margin-left: 0em; +} +#forum-thread .level4 { + margin-left: 0em; +} +#forum-thread .level5 { + margin-left: 0em; +} +#forum-thread .level6 { + margin-left: 0em; +} +#forum-thread .level7 { + margin-left: 0em; +} +#forum-thread .level8 { + margin-left: 0em; +} +#forum-thread .level9 { + margin-left: 0em; +} +#forum-thread .level10 { + margin-left: 0em; +} Index: dotlrn_packages/packages/forums/www/resources/forums.css =================================================================== diff -u --- dotlrn_packages/packages/forums/www/resources/forums.css (revision 0) +++ dotlrn_packages/packages/forums/www/resources/forums.css (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,116 @@ +#forum-thread { + max-width: 95%; + text-align: left; + margin-bottom: 5px; + margin-left: 1em; +} + +#forum-thread .action-list { + float: right; + text-align: right; + margin-top: 8px; + margin-right: 8px; +} + +#forum-thread .details { + margin-top: 3px; +} + +#forum-thread .content { + text-align: left; + padding: 0.5em; + margin-bottom: 1em; +} + +#forum-thread .dynexpanded { + padding-top: 3px; + padding-bottom: 3px; + border: 0px; + display: inline; +} + +#forum-thread .dyncollapsed { + padding: 0px; + display: none; +} + +#forum-thread .subject { + text-align: left; + background: #f3f3f3; + padding: 0.5em; +} + +#forum-thread .subject a.title { + color: blue; + font-weight: bold; + text-decoration:none; +} + +#forum-thread .subject .viewed0 { +} + +#forum-thread .subject .viewed1 { + font-weight: normal; +} + +#forum-thread .subject .response { + +} +#forum-thread .subject .reference { + color: #006f00; +} + +#forum-thread .attribution { + padding-top: 0.5em; + padding-left: 0.5em; +} + +#forum-thread .attribution a { + font-weight: normal; +} + +#forum-thread .odd { + background: #e9effb; +} + +#forum-thread .even { + background: #f3f3f3; +} + +#forum-thread .level0 { + margin-left: 0em; +} +#forum-thread .level1 { + margin-left: 1em; +} +#forum-thread .level2 { + margin-left: 2em; +} +#forum-thread .level3 { + margin-left: 3em; +} +#forum-thread .level4 { + margin-left: 4em; +} +#forum-thread .level5 { + margin-left: 5em; +} +#forum-thread .level6 { + margin-left: 6em; +} +#forum-thread .level7 { + margin-left: 7em; +} +#forum-thread .level8 { + margin-left: 8em; +} +#forum-thread .level9 { + margin-left: 9em; +} +#forum-thread .level10 { + margin-left: 10em; +} + +.details img { + border-style: none; +} Index: dotlrn_packages/packages/forums/www/resources/forums.js =================================================================== diff -u --- dotlrn_packages/packages/forums/www/resources/forums.js (revision 0) +++ dotlrn_packages/packages/forums/www/resources/forums.js (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,53 @@ +var forums_collapse_symbol = '-'; +var forums_expand_symbol = '+'; +var forums_replies = new Array(); + +// toggle visibility + +function forums_getid(id) { + if(document.getElementById) + return document.getElementById(id); + else if(document.all) + return document.all(id); + return false; +} + +function forums_toggle(targetId, state){ + var symbol; + var content = forums_getid('content'+targetId); + var link = forums_getid('toggle'+targetId); + + if (!link || !content) return; + + var s; + if (state != null) + s = state; + else if (content.className == "dynexpanded") { + s = 0; + } else { + s = 1; + } + if (s) { + content.className = "dynexpanded"; + symbol = forums_collapse_symbol; + } else { + content.className = "dyncollapsed"; + symbol = forums_expand_symbol; + } + + if (link.innerHTML) + link.innerHTML = symbol; + else if (link.appendChild) { + while(link.hasChildNodes()) + link.removeChild(link.firstChild); + link.appendChild(document.createTextNode(symbol)); + } +} + +function forums_toggleList(a,state) { + if (!a.length) return; + for (var i = 0; i < a.length; ++i) { + forums_toggle(a[i], state); + } +} + Index: dotlrn_packages/packages/forums/www/resources/forward.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/fwd.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/kiss.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/message-collapse.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/message-effects.js =================================================================== diff -u --- dotlrn_packages/packages/forums/www/resources/message-effects.js (revision 0) +++ dotlrn_packages/packages/forums/www/resources/message-effects.js (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,338 @@ +/* +- Script for collapse or expand the parent message and all his childs +- It uses the scriptaculous libraries for the effects + +Autor: Veronica De La Cruz + +*/ + +// Libraries to be included in this script are the +// scriptaculuos's libraries of ajaxhelper + + +// Some global variables, used in dynamicExpand() + +var expand_symbol ='+'; +var collapse_symbol ='-'; + +// This function only creates an array by a giving string of characters +// separated by blank space + +function getChildsArray(childrenString) { + + var childrenArray = new Array(); + var aux = childrenString; + var aux2 = ""; + var pos = childrenString.indexOf(" "); + var childrenStringLength = childrenString.length; + var i = 0; + var j = 0; + + // Separate all the children + + while(j <= childrenStringLength) { + + if (pos == -1){ + aux2= aux.substring(j); + childrenArray[i] = aux2; + break; + } + + childrenArray[i]= aux.substring(j,pos); + j=pos+1; + pos = childrenString.indexOf(" ",j); + i++; + } + + + return childrenArray; + + } + + +// Function that return the element properties and id + +function getId(id) { + if(document.getElementById) + return document.getElementById(id); + else if(document.all) + return document.all(id); + return false; +} + + +/* + FUNCTION: + expandChilds + + PARAMETERS: + - parentID: contains only the message_id + - childrenString: contains a string of all the children of the current message separate by + blank space + + FORMAT OF PARAMETERS: + + - parentID : message_id ; Example: 2343 + - childrenString : childrenmessage_id childrenmessage_id ; Example: 23324 32 31 321 + +*/ + + + +function expandChilds(parentID, childrenString){ + + //Get the parentID in a portable manner + + var objectParent = getId('content'+parentID); + var actionObjectParent = getId('actions'+parentID); + var parentSymbol = getId('toggle'+parentID); + var subject = getId('subject' +parentID); + var joinAll = getId('join'+parentID); + var parentStyle = Element.getStyle(objectParent,'display'); + + + //Only if the parentID message has any children + + if (childrenString != null) { + + var childArray = getChildsArray(childrenString); + + + // Make that the parent message and all his children + // take part on the effect + + + for (var i=0;i< childArray.length;i++){ + + + var objectChild = getId('content'+childArray[i]); + var objectAction= getId('actions'+childArray[i]); + var objectSymbol= getId('toggle'+childArray[i]); + var objectSubject= getId('subject'+childArray[i]); + var objectJoin = getId('join'+childArray[i]); + + var objectStyle = Element.getStyle(objectChild,'display'); + + // Change the state of the individual collapse/expand + + if (objectStyle == 'none') { + objectSymbol.innerHTML = collapse_symbol; + } + + + Element.show(objectChild); + Element.show(objectAction); + Element.hide(objectJoin); + Element.show(objectSubject); + + + } + + } + // Change the state of the individual collapse/expand + + if (parentStyle == 'none') { + parentSymbol.innerHTML = collapse_symbol; + } + + Element.show(objectParent); + Element.show(actionObjectParent); + Element.show(subject); + Element.hide(joinAll); + + + + } + + + + +// The same as expandsChilds but collapse the contents of the message + +function collapseChilds(parentID, childrenString){ + + //Get the parentID in a portable manner + + var objectParent = getId('content'+parentID); + var actionObjectParent = getId('actions'+parentID); + var parentSymbol = getId('toggle'+parentID); + var subject = getId('subject'+parentID); + var joinAll = getId('join'+parentID); + + var parentStyle = Element.getStyle(objectParent,'display'); + + //Only if the parentID message has any children + + if (childrenString != null) { + + var childArray = getChildsArray(childrenString); + + + // Make that the parent message and all his children + // take part on the efect + + + for (var i=0;i< childArray.length;i++){ + + var objectChild = getId('content'+childArray[i]); + var objectAction= getId('actions'+childArray[i]); + var objectSymbol= getId('toggle'+childArray[i]); + var objectSubject= getId('subject'+childArray[i]); + var objectJoin = getId('join'+childArray[i]); + var objectStyle = Element.getStyle(objectChild,'display'); + + + // Change the state of the individual collapse/expand + + if (objectStyle == 'block') { + objectSymbol.innerHTML = expand_symbol; + } + + Element.hide(objectChild); + Element.hide(objectAction); + Element.hide(objectSubject); + Element.show(objectJoin); + Element.setStyle(objectJoin,{display:'inline-block'}); + } + + } + // Change the state of the individual collapse/expand + + if (parentStyle == 'block') { + parentSymbol.innerHTML = expand_symbol; + } + + Element.hide(objectParent); + Element.hide(actionObjectParent); + Element.hide(subject); + Element.show(joinAll); + Element.setStyle(joinAll,{display:'inline-block'}); +} + +/* + FUNCTION: dynamicExpand + + PARAMETERS: the id of the element to be expanded or collapsed + + USE CASE: for individual functionality for expand or collapse + messages +*/ + + + function dynamicExpand(targetID) { + + var objectTargetID = getId('content'+targetID); + var objectAction= getId('actions'+targetID); + var symbolLink = getId('toggle'+targetID); + var objectSubject = getId('subject'+targetID); + var objectJoin = getId('join'+targetID); + var objectStyle = Element.getStyle(objectTargetID,'display'); + + + if(!symbolLink || !objectTargetID) return; + + // If the message is collapse we want that + // the symbol to be displayed is the expand one. + + if (objectStyle == 'none') { + + symbolLink.innerHTML = collapse_symbol; + Element.hide(objectJoin); + Element.show(objectTargetID); + Element.show(objectAction); + Element.show(objectSubject); + + + } + else { + + symbolLink.innerHTML = expand_symbol; + + Element.show(objectJoin); + Element.setStyle(objectJoin,{display:'inline-block'}); + Element.hide(objectTargetID); + Element.hide(objectAction); + Element.hide(objectSubject); + + + + + } + + } + +/*Show expanded only the direct children of the main message when the + page is loaded */ + + function showExpandedOnLoad( parentID, directChildrenString, allChildrenString) { + + var directChildren = getChildsArray(directChildrenString); + var allChildren = getChildsArray(allChildrenString); + + for (var i=0;i< directChildren.length;i++){ + for (var j=0;j< allChildren.length;j++){ + if (allChildren[j] == directChildren[i]){ + allChildren[j]= undefined; + break; + } + continue; + } + } + + for (var j=0;j< allChildren.length;j++) { + if(allChildren[j] != undefined){ + collapseOnLoad(allChildren[j]); + loadContent(allChildren[j]); + } + } + } + + +//------------------------------ + + +/* The same as expandsChilds but collapse the contents of the message*/ + +function collapseOnLoad(parentID){ + + //Get the parentID in a portable manner + + var actionObjectParent = getId('actions'+parentID); + var parentSymbol = getId('toggle'+parentID); + var subject = getId('subject'+parentID); + var joinAll = getId('join'+parentID); + + + // Change the state of the individual collapse/expand + + + parentSymbol.innerHTML = expand_symbol; + + // Collapse the message contents + + Element.hide(actionObjectParent); + Element.hide(subject); + Element.show(joinAll); + Element.setStyle(joinAll,{display:'inline-block'}); + +} + +/* + Loads the content of a given message. + parameters: messageID (the ID of the message that the content is required) +*/ + +function loadContent(messageID) { + + var containerID = getId('content'+ messageID); + var symbol = getId('toggle'+ messageID); + var url = 'load-message-content'; + var par = 'message_id='+messageID; + + + Element.setStyle(containerID, {display:'none'}); + + // This is the function that preloads the message's contents + var ajax = new Ajax.Updater(containerID, url, {asynchronous:'true', method:'post', parameters: par}); + +} Index: dotlrn_packages/packages/forums/www/resources/message-expand.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/moneymouth.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/oneeye.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/print.css =================================================================== diff -u --- dotlrn_packages/packages/forums/www/resources/print.css (revision 0) +++ dotlrn_packages/packages/forums/www/resources/print.css (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,28 @@ +/* make it white and pick a better print font */ +body { + background: white; + font-family: "Bitstream vera serif", Georgia,"Times new roman",Times,Serif; + font-size: 12pt; +} +/* suppress all the nav elements */ +#context-bar, +#searchbox, +#side, +#cop-side, +#site-header .action-list, +#site-header .user-greeting, +#cop-footer { display: none; } +#content-body { margin-left: 2em; } +#site-header .system-name { + float: none; + text-align: left; +} +#forum-thread .action-list { display: none } +#forum-thread .details IMG { display: none } + +/* remove banding */ +#forum-thread div.even, #forum-thread div.odd { + background: white; + margin-bottom: 2em; + max-width: 50em; +} Index: dotlrn_packages/packages/forums/www/resources/reeply.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/reply.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/reply.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/sad.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/scream.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/services.png =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/smile.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/smile8.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/think.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/tongue.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/wink.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/resources/yell.gif =================================================================== diff -u Binary files differ Index: dotlrn_packages/packages/forums/www/search.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/search.adp (revision 0) +++ dotlrn_packages/packages/forums/www/search.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,6 @@ + + @page_title;noquote@ + @context;noquote@ + + + Index: dotlrn_packages/packages/forums/www/search.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/search.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/search.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,13 @@ +ad_page_contract { + + @author yon@openforce.net + @author rob@thaum.net + @creation-date 2002-07-01 + @cvs-id $Id$ + +} -query { + {forum_id ""} +} + +set page_title [_ forums.Search_Forums] +set context [list $page_title] Index: dotlrn_packages/packages/forums/www/user-history.adp =================================================================== diff -u --- dotlrn_packages/packages/forums/www/user-history.adp (revision 0) +++ dotlrn_packages/packages/forums/www/user-history.adp (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,5 @@ + +#forums.Forums_Posting_hist_lt# @user.full_name;noquote@ +@context;noquote@ + + Index: dotlrn_packages/packages/forums/www/user-history.tcl =================================================================== diff -u --- dotlrn_packages/packages/forums/www/user-history.tcl (revision 0) +++ dotlrn_packages/packages/forums/www/user-history.tcl (revision 049b622549d53690f411632d2dc9926c3b35e187) @@ -0,0 +1,20 @@ +ad_page_contract { + + Posting History for a User + + @author Ben Adida (ben@openforce.net) + @creation-date 2002-05-29 + @cvs-id $Id$ + +} { + user_id:integer,notnull + {view "date"} + {groupby "forum_name"} +} + +# Get user information +oacs::user::get -user_id $user_id -array user + +set context [list [_ forums.Posting_History]] + +ad_return_template