Index: openacs-4/packages/chat/chat.info =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/chat.info,v diff -u -r1.6 -r1.7 --- openacs-4/packages/chat/chat.info 11 Dec 2003 21:40:00 -0000 1.6 +++ openacs-4/packages/chat/chat.info 14 Mar 2006 12:16:08 -0000 1.7 @@ -1,106 +1,28 @@ - + Chat Chats + f f - - - - oracle - + + David Dao Server based chat with an html and java client. - 2001-01-18 - + 2004-10-10 OpenACS - This package has not really been used. Probably better to look at the jabber package in contrib. + Modified by Agustin.Lopez@uv.es (University of Valencia, Spain). + - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + - - + + + Index: openacs-4/packages/chat/catalog/chat.ca_ES.ISO-8859-1.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/catalog/chat.ca_ES.ISO-8859-1.xml,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/catalog/chat.ca_ES.ISO-8859-1.xml 14 Mar 2006 12:16:08 -0000 1.1 @@ -0,0 +1,90 @@ + + + + Activa + Afegeix moderador + Afegeix usuari a la sala + Arxiva + Esteu segur que voleu suprimir + Esteu segur que voleu revocar el privilegi d'usuari del xat de + Esteu segur que voleu revocar el privilegi de moderador de + Esteu segur que voleu deixar de bandejar + Bandeja + Bandeja el privilegi de lectura/escriptura en el xat per a + Bandeja usuari + Xat + P�gina principal del xat + Confirma la supressi� de la transcripci� del xat + Confirma la supressi� del missatge + Confirma la revocaci� del moderador + Confirma la revocaci� de l'usuari + Confirma la supressi� de la sala + Confirma que ja no es bandejar� l'usuari + Continguts + No s'ha pogut actualitzar la sala + No s'ha pogut actualitzar la transcripci� + Crea una sala nova + Crea una sala + Ha fallat la creaci� d'una sala nova + Crea una sala + Crea una transcripci� + Suprimeix tots els missatges de la sala + Suprimeix els missatges + Ha fallat la supressi� de missatges + Suprimeix la sala + Ha fallat la supressi� de la sala + Suprimeix la transcripci� + Ha fallat la supressi� de la la transcripci� + Descripci� + Edita + Edita la transcripci� + Accions extremes + de + Atorga + Atorga privilegi de lectura/escriptura en el xat per a + Atorga moderador + Atorga moderador per a + Atorga usuari + ha entrat en la sala + ha eixit de la sala + HTML + Java + clau + Ix + missatges en + Moderat + Nom + No hi ha informaci� disponible + suprimeix + Revoca + revoca + Revoca moderador + Revoca usuari + Administra + Informaci� de la sala + Moderadors de la sala + Nom de la sala + La sala no �s activa + No s'ha trobat la sala. L'identificador de la sala no �s v�lid + Envia/Refresca + No hi ha sales disponibles + a + Nom de la transcripci� + Vista pr�via de la transcripci� + Transcripcions + No autoritzat + Privilegi no autoritzat + Deixa de bandejar + deixa de bandejar + Deixa de bandejar l'usuari + Sense t�tol + Actualitza la sala + Permet l'usuari + Bandeja l'usuari + Veure + Veure transcripci� + per nom o correu electr�nic o nom d'usuari limitat a + S� + No teniu perm�s per entrar en aquesta sala de xat + el vostre nom �s + Index: openacs-4/packages/chat/catalog/chat.en_US.ISO-8859-1.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/catalog/chat.en_US.ISO-8859-1.xml,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/catalog/chat.en_US.ISO-8859-1.xml 14 Mar 2006 12:16:08 -0000 1.1 @@ -0,0 +1,90 @@ + + + + Active + Add moderator + Add user to room + Archive + Are you sure you want to delete + Are you sure you want to revoke chat user privilege of + Are you sure you want to revoke moderator privilege of + Are you sure you want to unban + Ban + Ban chat read/write privilege for + Ban user + Chat + Chat main page + Confirm chat transcript delete + Confirm message delete + Confirm revoke moderator + Confirm revoke user + Confirm room delete + Confirm unban user + Contents + Could not update room + Could not update transcript + Create a new room + Create a room + Create new room failed + Create room + Create transcript + Delete all messages in the room + Delete messages + Delete messages failed + Delete room + Delete room failed + Delete transcript + Delete transcript failed + Description + Edit + Edit transcript + Extreme Actions + from + Grant + Grant chat read/write privilege for + Grant moderator + Grant moderator for + Grant user + has entered the room + has left the room + HTML + Java + key + Log off + messages in + Moderated + Name + No information available + remove + Revoke + revoke + Revoke moderator + Revoke user + Admin + Room Information + Room moderators + Room name + Room no active + Room not found, Invalid room id + Send/Refresh + There are no rooms available + to + Transcript name + Transcript preview + Transcripts + Unauthorized + Unauthorized privilege + Unban + unban + Unban user + Untitled + Update room + Users allow + Users ban + View + View transcript + for name or email or username limited to + Yes + You don't have permission to enter this chat room + your name is + Index: openacs-4/packages/chat/catalog/chat.es_ES.ISO-8859-1.xml =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/catalog/chat.es_ES.ISO-8859-1.xml,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/catalog/chat.es_ES.ISO-8859-1.xml 14 Mar 2006 12:16:08 -0000 1.1 @@ -0,0 +1,90 @@ + + + + Activo + A�adir moderador + A�adir un usuario a la sala + Archivo + Seguro que quieres borrar + Seguro que quieres revocar el permiso de usuario de chat de + Seguro que quieres revocar el permiso de moderador de chat de + Seguro que quieres no expulsar + Expulsar + Permiso de Expulsar para + Expulsar usuario + Chat + P�gina principal de chat + Confirmar el borrado de la transcripci�n del chat + Confirmar el borrado de mensaje + Confirmar revocar el moderador + Confirmar revocar el usuario + Confirmar borrar la sala + Confirmar no expulsi�n de usuario + Contenidos + No se ha podido actualizar la sala + No se ha podido actualizar la transcripci�n + Crear una nueva sala + Crear una sala + Error creando una sala nueva + Crear sala + Crear transcripci�n + Borrar todos los mensajes de la sala + Borrar mensajes + Error borrando mensajes + Borrar sala + Error borrando sala + Borrar transcripci�n + Error borrando transcripci�n + Descripci�n + Editar + Editar transcripci�n + Acciones extremas + de + Asignar + Asignar permisos read/write para la sala para + Asignar moderador + Asignar moderador para + Asignar usuario + ha entrado en la sala + ha abandonado la sala + HTML + Java + clave + Salir + mensajes en + Moderada + Nombre + No hay informaci�n disponible + quitar + Revocar + revocar + Revocar moderador + Revocar usuario + Admin + Informaci�n de sala + Moderadores de sala + Nombre de la sala + Sala no activa + Sala no encontrada. Id de sala incorrecto + Enviar/Actualizar + No hay salas disponibles + a + Nombre de la transcripci�n + Previsualizaci�n de la transcripci�n + Transcripciones + No autorizado + Privilegio no autorizado + No expulsar + no expulsar + No expulsar usuario + Sin t�tulo + Actualizar sala + Usuarios autorizados + Usuarios expulsados + Ver + Ver transcrici�n + por nombre o email o usuario limitado a + Si + No tienes permiso para entrar en esta sala + tu nombre es + Index: openacs-4/packages/chat/java/adChatApplet.java =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/java/Attic/adChatApplet.java,v diff -u -r1.1 -r1.2 --- openacs-4/packages/chat/java/adChatApplet.java 20 Apr 2001 20:51:08 -0000 1.1 +++ openacs-4/packages/chat/java/adChatApplet.java 14 Mar 2006 12:16:08 -0000 1.2 @@ -1,416 +1,443 @@ -import java.io.*; -import java.net.*; -import java.util.*; -import java.awt.*; -import java.awt.event.*; -import java.applet.*; - -/** - * Applet client. - * - * @author David Dao (ddao@arsdigita.com) - * @creation-date November 17, 2000 - * @cvs-id $Id$ - * - * - * - * - * - */ -public class adChatApplet extends Applet implements ActionListener, adChatClient{ - - //private TextArea text_area = null; - private Panel text_area_panel = null; - private ScrollPane text_area = null; - private TextField text_field = null; - private Button send_button = null; - private Button logoff_button = null; - private Button private_button = null; - private Button ignore_button = null; - - private adChatterList chatter_list = null; - private adChatClientListener listener = null; - private adChatClientInfo client_info = null; - private String user_id; - private String user_name; - private String room_id; - - private boolean moderated_room; - - private int format_msg_width; - private Dimension applet_size = null; - - private static int GAP = 5; - - // Key for this hash table is from_user_id:to_user_id - private Hashtable private_chat_frames = null; - // Key for this hash table is user_id - private Hashtable ignore_user_list = null; - - private Hashtable moderate_msgs = null; - - /** - * Initialize applet. - */ - public void init() { - super.init(); - - /** - * Getting server information. - */ - client_info = new adChatClientInfo(); - client_info.host = getParameter("host"); - client_info.port = Integer.parseInt(getParameter("port")); - - - //client_info.host = "localhost"; - //client_info.port = 8202; - - /** - * First get user_id, user_name, room_id - */ - client_info.user_id = getParameter("user_id"); - client_info.user_name = getParameter("user_name"); - client_info.room_id = getParameter("room_id"); - - // Temporary store moderator value in the applet. - if (getParameter("moderator") != null) - client_info.moderator = true; - - //client_info.user_id = "1"; - //client_info.user_name = "David"; - //client_info.room_id = "1"; - - applet_size = getSize(); - - private_chat_frames = new Hashtable(); - ignore_user_list = new Hashtable(); - moderate_msgs = new Hashtable(); - - /** - * Calculate dimension for each chat component. - */ - int text_field_height = 40; - int text_area_width = (applet_size.width - 3 * GAP ) * 7 / 10; - - int text_area_height = applet_size.height - 3 * GAP - text_field_height; - int text_area_x = GAP; - int text_area_y = GAP; - - format_msg_width = text_area_width; - - int text_field_width = text_area_width; - int text_field_x = GAP; - int text_field_y = text_area_y + text_area_height + GAP; - - int chat_list_width = (applet_size.width - 3 * GAP) * 3 / 10; - int chat_list_height = text_area_height - 30; - int chat_list_x = text_area_x + text_area_width + GAP; - int chat_list_y = GAP; - - int private_button_x = chat_list_x; - int private_button_y = chat_list_y + chat_list_height + GAP; - int private_button_width = 30; - int private_button_height = 25; - - int ignore_button_width = 40; - int ignore_button_height = 25; - int ignore_button_x = chat_list_x + private_button_width + GAP; - int ignore_button_y = private_button_y; - - int send_button_x = chat_list_x; - int send_button_y = text_field_y; - int send_button_width = 40; - int send_button_height = text_field_height; - - int logoff_button_width = 50; - int logoff_button_height = text_field_height; - int logoff_button_x = applet_size.width - GAP - logoff_button_width; - int logoff_button_y = text_field_y; - - /** - * End calculate dimension. - */ - - // Just a quick solution to support moderate chat. Need to plan this more careful. - - if (getParameter("room_moderated") == null) - moderated_room = false; - else - moderated_room = true; - /* - if (getParameter("moderator") == null) - moderator = false; - else - moderator = true; - */ - - /** - * GUI Layout Design - */ - setLayout(null); - text_area = new ScrollPane(); - //text_area = new TextArea(); - //text_area.setEditable(false); - text_area.setBounds(text_area_x, text_area_y, text_area_width, text_area_height); - text_area.setBackground(Color.white); - - text_area_panel = new Panel(); - text_area_panel.setLayout(new OneColumnLayout()); - //text_area_panel.setBounds(text_area_x, text_area_y, text_area_width, text_area_height); - text_area.add(text_area_panel); - - text_field = new TextField(50); - text_field.setBounds(text_field_x, text_field_y, text_field_width, text_field_height); - text_field.addActionListener(this); - text_field.setBackground(Color.white); - Image icon = getImage(getDocumentBase(), "fish2.gif"); - chatter_list = new adChatterList(icon); - chatter_list.setBounds(chat_list_x, chat_list_y, chat_list_width, chat_list_height); - chatter_list.setBackground(Color.white); - - send_button = new Button("Send"); - send_button.setBounds(send_button_x, send_button_y, send_button_width, send_button_height); - send_button.addActionListener(this); - send_button.setBackground(null); - - logoff_button = new Button("Log off"); - logoff_button.setBounds(logoff_button_x, logoff_button_y, logoff_button_width, logoff_button_height); - logoff_button.setForeground(Color.red); - logoff_button.setBackground(null); - - logoff_button.addActionListener(new ActionListener() { - public void actionPerformed(ActionEvent ae) { - URL exitURL = null; - try { - exitURL = new URL(getCodeBase().toString()); - getAppletContext().showDocument(exitURL); - } catch (MalformedURLException e) { - System.out.println("Could not exit Chat to URL "+exitURL.toString()); - } - }}); - - private_button = new Button("PM"); - private_button.setBounds(private_button_x, private_button_y, private_button_width, private_button_height); - private_button.addActionListener(this); - - ignore_button = new Button("Ignore"); - ignore_button.setBounds(ignore_button_x, ignore_button_y, ignore_button_width, ignore_button_height); - ignore_button.addActionListener(this); - - add(text_area); - //add(text_area_panel); - add(text_field); - add(chatter_list); - add(send_button); - add(logoff_button); - add(private_button); - add(ignore_button); - - // Set applet background. - setBackground(Color.white); - /** - * End GUI Layout - */ - } - - public void destroy() { - System.out.println("Destroy invoked"); - listener.disconnect(); - super.destroy(); - } - - public void stop() { - System.out.println("Stop invoked"); - listener.disconnect(); - super.stop(); - } - - /** - * Spawn a separate thread and listen for new message from the room. - */ - public void start() { - super.start(); - listener = new adChatClientListener(this, client_info); - } - - private void postMessage() { - if (!text_field.getText().equals("")) { - listener.postMessage(text_field.getText()); - text_field.setText(""); - } - } - - public void actionPerformed(ActionEvent e) { - Object src = e.getSource(); - - if (src == text_field || src == send_button) - postMessage(); - else if (src == private_button) { - adUserInfo user_info = chatter_list.getSelectedItem(); - - if (user_info != null) { - // Ignore private message from user in ignore list. - - if (ignore_user_list.containsKey(user_info.user_name)) - return; - String key = user_info.user_name; - adPrivateChatFrame f = (adPrivateChatFrame)private_chat_frames.get(key); - System.out.println("Frame f = " + f + ", key = " + key); - if (f == null) { - f = new adPrivateChatFrame(new adUserInfo(client_info.user_id, client_info.user_name), user_info, room_id, listener); - f.show(); - private_chat_frames.put(key, f); - } else { - f.show(); - f.toFront(); - } - } - } - else if (src == ignore_button) { - adUserInfo user_info = chatter_list.getSelectedItem(); - - if (user_info != null) { - // If the key already in user ignore list then click on ignore again will remove - // user from the ignore list. - - if (ignore_user_list.containsKey(user_info.user_name)) { - ignore_user_list.remove(user_info.user_name); // Remove this user from ignore list. - ((adUserInfoExt) user_info).ignore = false; - } else { - System.out.println("Ignore user [" + user_info.user_name +"]"); - ignore_user_list.put(user_info.user_name, user_info.user_id); // Add this user to ignore list. - ((adUserInfoExt) user_info).ignore = true; - } - chatter_list.invalidate(); - chatter_list.repaint(); - } - } - - } - - /** - * New message arrive from this room. - */ - public void receiveMessage(String msg) { - System.out.println("receivedMessage [" + msg + "]"); - //String system = adChatSimpleXMLParser.getTag(msg, "system"); - - if (adChatSimpleXMLParser.containTag(msg, "system")) { - adChatSystemMessage system_message = new adChatSystemMessage(msg); - if (system_message.getType() == adChatSystemMessage.USER_ENTER) { - //text_area_panel.add(new adChatFormatMessage(format_msg_width, system_message.getUserName(0), " has entered the room")); - //text_area_panel.repaint(); - - //text_area_panel.validate(); - //text_area.validate(); - } else if (system_message.getType() == adChatSystemMessage.USER_LEAVE) { - //text_area_panel.add(new adChatFormatMessage(format_msg_width, system_message.getUserName(0), " has leave the room")); - //text_area_panel.repaint(); - - //text_area_panel.validate(); - //text_area.validate(); - chatter_list.removeChatter(new adUserInfo(system_message.getUserId(0), system_message.getUserName(0))); - return; - } - - //System.out.println("List count = " + system_message.getListCount()); - for (int i = 0; i < system_message.getListCount(); i++) - chatter_list.addChatter( new adUserInfoExt(system_message.getUserId(i), system_message.getUserName(i)) ); - - return; - } - adChatMessage chat_message = new adChatMessage(msg); - - // This is not a valid chat message. - if (!chat_message.isValid()) - return; - - // If user is in ignore list then discard message from this user. - if (ignore_user_list.containsKey(chat_message.getFromUser())) - return; - - if (chat_message.getToUser() != null) { // Private conversation - - String key = chat_message.getFromUser(); - adPrivateChatFrame f = (adPrivateChatFrame) private_chat_frames.get(key); - System.out.println("Frame receive f = " + f + ", key = " + key); - - if (f == null){ - f = new adPrivateChatFrame(new adUserInfo(client_info.user_id, client_info.user_name), new adUserInfo(user_id, chat_message.getFromUser()), room_id, listener); - - private_chat_frames.put(key, f); - } - f.show(); - f.receiveMessage(chat_message.getFromUser(), chat_message.getBody()); - return; - - } - // TODO: - boolean moderate = (chat_message.getStatus() != null && chat_message.getStatus().equals("pending")) ? true : false; - adChatFormatMessage frm_msg = new adChatFormatMessage(format_msg_width, listener, msg); - //adChatFormatMessage frm_msg = new adChatFormatMessage(listener, chat_message.getFromUser(), chat_message.getBody(), moderate); - if (moderate) { - // Put moderate msg in the hash table. - if (chat_message.getMessageId() != null) { - moderate_msgs.put(chat_message.getMessageId(), frm_msg); - } - } - if (!moderate && chat_message.getMessageId() != null) { - // The message is approve moderate message. - adChatFormatMessage m = (adChatFormatMessage) moderate_msgs.get(chat_message.getMessageId()); - if (m != null) - m.setVisible(false); - - } - if (chat_message.getStatus() != null && !chat_message.getStatus().equals("rejected")) - text_area_panel.add(frm_msg); - text_area_panel.repaint(); - - text_area_panel.validate(); - text_area.validate(); - - } - - public void disconnect() { - listener.disconnect(); - } - - - - public static void main(String args[]) { - Frame f = new Frame(); - if (args.length < 3) { - System.out.println("Usage: java adChatClient user_id user_name room_id"); - return; - } - //Panel client_interface = new adChatClient(args[0], args[1], args[2]); - Panel client_interface = new adChatApplet(); - f.add(client_interface); - f.setSize(570, 400); - f.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - System.exit(0); - } - }); - - f.show(); - } -} - - - - - - - - - - - - - - - - - +import java.io.*; +import java.net.*; +import java.util.*; +import java.awt.*; +import java.awt.event.*; +import java.applet.*; + +/** + * Applet client. + * + * @author David Dao (ddao@arsdigita.com) + * @creation-date November 17, 2000 + * @cvs-id $Id$ + * + * + * + * + * + */ +public class adChatApplet extends Applet implements ActionListener, adChatClient{ + + //private TextArea text_area = null; + private Panel text_area_panel = null; + private ScrollPane text_area = null; + private TextField text_field = null; + private Button send_button = null; + private Button logoff_button = null; + private Button private_button = null; + private Button ignore_button = null; + + private adChatterList chatter_list = null; + private adChatClientListener listener = null; + private adChatClientInfo client_info = null; + private String user_id; + private String user_name; + private String room_id; + + private boolean moderated_room; + + private int format_msg_width; + private Dimension applet_size = null; + + private static int GAP = 5; + + private static String PersonImage = "person.gif"; + + // Key for this hash table is from_user_id:to_user_id + private Hashtable private_chat_frames = null; + // Key for this hash table is user_id + private Hashtable ignore_user_list = null; + + private Hashtable moderate_msgs = null; + + public static String replace (String target, String from, String to) { + // target is the original string + // from is the string to be replaced + // to is the string which will used to replace + int start = target.indexOf (from); + if (start==-1) return target; + int lf = from.length(); + char [] targetChars = target.toCharArray(); + StringBuffer buffer = new StringBuffer(); + int copyFrom=0; + while (start != -1) { + buffer.append (targetChars, copyFrom, start-copyFrom); + buffer.append (to); + copyFrom=start+lf; + start = target.indexOf (from, copyFrom); + } + buffer.append (targetChars, copyFrom, targetChars.length-copyFrom); + return buffer.toString(); + } + + /** + * Initialize applet. + */ + public void init() { + super.init(); + + /** + * Getting server information. + */ + client_info = new adChatClientInfo(); + client_info.host = getParameter("host"); + client_info.port = Integer.parseInt(getParameter("port")); + + + //client_info.host = "localhost"; + //client_info.port = 8202; + + /** + * First get user_id, user_name, room_id + */ + client_info.user_id = getParameter("user_id"); + client_info.user_name = getParameter("user_name"); + client_info.room_id = getParameter("room_id"); + + // Temporary store moderator value in the applet. + if (getParameter("moderator") != null) + client_info.moderator = true; + + //client_info.user_id = "1"; + //client_info.user_name = "David"; + //client_info.room_id = "1"; + + applet_size = getSize(); + + private_chat_frames = new Hashtable(); + ignore_user_list = new Hashtable(); + moderate_msgs = new Hashtable(); + + /** + * Calculate dimension for each chat component. + */ + int text_field_height = 40; + int text_area_width = (applet_size.width - 3 * GAP ) * 7 / 10; + + int text_area_height = applet_size.height - 3 * GAP - text_field_height; + int text_area_x = GAP; + int text_area_y = GAP; + + format_msg_width = text_area_width; + + int text_field_width = text_area_width; + int text_field_x = GAP; + int text_field_y = text_area_y + text_area_height + GAP; + + int chat_list_width = (applet_size.width - 3 * GAP) * 3 / 10; + int chat_list_height = text_area_height - 30; + int chat_list_x = text_area_x + text_area_width + GAP; + int chat_list_y = GAP; + + int private_button_x = chat_list_x; + int private_button_y = chat_list_y + chat_list_height + GAP; + int private_button_width = 80; + int private_button_height = 25; + + int ignore_button_width = 50; + int ignore_button_height = 25; + int ignore_button_x = chat_list_x + private_button_width + GAP; + int ignore_button_y = private_button_y; + + int send_button_x = chat_list_x; + int send_button_y = text_field_y; + int send_button_width = 50; + int send_button_height = text_field_height; + + int logoff_button_width = 70; + int logoff_button_height = text_field_height; + int logoff_button_x = applet_size.width - GAP - logoff_button_width; + int logoff_button_y = text_field_y; + + /** + * End calculate dimension. + */ + + // Just a quick solution to support moderate chat. Need to plan this more careful. + + if (getParameter("room_moderated") == null) + moderated_room = false; + else + moderated_room = true; + /* + if (getParameter("moderator") == null) + moderator = false; + else + moderator = true; + */ + + /** + * GUI Layout Design + */ + setLayout(null); + text_area = new ScrollPane(); + //text_area = new TextArea(); + //text_area.setEditable(false); + text_area.setBounds(text_area_x, text_area_y, text_area_width, text_area_height); + text_area.setBackground(Color.white); + + text_area_panel = new Panel(); + text_area_panel.setLayout(new OneColumnLayout()); + //text_area_panel.setBounds(text_area_x, text_area_y, text_area_width, text_area_height); + text_area.add(text_area_panel); + + text_field = new TextField(50); + text_field.setBounds(text_field_x, text_field_y, text_field_width, text_field_height); + text_field.addActionListener(this); + text_field.setBackground(Color.white); + Image icon = getImage(getDocumentBase(), PersonImage); + chatter_list = new adChatterList(icon); + chatter_list.setBounds(chat_list_x, chat_list_y, chat_list_width, chat_list_height); + chatter_list.setBackground(Color.white); + + send_button = new Button("Send"); + send_button.setBounds(send_button_x, send_button_y, send_button_width, send_button_height); + send_button.addActionListener(this); + send_button.setBackground(null); + + logoff_button = new Button("Log off"); + logoff_button.setBounds(logoff_button_x, logoff_button_y, logoff_button_width, logoff_button_height); + logoff_button.setForeground(Color.red); + logoff_button.setBackground(null); + logoff_button.addActionListener(this); + + private_button = new Button("Private"); + private_button.setBounds(private_button_x, private_button_y, private_button_width, private_button_height); + private_button.addActionListener(this); + + ignore_button = new Button("Ignore"); + ignore_button.setBounds(ignore_button_x, ignore_button_y, ignore_button_width, ignore_button_height); + ignore_button.addActionListener(this); + + add(text_area); + //add(text_area_panel); + add(text_field); + add(chatter_list); + add(send_button); + add(logoff_button); + add(private_button); + add(ignore_button); + + // Set applet background. + setBackground(Color.white); + /** + * End GUI Layout + */ + } + + public void destroy() { + System.out.println("Destroy invoked"); + listener.disconnect(); + super.destroy(); + } + + public void stop() { + System.out.println("Stop invoked"); + listener.disconnect(); + super.stop(); + } + + /** + * Spawn a separate thread and listen for new message from the room. + */ + public void start() { + super.start(); + listener = new adChatClientListener(this, client_info); + } + + private void postMessage() { + if (!text_field.getText().equals("")) { + listener.postMessage(text_field.getText()); + text_field.setText(""); + //text_field.setText(text_field.getText()); + } + } + + public void actionPerformed(ActionEvent e) { + Object src = e.getSource(); + + if (src == text_field || src == send_button) + postMessage(); + else if (src == private_button) { + adUserInfo user_info = chatter_list.getSelectedItem(); + + if (user_info != null) { + // Ignore private message from user in ignore list. + + if (ignore_user_list.containsKey(user_info.user_name)) + return; + String key = user_info.user_name; + adPrivateChatFrame f = (adPrivateChatFrame)private_chat_frames.get(key); + System.out.println("Frame f = " + f + ", key = " + key); + if (f == null) { + f = new adPrivateChatFrame(new adUserInfo(client_info.user_id, client_info.user_name), user_info, room_id, listener); + f.show(); + private_chat_frames.put(key, f); + } else { + f.show(); + f.toFront(); + } + } + } + else if (src == logoff_button) { + URL exitURL = null; + try + { + exitURL = new URL(replace (getCodeBase().toString(), "/chat", "")); + //ERROR in IExplorer: http://support.microsoft.com/kb/884763 + //workaround? + getAppletContext().showDocument(exitURL); + } + catch (MalformedURLException ex) + { + System.out.println("Could not exit Chat to URL " + exitURL.toString()); + } + } + else if (src == ignore_button) { + adUserInfo user_info = chatter_list.getSelectedItem(); + + if (user_info != null) { + // If the key already in user ignore list then click on ignore again will remove + // user from the ignore list. + + if (ignore_user_list.containsKey(user_info.user_name)) { + ignore_user_list.remove(user_info.user_name); // Remove this user from ignore list. + ((adUserInfoExt) user_info).ignore = false; + } else { + System.out.println("Ignore user [" + user_info.user_name +"]"); + ignore_user_list.put(user_info.user_name, user_info.user_id); // Add this user to ignore list. + ((adUserInfoExt) user_info).ignore = true; + } + chatter_list.invalidate(); + chatter_list.repaint(); + } + } + + } + + /** + * New message arrive from this room. + */ + public void receiveMessage(String msg) { + System.out.println("receivedMessage [" + msg + "]"); + //String system = adChatSimpleXMLParser.getTag(msg, "system"); + + if (adChatSimpleXMLParser.containTag(msg, "system")) { + adChatSystemMessage system_message = new adChatSystemMessage(msg); + if (system_message.getType() == adChatSystemMessage.USER_ENTER) { + //text_area_panel.add(new adChatFormatMessage(format_msg_width, system_message.getUserName(0), " has entered the room")); + //text_area_panel.repaint(); + + //text_area_panel.validate(); + //text_area.validate(); + } else if (system_message.getType() == adChatSystemMessage.USER_LEAVE) { + //text_area_panel.add(new adChatFormatMessage(format_msg_width, system_message.getUserName(0), " has leave the room")); + //text_area_panel.repaint(); + + //text_area_panel.validate(); + //text_area.validate(); + chatter_list.removeChatter(new adUserInfo(system_message.getUserId(0), system_message.getUserName(0))); + return; + } + + //System.out.println("List count = " + system_message.getListCount()); + for (int i = 0; i < system_message.getListCount(); i++) + chatter_list.addChatter( new adUserInfoExt(system_message.getUserId(i), system_message.getUserName(i)) ); + + return; + } + adChatMessage chat_message = new adChatMessage(msg); + + // This is not a valid chat message. + if (!chat_message.isValid()) + return; + + // If user is in ignore list then discard message from this user. + if (ignore_user_list.containsKey(chat_message.getFromUser())) + return; + + if (chat_message.getToUser() != null) { // Private conversation + + String key = chat_message.getFromUser(); + adPrivateChatFrame f = (adPrivateChatFrame) private_chat_frames.get(key); + System.out.println("Frame receive f = " + f + ", key = " + key); + + if (f == null){ + f = new adPrivateChatFrame(new adUserInfo(client_info.user_id, client_info.user_name), new adUserInfo(user_id, chat_message.getFromUser()), room_id, listener); + + private_chat_frames.put(key, f); + } + f.show(); + f.receiveMessage(chat_message.getFromUser(), chat_message.getBody()); + return; + + } + // TODO: + boolean moderate = (chat_message.getStatus() != null && chat_message.getStatus().equals("pending")) ? true : false; + adChatFormatMessage frm_msg = new adChatFormatMessage(format_msg_width, listener, msg); + //adChatFormatMessage frm_msg = new adChatFormatMessage(listener, chat_message.getFromUser(), chat_message.getBody(), moderate); + if (moderate) { + // Put moderate msg in the hash table. + if (chat_message.getMessageId() != null) { + moderate_msgs.put(chat_message.getMessageId(), frm_msg); + } + } + if (!moderate && chat_message.getMessageId() != null) { + // The message is approve moderate message. + adChatFormatMessage m = (adChatFormatMessage) moderate_msgs.get(chat_message.getMessageId()); + if (m != null) + m.setVisible(false); + + } + if (chat_message.getStatus() != null && !chat_message.getStatus().equals("rejected")) + text_area_panel.add(frm_msg); + text_area_panel.repaint(); + + text_area_panel.validate(); + text_area.validate(); + + } + + public void disconnect() { + listener.disconnect(); + } + + + + public static void main(String args[]) { + Frame f = new Frame(); + if (args.length < 3) { + System.out.println("Usage: java adChatClient user_id user_name room_id"); + return; + } + //Panel client_interface = new adChatClient(args[0], args[1], args[2]); + Panel client_interface = new adChatApplet(); + f.add(client_interface); + f.setSize(570, 400); + f.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + System.exit(0); + } + }); + + f.show(); + } +} + + + + + + + + + + + + + + + + + Index: openacs-4/packages/chat/java/adChatClientListener.java =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/java/Attic/adChatClientListener.java,v diff -u -r1.1 -r1.2 --- openacs-4/packages/chat/java/adChatClientListener.java 20 Apr 2001 20:51:08 -0000 1.1 +++ openacs-4/packages/chat/java/adChatClientListener.java 14 Mar 2006 12:16:08 -0000 1.2 @@ -1,131 +1,132 @@ -import java.io.*; -import java.net.*; -import java.util.*; -import java.awt.*; - -/** - * - * @author David Dao (ddao@arsdigita.com) - * @creation-date November 17, 2000 - * @cvs-id $Id$ - */ -public class adChatClientListener implements Runnable { - private Socket socket = null; - - private PrintWriter output = null; - private BufferedReader input = null; - private boolean running = true; - - private adChatClient client = null; - private adChatClientInfo client_info = null; - - public adChatClientListener(adChatClient client, adChatClientInfo client_info) { - this.client = client; - this.client_info = client_info; - - try { - // Spawn new thread for client - socket = new Socket(client_info.host, client_info.port); - input = new BufferedReader(new InputStreamReader(socket.getInputStream())); - output = new PrintWriter(socket.getOutputStream(), true); - - Thread t = new Thread(this); - t.start(); - - } catch (Exception exc) { - if (client != null) - client.receiveMessage(adChatMessage.buildBroadcastMsg(null, "System", null, "Could not reach chat server.")); - - } - } - - public void run() { - try { - // Send authenticate request here. - logOn(); - while(running) { - client.receiveMessage(input.readLine()); - } - socket.close(); - } catch (Exception exc) { - if (client != null) - client.receiveMessage(adChatMessage.buildBroadcastMsg(null, "System", null, "Chat server shuting down.")); - } - } - - public void logOn() { - try { - /** - * Let's do a work around now. If pw is true then the client is moderator. - * TODO: Need to remove this. - */ - String pw; - if (client_info.moderator) - pw = "T"; - else - pw = "F"; - - String msg = adChatLoginMessage.buildLoginMsg(client_info.user_id, client_info.user_name, pw, client_info.room_id); - output.println(msg); - } catch (Exception exc) { - System.out.println("Exception in logOn: " + exc); - } - } - - public void postPrivateMessage(String to_user, String msg) { - try { - msg = adChatMessage.buildPrivateMsg(client_info.user_name, to_user, client_info.room_id, msg); - output.println(msg); - } catch (Exception exc) { - System.out.println("Exception in postPrivateMessage"); - } - } - - public void postMessage(String msg) { - try { - msg = adChatMessage.buildBroadcastMsg(client_info.user_id, client_info.user_name, client_info.room_id, msg); - output.println(msg); - } catch( Exception exc) { - System.out.println("Exception in postMessage: " + exc); - } - } - - public void rejectModerateMessage(String user, String message_id, String msg) { - try { - msg = adChatMessage.buildRejectModerateMsg(message_id, user, client_info.room_id, msg); - output.println(msg); - } catch (Exception exc) { - System.out.println("Exception in rejectModerateMessage: " + exc); - } - } - - public void approveModerateMessage(String user, String message_id, String msg) { - try { - msg = adChatMessage.buildBroadcastMsg(message_id, null, user, client_info.room_id, msg); - output.println(msg); - } catch ( Exception exc) { - System.out.println("Exception in approve moderate message: " + exc); - } - } - - public void disconnect() { - running = false; - try { - output.println(adChatSystemMessage.buildUserLeaveMsg(client_info.user_id, client_info.user_name)); - socket.close(); - } catch (Exception exc) {} - } - -} - - - - - - - - - - - - +import java.io.*; +import java.net.*; +import java.util.*; +import java.awt.*; + +/** + * + * @author David Dao (ddao@arsdigita.com) + * @creation-date November 17, 2000 + * @cvs-id $Id$ + */ +public class adChatClientListener implements Runnable { + private Socket socket = null; + + private PrintWriter output = null; + private BufferedReader input = null; + private boolean running = true; + + private adChatClient client = null; + private adChatClientInfo client_info = null; + + public adChatClientListener(adChatClient client, adChatClientInfo client_info) { + this.client = client; + this.client_info = client_info; + + try { + // Spawn new thread for client + socket = new Socket(client_info.host, client_info.port); + input = new BufferedReader(new InputStreamReader(socket.getInputStream())); + output = new PrintWriter(socket.getOutputStream(), true); + + Thread t = new Thread(this); + t.start(); + + } catch (Exception exc) { + if (client != null) + client.receiveMessage(adChatMessage.buildBroadcastMsg(null, "System", null, "Could not reach chat server.")); + + } + } + + public void run() { + try { + // Send authenticate request here. + logOn(); + while(running) { + client.receiveMessage(input.readLine()); + } + socket.close(); + } catch (Exception exc) { + if (client != null) + client.receiveMessage(adChatMessage.buildBroadcastMsg(null, "System", null, "Chat server shuting down.")); + } + } + + public void logOn() { + try { + /** + * Let's do a work around now. If pw is true then the client is moderator. + * TODO: Need to remove this. + */ + String pw; + if (client_info.moderator) + pw = "T"; + else + pw = "F"; + + String msg = adChatLoginMessage.buildLoginMsg(client_info.user_id, client_info.user_name, pw, client_info.room_id); + output.println(msg); + } catch (Exception exc) { + System.out.println("Exception in logOn: " + exc); + } + } + + public void postPrivateMessage(String to_user, String msg) { + try { + msg = adChatMessage.buildPrivateMsg(client_info.user_name, to_user, client_info.room_id, msg); + output.println(msg); + } catch (Exception exc) { + System.out.println("Exception in postPrivateMessage"); + } + } + + public void postMessage(String msg) { + try { + msg = adChatMessage.buildBroadcastMsg(client_info.user_id, client_info.user_name, client_info.room_id, msg); + output.println(msg); + + } catch( Exception exc) { + System.out.println("Exception in postMessage: " + exc); + } + } + + public void rejectModerateMessage(String user, String message_id, String msg) { + try { + msg = adChatMessage.buildRejectModerateMsg(message_id, user, client_info.room_id, msg); + output.println(msg); + } catch (Exception exc) { + System.out.println("Exception in rejectModerateMessage: " + exc); + } + } + + public void approveModerateMessage(String user, String message_id, String msg) { + try { + msg = adChatMessage.buildBroadcastMsg(message_id, null, user, client_info.room_id, msg); + output.println(msg); + } catch ( Exception exc) { + System.out.println("Exception in approve moderate message: " + exc); + } + } + + public void disconnect() { + running = false; + try { + output.println(adChatSystemMessage.buildUserLeaveMsg(client_info.user_id, client_info.user_name)); + socket.close(); + } catch (Exception exc) {} + } + +} + + + + + + + + + + + + Index: openacs-4/packages/chat/java/adChatFormatMessage.java =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/java/Attic/adChatFormatMessage.java,v diff -u -r1.1 -r1.2 --- openacs-4/packages/chat/java/adChatFormatMessage.java 20 Apr 2001 20:51:08 -0000 1.1 +++ openacs-4/packages/chat/java/adChatFormatMessage.java 14 Mar 2006 12:16:08 -0000 1.2 @@ -1,318 +1,320 @@ -import java.awt.*; -import java.awt.event.*; -import java.util.*; - -/** - * - * - * @author David Dao (ddao@arsdigita.com) - * @creation-date December 5, 2000 - * @cvs-id $Id$ - */ -public class adChatFormatMessage extends Container implements ActionListener{ - private static int GAP = 2; - private Dimension d = null; - private int width = 400; - private int height = 40; - private int button_width = 20; - private int button_height = 20; - private int char_height = -1; - - private String font_name = "Helvetica"; - private int font_size = 12; - - private Font font_normal = null; - private Font font_bold = null; - - private FontMetrics fm_normal = null; - private FontMetrics fm_bold = null; - - private int x = GAP; - private int space = 4; - private int user_name_width = -1; - - public String msg = "Test string this is a brand new test please enter some meaningful word string getting longer and longer and longer until the end. Test string for longer and longer and longer and longer and longer the end."; - public String user_name = "David: "; - public String user = null; - public String message_id = null; - public boolean moderated = false; - private Vector line_break = new Vector(); - private adChatClientListener listener = null; - - private Button accept_button = null; - private Button reject_button = null; - public adChatFormatMessage(int width, String user_name, String message) { - this(width, null, user_name, message, false); - } - - // Msg is in XML format. - public adChatFormatMessage(int width, adChatClientListener listener, String msg) { - - adChatMessage chat_message = new adChatMessage(msg); - moderated = (chat_message.getStatus() != null && chat_message.getStatus().equals("pending")) ? true : false; - this.width = width; - this.listener = listener; - this.user_name = chat_message.getFromUser() + ": "; - this.user = chat_message.getFromUser(); - this.msg = chat_message.getBody(); - message_id = chat_message.getMessageId(); - initialize(); - } - - public adChatFormatMessage(int width, adChatClientListener listener, String user_name, String message, boolean moderated) { - this.moderated = moderated; - this.listener = listener; - this.width = width; - - - this.user_name = user_name + ": "; - this.user = user_name; - msg =message; - - initialize(); - - } - - private void initialize() { - d = new Dimension(width, height); - /** - * Create two fonts using in the chat message. - */ - font_normal = new Font(font_name, Font.PLAIN, font_size); - font_bold = new Font(font_name, Font.BOLD, font_size); - - Toolkit toolkit = Toolkit.getDefaultToolkit(); - fm_normal = toolkit.getFontMetrics(font_normal); - fm_bold = toolkit.getFontMetrics(font_bold); - - setLayout(null); // Set component layout manually. - - //System.out.println("Font normal = " + font_normal); - //System.out.println("Font bold = " + font_bold); - //System.out.println("fm_normal = " + fm_normal); - - char_height = fm_normal.getHeight(); - - button_width = char_height + GAP * 2; - button_height = char_height + GAP * 2; - - user_name_width = fm_bold.stringWidth(user_name); - - /** - * Add accept/reject button for each moderate message. - */ - if (moderated) { - accept_button = new Button("A"); - accept_button.setFont(font_normal); - accept_button.setBounds(GAP, GAP, button_width, button_height); - accept_button.setForeground(Color.green); - accept_button.addActionListener(this); - add(accept_button); - - reject_button = new Button("R"); - reject_button.setFont(font_normal); - reject_button.setBounds(button_width + 2* GAP, GAP, button_width, button_height); - reject_button.setForeground(Color.red); - reject_button.addActionListener(this); - add(reject_button); - - x += (2 * button_width + 2 * GAP); - } - - d.height = button_height + 2 * GAP; - - calculateLineBreak(); - repaint(); - } - - /** - * Pre calculate where each line break using this font. - */ - private void calculateLineBreak() { - int current_length = x + user_name_width; - for (int i = 0; i < msg.length(); i++) { - current_length += fm_normal.charWidth(msg.charAt(i)); - - if (current_length > d.width) { - //System.out.println("Char = " + msg.charAt(i) + ", current_length = " + current_length); - current_length = GAP + fm_normal.charWidth(msg.charAt(i)); - line_break.addElement(new Integer(i - 1)); - - d.height += char_height; - } - } - line_break.addElement(new Integer(msg.length())); - } - - public void paint(Graphics g) { - g.setColor(Color.lightGray); - g.fillRect(0, 0, d.width, d.height); - - /** - * Draw user name. - */ - g.setFont(font_bold); - g.setColor(Color.blue); - g.drawString(user_name, x, GAP + char_height); - - /** - * Draw regular message. - */ - g.setFont(font_normal); - g.setColor(Color.black); - int start_offset = 0; - int x_loc = x + user_name_width + space; - int y_loc = GAP + char_height; - for (int i = 0; i < line_break.size(); i++) { - int end_offset = ((Integer) line_break.elementAt(i)).intValue(); - //System.out.println("[" + start_offset +", " + end_offset + "] = " + msg.substring(start_offset, end_offset)); - - g.drawString(msg.substring(start_offset, end_offset), x_loc, y_loc); - start_offset = end_offset; - x_loc = GAP; - y_loc += char_height; - } - } - - public Dimension getPreferredSize() { - return d; - } - - public void actionPerformed(ActionEvent e) { - Object src = e.getSource(); - - if (listener != null) { - if (src == accept_button) - listener.approveModerateMessage(user, message_id, msg); - else if (src == reject_button) - listener.rejectModerateMessage(user, message_id, msg); - } - //if (listener != null) - // listener.postMessage(msg); - //if (listener != null) - // listener.approveModerateMessage(user, message_id, msg); - setVisible(false); - } - - public static void main(String args[]) { - Frame f = new Frame(); - ScrollPane scroll = new ScrollPane(); - Panel main = new Panel(); - /* - main.setLayout(new OneColumnLayout()); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(false)); - - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - main.add(new adChatFormatMessage(true)); - main.add(new adChatFormatMessage(false)); - */ - scroll.add(main); - f.add(scroll); - f.setSize(400,400); - f.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - System.exit(1); - } - }); - f.show(); - } -} - -class OneColumnLayout implements LayoutManager { - - private int hgap = 2; - public void addLayoutComponent(String name, Component comp) { - } - - public void removeLayoutComponent(Component comp) { - - } - - public Dimension preferredLayoutSize(Container parent) { - return calculateLayoutSize(parent); - } - - public Dimension minimumLayoutSize(Container parent) { - return calculateLayoutSize(parent); - } - - public void layoutContainer(Container parent) { - //System.out.println(this + "::layoutContainer"); - synchronized (parent.getTreeLock()) { - int nmembers = parent.getComponentCount(); - int x = 0; - int y = 0; - for (int i = 0; i < nmembers; i++) { - Component m = parent.getComponent(i); - if (m.isVisible()) { - Dimension d = m.getPreferredSize(); - m.setBounds(x, y, d.width, d.height); - y += (d.height + hgap); - } - } - } - } - - private Dimension calculateLayoutSize(Container parent) { - Dimension dim = new Dimension(0, 0); - synchronized (parent.getTreeLock()) { - int nmembers = parent.getComponentCount(); - - for (int i = 0; i < nmembers; i++) { - Component m = parent.getComponent(i); - if (m.isVisible()) { - Dimension d= m.getPreferredSize(); - dim.height += (d.height + hgap); - if (i == 0) - dim.width = d.width; - } - } - return dim; - } - } -} - - - - - - - +import java.awt.*; +import java.awt.event.*; +import java.util.*; + +/** + * + * + * @author David Dao (ddao@arsdigita.com) + * @creation-date December 5, 2000 + * @cvs-id $Id$ + */ +public class adChatFormatMessage extends Container implements ActionListener{ + private static int GAP = 2; + private Dimension d = null; + private int width = 400; + private int height = 40; + private int button_width = 20; + private int button_height = 20; + private int char_height = -1; + + private String font_name = "Helvetica"; + private int font_size = 12; + + private Font font_normal = null; + private Font font_bold = null; + + private FontMetrics fm_normal = null; + private FontMetrics fm_bold = null; + + private int x = GAP; + private int space = 4; + private int user_name_width = -1; + + public String msg = "Test string this is a brand new test please enter some meaningful word string getting longer and longer and longer until the end. Test string for longer and longer and longer and longer and longer the end."; + public String user_name = "David: "; + public String user = null; + public String message_id = null; + public boolean moderated = false; + private Vector line_break = new Vector(); + private adChatClientListener listener = null; + + private Button accept_button = null; + private Button reject_button = null; + public adChatFormatMessage(int width, String user_name, String message) { + this(width, null, user_name, message, false); + } + + // Msg is in XML format. + public adChatFormatMessage(int width, adChatClientListener listener, String msg) { + + adChatMessage chat_message = new adChatMessage(msg); + moderated = (chat_message.getStatus() != null && chat_message.getStatus().equals("pending")) ? true : false; + this.width = width; + this.listener = listener; + this.user_name = chat_message.getFromUser() + ": "; + this.user = chat_message.getFromUser(); + this.msg = chat_message.getBody(); + message_id = chat_message.getMessageId(); + initialize(); + } + + public adChatFormatMessage(int width, adChatClientListener listener, String user_name, String message, boolean moderated) { + this.moderated = moderated; + this.listener = listener; + this.width = width; + + + this.user_name = user_name + ": "; + this.user = user_name; + msg =message; + + initialize(); + + } + + private void initialize() { + d = new Dimension(width, height); + /** + * Create two fonts using in the chat message. + */ + font_normal = new Font(font_name, Font.PLAIN, font_size); + font_bold = new Font(font_name, Font.BOLD, font_size); + + Toolkit toolkit = Toolkit.getDefaultToolkit(); + fm_normal = toolkit.getFontMetrics(font_normal); + fm_bold = toolkit.getFontMetrics(font_bold); + + setLayout(null); // Set component layout manually. + + //System.out.println("Font normal = " + font_normal); + //System.out.println("Font bold = " + font_bold); + //System.out.println("fm_normal = " + fm_normal); + + char_height = fm_normal.getHeight(); + + button_width = char_height + GAP * 2; + button_height = char_height + GAP * 2; + + user_name_width = fm_bold.stringWidth(user_name); + + /** + * Add accept/reject button for each moderate message. + */ + if (moderated) { + accept_button = new Button("A"); + accept_button.setFont(font_normal); + accept_button.setBounds(GAP, GAP, button_width, button_height); + accept_button.setForeground(Color.green); + accept_button.addActionListener(this); + add(accept_button); + + reject_button = new Button("R"); + reject_button.setFont(font_normal); + reject_button.setBounds(button_width + 2* GAP, GAP, button_width, button_height); + reject_button.setForeground(Color.red); + reject_button.addActionListener(this); + add(reject_button); + + x += (2 * button_width + 2 * GAP); + } + + d.height = button_height + 2 * GAP; + + calculateLineBreak(); + repaint(); + } + + /** + * Pre calculate where each line break using this font. + */ + private void calculateLineBreak() { + int current_length = x + user_name_width; + for (int i = 0; i < msg.length(); i++) { + current_length += fm_normal.charWidth(msg.charAt(i)); + + if (current_length > d.width) { + //System.out.println("Char = " + msg.charAt(i) + ", current_length = " + current_length); + current_length = GAP + fm_normal.charWidth(msg.charAt(i)); + line_break.addElement(new Integer(i - 1)); + + d.height += char_height; + } + } + line_break.addElement(new Integer(msg.length())); + } + + public void paint(Graphics g) { + /*AGUSTIN*/ + /*g.setColor(Color.lightGray);*/ + g.setColor(Color.white); + g.fillRect(0, 0, d.width, d.height - 5); + + /** + * Draw user name. + */ + g.setFont(font_bold); + g.setColor(Color.blue); + g.drawString(user_name, x, GAP + char_height); + + /** + * Draw regular message. + */ + g.setFont(font_normal); + g.setColor(Color.black); + int start_offset = 0; + int x_loc = x + user_name_width + space; + int y_loc = GAP + char_height; + for (int i = 0; i < line_break.size(); i++) { + int end_offset = ((Integer) line_break.elementAt(i)).intValue(); + //System.out.println("[" + start_offset +", " + end_offset + "] = " + msg.substring(start_offset, end_offset)); + + g.drawString(msg.substring(start_offset, end_offset), x_loc, y_loc); + start_offset = end_offset; + x_loc = GAP; + y_loc += char_height; + } + } + + public Dimension getPreferredSize() { + return d; + } + + public void actionPerformed(ActionEvent e) { + Object src = e.getSource(); + + if (listener != null) { + if (src == accept_button) + listener.approveModerateMessage(user, message_id, msg); + else if (src == reject_button) + listener.rejectModerateMessage(user, message_id, msg); + } + //if (listener != null) + // listener.postMessage(msg); + //if (listener != null) + // listener.approveModerateMessage(user, message_id, msg); + setVisible(false); + } + + public static void main(String args[]) { + Frame f = new Frame(); + ScrollPane scroll = new ScrollPane(); + Panel main = new Panel(); + /* + main.setLayout(new OneColumnLayout()); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(false)); + + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + main.add(new adChatFormatMessage(true)); + main.add(new adChatFormatMessage(false)); + */ + scroll.add(main); + f.add(scroll); + f.setSize(400,400); + f.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + System.exit(1); + } + }); + f.show(); + } +} + +class OneColumnLayout implements LayoutManager { + + private int hgap = 2; + public void addLayoutComponent(String name, Component comp) { + } + + public void removeLayoutComponent(Component comp) { + + } + + public Dimension preferredLayoutSize(Container parent) { + return calculateLayoutSize(parent); + } + + public Dimension minimumLayoutSize(Container parent) { + return calculateLayoutSize(parent); + } + + public void layoutContainer(Container parent) { + //System.out.println(this + "::layoutContainer"); + synchronized (parent.getTreeLock()) { + int nmembers = parent.getComponentCount(); + int x = 0; + int y = 0; + for (int i = 0; i < nmembers; i++) { + Component m = parent.getComponent(i); + if (m.isVisible()) { + Dimension d = m.getPreferredSize(); + m.setBounds(x, y, d.width, d.height); + y += (d.height + hgap); + } + } + } + } + + private Dimension calculateLayoutSize(Container parent) { + Dimension dim = new Dimension(0, 0); + synchronized (parent.getTreeLock()) { + int nmembers = parent.getComponentCount(); + + for (int i = 0; i < nmembers; i++) { + Component m = parent.getComponent(i); + if (m.isVisible()) { + Dimension d= m.getPreferredSize(); + dim.height += (d.height + hgap); + if (i == 0) + dim.width = d.width; + } + } + return dim; + } + } +} + + + + + + + Index: openacs-4/packages/chat/java/adChatMessage.java =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/java/Attic/adChatMessage.java,v diff -u -r1.1 -r1.2 --- openacs-4/packages/chat/java/adChatMessage.java 20 Apr 2001 20:51:08 -0000 1.1 +++ openacs-4/packages/chat/java/adChatMessage.java 14 Mar 2006 12:16:08 -0000 1.2 @@ -1,188 +1,188 @@ -/** - * - * @author David Dao (ddao@arsdigita.com) - * @creation-date December 7, 2000 - * @cvs-id $Id$ - */ -public class adChatMessage { - - /** - * Private variables. - */ - private String message_id = null; - private String from = null; - private String from_user_id = null; - private String to = null; - private String to_user_id = null; - private String room_id = null; - private String status = null; - private String body = null; - - private boolean valid = true; - - public adChatMessage() { - } - - public adChatMessage(String xml) { - if (!adChatSimpleXMLParser.containTag(xml, "message")) { - valid = false; - return; - } - - message_id = adChatSimpleXMLParser.getTag(xml, "message_id"); - from = adChatSimpleXMLParser.getTag(xml, "from"); - from_user_id = adChatSimpleXMLParser.getTag(xml, "from_user_id"); - to = adChatSimpleXMLParser.getTag(xml, "to"); - to_user_id = adChatSimpleXMLParser.getTag(xml, "to_user_id"); - room_id = adChatSimpleXMLParser.getTag(xml, "room_id"); - status = adChatSimpleXMLParser.getTag(xml, "status"); - body = adChatSimpleXMLParser.getTag(xml, "body"); - } - - public void setMessageId(String id) { - message_id = id; - } - - public String getMessageId() { - return message_id; - } - - public void setFromUser(String user) { - from = user; - } - - public String getFromUser() { - return from; - } - - public void setFromUserId(String user_id) { - from_user_id = user_id; - } - - public String getFromUserId() { - return from_user_id; - } - - public void setToUserId(String user_id) { - to_user_id = user_id; - } - - public String getToUserId() { - return to_user_id; - } - - public void setToUser(String user) { - to = user; - } - - public String getToUser() { - return to; - } - - public void setRoomId(String room_id) { - this.room_id = room_id; - } - - public String getRoomId() { - return room_id; - } - - public void setStatus(String status) { - this.status = status; - } - - public String getStatus() { - return status; - } - - public void setBody(String msg) { - body = msg; - } - - public String getBody() { - return body; - } - - public String buildXML() { - return adChatMessage.buildXML(message_id, from_user_id, from, to_user_id, to, room_id, status, body); - } - - public boolean isValid() { - return valid; - } - - public String toString() { - return adChatMessage.buildXML(message_id, from_user_id, from, to_user_id, to, room_id, status, body); - } - - public static String buildXML(String message_id, String from_user_id, String from, - String to_user_id, String to, String room_id, - String status, String body) { - StringBuffer sb = new StringBuffer(400); - - sb.append(""); - - if (message_id != null) - sb.append("").append(message_id).append(""); - if (from_user_id != null) - sb.append("").append(from_user_id).append(""); - if (from != null) - sb.append("").append(from).append(""); - if (to_user_id != null) - sb.append("").append(to_user_id).append(""); - if (to != null) - sb.append("").append(to).append(""); - if (room_id != null) - sb.append("").append(room_id).append(""); - if (status != null) - sb.append("").append(status).append(""); - if (body != null) - sb.append("").append(body).append(""); - - sb.append(""); - - return sb.toString(); - } - - public static String buildBroadcastMsg(String id, String user_id, String from_user, String room_id, String body) { - return buildXML(id, user_id, from_user, null, null, room_id, "approved", body); - } - - public static String buildBroadcastMsg(String user_id, String from_user, String room_id, String body) { - return buildXML(null, user_id, from_user, null, null, room_id, "approved", body); - } - - public static String buildPrivateMsg(String from_user, String to_user, String room_id, String body) { - return buildXML(null, null, from_user, null, to_user, room_id, null, body); - } - - public static String buildModerateMsg(String from_user, String room_id, String body) { - return buildXML(null, null, from_user, null, null, room_id, "pending", body); - } - public static String buildRejectModerateMsg(String id, String from_user, String room_id, String body) { - return buildXML(id, null, from_user, null, null, room_id, "rejected", body); - } -} - - - - - - - - - - - - - - - - - - - - - - - +/** + * + * @author David Dao (ddao@arsdigita.com) + * @creation-date December 7, 2000 + * @cvs-id $Id$ + */ +public class adChatMessage { + + /** + * Private variables. + */ + private String message_id = null; + private String from = null; + private String from_user_id = null; + private String to = null; + private String to_user_id = null; + private String room_id = null; + private String status = null; + private String body = null; + + private boolean valid = true; + + public adChatMessage() { + } + + public adChatMessage(String xml) { + if (!adChatSimpleXMLParser.containTag(xml, "message")) { + valid = false; + return; + } + + message_id = adChatSimpleXMLParser.getTag(xml, "message_id"); + from = adChatSimpleXMLParser.getTag(xml, "from"); + from_user_id = adChatSimpleXMLParser.getTag(xml, "from_user_id"); + to = adChatSimpleXMLParser.getTag(xml, "to"); + to_user_id = adChatSimpleXMLParser.getTag(xml, "to_user_id"); + room_id = adChatSimpleXMLParser.getTag(xml, "room_id"); + status = adChatSimpleXMLParser.getTag(xml, "status"); + body = adChatSimpleXMLParser.getTag(xml, "body"); + } + + public void setMessageId(String id) { + message_id = id; + } + + public String getMessageId() { + return message_id; + } + + public void setFromUser(String user) { + from = user; + } + + public String getFromUser() { + return from; + } + + public void setFromUserId(String user_id) { + from_user_id = user_id; + } + + public String getFromUserId() { + return from_user_id; + } + + public void setToUserId(String user_id) { + to_user_id = user_id; + } + + public String getToUserId() { + return to_user_id; + } + + public void setToUser(String user) { + to = user; + } + + public String getToUser() { + return to; + } + + public void setRoomId(String room_id) { + this.room_id = room_id; + } + + public String getRoomId() { + return room_id; + } + + public void setStatus(String status) { + this.status = status; + } + + public String getStatus() { + return status; + } + + public void setBody(String msg) { + body = msg; + } + + public String getBody() { + return body; + } + + public String buildXML() { + return adChatMessage.buildXML(message_id, from_user_id, from, to_user_id, to, room_id, status, body); + } + + public boolean isValid() { + return valid; + } + + public String toString() { + return adChatMessage.buildXML(message_id, from_user_id, from, to_user_id, to, room_id, status, body); + } + + public static String buildXML(String message_id, String from_user_id, String from, + String to_user_id, String to, String room_id, + String status, String body) { + StringBuffer sb = new StringBuffer(400); + + sb.append(""); + + if (message_id != null) + sb.append("").append(message_id).append(""); + if (from_user_id != null) + sb.append("").append(from_user_id).append(""); + if (from != null) + sb.append("").append(from).append(""); + if (to_user_id != null) + sb.append("").append(to_user_id).append(""); + if (to != null) + sb.append("").append(to).append(""); + if (room_id != null) + sb.append("").append(room_id).append(""); + if (status != null) + sb.append("").append(status).append(""); + if (body != null) + sb.append("").append(body).append(""); + + sb.append(""); + + return sb.toString(); + } + + public static String buildBroadcastMsg(String id, String user_id, String from_user, String room_id, String body) { + return buildXML(id, user_id, from_user, null, null, room_id, "approved", body); + } + + public static String buildBroadcastMsg(String user_id, String from_user, String room_id, String body) { + return buildXML(null, user_id, from_user, null, null, room_id, "approved", body); + } + + public static String buildPrivateMsg(String from_user, String to_user, String room_id, String body) { + return buildXML(null, null, from_user, null, to_user, room_id, null, body); + } + + public static String buildModerateMsg(String from_user, String room_id, String body) { + return buildXML(null, null, from_user, null, null, room_id, "pending", body); + } + public static String buildRejectModerateMsg(String id, String from_user, String room_id, String body) { + return buildXML(id, null, from_user, null, null, room_id, "rejected", body); + } +} + + + + + + + + + + + + + + + + + + + + + + + Index: openacs-4/packages/chat/java/adChatServer.java =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/java/Attic/adChatServer.java,v diff -u -r1.1 -r1.2 --- openacs-4/packages/chat/java/adChatServer.java 20 Apr 2001 20:51:08 -0000 1.1 +++ openacs-4/packages/chat/java/adChatServer.java 14 Mar 2006 12:16:08 -0000 1.2 @@ -1,105 +1,105 @@ -import java.io.*; -import java.net.*; -import java.util.*; -import java.awt.*; -import java.awt.event.*; - -/** - * - * @author David Dao (ddao@arsdigita.com) - * @author Stefan Deusch (stefan@arsdigita.com) - * @creation-date December 6, 2000 - * @cvs-id $Id$ - */ -public class adChatServer { - - private int port; - private int backlog = 50; - private adChatDatasource datasource = new adChatDatasource(); - private boolean running = true; - private ServerSocket server = null; - - public adChatServer(int port) { - this.port = port; - } - - /** - * Listen for incoming java connection. For each connection - * spawn a new thread. - */ - public void start() { - try { - server = new ServerSocket(port); - System.out.println("[" + new Date() + "] - Chat server listens on port " + port); - while(running) { - Socket incoming = server.accept(); - if (running) { - System.out.println("[" + new Date() + "] - Connection from " + incoming); - adClientSession session = new adClientSession(this, incoming); - session.start(); - } - } - } catch (IOException io) { - // Server shut down normally. - } catch (Exception e) { - System.out.println("Socket server exception: " + e); - } - System.out.println("[" + new Date() + "] - Chat server shuts down."); - } - - /** - * Open tcp socket and send a bye message to the chat server. - */ - public void stop() { - try { - Socket socket = new Socket(InetAddress.getLocalHost(), port); - PrintWriter output = new PrintWriter(socket.getOutputStream(), true); - output.println("Bye"); - output.close(); - } catch (Exception e) { - System.out.println("Exception in stoping server: " + e); - } - } - - /** - * Shut down the current server. - */ - public synchronized void shutdown() { - running = false; - try { - if (server != null) - server.close(); - } catch(Exception e) {} - } - - public adChatDatasource getDatasource() { - return datasource; - } - - public InetAddress getInetAddress() { - return server.getInetAddress(); - } - - public static void main(String[] args) { - if (args.length < 2) { - System.out.println(" Usuage: java adChatServer (start | stop) "); - return; - } - int port = Integer.parseInt(args[1]); - adChatServer server = new adChatServer(port); - if (args[0].equals("start")) - server.start(); - else if (args[0].equals("stop")) - server.stop(); - else - System.out.println(" Usuage: java adChatServer (start | stop) "); - - } -} - - - - - - - +import java.io.*; +import java.net.*; +import java.util.*; +import java.awt.*; +import java.awt.event.*; + +/** + * + * @author David Dao (ddao@arsdigita.com) + * @author Stefan Deusch (stefan@arsdigita.com) + * @creation-date December 6, 2000 + * @cvs-id $Id$ + */ +public class adChatServer { + + private int port; + private int backlog = 50; + private adChatDatasource datasource = new adChatDatasource(); + private boolean running = true; + private ServerSocket server = null; + + public adChatServer(int port) { + this.port = port; + } + + /** + * Listen for incoming java connection. For each connection + * spawn a new thread. + */ + public void start() { + try { + server = new ServerSocket(port); + System.out.println("[" + new Date() + "] - Chat server listens on port " + port); + while(running) { + Socket incoming = server.accept(); + if (running) { + System.out.println("[" + new Date() + "] - Connection from " + incoming); + adClientSession session = new adClientSession(this, incoming); + session.start(); + } + } + } catch (IOException io) { + // Server shut down normally. + } catch (Exception e) { + System.out.println("Socket server exception: " + e); + } + System.out.println("[" + new Date() + "] - Chat server shuts down."); + } + + /** + * Open tcp socket and send a bye message to the chat server. + */ + public void stop() { + try { + Socket socket = new Socket(InetAddress.getLocalHost(), port); + PrintWriter output = new PrintWriter(socket.getOutputStream(), true); + output.println("Bye"); + output.close(); + } catch (Exception e) { + System.out.println("Exception in stoping server: " + e); + } + } + + /** + * Shut down the current server. + */ + public synchronized void shutdown() { + running = false; + try { + if (server != null) + server.close(); + } catch(Exception e) {} + } + + public adChatDatasource getDatasource() { + return datasource; + } + + public InetAddress getInetAddress() { + return server.getInetAddress(); + } + + public static void main(String[] args) { + if (args.length < 2) { + System.out.println(" Usuage: java adChatServer (start | stop) "); + return; + } + int port = Integer.parseInt(args[1]); + adChatServer server = new adChatServer(port); + if (args[0].equals("start")) + server.start(); + else if (args[0].equals("stop")) + server.stop(); + else + System.out.println(" Usuage: java adChatServer (start | stop) "); + + } +} + + + + + + + Index: openacs-4/packages/chat/java/adChatSimpleXMLParser.java =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/java/Attic/adChatSimpleXMLParser.java,v diff -u -r1.1 -r1.2 --- openacs-4/packages/chat/java/adChatSimpleXMLParser.java 20 Apr 2001 20:51:08 -0000 1.1 +++ openacs-4/packages/chat/java/adChatSimpleXMLParser.java 14 Mar 2006 12:16:08 -0000 1.2 @@ -1,67 +1,67 @@ - -/** - * This class contains very simple methods that parse out - * xml chat message. This class is not intend to use for - * complicate xml. - * - * @author David Dao (ddao@arsdigita.com) - * @creation-date December 6, 2000 - * @cvs-id $Id$ - */ -public class adChatSimpleXMLParser { - public static String removeTag(String str, String tag) { - String ret = str; - - int start_index = str.indexOf("<" + tag + ">"); - - if (start_index >= 0) { - int end_index = str.indexOf(""); - if (end_index >= 0) { - - ret = str.substring(0, start_index); - ret = ret.concat(str.substring(end_index + 3 + tag.length(), str.length())); - } - } - - return ret; - } - - public static String getTag(String str, String tag) { - String ret = null; - - int start_index = str.indexOf("<" + tag + ">"); - - if (start_index >= 0) { - int end_index = str.indexOf(""); - if (end_index >= 0) { - ret = str.substring(start_index + 2 + tag.length(), end_index); - } - } - - return ret; - } - - public static boolean containTag(String str, String tag) { - boolean ret = false; - - int start_index = str.indexOf("<" + tag + ">"); - if (start_index >= 0) { - int end_index = str.indexOf(""); - if (end_index >= 0) - ret = true; - - } - - return ret; - } - -} - - - - - - - - - + +/** + * This class contains very simple methods that parse out + * xml chat message. This class is not intend to use for + * complicate xml. + * + * @author David Dao (ddao@arsdigita.com) + * @creation-date December 6, 2000 + * @cvs-id $Id$ + */ +public class adChatSimpleXMLParser { + public static String removeTag(String str, String tag) { + String ret = str; + + int start_index = str.indexOf("<" + tag + ">"); + + if (start_index >= 0) { + int end_index = str.indexOf(""); + if (end_index >= 0) { + + ret = str.substring(0, start_index); + ret = ret.concat(str.substring(end_index + 3 + tag.length(), str.length())); + } + } + + return ret; + } + + public static String getTag(String str, String tag) { + String ret = null; + + int start_index = str.indexOf("<" + tag + ">"); + + if (start_index >= 0) { + int end_index = str.indexOf(""); + if (end_index >= 0) { + ret = str.substring(start_index + 2 + tag.length(), end_index); + } + } + + return ret; + } + + public static boolean containTag(String str, String tag) { + boolean ret = false; + + int start_index = str.indexOf("<" + tag + ">"); + if (start_index >= 0) { + int end_index = str.indexOf(""); + if (end_index >= 0) + ret = true; + + } + + return ret; + } + +} + + + + + + + + + Index: openacs-4/packages/chat/java/adChatterList.java =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/java/Attic/adChatterList.java,v diff -u -r1.1 -r1.2 --- openacs-4/packages/chat/java/adChatterList.java 20 Apr 2001 20:51:08 -0000 1.1 +++ openacs-4/packages/chat/java/adChatterList.java 14 Mar 2006 12:16:08 -0000 1.2 @@ -1,295 +1,296 @@ -import java.awt.*; -import java.awt.event.*; -import java.util.*; - -class adUserInfoExt extends adUserInfo { - - public boolean ignore = false; - - public adUserInfoExt(String user_id, String user_name) { - super(user_id, user_name); - } - -} -class adChatterListLayout implements LayoutManager { - public void addLayoutComponent(String name, Component comp) {} - - public void removeLayoutComponent(Component comp) {} - - public Dimension preferredLayoutSize(Container parent) { - synchronized (parent.getTreeLock()) { - - Component[] c = parent.getComponents(); - - if (c == null) - return new Dimension(); - - Dimension d = null; - // Only have one component. - for (int i = 0; i < c.length; i++) { - d = c[i].getSize(); - - } - - return d; - - } - } - - public Dimension minimumLayoutSize(Container parent) { - return preferredLayoutSize(parent); - } - - public void layoutContainer(Container parent) {} - -} - -class adChatterScrollPane extends ScrollPane { - private Image offscr_image = null; - - private adChatterList chatter_list = null; - public adChatterScrollPane() { - chatter_list = new adChatterList(null); - chatter_list.setBounds(0, 0, 100, 390); - add(chatter_list); - - } - - public void addChatter(String name) { - chatter_list.addChatter(new adUserInfoExt("1", name)); - chatter_list.repaint(); - chatter_list.invalidate(); - } - - public void paint(Graphics g) { - if (offscr_image == null) - offscr_image = createImage(getSize().width, getSize().height); - - Graphics offscr_graphics = offscr_image.getGraphics(); - offscr_graphics.clearRect(0, 0, getSize().width, getSize().height); - System.out.println(this + "paint()"); - super.paint(offscr_graphics); - - g.drawImage(offscr_image, 0, 0, this); - - } - - public void update(Graphics g) { - paint(g); - } - -} -public class adChatterList extends Container - implements MouseListener, AdjustmentListener { - /** - * Icon dimension - */ - private final static int ICON_WIDTH = 32; - private final static int ICON_HEIGHT = 32; - - private final static int GAP_H = 2; // Space in pixels between icon and text - private final static int GAP_V = 2; // Gap between two name labels - - private final static int INSET_X = 2; - private final static int INSET_Y = 2; - - private final static int SCROLLBAR_WIDTH = 20; - private int select_index = -1; - - Image icon = null; - - private Image ignore_icon = null; - private Vector user_list = null; - private Image offscr_image = null; - private Dimension d = null; - - private int width = 0; - private int height = 0; - - private Scrollbar v_scrollbar = null; - private Scrollbar h_scrollbar = null; - private int num_of_displays = -1; - private int start_idx = 0; - - public adChatterList(Image icon) { - user_list = new Vector(); - this.icon = icon; - //icon = getToolkit().getImage("fish2.gif"); - //ignore_icon = getToolkit().getImage("ignore.gif"); - addMouseListener(this); - - v_scrollbar = new Scrollbar(Scrollbar.VERTICAL); - h_scrollbar = new Scrollbar(Scrollbar.HORIZONTAL); - - v_scrollbar.setVisible(false); - v_scrollbar.addAdjustmentListener(this); - setLayout(null); - - add(v_scrollbar); - - } - - public adUserInfo getSelectedItem() { - if (select_index < 0 || select_index > user_list.size()) - return null; - - return (adUserInfo) user_list.elementAt(select_index); - } - - private void initialize() { - d = getSize(); - - v_scrollbar.setBounds(d.width - SCROLLBAR_WIDTH, 0, SCROLLBAR_WIDTH, d.height); - - num_of_displays = d.height / (ICON_HEIGHT + 2 * INSET_Y + GAP_V); - v_scrollbar.setVisibleAmount(num_of_displays); - - System.out.println("Num of display=" + num_of_displays); - } - public void addChatter(adUserInfo user_info) { - - if (d == null) - initialize(); - - user_list.addElement(user_info); - - if (user_list.size() > num_of_displays) { - v_scrollbar.setVisible(true); - v_scrollbar.setMaximum(user_list.size()); - } else - v_scrollbar.setVisible(false); - - - repaint(); - } - - public void removeChatter(adUserInfo user_info) { - // Need to optimized this method. - - // first look through the whole list for the same user id. - for (int i = 0; i < user_list.size(); i++) { - adUserInfo obj = (adUserInfo) user_list.elementAt(i); - if (obj.user_id.equals(user_info.user_id)) { - user_list.removeElement(obj); - return; - } - } - - return; - } - - public void paint(Graphics g) { - - if (d == null) - initialize(); - - g.setColor(getBackground()); - g.fillRect(0, 0, getSize().width, getSize().height); - /** - * Draw border around the component - */ - g.setColor(Color.gray); - g.draw3DRect(0, 0, d.width - 1, d.height - 1, false); - g.draw3DRect(1, 1, d.width - 2, d.height - 2, false); - - /** - * End drawing border - */ - - int x = 2; - int y = 2; - - - for (int i = start_idx; (i < user_list.size()) && (i < start_idx + num_of_displays); i++) { - if (select_index == i) { - g.setColor(Color.blue); - g.fillRect(x, y, d.width, ICON_HEIGHT + 2 * INSET_Y); - g.setColor(Color.white); - } else { - g.setColor(Color.lightGray); - g.fillRect(x, y, d.width, ICON_HEIGHT + 2 * INSET_Y); - g.setColor(Color.black); - } - adUserInfoExt user_info = (adUserInfoExt) user_list.elementAt(i); - g.drawImage(icon, x + INSET_X, y + INSET_Y, ICON_WIDTH, ICON_HEIGHT, this); - if (user_info.ignore) { - g.setColor(Color.red); - g.drawLine(x + INSET_X, y + INSET_Y, x + INSET_X + ICON_WIDTH, y + INSET_Y + ICON_HEIGHT); - g.drawLine(x + INSET_X + ICON_WIDTH, y + INSET_Y, x + INSET_X, y + INSET_Y + ICON_HEIGHT); - } - //g.drawImage(ignore_icon, x + INSET_X, y + INSET_Y, ICON_WIDTH, ICON_HEIGHT, this); - g.drawString(user_info.user_name, x + INSET_X + ICON_WIDTH + GAP_H, y + 20); - y += (ICON_HEIGHT + 2 * INSET_Y + GAP_V); - } - super.paint(g); - - } - public Dimension getPreferredSize() { - return getSize(); - } - - public void update(Graphics g) { - System.out.println(this + "update()"); - paint(g); - } - public void mouseClicked(MouseEvent e) { - - } - - public void mouseEntered(MouseEvent e) { - } - - public void mouseExited(MouseEvent e) { - } - - public void mousePressed(MouseEvent e) { - Point pt = e.getPoint(); - select_index = pt.y / (ICON_HEIGHT + 2 * INSET_Y + GAP_V); - repaint(); - } - - public void mouseReleased(MouseEvent e) { - } - - public void adjustmentValueChanged(AdjustmentEvent e) { - start_idx = e.getValue(); - repaint(); - } - public static void main(String args[]) { - Frame f = new Frame(); - - //final adChatterScrollPane sp = new adChatterScrollPane(); - final adChatterList sp = new adChatterList(null); - sp.setBounds(15, 50, 200, 390); - Button add = new Button("add"); - add.setBounds(320, 60, 50, 30); - add.addActionListener(new ActionListener() { - private int count = 0; - public void actionPerformed(ActionEvent e) { - sp.addChatter(new adUserInfo("1", "David" + (count++))); - } - }); - - f.setLayout(null); - f.add(sp); - f.add(add); - f.setSize(570, 400); - - f.addWindowListener(new WindowAdapter() { - public void windowClosing(WindowEvent e) { - System.exit(0); - } - }); - - f.show(); - - } -} - - - - - - - - +import java.awt.*; +import java.awt.event.*; +import java.util.*; + +class adUserInfoExt extends adUserInfo { + + public boolean ignore = false; + + public adUserInfoExt(String user_id, String user_name) { + super(user_id, user_name); + } + +} +class adChatterListLayout implements LayoutManager { + public void addLayoutComponent(String name, Component comp) {} + + public void removeLayoutComponent(Component comp) {} + + public Dimension preferredLayoutSize(Container parent) { + synchronized (parent.getTreeLock()) { + + Component[] c = parent.getComponents(); + + if (c == null) + return new Dimension(); + + Dimension d = null; + // Only have one component. + for (int i = 0; i < c.length; i++) { + d = c[i].getSize(); + + } + + return d; + + } + } + + public Dimension minimumLayoutSize(Container parent) { + return preferredLayoutSize(parent); + } + + public void layoutContainer(Container parent) {} + +} + +class adChatterScrollPane extends ScrollPane { + private Image offscr_image = null; + + private adChatterList chatter_list = null; + public adChatterScrollPane() { + chatter_list = new adChatterList(null); + chatter_list.setBounds(0, 0, 100, 390); + add(chatter_list); + + } + + public void addChatter(String name) { + chatter_list.addChatter(new adUserInfoExt("1", name)); + chatter_list.repaint(); + chatter_list.invalidate(); + } + + public void paint(Graphics g) { + if (offscr_image == null) + offscr_image = createImage(getSize().width, getSize().height); + + Graphics offscr_graphics = offscr_image.getGraphics(); + offscr_graphics.clearRect(0, 0, getSize().width, getSize().height); + System.out.println(this + "paint()"); + super.paint(offscr_graphics); + + g.drawImage(offscr_image, 0, 0, this); + + } + + public void update(Graphics g) { + paint(g); + } + +} +public class adChatterList extends Container + implements MouseListener, AdjustmentListener { + /** + * Icon dimension + */ + private final static int ICON_WIDTH = 32; + private final static int ICON_HEIGHT = 32; + + private final static int GAP_H = 2; // Space in pixels between icon and text + private final static int GAP_V = 2; // Gap between two name labels + + private final static int INSET_X = 2; + private final static int INSET_Y = 2; + + private final static int SCROLLBAR_WIDTH = 20; + private int select_index = -1; + + Image icon = null; + + private Image ignore_icon = null; + private Vector user_list = null; + private Image offscr_image = null; + private Dimension d = null; + + private int width = 0; + private int height = 0; + + private Scrollbar v_scrollbar = null; + private Scrollbar h_scrollbar = null; + private int num_of_displays = -1; + private int start_idx = 0; + + public adChatterList(Image icon) { + user_list = new Vector(); + this.icon = icon; + //icon = getToolkit().getImage("fish2.gif"); + //ignore_icon = getToolkit().getImage("ignore.gif"); + addMouseListener(this); + + v_scrollbar = new Scrollbar(Scrollbar.VERTICAL); + h_scrollbar = new Scrollbar(Scrollbar.HORIZONTAL); + + v_scrollbar.setVisible(false); + v_scrollbar.addAdjustmentListener(this); + setLayout(null); + + add(v_scrollbar); + + } + + public adUserInfo getSelectedItem() { + if (select_index < 0 || select_index > user_list.size()) + return null; + + return (adUserInfo) user_list.elementAt(select_index); + } + + private void initialize() { + d = getSize(); + + v_scrollbar.setBounds(d.width - SCROLLBAR_WIDTH, 0, SCROLLBAR_WIDTH, d.height); + + num_of_displays = d.height / (ICON_HEIGHT + 2 * INSET_Y + GAP_V); + v_scrollbar.setVisibleAmount(num_of_displays); + + System.out.println("Num of display=" + num_of_displays); + } + public void addChatter(adUserInfo user_info) { + + if (d == null) + initialize(); + + user_list.addElement(user_info); + + if (user_list.size() > num_of_displays) { + v_scrollbar.setVisible(true); + v_scrollbar.setMaximum(user_list.size()); + } else + v_scrollbar.setVisible(false); + + + repaint(); + } + + public void removeChatter(adUserInfo user_info) { + // Need to optimized this method. + + // first look through the whole list for the same user id. + for (int i = 0; i < user_list.size(); i++) { + adUserInfo obj = (adUserInfo) user_list.elementAt(i); + if (obj.user_id.equals(user_info.user_id)) { + user_list.removeElement(obj); + return; + } + } + + return; + } + + public void paint(Graphics g) { + + if (d == null) + initialize(); + + g.setColor(getBackground()); + g.fillRect(0, 0, getSize().width, getSize().height); + /** + * Draw border around the component + */ + g.setColor(Color.gray); + g.draw3DRect(0, 0, d.width - 1, d.height - 1, false); + g.draw3DRect(1, 1, d.width - 2, d.height - 2, false); + + /** + * End drawing border + */ + + int x = 2; + int y = 2; + + + for (int i = start_idx; (i < user_list.size()) && (i < start_idx + num_of_displays); i++) { + if (select_index == i) { + g.setColor(Color.blue); + g.fillRect(x, y, d.width, ICON_HEIGHT + 2 * INSET_Y); + g.setColor(Color.white); + } else { + /*AGUSTIN*/ + g.setColor(Color.white); + g.fillRect(x, y, d.width, ICON_HEIGHT + 2 * INSET_Y); + g.setColor(Color.black); + } + adUserInfoExt user_info = (adUserInfoExt) user_list.elementAt(i); + g.drawImage(icon, x + INSET_X, y + INSET_Y, ICON_WIDTH, ICON_HEIGHT, this); + if (user_info.ignore) { + g.setColor(Color.red); + g.drawLine(x + INSET_X, y + INSET_Y, x + INSET_X + ICON_WIDTH, y + INSET_Y + ICON_HEIGHT); + g.drawLine(x + INSET_X + ICON_WIDTH, y + INSET_Y, x + INSET_X, y + INSET_Y + ICON_HEIGHT); + } + //g.drawImage(ignore_icon, x + INSET_X, y + INSET_Y, ICON_WIDTH, ICON_HEIGHT, this); + g.drawString(user_info.user_name, x + INSET_X + ICON_WIDTH + GAP_H, y + 20); + y += (ICON_HEIGHT + 2 * INSET_Y + GAP_V); + } + super.paint(g); + + } + public Dimension getPreferredSize() { + return getSize(); + } + + public void update(Graphics g) { + System.out.println(this + "update()"); + paint(g); + } + public void mouseClicked(MouseEvent e) { + + } + + public void mouseEntered(MouseEvent e) { + } + + public void mouseExited(MouseEvent e) { + } + + public void mousePressed(MouseEvent e) { + Point pt = e.getPoint(); + select_index = pt.y / (ICON_HEIGHT + 2 * INSET_Y + GAP_V); + repaint(); + } + + public void mouseReleased(MouseEvent e) { + } + + public void adjustmentValueChanged(AdjustmentEvent e) { + start_idx = e.getValue(); + repaint(); + } + public static void main(String args[]) { + Frame f = new Frame(); + + //final adChatterScrollPane sp = new adChatterScrollPane(); + final adChatterList sp = new adChatterList(null); + sp.setBounds(15, 50, 200, 390); + Button add = new Button("add"); + add.setBounds(320, 60, 50, 30); + add.addActionListener(new ActionListener() { + private int count = 0; + public void actionPerformed(ActionEvent e) { + sp.addChatter(new adUserInfo("1", "David" + (count++))); + } + }); + + f.setLayout(null); + f.add(sp); + f.add(add); + f.setSize(570, 400); + + f.addWindowListener(new WindowAdapter() { + public void windowClosing(WindowEvent e) { + System.exit(0); + } + }); + + f.show(); + + } +} + + + + + + + + Index: openacs-4/packages/chat/java/adClientSession.java =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/java/Attic/adClientSession.java,v diff -u -r1.1 -r1.2 --- openacs-4/packages/chat/java/adClientSession.java 20 Apr 2001 20:51:08 -0000 1.1 +++ openacs-4/packages/chat/java/adClientSession.java 14 Mar 2006 12:16:08 -0000 1.2 @@ -1,161 +1,163 @@ -import java.io.*; -import java.net.*; -import java.util.*; -import java.awt.*; -import java.awt.event.*; - -/** - * - * @author David Dao (ddao@arsdigita.com) - * @author Stefan Deusch (stefan@arsdigita.com) - * @creation-date December 6, 2000 - * @cvs-id $Id$ - */ - -class adClientSession extends Thread { - private Socket socket = null; - - private BufferedReader input = null; - private PrintWriter output = null; - private boolean running = true; - private adChatDatasource datasource = null; - private adChatServer server = null; - - private boolean authenticate_p = false; - private boolean from_HTML_client = false; - private String room_id = null; - private InetAddress inet_address = null; - - public String user_name = null; - public String user_id = null; - public boolean moderator = false; - - public adClientSession(adChatServer server, Socket socket) { - this.datasource = server.getDatasource(); - this.socket = socket; - this.server = server; - - inet_address = socket.getInetAddress(); - } - - public void run() { - try { - input = new BufferedReader(new InputStreamReader(socket.getInputStream())); - output = new PrintWriter(socket.getOutputStream(), true); - - while(running) { - String str = input.readLine(); - System.out.println("Receive [" + str + "]"); - if (str.equals("Bye")) { - running = false; - output.close(); - datasource.disconnectAll(); - // For security reason you could only shutdown server from local host. - // TODO: Later might be able to shutdown chat server remotely with proper user - // authentication. - if (inet_address.equals(InetAddress.getLocalHost())) - server.shutdown(); - - return; - } - - /** - * Authenticate user log in here. If invalid login then - * close the connection immediately - */ - if (!authenticate_p) { - // Authenticate user log in. - adChatLoginMessage login = new adChatLoginMessage(str); - - if (!login.isValid()) { - // Invalid log in message. - output.println(adChatMessage.buildBroadcastMsg(null, "Administrator", null, "Access denied.")); - output.close(); - socket.close(); - running = false; - return; - } else { - user_name = login.getUserName(); - room_id = login.getRoomId(); - user_id = login.getUserId(); - // Temporary. - // TODO: Fix it. - String tmp = login.getPassword(); - if (tmp != null && tmp.equals("T")) - moderator = true; - System.out.println("User name: " + user_name + ", moderator = " + moderator); - if (user_name.equals("AOL_READER")) { - datasource.addAolSession(this); - authenticate_p = true; - - } else if (user_name.equals("AOL_WRITER")) { - from_HTML_client = true; - authenticate_p = true; - } else if (datasource.isDuplicate(user_name, room_id)) { - output.println(adChatMessage.buildBroadcastMsg(null, "Administrator", null, "User already in the room.")); - output.close(); - running = false; - return; - } else { - String user_list = datasource.getAppletUsers(room_id); - - if (user_list != null) - output.println(user_list); - - datasource.addSession(this, room_id); - datasource.broadcastAppletOnly(adChatSystemMessage.buildUserEnterMsg(user_id, user_name), room_id); - datasource.broadcast(adChatMessage.buildBroadcastMsg(user_id, user_name, room_id, " has entered the room."), room_id); - authenticate_p = true; - } - } - continue; - } - System.out.println("Broadcast [" + str + "]"); - - // Test to see if this is a log out message. - if (adChatSimpleXMLParser.containTag(str, "system")) { - datasource.broadcastAppletOnly(str, room_id); - continue; - } - - if (from_HTML_client) { - adChatMessage msg = new adChatMessage(str); - room_id = msg.getRoomId(); - } - // Current assumption is all rooms are moderate. - // TODO: Need to check if room is moderate or not. - if (!moderator) { - adChatMessage msg = new adChatMessage(str); - str = adChatMessage.buildModerateMsg(msg.getFromUser(), msg.getRoomId(), msg.getBody()); - } - datasource.broadcast(str, room_id); - - } - socket.close(); - } catch (Exception exc) { - // Client connection die abnormally. Log this user off. - } - // Remove user from room. And broadcast message to everyone in the room. - datasource.removeSession(this, room_id); - datasource.broadcast(adChatMessage.buildBroadcastMsg(user_id, user_name, room_id, " has leave the room."), room_id); - } - - public void postMessage(String msg) { - try { - output.println(msg); - } catch (Exception exc) {} - } - - public void disconnect() { - running = false; - try { - socket.close(); - } catch (Exception exc) {} - } -} - - - - - - +import java.io.*; +import java.net.*; +import java.util.*; +import java.awt.*; +import java.awt.event.*; + +/** + * + * @author David Dao (ddao@arsdigita.com) + * @author Stefan Deusch (stefan@arsdigita.com) + * @creation-date December 6, 2000 + * @cvs-id $Id$ + */ + +class adClientSession extends Thread { + private Socket socket = null; + + private BufferedReader input = null; + private PrintWriter output = null; + private boolean running = true; + private adChatDatasource datasource = null; + private adChatServer server = null; + + private boolean authenticate_p = false; + private boolean from_HTML_client = false; + private String room_id = null; + private InetAddress inet_address = null; + + public String user_name = null; + public String user_id = null; + public boolean moderator = false; + + public adClientSession(adChatServer server, Socket socket) { + this.datasource = server.getDatasource(); + this.socket = socket; + this.server = server; + + inet_address = socket.getInetAddress(); + } + + public void run() { + try { + input = new BufferedReader(new InputStreamReader(socket.getInputStream())); + output = new PrintWriter(socket.getOutputStream(), true); + + while(running) { + String str = input.readLine(); + + System.out.println("Receive [" + str + "]"); + if (str.equals("Bye")) { + running = false; + output.close(); + datasource.disconnectAll(); + // For security reason you could only shutdown server from local host. + // TODO: Later might be able to shutdown chat server remotely with proper user + // authentication. + if (inet_address.equals(InetAddress.getLocalHost())) + server.shutdown(); + + return; + } + + /** + * Authenticate user log in here. If invalid login then + * close the connection immediately + */ + if (!authenticate_p) { + // Authenticate user log in. + adChatLoginMessage login = new adChatLoginMessage(str); + + if (!login.isValid()) { + // Invalid log in message. + output.println(adChatMessage.buildBroadcastMsg(null, "Administrator", null, "Access denied.")); + output.close(); + socket.close(); + running = false; + return; + } else { + user_name = login.getUserName(); + room_id = login.getRoomId(); + user_id = login.getUserId(); + // Temporary. + // TODO: Fix it. + String tmp = login.getPassword(); + if (tmp != null && tmp.equals("T")) + moderator = true; + System.out.println("User name: " + user_name + ", moderator = " + moderator); + if (user_name.equals("AOL_READER")) { + datasource.addAolSession(this); + authenticate_p = true; + + } else if (user_name.equals("AOL_WRITER")) { + from_HTML_client = true; + authenticate_p = true; + } else if (datasource.isDuplicate(user_name, room_id)) { + output.println(adChatMessage.buildBroadcastMsg(null, "Administrator", null, "User already in the room.")); + output.close(); + running = false; + return; + } else { + String user_list = datasource.getAppletUsers(room_id); + + if (user_list != null) + output.println(user_list); + + datasource.addSession(this, room_id); + datasource.broadcastAppletOnly(adChatSystemMessage.buildUserEnterMsg(user_id, user_name), room_id); + datasource.broadcast(adChatMessage.buildBroadcastMsg(user_id, user_name, room_id, " has entered the room."), room_id); + authenticate_p = true; + } + } + continue; + } + System.out.println("Broadcast [" + str + "]"); + + // Test to see if this is a log out message. + if (adChatSimpleXMLParser.containTag(str, "system")) { + datasource.broadcastAppletOnly(str, room_id); + continue; + } + + if (from_HTML_client) { + adChatMessage msg = new adChatMessage(str); + room_id = msg.getRoomId(); + } + + // Current assumption is all rooms are moderate. + // TODO: Need to check if room is moderate or not. + if (!moderator) { + adChatMessage msg = new adChatMessage(str); + str = adChatMessage.buildModerateMsg(msg.getFromUser(), msg.getRoomId(), msg.getBody()); + } + datasource.broadcast(str, room_id); + + } + socket.close(); + } catch (Exception exc) { + // Client connection die abnormally. Log this user off. + } + // Remove user from room. And broadcast message to everyone in the room. + datasource.removeSession(this, room_id); + datasource.broadcast(adChatMessage.buildBroadcastMsg(user_id, user_name, room_id, " has leave the room."), room_id); + } + + public void postMessage(String msg) { + try { + output.println(msg); + } catch (Exception exc) {} + } + + public void disconnect() { + running = false; + try { + socket.close(); + } catch (Exception exc) {} + } +} + + + + + + Index: openacs-4/packages/chat/java/adPrivateChatFrame.java =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/java/Attic/adPrivateChatFrame.java,v diff -u -r1.1 -r1.2 --- openacs-4/packages/chat/java/adPrivateChatFrame.java 20 Apr 2001 20:51:08 -0000 1.1 +++ openacs-4/packages/chat/java/adPrivateChatFrame.java 14 Mar 2006 12:16:08 -0000 1.2 @@ -22,105 +22,105 @@ private adChatClientListener listener = null; private int format_msg_width; public adPrivateChatFrame(adUserInfo sender, adUserInfo receiver, String room_id, adChatClientListener listener) { - super("Conversation with " + receiver.user_name); - this.sender = sender; - this.receiver = receiver; - this.listener = listener; - this.room_id = room_id; + super("Conversar --> " + receiver.user_name); + this.sender = sender; + this.receiver = receiver; + this.listener = listener; + this.room_id = room_id; - setSize(400, 400); - setResizable(false); + setSize(400, 400); + setResizable(false); - p = new Panel(); - p.setSize(390, 350); + p = new Panel(); + p.setSize(390, 350); - p.setLayout(null); + p.setLayout(null); - Dimension size = p.getSize(); + Dimension size = p.getSize(); - int text_field_height = 40; - int send_button_width = 40; + int text_field_height = 40; + int send_button_width = 40; - int text_area_x = GAP; - int text_area_y = GAP; - int text_area_width = size.width - 2 * GAP; - format_msg_width = text_area_width; + int text_area_x = GAP; + int text_area_y = GAP; + int text_area_width = size.width - 2 * GAP; + format_msg_width = text_area_width; - int text_area_height = size.height - 3 * GAP - text_field_height; - - int text_field_x = GAP; - int text_field_y = text_area_y + text_area_height + GAP; - int text_field_width = size.width - 3 * GAP - send_button_width; - int send_button_x = text_field_x + text_field_width + GAP; - int send_button_y = text_field_y; - int send_button_height = text_field_height; + int text_area_height = size.height - 3 * GAP - text_field_height; + + int text_field_x = GAP; + int text_field_y = text_area_y + text_area_height + GAP; + int text_field_width = size.width - 3 * GAP - send_button_width; + int send_button_x = text_field_x + text_field_width + GAP; + int send_button_y = text_field_y; + int send_button_height = text_field_height; - //text_area = new TextArea(); - text_area = new ScrollPane(); - text_area.setBounds(text_area_x, text_area_y, text_area_width, text_area_height); + //text_area = new TextArea(); + text_area = new ScrollPane(); + text_area.setBounds(text_area_x, text_area_y, text_area_width, text_area_height); - text_area_panel = new Panel(); - text_area_panel.setLayout(new OneColumnLayout()); - text_area.add(text_area_panel); - text_field = new TextField(50); - text_field.setBounds(text_field_x, text_field_y, text_field_width, text_field_height); - text_field.addActionListener(this); + text_area_panel = new Panel(); + text_area_panel.setLayout(new OneColumnLayout()); + text_area.add(text_area_panel); + text_field = new TextField(50); + text_field.setBounds(text_field_x, text_field_y, text_field_width, text_field_height); + text_field.addActionListener(this); - send_button = new Button("Send"); - send_button.setBounds(send_button_x, send_button_y, send_button_width, send_button_height); - send_button.addActionListener(this); + send_button = new Button("Enviar"); + send_button.setBounds(send_button_x, send_button_y, send_button_width, send_button_height); + send_button.addActionListener(this); - p.add(text_area); - p.add(text_field); - p.add(send_button); + p.add(text_area); + p.add(text_field); + p.add(send_button); - add(p); - enableEvents(AWTEvent.WINDOW_EVENT_MASK); + add(p); + enableEvents(AWTEvent.WINDOW_EVENT_MASK); } protected void processWindowEvent(WindowEvent e) { - if (e.getID() == WindowEvent.WINDOW_CLOSING) { - - // Clear all previous messages. - //text_area.setText(""); - dispose(); - } + if (e.getID() == WindowEvent.WINDOW_CLOSING) { + + // Clear all previous messages. + //text_area.setText(""); + dispose(); + } } private void postMessage() { - - if (!text_field.getText().equals("")) { - receiveMessage(sender.user_name, text_field.getText()); + + if (!text_field.getText().equals("")) { + receiveMessage(sender.user_name, text_field.getText()); - listener.postPrivateMessage(receiver.user_name, text_field.getText()); + listener.postPrivateMessage(receiver.user_name, text_field.getText()); - text_field.setText(""); - } - + text_field.setText(""); + } + } public void actionPerformed(ActionEvent e) { - Object src = e.getSource(); + Object src = e.getSource(); - if (src == text_field || src == send_button) - postMessage(); + if (src == text_field || src == send_button) + postMessage(); } public void receiveMessage(String user_name, String msg) { - if (user_name == null) - user_name = "Unknown"; + if (user_name == null) + user_name = "Unknown"; - text_area_panel.add(new adChatFormatMessage(format_msg_width, user_name, msg)); - text_area_panel.repaint(); - text_area_panel.validate(); - text_area.validate(); - - //text_area.append(msg); - //text_area.append("\n"); - + text_area_panel.add(new adChatFormatMessage(format_msg_width, user_name, msg)); + text_area_panel.repaint(); + text_area_panel.validate(); + text_area.validate(); + + //text_area.append(msg); + //text_area.append("\n"); + } } Index: openacs-4/packages/chat/sql/postgresql/chat-create.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/sql/postgresql/chat-create.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/sql/postgresql/chat-create.sql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,699 @@ +-- +-- packages/chat/sql/chat-create.sql +-- +-- @author ddao@arsdigita.com +-- @creation-date November 09, 2000 +-- @cvs-id $Id: chat-create.sql,v 1.1 2006/03/14 12:16:09 emmar Exp $ +-- + + +-- create the privileges +select acs_privilege__create_privilege('chat_room_create', 'Create chat room', null); +select acs_privilege__create_privilege('chat_room_view', 'View room information', null); +select acs_privilege__create_privilege('chat_room_edit', 'Edit chat room', null); +select acs_privilege__create_privilege('chat_room_delete', 'Delete chat room', null); + +select acs_privilege__create_privilege('chat_transcript_create', 'Create chat transcript', null); +select acs_privilege__create_privilege('chat_transcript_view', 'View chat transcript', null); +select acs_privilege__create_privilege('chat_transcript_edit', 'Edit chat transcipt', null); +select acs_privilege__create_privilege('chat_transcript_delete', 'Delete chat transcript', null); + +select acs_privilege__create_privilege('chat_room_moderate', 'Moderate chat room', null); + +select acs_privilege__create_privilege('chat_moderator_grant', 'Add moderator to a chat room', null); +select acs_privilege__create_privilege('chat_moderator_revoke', 'Remove moderator from a chat room', null); + +select acs_privilege__create_privilege('chat_user_grant', 'Grant user to a chat room', null); +select acs_privilege__create_privilege('chat_user_revoke', 'Remove user from a chat room', null); +select acs_privilege__create_privilege('chat_user_ban', ' Ban user from a chat room', null); +select acs_privilege__create_privilege('chat_user_unban', 'Unban user from a chat room', null); + +select acs_privilege__create_privilege('chat_ban', 'Ban from a chat room', null); +select acs_privilege__create_privilege('chat_read', 'View chat message', null); +select acs_privilege__create_privilege('chat_write', 'Write chat message', null); + +-- Set of privileges for regular chat user. +select acs_privilege__create_privilege('chat_user', 'Regular chat user', null); +select acs_privilege__add_child('chat_user', 'chat_read'); +select acs_privilege__add_child('chat_user', 'chat_write'); + +-- Set of privileges for moderator of the chat room. +select acs_privilege__create_privilege('chat_moderator', 'Chat room moderator', null); +select acs_privilege__add_child('chat_moderator', 'chat_room_moderate'); +select acs_privilege__add_child('chat_moderator', 'chat_user_ban'); +select acs_privilege__add_child('chat_moderator', 'chat_user_unban'); +select acs_privilege__add_child('chat_moderator', 'chat_user_grant'); +select acs_privilege__add_child('chat_moderator', 'chat_user_revoke'); +select acs_privilege__add_child('chat_moderator', 'chat_transcript_create'); +select acs_privilege__add_child('chat_moderator', 'chat_transcript_view'); +select acs_privilege__add_child('chat_moderator', 'chat_transcript_edit'); +select acs_privilege__add_child('chat_moderator', 'chat_transcript_delete'); +select acs_privilege__add_child('chat_moderator', 'chat_user'); + + -- Set of privileges for administrator of the chat room. +select acs_privilege__create_privilege('chat_room_admin', 'Chat room administrator', null); +select acs_privilege__add_child('chat_room_admin', 'chat_room_create'); +select acs_privilege__add_child('chat_room_admin', 'chat_room_delete'); +select acs_privilege__add_child('chat_room_admin', 'chat_room_edit'); +select acs_privilege__add_child('chat_room_admin', 'chat_room_view'); +select acs_privilege__add_child('chat_room_admin', 'chat_moderator_grant'); +select acs_privilege__add_child('chat_room_admin', 'chat_moderator_revoke'); +select acs_privilege__add_child('chat_room_admin', 'chat_moderator'); + +-- Site wite admin also administrator of the chat room. +select acs_privilege__add_child('admin', 'chat_room_admin'); + + +-- create chat room object type +CREATE FUNCTION inline_0() +RETURNS integer +AS 'declare + attr_id acs_attributes.attribute_id%TYPE; + begin + PERFORM + + acs_object_type__create_type( + ''chat_room'', -- object_type + ''Chat Room'', -- pretty_name + ''Chat Rooms'', -- pretty_plural + ''acs_object'', -- supertype + ''CHAT_ROOMS'', -- table_name + ''ROOM_ID'', -- id_column + null, -- package_name + ''f'', -- abstract_p + null, -- type_extension_table + null -- name_method + ); + + + attr_id := acs_attribute__create_attribute ( + ''chat_room'', -- object_type + ''pretty_name'', -- attribute_name + ''string'', -- datatype + ''Room name'', -- pretty_name + ''Room names'', -- pretty_plural + null, -- table_name (default) + null, -- column_name (default) + null, -- default_value (default) + 1, -- min_n_values (default) + 1, -- max_n_values (default) + null, -- sort_order (default) + ''type_specific'', -- storage (default) + ''f'' -- static_p (default) + ); + + + + attr_id := acs_attribute__create_attribute ( + ''chat_room'', -- object_type + ''description'', -- attribute_name + ''string'', -- datatype + ''Description'', -- pretty_name + ''Descriptions'', -- pretty_plural + null, -- table_name (default) + null, -- column_name (default) + null, -- default_value (default) + 1, -- min_n_values (default) + 1, -- max_n_values (default) + null, -- sort_order (default) + ''type_specific'', -- storage (default) + ''f'' -- static_p (default) + ); + + + attr_id := acs_attribute__create_attribute ( + ''chat_room'', -- object_type + ''moderated_p'', -- attribute_name + ''boolean'', -- datatype + ''Moderated'', -- pretty_name + ''Moderated'', -- pretty_plural + null, -- table_name (default) + null, -- column_name (default) + null, -- default_value (default) + 1, -- min_n_values (default) + 1, -- max_n_values (default) + null, -- sort_order (default) + ''type_specific'', -- storage (default) + ''f'' -- static_p (default) + ); + + + attr_id := acs_attribute__create_attribute ( + ''chat_room'', -- object_type + ''active_p'', -- attribute_name + ''boolean'', -- datatype + ''Activated'', -- pretty_name + ''Activated'', -- pretty_plural + null, -- table_name (default) + null, -- column_name (default) + null, -- default_value (default) + 1, -- min_n_values (default) + 1, -- max_n_values (default) + null, -- sort_order (default) + ''type_specific'', -- storage (default) + ''f'' -- static_p (default) + ); + + + attr_id := acs_attribute__create_attribute ( + ''chat_room'', -- object_type + ''archive_p'', -- attribute_name + ''boolean'', -- datatype + ''Archived'', -- pretty_name + ''Archived'', -- pretty_plural + null, -- table_name (default) + null, -- column_name (default) + null, -- default_value (default) + 1, -- min_n_values (default) + 1, -- max_n_values (default) + null, -- sort_order (default) + ''type_specific'', -- storage (default) + ''f'' -- static_p (default) + ); + + + return 0; + + end;' + +LANGUAGE 'plpgsql'; +SELECT inline_0(); +DROP function inline_0(); + + +create table chat_rooms ( + + room_id integer + constraint chat_rooms_room_id_pk primary key + constraint chat_rooms_room_id_fk + references acs_objects(object_id), + -- This is room name. + pretty_name varchar(100) + constraint chat_rooms_pretty_name_nn not null, + description varchar(2000), + moderated_p boolean + default 'f' + constraint chat_rooms_moderate_p_ck + check (moderated_p in ('t','f')), + active_p boolean + default 't' + constraint chat_rooms_active_p_ck + check (active_p in ('t','f')), + -- if set then log all chat messages in this room. + archive_p boolean + default 'f' + constraint chat_rooms_archive_p_ck + check (archive_p in ('t', 'f')) + + + + +); + + +-- create chat transcript object type +CREATE FUNCTION inline_0() +RETURNS integer +AS 'declare + attr_id acs_attributes.attribute_id%TYPE; + begin + PERFORM + + acs_object_type__create_type( + ''chat_transcript'', -- object_type + ''Chat Transcript'', -- pretty_name + ''Chat Transcripts'', -- pretty_plural + ''acs_object'', -- supertype + ''CHAT_TRANSCRIPTS'', -- table_name + ''TRANSCRIPT_ID'', -- id_column + null, -- package_name + ''f'', -- abstract_p + null, -- type_extension_table + null -- name_method + ); + + + attr_id := acs_attribute__create_attribute ( + ''chat_transcript'', -- object_type + ''pretty_name'', -- attribute_name + ''string'', -- datatype + ''Transcript name'', -- pretty_name + ''Transcript names'',-- pretty_plural + null, -- table_name (default) + null, -- column_name (default) + null, -- default_value (default) + 1, -- min_n_values (default) + 1, -- max_n_values (default) + null, -- sort_order (default) + ''type_specific'', -- storage (default) + ''f'' -- static_p (default) + ); + + + attr_id := acs_attribute__create_attribute ( + ''chat_transcript'', -- object_type + ''description'', -- attribute_name + ''string'', -- datatype + ''Description'', -- pretty_name + ''Descriptions'', -- pretty_plural + null, -- table_name (default) + null, -- column_name (default) + null, -- default_value (default) + 1, -- min_n_values (default) + 1, -- max_n_values (default) + null, -- sort_order (default) + ''type_specific'', -- storage (default) + ''f'' -- static_p (default) + ); + + + attr_id := acs_attribute__create_attribute ( + ''chat_transcript'', -- object_type + ''contents'', -- attribute_name + ''string'', -- datatype + ''Transcript content'', -- pretty_name + ''Transcript contents'', -- pretty_plural + null, -- table_name (default) + null, -- column_name (default) + null, -- default_value (default) + 1, -- min_n_values (default) + 1, -- max_n_values (default) + null, -- sort_order (default) + ''type_specific'', -- storage (default) + ''f'' -- static_p (default) + ); + + + + return 0; + + end;' + +LANGUAGE 'plpgsql'; +SELECT inline_0(); +DROP function inline_0(); + + +--------------------------------- + +create table chat_transcripts ( + transcript_id integer + constraint chat_trans_transcript_id_pk primary key + constraint chat_trans_transcript_id_fk + references acs_objects(object_id), + contents varchar(32000) + constraint chat_trans_contents_nn not null, + -- Chat transcript name. + pretty_name varchar(100) + constraint chat_trans_pretty_name_nn not null, + description varchar(2000), + room_id integer + constraint chat_trans_room_id_fk references chat_rooms +); + + +--------------------------------- + +create table chat_msgs ( + msg_id integer + constraint chat_msgs_msg_id_pk primary key, + msg varchar(4000), + msg_len integer + constraint chat_msgs_msg_len_ck + check (msg_len >= 0), + html_p boolean + default 'f' + constraint chat_msgs_html_p_ck + check (html_p in ('t','f')), + approved_p boolean + default 't' + constraint chat_msgs_approve_p_ck + check(approved_p in ('t','f')), + creation_user integer + constraint chat_msgs_creation_user_fk + references parties(party_id) + constraint chat_msgs_creation_user_nn not null, + creation_ip varchar(50) , + creation_date date + constraint chat_msgs_creation_date_nn not null, + room_id integer + constraint chat_msgs_room_id_fk references chat_rooms +); + + +--------------------------------- + +create function chat_room__new (integer, varchar, varchar, boolean, boolean, boolean, integer, timestamptz, integer, varchar, varchar) +returns integer as ' +declare + p_room_id alias for $1; + p_pretty_name alias for $2; + p_description alias for $3; + p_moderated_p alias for $4; + p_active_p alias for $5; + p_archive_p alias for $6; + p_context_id alias for $7; + p_creation_date alias for $8; + p_creation_user alias for $9; + p_creation_ip alias for $10; + p_object_type alias for $11; + v_room_id chat_rooms.room_id%TYPE; +begin + v_room_id := acs_object__new ( + null, + ''chat_room'', + now(), + p_creation_user, + p_creation_ip, + p_context_id + ); + + insert into chat_rooms + (room_id, pretty_name, description, moderated_p, active_p, archive_p) + values + (v_room_id, p_pretty_name, p_description, p_moderated_p, p_active_p, p_archive_p); + +return v_room_id; + +end;' language 'plpgsql'; + + + + + +--------------------------------- + +create function chat_room__name (integer) +returns varchar as ' +declare + p_room_id alias for $1; + v_pretty_name chat_rooms.pretty_name%TYPE; +begin + select into v_pretty_name pretty_name from chat_rooms where room_id = p_room_id; + return v_pretty_name; +end;' language 'plpgsql'; + + + + +------------------------------- + + + +create function chat_room__message_count (integer) +returns integer as ' +declare + p_room_id alias for $1; + v_count integer; +begin + select count(*) as total into v_count + from chat_msgs + where room_id = p_room_id; + return v_count; + +end;' language 'plpgsql'; + +--------------------------------- + + + +create function chat_room__delete_all_msgs (integer) +returns integer as ' +declare + p_room_id alias for $1; +begin + delete from chat_msgs where room_id = p_room_id; + return 0; +end;' language 'plpgsql'; + +--------------------------------- + + + +create function chat_room__del (integer) +returns integer as ' +declare + p_room_id alias for $1; +begin + + --TO DO: delete transcriptions? + + + -- First erase all the messages relate to this chat room. + delete from chat_msgs where room_id = p_room_id; + + -- Delete all privileges associate with this room + delete from acs_permissions where object_id = p_room_id; + + -- Now delete the chat room itself. + delete from chat_rooms where room_id = p_room_id; + + PERFORM acs_object__delete(p_room_id); + + return 0; +end;' language 'plpgsql'; + + +--------------------------------- + + +create function chat_transcript__new (varchar, varchar, varchar, integer, integer, timestamptz, integer, varchar, varchar) +returns integer as ' +declare + + p_pretty_name alias for $1; + p_contents alias for $2; + p_description alias for $3; + p_room_id alias for $4; + p_context_id alias for $5; + p_creation_date alias for $6; + p_creation_user alias for $7; + p_creation_ip alias for $8; + p_object_type alias for $9; + v_transcript_id chat_transcripts.transcript_id%TYPE; +begin + v_transcript_id := acs_object__new ( + null, + ''chat_transcript'', + now(), + p_creation_user, + p_creation_ip, + p_context_id + ); + + insert into chat_transcripts (transcript_id, pretty_name, contents, description, room_id) + values (v_transcript_id, p_pretty_name, p_contents, p_description, p_room_id); + + return v_transcript_id; +end;' language 'plpgsql'; + + + +----------------------------- +create function chat_transcript__del (integer) +returns integer as ' +declare + p_transcript_id alias for $1; +begin + + -- Delete all privileges associate with this transcript + delete from acs_permissions where object_id = p_transcript_id; + + delete from chat_transcripts + where transcript_id = p_transcript_id; + + PERFORM acs_object__delete(p_transcript_id); + return 0; +end;' language 'plpgsql'; +---------------------------- + +create function chat_room__edit (integer, varchar, varchar, boolean, boolean, boolean) +returns integer as ' +declare + p_room_id alias for $1; + p_pretty_name alias for $2; + p_description alias for $3; + p_moderated_p alias for $4; + p_active_p alias for $5; + p_archive_p alias for $6; +begin + + update chat_rooms set + pretty_name = p_pretty_name, + description = p_description, + moderated_p = p_moderated_p, + active_p = p_active_p, + archive_p = p_archive_p + where + room_id = p_room_id; + return 0; +end;' language 'plpgsql'; + + +--------------------------- + +create function chat_room__message_post (integer, varchar, integer, varchar) +returns integer as ' +declare + p_room_id alias for $1; + p_msg alias for $2; + p_creation_user alias for $3; + p_creation_ip alias for $4; + -- p_html_p alias for $3; + -- p_approved_p alias for $4; + v_msg_id chat_msgs.msg_id%TYPE; + v_msg_archive_p chat_rooms.archive_p%TYPE; + v_msg chat_msgs.msg%TYPE; +begin + -- Get msg id from the global acs_object sequence. + select acs_object_id_seq.nextval into v_msg_id from dual; + + + select archive_p into v_msg_archive_p from chat_rooms where room_id = p_room_id; + + if v_msg_archive_p = ''t'' then + v_msg := p_msg; + else + v_msg := null; + end if; + + -- TO DO: aproved_p, Hhtml_p and lengh + -- Insert into chat_msgs table. + insert into chat_msgs ( + msg_id, + room_id, + msg, + creation_user, + creation_ip, + creation_date) + values ( + v_msg_id, + p_room_id, + v_msg, + p_creation_user, + p_creation_ip, + now()) ; + + + +return 0; +end;' language 'plpgsql'; + +--------------------------- + + +create function chat_transcript__edit (integer, varchar, varchar, varchar ) +returns integer as ' +declare + p_transcript_id alias for $1; + p_pretty_name alias for $2; + p_contents alias for $3; + p_description alias for $4; +begin + update chat_transcripts + set pretty_name = p_pretty_name, + contents = p_contents, + description = p_description + where + transcript_id = p_transcript_id; + + +return 0; +end;' language 'plpgsql'; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Index: openacs-4/packages/chat/sql/postgresql/chat-drop.sql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/sql/postgresql/chat-drop.sql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/sql/postgresql/chat-drop.sql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,158 @@ +-- +-- packages/chat/sql/chat-drop.sql +-- +-- @author ddao@arsdigita.com +-- @creation-date November 09, 2000 +-- @cvs-id $Id: chat-drop.sql,v 1.1 2006/03/14 12:16:09 emmar Exp $ +-- + + --drop objects + +create function inline_0() +returns integer as ' +declare + object_rec record; +begin + + for object_rec in select object_id from acs_objects where object_type=''chat_transcript'' + loop + PERFORM acs_object__delete( object_rec.object_id ); + end loop; + + for object_rec in select object_id from acs_objects where object_type=''chat_room'' + loop + PERFORM acs_object__delete( object_rec.object_id ); + end loop; + + + return 0; +end;' language 'plpgsql'; + +select inline_0 (); +drop function inline_0 (); + + +-- +-- Drop chat_room object type +-- + + + + +select acs_object_type__drop_type('chat_room','t'); +select acs_object_type__drop_type('chat_transcript','t'); + +drop function chat_transcript__new (varchar, varchar, varchar, integer, integer, timestamptz, integer, varchar, varchar); +drop function chat_transcript__del (integer); +drop function chat_transcript__edit (integer, varchar, varchar, varchar ); + + +drop function chat_room__new (integer, varchar, varchar, boolean, boolean, boolean, integer, timestamptz, integer, varchar, varchar); +drop function chat_room__name (integer); + +drop function chat_room__message_post (integer, varchar, integer, varchar); + + + +drop function chat_room__edit (integer, varchar, varchar, boolean, boolean, boolean); +drop function chat_room__message_count (integer); +drop function chat_room__delete_all_msgs (integer); + +drop function chat_room__del (integer); + +drop table chat_msgs; +drop table chat_transcripts; +drop table chat_rooms; + + +-- +-- Drop all chat privileges +-- + +create function inline_0 () +returns integer as ' +begin + + -- Drop child privileges for regular chat user. + PERFORM acs_privilege__remove_child(''chat_user'', ''chat_read''); + PERFORM acs_privilege__remove_child(''chat_user'', ''chat_write''); + + -- Drop child privileges for chat moderator. + PERFORM acs_privilege__remove_child(''chat_moderator'', ''chat_room_moderate''); + PERFORM acs_privilege__remove_child(''chat_moderator'', ''chat_user_ban''); + PERFORM acs_privilege__remove_child(''chat_moderator'', ''chat_user_unban''); + PERFORM acs_privilege__remove_child(''chat_moderator'', ''chat_user_grant''); + PERFORM acs_privilege__remove_child(''chat_moderator'', ''chat_user_revoke''); + PERFORM acs_privilege__remove_child(''chat_moderator'', ''chat_transcript_create''); + PERFORM acs_privilege__remove_child(''chat_moderator'', ''chat_transcript_view''); + PERFORM acs_privilege__remove_child(''chat_moderator'', ''chat_transcript_edit''); + PERFORM acs_privilege__remove_child(''chat_moderator'', ''chat_transcript_delete''); + PERFORM acs_privilege__remove_child(''chat_moderator'', ''chat_user''); + + -- Drop child privileges for chat administrator. + PERFORM acs_privilege__remove_child(''chat_room_admin'', ''chat_room_create''); + PERFORM acs_privilege__remove_child(''chat_room_admin'', ''chat_room_delete''); + PERFORM acs_privilege__remove_child(''chat_room_admin'', ''chat_room_edit''); + PERFORM acs_privilege__remove_child(''chat_room_admin'', ''chat_room_view''); + PERFORM acs_privilege__remove_child(''chat_room_admin'', ''chat_moderator_grant''); + PERFORM acs_privilege__remove_child(''chat_room_admin'', ''chat_moderator_revoke''); + PERFORM acs_privilege__remove_child(''chat_room_admin'', ''chat_moderator''); + + -- remove Site wite admin also administrator of the chat room + PERFORM acs_privilege__remove_child(''admin'', ''chat_room_admin''); + + + + PERFORM acs_privilege__drop_privilege(''chat_room_create''); + PERFORM acs_privilege__drop_privilege(''chat_room_view''); + PERFORM acs_privilege__drop_privilege(''chat_room_edit''); + PERFORM acs_privilege__drop_privilege(''chat_room_delete''); + PERFORM acs_privilege__drop_privilege(''chat_transcript_create''); + PERFORM acs_privilege__drop_privilege(''chat_transcript_view''); + PERFORM acs_privilege__drop_privilege(''chat_transcript_edit''); + PERFORM acs_privilege__drop_privilege(''chat_transcript_delete''); + PERFORM acs_privilege__drop_privilege(''chat_room_moderate''); + PERFORM acs_privilege__drop_privilege(''chat_moderator_grant''); + PERFORM acs_privilege__drop_privilege(''chat_moderator_revoke''); + PERFORM acs_privilege__drop_privilege(''chat_user_grant''); + PERFORM acs_privilege__drop_privilege(''chat_user_revoke''); + PERFORM acs_privilege__drop_privilege(''chat_user_ban''); + PERFORM acs_privilege__drop_privilege(''chat_user_unban''); + PERFORM acs_privilege__drop_privilege(''chat_ban''); + PERFORM acs_privilege__drop_privilege(''chat_read''); + PERFORM acs_privilege__drop_privilege(''chat_write''); + PERFORM acs_privilege__drop_privilege(''chat_room_admin''); + PERFORM acs_privilege__drop_privilege(''chat_moderator''); + PERFORM acs_privilege__drop_privilege(''chat_user''); + + + return 0; +end;' language 'plpgsql'; + +select inline_0 (); +drop function inline_0 (); + + + + + + + + + + + + + + + + + + + + + + + + + Index: openacs-4/packages/chat/tcl/chat-procs-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/tcl/Attic/chat-procs-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/tcl/chat-procs-oracle.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,231 @@ + + + + oracle8.1.6 + + + + + begin + :1 := chat_room.new ( + pretty_name => :pretty_name, + moderated_p => :moderated_p, + description => :description, + active_p => :active_p, + archive_p => :archive_p, + context_id => :context_id, + creation_user => :creation_user, + creation_ip => :creation_ip + ); + + end; + + + + + + + + begin + -- Automatic grant room privilege to creator of the room (must not be null). + if :creation_user <> '' + then + acs_permission.grant_permission(:room_id, :creation_user, 'chat_room_edit'); + acs_permission.grant_permission(:room_id, :creation_user, 'chat_room_view'); + acs_permission.grant_permission(:room_id, :creation_user, 'chat_room_delete'); + acs_permission.grant_permission(:room_id, :creation_user, 'chat_transcript_create'); + end if; + + end; + + + + + + + + + + select pretty_name from chat_rooms where room_id = :room_id + + + + + + + begin + :1 := person.name(:user_id); + end; + + + + + + + begin + acs_permission.grant_permission(:room_id, :party_id, 'chat_write'); + acs_permission.grant_permission(:room_id, :party_id, 'chat_read'); + end; + + + + + + begin + acs_permission.revoke_permission(:room_id, :party_id, 'chat_write'); + acs_permission.revoke_permission(:room_id, :party_id, 'chat_read'); + end; + + + + + + begin + acs_permission.grant_permission(:room_id, :party_id, 'chat_ban'); + end; + + + + + + begin + acs_permission.revoke_permission(:room_id, :party_id, 'chat_ban'); + end; + + + + + + begin + acs_permission.grant_permission(:room_id, :party_id, 'chat_room_moderate'); + end; + + + + + + + begin + acs_permission.revoke_permission(:room_id, :party_id, 'chat_room_moderate'); + end; + + + + + + + begin + chat_room.edit ( + room_id => :room_id, + pretty_name => :pretty_name, + description => :description, + moderated_p => :moderated_p, + active_p => :active_p, + archive_p => :archive_p + ); + end; + + + + + + + begin + :1 := chat_room.message_count(:room_id); + end; + + + + + + + begin + chat_room.delete_all_msgs(:room_id); + end; + + + + + + + begin + :1 := chat_transcript.new ( + pretty_name => :pretty_name, + contents => empty_clob(), + description => :description, + room_id => :room_id, + context_id => :context_id, + creation_user => :creation_user, + creation_ip => :creation_ip + ); + + end; + + + + + + + + begin + -- Automatic grant transcript privilege to creator of the transcript (must not be null). + if :creation_user is not null + then + acs_permission.grant_permission(:transcript_id, :creation_user, 'chat_transcript_edit'); + acs_permission.grant_permission(:transcript_id, :creation_user, 'chat_transcript_view'); + acs_permission.grant_permission(:transcript_id, :creation_user, 'chat_transcript_delete'); + end if; + end; + + + + + + begin + chat_transcript.del(:transcript_id); + end; + + + + + + + begin + chat_room.message_post ( + room_id => :room_id, + msg => :msg, + creation_user => :creation_user, + creation_ip => :creation_ip + ); + end; + + + + + + + + begin + chat_room.del(:room_id); + end; + + + + + + + begin + chat_transcript.edit( + transcript_id => :transcript_id, + pretty_name => :pretty_name, + contents => :empty_clob(), + description => :description); + end; + + + + + + + + \ No newline at end of file Index: openacs-4/packages/chat/tcl/chat-procs-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/tcl/Attic/chat-procs-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/tcl/chat-procs-postgresql.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,223 @@ + + + postgresql7.1 + + + select chat_room__new ( + NULL, + :pretty_name, + :description, + :moderated_p, + :active_p, + :archive_p, + :context_id, + now(), + :creation_user, + :creation_ip, + 'chat_room' + ) + + + + + + + + -- Automatic grant room privilege to creator of the room (must not be null). + begin + if :creation_user <> '' + then + perform acs_permission__grant_permission(:room_id, :creation_user, 'chat_room_edit'); + perform acs_permission__grant_permission(:room_id, :creation_user, 'chat_room_view'); + perform acs_permission__grant_permission(:room_id, :creation_user, 'chat_room_delete'); + perform acs_permission__grant_permission(:room_id, :creation_user, 'chat_transcript_create'); + + end if; + return 0; + end; + + + + + + + + select chat_room__name (:room_id) from dual; + + + + + + + select person__name(:user_id); + + + + + + + begin + perform acs_permission__grant_permission(:room_id, :party_id, 'chat_write'); + perform acs_permission__grant_permission(:room_id, :party_id, 'chat_read'); + return 0; + end; + + + + + + + begin + perform acs_permission__revoke_permission(:room_id, :party_id, 'chat_write'); + perform acs_permission__revoke_permission(:room_id, :party_id, 'chat_read'); + return 0; + end; + + + + + + begin + perform acs_permission__grant_permission(:room_id, :party_id, 'chat_ban'); + return 0; + end; + + + + + + + begin + perform acs_permission__revoke_permission(:room_id, :party_id, 'chat_ban'); + return 0; + end; + + + + + + begin + perform acs_permission__grant_permission(:room_id, :party_id, 'chat_room_moderate'); + return 0; + end; + + + + + + begin + perform acs_permission__revoke_permission(:room_id, :party_id, 'chat_room_moderate'); + return 0; + end; + + + + + + + begin + perform chat_room__edit ( + :room_id, + :pretty_name, + :description, + :moderated_p, + :active_p, + :archive_p + ); + return 0; + end; + + + + + + + select chat_room__message_count(:room_id); + + + + + + + begin + perform chat_room__delete_all_msgs(:room_id); + return 0; + end; + + + + + + + select chat_transcript__new ( + :pretty_name, + :contents, + :description, + :room_id, + :context_id, + now(), + :creation_user, + :creation_ip, + 'chat_transcript' + ) + + + + + + + begin + -- Automatic grant transcript privilege to creator of the transcript (must not be null). + if :creation_user is not null + then + perform acs_permission__grant_permission(:transcript_id, :creation_user, 'chat_transcript_edit'); + perform acs_permission__grant_permission(:transcript_id, :creation_user, 'chat_transcript_view'); + perform acs_permission__grant_permission(:transcript_id, :creation_user, 'chat_transcript_delete'); + end if; + return 0; + end; + + + + + + + begin + perform chat_transcript__del(:transcript_id); + return 0; + end; + + + + + + + select chat_room__message_post (:room_id, :msg, :creation_user, :creation_ip); + + + + + + select chat_room__del(:room_id); + + + + + + + + begin + perform chat_transcript__edit ( + :transcript_id, + :pretty_name, + :contents, + :description); + return 0; + end; + + + + + + + Index: openacs-4/packages/chat/tcl/chat-procs.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/tcl/chat-procs.tcl,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/tcl/chat-procs.tcl 11 Dec 2003 21:40:00 -0000 1.4 +++ openacs-4/packages/chat/tcl/chat-procs.tcl 14 Mar 2006 12:16:09 -0000 1.5 @@ -10,7 +10,7 @@ ad_proc -private chat_start_server {} { Start Java chat server. } { if [nsv_get chat server_started] { - return + return } ns_log notice "chat_start_server: Starting chat server" set port [ad_parameter ServerPort] @@ -23,11 +23,11 @@ # Wait until chat server started before spawning new threads connecting to the server. while { $done == 0} { - if [catch {set fds [ns_sockopen -nonblock $host_location $port]} errmsg] { - set done 0 - } else { - set done 1 - } + if [catch {set fds [ns_sockopen -nonblock $host_location $port]} errmsg] { + set done 0 + } else { + set done 1 + } } # Free up resources. @@ -43,28 +43,30 @@ nsv_set chat server_started 1 } -ad_proc -private chat_broadcast_to_applets {host port} { Broadcast chat message from HTML client to Java server. } { +ad_proc -private chat_broadcast_to_applets {host port} { Broadcast chat message from HTML client to Java server. } { # Chat server must already started otherwise error will occur. set fds [ns_sockopen -nonblock $host $port] set r [lindex $fds 0] set w [lindex $fds 1] - ns_log debug "chat_broadcast_to_applets: Ready to broadcast message to applets." + ns_log Notice "chat_broadcast_to_applets: Ready to broadcast message to applets." + ns_log Notice $host + ns_log Notice $port # Register to java chat server. puts $w "-1AOL_WRITERT-1" flush $w while { 1 } { - # Wait until there is new message in queue. - ns_mutex lock [nsv_get chat new_message] - if [nsv_exists chat html_message] { - # Get message from queue. - puts $w [nsv_get chat html_message] - flush $w - } + # Wait until there is new message in queue. + ns_mutex lock [nsv_get chat new_message] + if [nsv_exists chat html_message] { + # Get message from queue. + puts $w [nsv_get chat html_message] + flush $w + } } } @@ -77,36 +79,40 @@ set w [lindex $fds 1] set r_fd [list $r] - ns_log debug "chat_receive_from_server: Listening for messages from applets." + ns_log Notice "chat_receive_from_server: Listening for messages from applets." puts $w "-1AOL_READERT-1" flush $w set running 1 while { $running } { - set sel [ns_sockselect $r_fd {} {}] - set rfds [lindex $sel 0] + set sel [ns_sockselect $r_fd {} {}] + set rfds [lindex $sel 0] - foreach r $rfds { + foreach r $rfds { - if {[ns_sockcheck $r] && [set line [string trim [gets $r]]] != ""} { - regexp "(.*)" $line match room_id - regexp "(.*)" $line match screen_name - regexp "(.*)" $line match msg - regexp "(.*)" $line match user_id - if ![nsv_exists chat_room $room_id] { - nsv_set chat_room $room_id {} - } - if [catch {chat_post_message_to_db -creation_user $user_id $room_id $msg} errmsg] { - ns_log error "chat_post_message_to_db: error: $errmsg" - } - nsv_lappend chat_room $room_id $line + if {[ns_sockcheck $r] && [set line [string trim [gets $r]]] != ""} { + + regexp "(.*)" $line match room_id + regexp "(.*)" $line match screen_name + regexp "(.*)" $line match msg + regexp "(.*)" $line match user_id + if ![nsv_exists chat_room $room_id] { + nsv_set chat_room $room_id {} + } - } else { - set running 0 - } - } + + if [catch {chat_post_message_to_db -creation_user $user_id $room_id $msg} errmsg] { + ns_log error "chat_post_message_to_db: error: $errmsg" + } + + nsv_lappend chat_room $room_id $line + + } else { + set running 0 + } + } } } @@ -118,16 +124,8 @@ } { Log chat message to the database. } { - db_dml post_message { - begin - chat_room.message_post ( - room_id => :room_id, - msg => :msg, - creation_user => :creation_user, - creation_ip => :creation_ip - ); - end; - } + ns_log Notice $msg + db_exec_plsql post_message {} } ad_proc -public chat_room_new { @@ -143,31 +141,13 @@ } { Create new chat room. Return room_id if successful else raise error. } { + db_transaction { - set room_id [db_exec_plsql create_room { - begin - :1 := chat_room.new ( - pretty_name => :pretty_name, - moderated_p => :moderated_p, - description => :description, - active_p => :active_p, - archive_p => :archive_p, - context_id => :context_id, - creation_user => :creation_user, - creation_ip => :creation_ip - ); - -- Automatic grant room privilege to creator of the room (must not be null). - if :creation_user <> '' - then - acs_permission.grant_permission(:1, :creation_user, 'chat_room_edit'); - acs_permission.grant_permission(:1, :creation_user, 'chat_room_view'); - acs_permission.grant_permission(:1, :creation_user, 'chat_room_delete'); - acs_permission.grant_permission(:1, :creation_user, 'chat_transcript_create'); - end if; - end; - }] + set room_id [db_exec_plsql create_room {}] } + db_exec_plsql grant_permission {} + return $room_id } @@ -181,66 +161,52 @@ } { Edit information on chat room. All information require. } { - return [db_exec_plsql edit_room { - begin - chat_room.edit ( - room_id => :room_id, - pretty_name => :pretty_name, - description => :description, - moderated_p => :moderated_p, - active_p => :active_p, - archive_p => :archive_p - ); - end; - }] + db_exec_plsql edit_room {} } ad_proc -public chat_room_delete { room_id } { Delete chat room. } { - db_exec_plsql delete_room { - begin - chat_room.del(:room_id); - end; - } + db_exec_plsql delete_room {} } ad_proc -public chat_room_message_delete { room_id } { Delete all message in the room. } { - db_exec_plsql delete_message { - begin - chat_room.delete_all_msgs(:room_id); - end; - } + db_exec_plsql delete_message {} } ad_proc -public chat_message_count { room_id } { Get message count in the room. } { - return [db_exec_plsql message_count { - begin - :1 := chat_room.message_count(:room_id); - end; - }] + + return [db_exec_plsql message_count {}] } + + +ad_proc -public room_active_status { + room_id +} { + Get room active status. +} { + + return [db_string get_active { select active_p from chat_rooms where room_id = :room_id}] + +} + ad_proc -public chat_room_name { room_id } { Get chat room name. } { - return [db_exec_plsql get_room_name { - begin - :1 := chat_room.name(:room_id); - end; - }] + return [db_string get_room_name {} -default "" ] } @@ -250,11 +216,7 @@ } { Grant party a chat moderate privilege to this chat room. } { - db_dml grant_moderator { - begin - acs_permission.grant_permission(:room_id, :party_id, 'chat_room_moderate'); - end; - } + db_exec_plsql grant_moderator {} } ad_proc -public chat_moderator_revoke { @@ -264,11 +226,7 @@ Revoke party a chat moderate privilege to this chat room. } { - db_dml revoke_moderator { - begin - acs_permission.revoke_permission(:room_id, :party_id, 'chat_room_moderate'); - end; - } + db_exec_plsql revoke_moderator {} } @@ -279,12 +237,7 @@ Grant party a chat privilege to this chat room. } { db_transaction { - db_dml grant_user { - begin - acs_permission.grant_permission(:room_id, :party_id, 'chat_write'); - acs_permission.grant_permission(:room_id, :party_id, 'chat_read'); - end; - } + db_exec_plsql grant_user {} } } @@ -296,12 +249,7 @@ Revoke party a chat privilege to this chat room. } { db_transaction { - db_dml revoke_user { - begin - acs_permission.revoke_permission(:room_id, :party_id, 'chat_write'); - acs_permission.revoke_permission(:room_id, :party_id, 'chat_read'); - end; - } + db_exec_plsql revoke_user {} } } @@ -311,11 +259,7 @@ } { Explicit ban user from this chat room. } { - db_dml ban_user { - begin - acs_permission.grant_permission(:room_id, :party_id, 'chat_ban'); - end; - } + db_exec_plsql ban_user {} } @@ -325,11 +269,7 @@ } { unban user from this chat room. } { - db_dml ban_user { - begin - acs_permission.revoke_permission(:room_id, :party_id, 'chat_ban'); - end; - } + db_exec_plsql ban_user {} } ad_proc -public chat_revoke_moderators { @@ -339,11 +279,11 @@ Revoke a list of parties of a moderate privilege from this room. } { foreach party_id $revoke_list { - db_dml revoke_moderate { - begin - acs_persmission.revoke_permission(:room_id, :party_id, 'chat_moderate_room'); - end - } + db_dml revoke_moderate { + begin + acs_persmission.revoke_permission(:room_id, :party_id, 'chat_moderate_room'); + end + } } } @@ -354,9 +294,9 @@ Return the moderate status of this chat room. } { set moderate_p [db_string get_chat_room_moderate { - select moderated_p - from chat_rooms - where room_id = :room_id + select moderated_p + from chat_rooms + where room_id = :room_id }] return $moderate_p @@ -368,12 +308,9 @@ } { Return display name of this user to use in chat. } { - return [db_exec_plsql get_chat_user_name { - begin - :1 := person.name(:user_id); - end; - }] + return [db_exec_plsql get_chat_user_name {}] + } ad_proc -public chat_message_post { @@ -385,16 +322,17 @@ Post message to the chat room and broadcast to all applet clients. Only use by HTML client. } { if {$moderator_p == "1" } { - set status "approved" + set status "approved" } else { - set status "pending" + set status "pending" } set chat_msg "[chat_user_name $user_id]$user_id$room_id$message$status" - # Add message to queue. Notify thread responsible for broadcast message to applets. + nsv_set chat html_message $chat_msg ns_mutex unlock [nsv_get chat new_message] + } @@ -425,8 +363,8 @@ # The first time html client enter chat room, chat_room variable is not initialize correctly. # Therefore I just hard code the variable. if ![nsv_exists chat_room $room_id] { - nsv_set chat_room $room_id [list "[chat_user_name $user_id]$room_idhas entered the roomapproved"] - } + nsv_set chat_room $room_id [list "[chat_user_name $user_id]$room_id[_ chat.has_entered_the_room]approved"] + } set user_name [chat_user_name $user_id] @@ -441,26 +379,26 @@ #foreach msg $chat_messages for { set i [expr $cnt - 1] } { $i >= 0 } { set i [expr $i - 1] } { - set msg [lindex $chat_messages $i] - regexp "(.*)" $msg match screen_name - regexp "(.*)" $msg match chat_msg - regexp "(.*)" $msg match status + set msg [lindex $chat_messages $i] + regexp "(.*)" $msg match screen_name + regexp "(.*)" $msg match chat_msg + regexp "(.*)" $msg match status - if {$status == "pending" || $status == "rejected"} { - continue; - } + if {$status == "pending" || $status == "rejected"} { + continue; + } - upvar "$msgs:[expr {$counter + 1}]" array_val + upvar "$msgs:[expr {$counter + 1}]" array_val - set array_val(screen_name) $screen_name - set array_val(chat_msg) $chat_msg - incr counter - set array_val(rownum) $counter + set array_val(screen_name) $screen_name + set array_val(chat_msg) $chat_msg + incr counter + set array_val(rownum) $counter - if {$screen_name == $user_name && $chat_msg == "has entered the room."} { - return - } + if {$screen_name == $user_name && $chat_msg == "has entered the room."} { + return + } } } @@ -479,34 +417,17 @@ } { db_transaction { - set transcript_id [db_exec_plsql create_transcript { - begin - :1 := chat_transcript.new ( - pretty_name => :pretty_name, - contents => empty_clob(), - description => :description, - room_id => :room_id, - context_id => :context_id, - creation_user => :creation_user, - creation_ip => :creation_ip - ); - -- Automatic grant transcript privilege to creator of the transcript (must not be null). - if :creation_user is not null - then - acs_permission.grant_permission(:1, :creation_user, 'chat_transcript_edit'); - acs_permission.grant_permission(:1, :creation_user, 'chat_transcript_view'); - acs_permission.grant_permission(:1, :creation_user, 'chat_transcript_delete'); - end if; - end; - }] - db_dml transcript_content { - update chat_transcripts - set contents = empty_clob() - where transcript_id = :transcript_id - returning contents into :1 - } -clobs [list $contents] - } on_error { - ad_return_complaint 1 "Insert fail: $errmsg" + set transcript_id [db_exec_plsql create_transcript {}] + db_exec_plsql grant_permission {} +# +# db_dml transcript_content { +# update chat_transcripts +# set contents = empty_clob() +# where transcript_id = :transcript_id +# returning contents into :1 +# } -clobs [list $contents] +# } on_error { +# ad_return_complaint 1 "Insert fail: $errmsg" } return $transcript_id @@ -518,11 +439,7 @@ } { Delete chat transcript. } { - db_exec_plsql delete_transcript { - begin - chat_transcript.del(:transcript_id); - end; - } + db_exec_plsql delete_transcript {} } ad_proc -public chat_transcript_edit { @@ -534,23 +451,17 @@ Edit chat transcript. } { db_transaction { - db_exec_plsql edit_transcript { - begin - chat_transcript.edit( - transcript_id => :transcript_id, - pretty_name => :pretty_name, - contents => :empty_clob(), - description => :description); - end; - } - db_dml transcript_content { - update chat_transcripts - set contents = empty_clob() - where transcript_id = :transcript_id - returning contents into :1 - } -clobs [list $contents] + db_exec_plsql edit_transcript { + + } + #db_dml transcript_content { + # update chat_transcripts + # set contents = empty_clob() + # where transcript_id = :transcript_id + # returning contents into :1 + #} -clobs [list $contents] } - + } Index: openacs-4/packages/chat/www/chat.jar =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/chat.jar,v diff -u -r1.1 -r1.2 --- openacs-4/packages/chat/www/chat.jar 20 Apr 2001 20:51:08 -0000 1.1 +++ openacs-4/packages/chat/www/chat.jar 14 Mar 2006 12:16:09 -0000 1.2 @@ -1,242 +1,279 @@ -PK#2* META-INF/��PKPK#2*META-INF/MANIFEST.MF�M��LK-.� -K-*��ϳR0�3��r.JM,IM�u� �*h��)�f&�W���+x�%�i�r�rPK����DDPK2*OneColumnLayout.class�T]s�D=IV�*�W8�G�%�P�����n�I��)Ӈn��V���,��� x�S᭝i������h�Z�q�t�����s�޽������?�` _�X���u�긬㊎/L�8iB�m��*��̚�ȑ�A��y���Yi�$6o��{�|`�c�-�q��'X��)�Y� �Z�`�BU�Kx��-|�e%��ӎ���}����øt��E�� �p����A�tc��h�����}�-C6WY\ ��0�di�z]�t�Q6wSz -�y��{���o�*{<���s#�nő��o�2u� �x�A��M���S�j��o����:u#����u�C؋̭�5Ě'�ެ�y�F>�7D��[���.�4fx��DfCQ���ux,ז�#E�Zb�4=:��=�� ���D�f��A�"!����$�-�V��j��w �{��z}i3o�upP�Qpx ti�`��H&��Go U�3�< 9�S���?*8�s(e�#��E3�"�Jehv�=��q �>tj)jc�4�|!�,Ѩ@8��,�c���"��f %������L�A=�E�j�d�G����( =���I}�hwe�Fq��Q���UN)e�1V�����qg|�?�(�����y�)� Sx���{����_`���"��l�N=z������G=x^����Q -��;L�� .�d9dX+b��XdK(�e�Y u��Mvߐ���h��*�)�K�)HHn"BUʚ2�r��w ��5;�ϻ/h3�t ��J���^����y����K�8�9V4p hbPCXMA\�(vHM7BaXCF�h�h -2��c:�0��I���:#�#�9�jc - �H�x�� ���̮�g��r�2�\7iב�@�3���ۦSHe�g9rw���y�&C����{��x�̧��l$�W���žL�=�KNZ�����d�2�eޕ�Ύ��*� -� o*J�:,ǒ� �i7/��n���+ -q`IC�jH� ����t�m������� CW�rīJi[xo�m��E���ڤ:$U#�!��[�rb�R�P�БE!��0��o -o��J"O,Ibs��Enj�O}�@�!twA�&���ȋ�'��e=�+2݁��d,_ -: ��R�$x��+r����bM��!���Jm�v�$H����(+v�⢔t�� -1�*�V�~��_us��L�#���eJ���Yz WhDԕ'{� И�-�I�'��l#��6N�J|A���*��й�Xu'���' ���)�[V��$��誢���#J�b��(��=��{L�8��cB|�~`5�ߩ��3��z�E�PK[�6�jPK2*adChatApplet$2.classmP�JA�6�5��<|]<Ā�xU��(����'�!�̆�I�|��9�~�%����CwMu�t�||����Cl9h8Xw��b e�I�� -�=��B(�n�Vצ�V�N̅/2�˹�ƿU:�� �O��|��2���P���2 "��2%�zJ˫�d �k1�X���Y2���^*��6ciԐ�*�`,Lg:���?!4�Gv�"�!l�;U'S#B=/GB���"5rB�f�$��T��A��=6���=F;��R��g<Dz%���B؄���~*^Q�5ؿ=�H��jy�&�y���PK��|&�PK2*adChatApplet.class�Y |�Օ���$�d�|@Hy�< -^B!��W@C�K20� 3����Ţ��b���H��(&h,�Vj[��v��V�v�v���ֵ�]�9���d �����˹�{��׽���s瑀bz�A�s�DMr����)��A���A ��A�:�z�A��ᠧ�}u:謃^t�%]��f��5Z��2�Vh�R��Vi�Z��4Z��Z�j5Z��K��4�_�4ڣ��5��F{5��F��h�Fj�m����C=��~�htP�G4��C�='�� -&`���L0]�$<��p<�D�v"�81�wbN91��)�@�TcpƉ|�I�=:�y�������s���(x։��,������^p�:\3^�^��_vb -~(����E����^�`��A� ���?��~�D~��4�!o:1?�-�o ��d��ϒ�%���G��l�wE�{r��e�"�_x_�~)�>LF�Չ�����&~�w1��N��#������+���d�wB~,��^,����Q�Q��ޟ|"�ŌO��x�3�>O����+˾�%����&dk0����Y)%�-��> M��& S�!`��A���0V��T�* ��l��h�Nn��Iy:��ctj�uj��:y�L� -T��F�N'�l�$�'d���D�u -P?����SH�*ԩ��ujr3�֩��:m��n']�;d�N[l�픡�w��T��ݴX�{h�N�h�N���_���u:D�t:,�Ge�Q~L�1����4J�QuBV�o %�W�Q��Š�+���FW���1}��`����i�j������f�R����4L����E*-��?�SljïٻoEK������~�[�mj��IJ�}1�UT6�L�"�w�����r�x��`X�Y����̮ q@+Z�F,1�+$⬿Vh������ �ο6A�̙��G�r朖�z�,�҇8'є>��q*�ySy������o����tL��K��21?���О<��[%� �_�������f{ތOh&!iz����&�\3 -���<�V�F�ͷͼ���̫W+3-"`֙��(3�ً ��O�l�������p��&�>αr�+4�����e��.=�)22�U��\�Ҵ� ,u���=�� -�~�~u�r��3��\��^�w��.��ze"^�Rssh����{�=�������t5M����zᖐ�[r�+��30_[�o������L����g5�mq���IH��-�:s�GN�W��ͽµ��bIm�¥K�Ă���+8��9S��d�ޮVQ����ѧ��71����Hk� �j)��@�?�$��3_C�ɑ�fL��f�+bJ,;8W������Nj��1�P���q�Y�mXt����\Y�`�+쵺���5]�:�f;����� -�j+�|vi��VD��ͼ"��v����;�ZUn �w_.Ws� -n�K9�6��"ѭ��z�I)u������� �<�������|��S�m�1 �=A��q��]�M-./W`r�'�8q\���-�^y��)�P��q�� -S������16�_��%�� -�a)̙�7-Su0�[̨���"!2��J�Erؕ������m���ca�Y���,�J�r�Z������]�,P��戬��۲R��*vI���������$O�]YH�z�:�#Z��y��I�&���qsR��r!8U���"W-���Z�D|C����L�g���q����[_$;S��gz]�[m\�s�Xs�}+i ���{#�k|3��i����� ��W�Ǩq����r��{�zYσ�� -����������6q{���M| 8�R �k�Q�]+-��+�%���h��R)�Ӥ�������k3�Y��h�� -�ĭ��+���GR��L�=�Y6H�ܶ1=�;‘ 6! =�07�Z���M�V�m �5-`6�Y��X�OUX�lx�O��_����ncC�k�g��4h�q6{�E�,-�e���u2�����؃��N���K�e�UƦ#�M�Zg'a �m�R۩8�V�j!?w#9�#�f���XS�jc��Nlk�X��= �O챰� ��� �������fj�<5��'#�=�������j�c5�ǜ/G����_�j�Od5�'5�N�W4|�qWd<��8���@4����A(�%:�`�)F�f�>P;��_"⇙/ �tav��a��O�6�� X#`���np��-��l:� 𦃐��HE�cc��EF0�a(B&����i�1��[��Kh�e,� I��* �_UTЉ#�#E�}�����QB�>��wbMM �/R�[�;�ƺ����������a�0�,�4vvcjM�� ���X�i c�̯��0���x 3�1��cjx��N���]X\��7�okn)K-��޿�{O��l#ۏcs����9������ �O8���5Sc3��ՙ�b6F��㲭,���ns�5�� �.v:� �) ����)��3�����p�`*ȆjJ@��h�D�$�]�4�9�L�,э��~�n8-^j��Ҵ������� 3�#͚�o��`i�p���A٥��'�fe��l�bn#�]��9������;:80��C|� |ܹ�w:qȰ�9�a|[��x"�Ybďl�ŏm��'�/�F���R1�t��#m�v$��n7J8��,(8��(ti�:��S��f�̪�" Qa��,����pa7rybV5|7��v��@[��� -��i��F�`�B ݋2��]�N~P������.<�ʝM���uԵ�5� -�^�df�Ս�w�!���{�!<�GM)�톦��7�7Y�� -㯱��A�P��1��� UU|��iT�h [z9��r�%���p�8�0�C�����\��U�������e�~�>{s��_ ��<��?o�� -\��,�ۼ8�X�GmO�ǂ=�X(�y+�/��+� -�c����/�()���x0�.R�W�bP�E��!3�����~� �n��'��̞��Yn�E��g�����eM �N�c -�g�E$g%�+X;e������>+*���:�^k8a��=)p��q��gS!Fr�szO�I�MSQ�O�U|��r���x?�w�s�~�� ݂Gi>�dN�"<�O���V�G�����@ZN�i%���D��zZKUT�?��o�i3?�w�c{S�F~~������/Q��P�ޠ1l� �|��o�w���#�]�j���B%?u{�����#�������̽���%%���ݫ��}~�|�5�K~��� o�z�/g���{+�k�PKx�Z��PK2*adChatClient.class;�o�>f]nvvvNFQ -��IJD��ļt����̼tk�0F���TF~�̼T��ܤԢ�Ĥ�Wp~iQr�[&�Ó�✑X✓��W�� ������ �0�?)+5���(595�,�7��81=�������Y�d1�I&PK��̖�PK2*adChatClientInfo.class�P�J�P�۴�����~?Z���U����Bq�Foۨ�&�k��(� ?��焂� ���y�3瞏ϷwX�ƚ�9Kd0�@�( - �F�.�1�b�.1�bY� -&]T$� -�bZ��m\*��N������n�<1Atw�;#��A$G -�z��T��'A�væo.t��l��c��y�5-�8�uŅu�~��z'��� -�?S;2H!��a��>~J��{�Y��o1����$6�z� -S����:hSu�|�*'U�}�D�M摨��(�j?^�s�ϼc� )g�xh���4j�+,O���2=آ��@޳zȾ����kp�%d��rPD�SYs1�!nU�:��6�w3t����t�6���·�=����آ��f�_�PK�cZ�y�PK2*adChatClientListener.class�W�[U~G(ұ��E��M/JH�ݶT��V�h)U[�dS�L:�`ݺ�����~��}w�Pv��_�a����f������LJ�|��r��|����?�=�Љ�pO����p_ -���%�'xR��*�Q��U���E��H��*>Q1��S���\�*�T�U͸1��}A��MA��P-8��YV���Bn -b -n�UB�@�a��bH���]Ȱ��Fh�� �1َ5b#� o\�'�h���q~�j��]"8)*���-�t�1!�����YL 9-dZHF�%����f4�WH^ë�zM��B�� -o���ޖ�ޅ��=Ljx�j�i�Z�S���5��h��k� ��ְ �o�bI����4�[̾�D�_<���HG�>�w�vw��ͻ#�c�3� -Z�$Cy�\��(��V��l�J�]�8�`{$����t�/c��[��&�^�j��t+��Hm�'Dش,6���x&�H����F��] �`~r�r�2�p޲���!��b�o������G� -W�ř��ދҬm{�o���KX����a�i��� -6JU�s�3k8��Tޥ<��ﱺ���)CA[��Ϥ–�YAɩprلZ��&��k�Vش�z6�سFx����ra�rz��f�Whf���%�� -v�ι�6[V�8�,.�(�Q��R��e)�9����+����`m´���̄�JY��J�7��*t˽$"6k����c��z��ZY�3-����ӆ@ ��y'i6@�Ƚ9ט�-F9N(��q+��� x9+a��2��K��/K�i�*��R�Y�7�{P����V�m^(��,��y3�:��z*�3͹4��x�?ٯ���$ ��� W&V�qGY� C��y -�B8V��S��UɌ�#�`��%m��Q,���}6雌�%[`�GsS��v -0�5>�EYS�����Q�z�Q*k�����<�����VWP��2��!1ok�*����TAc��m�UgK$l/N�P�v$�e}Kt�U��M3<. ��Ø�H��ֆ�LkǶgN��Y��-��ڼ"��hs�.X��_�ZyV�g��,}��V>>��04��Q8��ߛ�6�f��{3_�����fa����'�P����ڢ���#dg��ze��d�����G7�5 �&VKX7���x�<�ϣs��EY����~�y�Z��.<�9���p�X��bJ�Q ]���b�܅��Dx�z���o]ϻ7򁷆�&>�ZH7Q���h�.�7Ym8@�ql�4�p����v܇�W�Y/�/#W�D���ĕ���c_�"�亇@�0��}��`�Z�Cu غ�~��q�<�������PI�S�jR���4qMc7&��%�g�Oh���I������nXD��1�ϡ~Lܭ�5ګ�e�=����9��P�E6��.�{�!��|�?~��h sh���qX�U+5Q��5V�k�����Of`/�qw�I;Ȅ���Qw/��ތ!����*(���UB* ��NlȮ4P�����U��1ە�:�q����(��qƱ��:����C� -G|�e����<�Pr׆-U�,�A���$�0/�Qk�T��t'�;^V����֪�f��R��$�)v�ݔ��T�>؅���]� ��[�����94�c�c�<�x��u���X*�Mc��6�䵭R޶`@#U5���������E�WS/F�]�`K�D+#J�ǽ��s�PK����\PK2*adChatDatasource.class�V�W�~�]X!(�5���.�I��!� -����� 0fvf�3K��m�ZۦM�|`�6�$Ƥ�’�6'���s�k�w�Oh��3�n��9�a�{��}����w����OB 5pk�����YϩxAŋ*��bV�o�xKůU�F�oU�A�"h�(��h"��/���ƒ��p����#PqP������,{#��Q�}C���_ı:��q� -�`-� -��D-��<A-���"N -�)1�m��|\fI���"��Ojx���[��0�������4\ݏD\FZÏaj���x�~�oi���^���_⬆_�xU�k������4��ok��������Gq9'�]��pM� ԇ8��O�� -��pS�>�3�,b -B;����9pN�ѻ,ݞ�:1v����V{Ӟ�:ZPg=��굳)#�{�c���F|yZAsGE��cq�w ��-Ӱ�a�uP�vܮ�}w��6o_B���ȗ��� -���j��J�w~%�C��I#�:���W��_��K1��a\N�r �L��z�;����v�X��'�u��nU�S�0`��P65fdN�c͚,��z�@� =E��J>�˸���'%�r� -"�N63n5ō�P�IӺtS�=�UGtOw}k�X��G���Av�>E�u�z������aU���&:Vq��2R� �4ݱκ��eB�tڰyLk�i$�✘'l���T�ex��~,kZ�\#3`�ƺq��t�v��72a�T��MK���EF@� ���υ��tV�8 M�g-e�P�P�HŐq���~aNհ�{Y7��tĖY���A'c���L�H6m���,��;�[&�U��Z}�V��vQ���Zi뗏U�x���l�@Y�1�� �º6�#@���fN�9YJU -�s�K;n��ԴDi�o(-v5C�3Y�1RΌ�&�-U��N����U�I1ɚk�W'� X�9���Y�'����zJX��V�81�6~ -#?�k�������#�M5(�%��p�GK�cklw�j�[BCrM ��i#����&md)7������߉�،�\��0���m -���<6�s�Zi{���n~��q�K��o�$�0�ݝ���}�:s��34 %n�9�i��'r�g4�Ǟ��J�w�$N�$�p�E3v��ю�9���a�}^���^Bu2���C��{[eh -��v -�| -�P�s�7�g��Lߘ��-����?��KВM�"�I0���sH���N_n*1���Zd"?!�%r�+��X�O1��c������_*2��-a��g+�3��B ��h8���$�o�a�g�!�ΗBJ��r������ڻ��{ļFFﳨ��2_װ�o�6y��(}ˎ��+��wV�`2��1���`�"�U�Zkw���V����VŰ� -��*���P>�-�UL��DT���Yl/�l�MD���/�� -�|�v)��$x2¸Ȱ�e�<�fy���"��� x��?�o��������s�_{/s� -fy��dr�b�.�v�i�i�d=�Q��dh=20Ё9���0��֡96Y!��$�\��O���V#|[�� ��FI�����$�4�C8E� ��URP9���B�rC8ăb -v.�/���F7�� -+P��p2Z5�D�YĆ��D���Y�|b�'>��ʍ"�ݼ]�� -c���IR��}1�-8���Ha����I��c:O��d�6j�%��q&��>�{K��ˊ�^�6 -�F�����X��)kI��eD�aF���r���OK/�%h�z��?�{l��C��_��v�o�H�6�wt�u����=����K��V:$�y��U��4��ܴ���g; �It-.����PK�+�,� -PK2*adChatFormatMessage$1.classmP�J1}�ۮ]��V����&$ut'd�M/->��ҙ�B�G�%����������;a؜�٭�Lz�ak� Д3�\9�rugJӈ�2u�8͔���[�g���ɡAۆg&��=��lbɑ�9 �:�a��Q�{A��8� > -��9uT\�wP�PK��Π(�PK2*adChatFormatMessage.class�Xy|T��nf&3^ �E��$!€A$l�@I^2/��,a�D�K[�Z�ֺTqi�Z���L�Xw��Z����nv��K���^����W��s��{���\^���OR�˃_z�+~���&r�‹}9����+|B�^��T|ҋq�Zx����q�h�Nf?-��e�3np����,�b�-^L­��6Qz�Pwx1w -�9�����.�ࠜ�n����Wf�pH�a_�E��_� �" �����PG�:"�#⍣B=*��x#%'J��1�l��x�q�� -xB��e�I��#��i -o℀�|M��~*�g~��5�֔�Ҕ �i*?Ԕ?Д?�T�Д��(W�\��Y��K��Ë��^����Ԭ��+�*ď45�hj����&�o�: -���d��Ȳ�xAS�𜦦�ۚ��p���L�f�yM�!�l�`��(����2�2��h�|�QS�����J�V��j9G�u��]+V�⛚��w4�N�����6�Mj#~��M"W/�7˖[�cM5૚�*�l͍�������B]��Esk�ͭݭw�ezw�le0lD��hd�¸����О`b0;�G��ַ�6ZG���`�}��G����R�r�̭T($ʤB�Ġ����\2A7�E�����=Q -�Dm0�0"Fl���"��Ë��l -E��!dEtlр�*��h����pÝ��X27Sa� ���P9�ܮ5Nɂ��#��bzg�����A��E�d�N���e��A�F-)[њ`JTu�♧���gf���H �=Dhv��D���L� -��o��J�dL�VE����B -����o�� 36e�Eۭ���<���G��>�gik( &���ڄZ���h�`��Ի��w�Z�A!g��2�V�b�Va *Czbp�d8be3��I�[M�Z��X��f#���M5�DG0��?���#_���%d�3d�q�G1_<6|aC�pI[2���}ڍDBp(a��D�H2���L��[��}���d�.�9�������3 t�nV�#F�a#� d�*[�Ů��N���}�z�� -3��I�s�_�Cp�|¡ -�� �*d0���f�$�;;y4��X�˨c��ѯ���[�0�[BIs�c7u��*��qw0��`����d� -$�+b�Υ٭zl�s��jI��_�� �@L�R���e�,�6�&���� �61�Ximᦖh��rHE�K!����|�#z�V���!R���R�̩�h�"���J�MO����0��A�AEˆE�[���V�9�����ᆘ�~3��V"m�M'�D�:]�1�`"e�9�+�%���U�`$Ѡ��3�о� -��y� -eFzЌ|��F��i -��LMb��1ӿ�#n��B�A���gԷƢ�����?v��JW��x���o��v�v�� -�cL��7�p�����u�������i�� I�x^掗����b��'�o�3Los:l%FSP�2l�iG8N�\�����R4 -u�d�0f�#J2���w w̰5��%���� i;+�q+��ԤbF{L��}�[��L��jƃ���wH�V��❺$�(���ŜO��m'{�>;�V��+qL?��2�]���ۨ�� 1�O�|�7_^y�Ȓ7��w��96ε�f�|�-a�)��� -O�1_&�`� l��6�nb%O7�x��+l���)�g����,�'s\cb/<�5N�T��h��q�żGD -�d -e���w��K�떸��g���`�_�P��Wק����ɟ7.�E&\��Ja����B�?OKa���P%`��J�Q�K!�w��G�����/p��)Q���v�{�k���� �Q@���^�6�������Lc� �3q�'��v���0Y,-�����(2���AI�J�4"��ɖ���k�X'f�`󀏮����ѐ7t��g�L��v&�b -QJ�٘��L�eL� -ή��x_��|6o��.� `�8�F�+/C����P�k�������X��p^��_`��b&��G;$N��q�I��i���Wq��d� � -�B�����Zޗ -�x�J�+P�?��r܈�q+V�N��1T�1T����O�.����S*�?Y��:z0wx���r����k�q��xmq�����xKK��a� �E�m�3�sc��6�������4:6���4��8��1�c��!��g� �Y�a2e����=Ci1� -�L��ۼԱ�0�M&�R���ƒ4�6/N�1$��B�Ĉi��bJ�g�s�8K����xYs -���-����O��XK�����W0����ɫ�k��Q�ɏ�zJ�c�;���3�XښKv?ү.�d�ɋ�N��$�ARM���#�oS��dz1VX���=(����9�yUDZ��_��4�J�]eҕ~6�6��)�:)4q=��h� -������}���E/0G��];�4�������4Z���,T�F��G��'"�R�V��5���N;Y@Dz� -&��\�'���X�:�c���8�i�h�,�.6�0;���B�s� �%#� ����.U(qޖ��'�8�v]�&��f����Sog����x���n���ǽ��}��!��0.�����]���"�a���%����xJ��C��YR�_PK ��v 3PK2*adChatLoginMessage.class�T]WW��1 h� ��V�$1-�ja�VZ-5 %|�u -d�� -IV>�o��o}�C�*ˮ��>�Gu��$Ml�v�|Ⱦ���{���;��� !�g*>WqK�mwT|�bQ���KK*�ȫ(�(��U�4�ox�F�¸�8� -̄p�B8��>2�.0+�&�� �I - H d4|�O4��3 -�pS��5p_CQ� Rv�=�_+�$�/�C3S1��L�հ��EC����; -�� R����s﷟?��p���4w\��$f�ٳMeɻgr~p!�����vuI���ԏ8��L�V;xf�:A�i5:�� -����o�U�E0���5�A��!h� ���.�J����]���{V#o�U���* -�j�ƾ���“ ���f++K�ZͦY������]�����kk5�n6X wa��V��`d�mWJ���2�Ɖ�����j˴�y��p�j����Q��YAF�� -��ܱ�X`v��|���Q�͢Y��������Kk��`�� -�5��*�ԏ��{�L��W%�~%�{4�/@m�:�����{m�Z�R��A�����F摷挅�X�|~G���%�c�F]��� �+�� \���W���_��8�����2�E~6bd���n����p,�o�dx�BP���dx�SbN��'�v�l�a�~I ,����&q�,�)�p����&��4��oW�ܷ,����w�o�W~|� �)o��������u��^�1D��'b�#�S"zDLwD�<-␈������g��։� ���c3�l�6��-��d;x�Ol� -W��Tw)���4���y|�<�cDO0�_��x���1���dƠ�6q����%>v�����uWk|К!~�.��_�����=��-�{�ד�B��rԛl�<�-wtпH��mwl���*;����?I�N��5�q�y��PK^@!�&PK2*adChatMessage.class�V]sU~�M��4� --P>D��v�4�(`������- -R�mZiR��* -�Y��V�Q/��K�Q'|��x�p�x����y7!m���N��yγ�{��g������(E�(P8��B�B�B��!�� +PK�l4 META-INF/��PKPK�l4META-INF/MANIFEST.MF�M��LK-.� +K-*��ϳR0�3��r.JM,IM�u� ����)h��)�f&�W���+x�%�i�r�rPKm���GGPK�l4adChatApplet$1.classmQ�N�@=#�b-/�������†�Ƅ4��� .\ +t5eJ��{�p�q��Q�;�DN2so�sϹ3_���Y0P�PƆ�M��y u��q�=Ë|�P�R\O�}��~H��<�~4��( ������w�\�b&�roS@K�g��Ս��@\�^�7�9��B�j&���`��J�Q�ض��]�Țس��*Ca�z�`�ݖR�^ȓD$ ��4}>Q"&�r�q��Pq�#�\ݮ��Hj��T}L�E<���="CϨ� +m�J�L�j������B��ѩ����\�� =���3�X��Z�Ȟa��XOl�)(���C���~PK' ETI�PK�l4adChatApplet.class�X |SU���4�K��x�B �t���eJ�JY�@-�%4�m MJ�E�p�]�dQ��˰���� ��8��:#� �#�9��B�~�_�=��s�=�����{�e���8��c'~𓀟�"�W� �]���!�(�`c'+� +��(d��/�0�xv!�L�S)A�D;∍��?9)�F;��~2�lxC�T��߆�2�Q��e� �����KP +E��)�I6*���8L��v���PV<��l�rʵc�(�gG�,��a���P���Y +䈰�"v�`�:Վ�4F@��x���v̠�d (�c��r�8�٨�F�EF���x�@m4�Ng�d;�1S����X*`�B�e�LQ��Fg�Ig�\(3�4�f��9����h��l�+�B�y +ͷ�'6_�#U +8�FU2� +-��Er�v4йΓ�� V��b�c +�6Z"���.���T�P���e�G���XG�l�Q�(�*j��m�h��v +PP��7����)�� ++e�J@�lX-�v��H�k�ЎM�i]$�b���RQ?U&kE����FW(t�-�N�W v���g� � �V�~�B�ٱMlt�B7��$&� �6�Q��v�����g�[�U������W��]�U����^Br�R� +W�ke�p�P�9q�L�s��&��z��y�O�G�� �:��1y�P��OP����4�B~!��i�Ab����_[�Il xV�Bz������s��� +�j�'�딻�%&�� ,�& �OR#�%^�� �G�W�A���j�G7�2�1���C�Ub۰EĬ:}Hv�������K���r�Ā^�{V�Q!Z/� ��� ��}>��ϵ6�<p�ًzg���(2 +g��7j�i1S�M� +��"[U���xO�xϨxϩx�T�������U��WU���U���T|��T|,�|��*��6����Ti��5�ޔ��Z=��]t��Ͳ���н*���=�o[�VV�>�_�$�ɄF ��V�Z�8�Q��Tq@�Aa�����J��*=@r|�� +�E��D�� �a���w�5�;ѴQ��y��ӽ��Wڦ�v�v�N�Zi��^�8Df������W�j�7����y|l�b��n��=*���*>������[]�'Yr��V�� +'�=�\���b��S��Ӣ�2�LVβ2#zF�g�96� �L�o���V�y��ᐊ�-�G�� + *����d�_o�M�ܯ� t/*�H/�����8��+*�J� �S�^�7Tz��d۸�EE관Q��W�[ +���Ȭ͜�)����9#�3���Ld�{>W�-��o��������*}`\�8��� +��-W�Cz�ӾPꚊ��J�� +}��߉�G�g��f���U5z��;aP�������C��*O(S��g2���hB�^��82� �;�tM����E\��S�3��sQ2%R=ܑ�!q�f6y�B_��/�����G�A�0����������F�Cӷ*}'��ӷ�`�������NW�Q|�0��#b��$��a���£4r ����L3�N�H6�/*�*"���U})W9*��\�3�"�=_�e +=�k�eFcf�fF��ڵ���e�]i�F1S�@�� �A� q�4�:Om4Q� +��>BF�5�<��ծ:r���l!�ϭ��]{���-9Ϋ��?s#�����@�%]);gQ �^li���E%ee�v4��r_���㳧��^&j�B��+���uzh�K�Sd����/��V� �u���� +�2���b+��Ijǹ=�'�c����WN\�gA�A=d�b��.�ڤ�t�8�FO�)�&���%Jv�3�wt�u@N��HM��t5V�A)\5��"��!�'�H�q�y-��ZC��g�z#�� +]���{����@�/N٘�֜�ib3��AѾê�(�Wf�<�Fgw_<�O�TcOq�ۚ4�y'�e�(���"F�bF�E����_�=���tWCqGC�N��#3/����n��c�բ�D�4`�}y��쑏��Ha*�ᗳ�`x��ĩ��!Y��+t�Q�ʌ�&2cg/0� �����3t���:):Y�)֛���u����EpO�'���dw�V7�X �~��z�J�B����^�=A�(!���_�ԇ +*���Y�Kx�pqF��t-��e�v�E.��nGrq��H�Q\@o�w��A�=��U.��m���ۆ�/���>✙�s�ʛ'�\u'쏅�pon���W�έ.�5�tnǤ�t�R3� +7�%z�)Ŧ��g�ѝ��D^��ݼ.��� .�'�܊�c�(�� .���n�)���0߸�h3�o����9�d!W�)(������=$E��;Dnh�^� z�oJk�B�[��'�]'6�,Zr+�y�W�%�;����Â'�����ȟ`��_a��bƸ?2�_���Qf��]f��if��5d�"���ȟ0��8��_q<����?���1~?1F$�� ���;�Ώy��m��.X�� +�'@`/�.��U@��DI�Y� '"�a?X���D��/26H�P�#0���(6�9(�H���(��Ï�; ���ya$O̰lfݶ1����(�mGߪ6�+��q*������)��C�L��#�2C�.v*�y�F��-G�5��b�F���-z�"�Z`k������D�}��������³�y*f2��iX��,�C[X��@L<:-�Y�Ab�V�9���؅��dOv#sN2�C�œ��0c2ܜd���lF��¬�����ϴ#����D��N4)9{<�Q[Q��Ի���d�w�I+4i��ytZ�����t��8-6c1#���nB�D�3>#y��i׬�&O٢j}� ���MZb�gRr�39y�3�G��GK2��j��~̭i6g*/���<͙6�90r���4�ss��:F� �� bvat *�at.�q*_w _�4 �V�hV-6=# �Lv��0�2�8�(��o���<��A�X˜X�L���G�� I�VX5E�iq�˜,3�� +�%
;Pƴ� �9�*-� +gJ�"�o�j�=�2�[�b�U��6̔�kE��i�Zm@�d�g��W�c�m��11N��ki�@���07� +� n��Ʈy�.�����%jIZ��K��o��WmZ_����9L��#f cA� �$���@�:���q��h������,.\0�qa��%�|�C��H���p��Rx�o%�>\� �#����L} ���溻�+�\U/�Jy �¥8�;~�e�W�WR�Q +�" +�P�� \Gٸ��q#��z��h,n�b�J�pM����wS56S����r�!|cc����N�t����~;p��*��� ��E\���,��?�`�xg��B��|ٻ��I9������oX�!�r�W��J9�ˠH�x[5��*��>mpqK����GX؏�?~⣿���Qd�}K5a�7Bʂ=B +CLVj{��+��7�ߑ����o��l��E>��o�R73_$܏>2�ne�m�o�f�*[q��Y�p+��XƲ +�n�HJDB+�} + +E�l�v�����a,O�$ 8��1��0Blд���؎��v4U�UZ͢ߊ�mXQ��J�cVŊ�f�AWW�0*4��M�3n+�hV;�Tq�^�E��5�qI.�Ŕ���2 ZpR���~W�B�ի��4�V\����n��9����)��2|U �w�{��58�;�� +��ǿk���K�U�Iי����E�q8}��#�܂lv����"��0��S������H,w��{"l�rAg([��両!n�<��F���Օ�Ӭ�ſ{øOt������i����N�9R��(�fl��{pR��$�)6c#�� �;���HV�C|Z,[�/�Ii�I&A^"��J�M��9|M~B�9 +�TH!OM4��i��z�>/]�+ӥ����H�DW�=t%��մ����82_����@��z��p���Q��-R�;oc�z�E +��/�o9�p��*=��8�����U�����Ln���6�U��b)J��a����� ��x��O�A�|hl��t'Ri���B�1��A!ma3>��� ��g�����8�Ѿ�=�GW��~0���K7+�6c���PK�A�ǫ"PK�l4adChatClient.class;�o�>CNvvvF�����̲T������TFQ +��IJD��ļt����̼tk�0F���Ң�T���"������Լ=�zFd1F�)�IY��%l� � L �������b1�I&6PK<��_��PK�l4adChatClientInfo.class��MO�@�ߥH+ ��T�J0z�x!111z�x� �PB�f)�/�ă?�e��$$�/������������#�3�`=�46��-�6��(1vL��Hv�~$P���yؓ�}xi_�O��j� s���� +��L���������ej�/0%��W�S_�љ�Qݿ�� +�&����w5�����U*�I��� ���|lA����=�Sхz +�|��-���0���gy����*�1!���Ch���:D��w��yB�<�5-�D�t�,����;K��ٳF�HMz�UQ�y�2��)ZL�M��M =5<�;��7�<��:k+�T�Gȓpn4-ӹY��X��ʽ��픡�)aZ�X>3md���irjiL��i{f�_�;�0�E�1F�\N��bO��+�[3��S�9��#fd{i_��>�j�sF�e\�r?.ˏ��v}a!k/��Sf.i[�c��g��aS��*/W��9�edw�u +�#��n�pn��=ܢ���0�[5܆�,hPT���8��W��Xx�Q�ま��A�0�'��&ޒ�o yGA��4���D�����z�����?��!�ͮ�sIc�1mv�n�Af�Q�=l�ө�e;Q�L�F�,H4gdY iX�k� +�j����h���^׎�f��M�X�5�C��1>�5�A��G!�y�j�3.h���*.iXƊ����ʹ[�ͥȣ�u�z0�a� �\�>Q� +��*���e�FA$V��*4|�*�K���Q�[@a4SЎf��*��������ᮢ���s.\#� ��6WO9G|�I�i�a4([���)#D��|���l�1�2 ��ބBi�3�++��±'�&�w�Ϣ��2��Z��K������]�l�JS�t˴`h(k멤�6�x����cǯ�ZywX٬�4��u��dB�(&b��ɴ�����!��P�3f�\���3��)��q��kž1���F7{�'�� r��� +�O�Z��+����6,:�;�7� +�{�J߃�w��cU�{E�4�IGZ�jw9�C*������}����U ��mK����˻Q7���K�� �P#7��j�rW�S�ʫ�]y[�+/,�!�w����_���R� +�>�j�� + �.!(ouBԾ~y���BS��^A��Z�6��Ʃ���YƦ4��Y������V�J�k����e zA�%��A^͚�u ;� ��� b�)������R؇�B��0@�NoU�U\S�6�8"{Jn����v �漙f�q��q���2A�#�x��B-n�L�టŗ���{���%~-�W%������8���M��q��8M� L"�cA����4Vqݘxp�n;(s{=�v�������}��N~��i"#ɂ�8V�;O�����R�x�:��縃�*���9�2��g���E��J�b�k����1@w��_� +t_�@B\9`=%W�n����8�eyvv����t�PK�$�wPK�l4adChatDatasource.class�V�w�~&�1��B �"�a�%�����F��5 ��$; ��3qg +k[���j?� +��ҏ "�l�i==mO8�?���?��������M������~<����3���?�� ܏��؏�U�'*/N�x"�hy1��)<)�AN��S2<�F���32 ���F��aDE.ACŨ�%� g0qNų l�%C>[81���9�)��-O\e8� ����&⸀o�x1��ᢼ_�a"�o�e��� �V��(�'�*hɞ���Eϴ:���YO�� +4ݱ�\�uMǦXs�؀1�9�$�<�nj!3�@9� ��i�^��P���CN�P�.k�F_1?lN�uMc��g�����{���}wم��c�^����b���u;V��e��!�4l/�; �� +F�9o�J&�Y]�\��ڛZS6TUl4���q��=��վZ���Ӵ�3�ǶIU�e)Xˈ���-�{�5 +��h�b=6 =7���� ۚ�m$B͒�c����-��� #�#�䥅$�սú����^1��4<�/M�j��|��VV���%���*^��=|_�븤����7𦆷�# +?��O��x[�;~��k��e�Ί�i�HJSh���u4�RLu"��] +��{~�PPdr�k +�㠂X�8G�FN�\R��v��i��x���5�S�� +��.ٻ.�᠊>ƴ�;V�pѴrF�iﱷW��ܮ�&>Q� +3b�8�z��ƳD|�N��aA�l�����V�81�ܵ�[?r�XF�D�Pv��ڲ��r,��xE�VNWoQ|�H��ߦ�x��e���F�-�.Z΋�����7X�1� /Z��X����Y�5H���lo|kP��q|����T�ޞ����Ϣ!5���³�p�T�E�&e|��&D8nFw"����ނmh�g����.���u��4�I��)��U#ѲS*}݁�Bl�;��A,]Bb�g�?�1 +�����@%�4�Z��N���s��QF�{��[ߤbdO �_���BK|���)aͩLzk�2[�}7�{h'C6:�����W�dy�G��p���8���m�}.@�=�����f2&,̔E���4�“��� +��k��~�t�CÑ��PW���p2��D2L�M]�׫Ʒ2; �0 +EY1���t���>>G���<߂��^�o�����ghV��p�A������L�ߜ �7��2�������o�0N����z���ç��L�3�CXe��@>�f�ʴ`H�c�ݳ��A�� :���YCgd����!��9���$�,���e>ErZY*���#�����(�1&������Y��ߴ<ɷ�8A���2\%� +�g�e��<6��p� -a���wsk [/������$��¡" ,��� +�,L�헡%UR�6��oٸ���D&�$C&����I�D���ݵ���.�S��.e�q^m`�4\`�����2y���e����%��x���"�p.�m����B�ʟ��q����Cp�4�Vh"y!�v;}�B]�r�K�� +R�9b4�rF�v0f��JHa�VV�Ub��6�1e�-}Ėq���oѴ_���݊�����m��T�ˬ�D�%<�-5�M�T ;K�Ž��'�=�k1�̌g��{K�H�����-�N�Gs�P���̳o�����$�s��WV��H��I�5N�=���PK6 ��L� +PK�l4adChatFormatMessage$1.classmQ�N�@} �b-��&���@B^0x�� +Դ[�.���I���D��Dl��&/3o��~.�?��0��d`�:�:� �KOz�!k5� �����󤸙#��OLa�I7\8~{r�pd����|�l1R�wiA;�/)c΢��xI{��Δ�N\�E�8OhV[�W�}����c�D +�&6��q`�u����̮�"r|�"f��5v��G%"��!Z<��d�Z���|.'�@Ed+ݦ�}���E�<84��O��>��3�V�u�Vn���)t��u5QeR}��n5���l��0y��+� 3��rU��&�<��G�K�@`2_�M���^���=6e�)�Ɉ�%̩�����j�� +�L]�R^M�����d]�Q�0�G�� +]�U�tU��5��U�*�U����j����ڡ�%�� <�T�TѹL����j���Qk��lh��V�r]�V��Z�����tU�� +Y�RM�U���E�:�^W��Q�hj��6�ZMm��V�MW��P;2�N���$��5�!s��􃺪��s��,R���PUЈFͨ�v�]��_Lg�p�T��钦 �M ��4�_4~*�����x��`��e��1���Ǎ`t��m-��W�@��#��]�k�ntI�*����1,'\����Ԩ�2쿐�b�1F +u����I&����N�fg8}�,����� +y�i���ѩH����`����׫�Ң��,c6[o�2���F��f�W�0ݖ�1M���ڑ#�[ D����a����9��?:g���J>�2�ʼn +�J;��!s�������Q����4C�V�'u]9�E5�U<����U��dD�w��.h2��N��RVvb�`���3\i�v�@0�����%��?b� FsZK�he��j���l��pM�إ��Ǫ7,U�xK��T �?޵�v�"�����?��'���X�z�ˑp��ũ)�ii�8��Qk�|�N��C�����K-��0�m�f��j��� ��v}���Kk?���O�#��L��Ƣ�;��C��94�P9���Ա��e�c��z�#w�C����R��W9t�C�v(�K�ŁEYX�%�E��������gٛ�t� +�7]�����[�>gI�ː��֜��s��p!�#�����S}p�r� +}H�e�!͗�ׇt 5_Jܾ܌>.���a���2�|G�݇�և\�0ɗ˹��܂>L�)S}�>L� +`zc?f��P�3f xpRcY?f�L�MMM��cȳh�N�-�R- +�e��2ws�k��%P��#$P"�Z��9�:'�Ed'E\���!�6�]��Z��/�/L`�~��V~Z�O`s +��K,��'pfa>�o]~�j�^���(؛F�<>t�M���4����fߊR��[|��p'� ���/_�h�{�e�K�����n�����ۮ.$�wd���˥[�^�-\����I�bsI�����P^*�� S#��M�o��݇0SF�Q0v�,�+����7n�C ���1�<�K�,@����)C�ϥv�Y��9f��a�3���,�.k���B)�V)�=yM +-#�vi"��(�M���U��W�Nq�f��� PK˧2y0 �PK�l4adChatLoginMessage.class�T[s�V�dK��( 1&��@I�8��˥�5����b'!�(�0b��K�7�ܷ����)���>��?�鷒O����=��������û?\��$��J`߈�q[ķ"��Ob��8+�{�tL�Lr�n���:E���@GAǒ�eu��x�cUGQ�Kq�ű� �i9��nYA���޳�U�V��M�V�U��k��� �ا�^����=�*Z�R�ܚ۞S�L�T]��y`��֜����,��U"�2ǃȁD�i�1�"�����L�e��/{y�U���ފ�j�כe���0���0̡w[��e�?��ow�j��R�f��U�zŭ-��~r�OCB/�,�;��+��� /��i��sY���K�� �DL��qؤ���c��cl��7��ސ�/��>eE,����g��Ų�1a��V��賎�+#� +���اҬ��V0;>Iw�[��h3��$����|n�rvڜ&߯��6���b7��;�Z�vk%�]��Q]���8ޑ�w$�ijfQ�9f7N�� �c�_�Yvp�O�!"-���zz"Г�f{���Pf�Z&�P�1�B1�׈���PEh�����`J��< �'�W��3I{�f�� �d���;��@� 3*��l*q��8gS}��ex�J�߳�nJ��0�)�0�Qd1�Nㆼ���}�IJ(�9Lw��J�13��]���N����0��SK�4�D~;r�y���r8u��:K��|(u��:O�e8��K}��׉\ �V{�g(��Sk�Գ���\ ��z�oS^�W!��_{\(o���XA�Rf��$.0����'�|���#�|��ը��cpsH��-N�R�����6̿��}���/�0냧hg0�#�s� +8�c���L@��� +Nws�ʑV(W�o9�%�k��:氁y>�El���K8��:��\Fg|rxp|�����sN��p��q:������[k���:��~��z/`D`T -`� dNdN*� +a +d�)lRجЮСЩ�E�+ĕ�&CX�7 +2J +S +� +o)��pZ��3 +g�)�W��pQ��e�+ +W���u� +7��m +� �X�3�p6�!�wR���z.�H� +�\�[�w�����ax�h̥U�<�K� +(�@,�����tɧOk�M���kG�,��eK[5xZZ���7�64��es�ީ��0����ihy2q�R���.J�3s��-�n[�G�L�s�,3{V=�HTg���w0_�efς�g�3�l����&3�&��k#�� �c�*�����Tv<}���d�8dU�Ec +U)omM��.e���37�S���Q�X�/2����kǞY@W�Zs�� �i�d�;�o2���j����5�BS�8i���D ��S�QcGVޤ���=�ϼ%�D'��5� +��&����[����%�Ew�x��>>#��Lę\��ؘQ�0wyӓ�+C�Ç|i����NP�L̙�$g��Ʉ��Kh�G[E�Ҍ,�9s/s� �Ur���P2Q���ռ�5���OJ+��V��6�5����'' �iC�ᤑK�o�*��#d�������m߈,b۳�����_��z��(��|��gs�:%�>�%�Nᗦ$.�O����[vI��ssܓ��[g~��n@7V�뵞�� ��Ѫ�+g����;����c�=�r\ +M�/qg�� +чТ�}T x�>�@@@ ���}O/ +/�aq�3�j��oj��ф:�Dk�����,6�l��f����c�y���3�d�E��Fb�Z��КoZ^Zu��1-?���UoZ�V�i+�;���%O���,�2n���˱�8�DZ +'��r��Y��uz�E #��K����R01�?d�1�AC/���8����?���r�I&���K{��)���Wi�S����]���t�̫��^��6�.wi�S���"��U���I��.�sJ�t�>Wi�Sz��]:��NQz��^W�S� q���rJ��12�]��Sz����t�)=J�4�W�S:CL��&�L�Y�\*9"��lZ��GX�T:E����oK�ġg����m|�;���l~����܂8���i��i�8�DcqMk��5z]����s��YM/�j-Ӵx�����S�-�4�.a��Fr������� 3=�Xd]���K�2/���nQ�"C>�o� +PKG����PK�l4adChatServer.class}V[WW�3��`D�2�-D.��* �\�hZ +h퐌 +313���jmkk���nۧ��V�j�WY��>���Gm�3!D���9�|g�o�̞���?�؃�U��@Z0(� +���M1 ���e����� +�ALƨ +  -G�* *Wx[��; -��i����`)\R��pE�Œ�]�{ -s>�����x�X��^�c�[x�d��@�L� � �*�C`�����@G���� NaO)�q��Ȣ+S�����ea3w� ̢3�9acLCmSs�)cڈ���x���&���5�65�qP��i�L"MO���Kd�B����lsї�0�ܴ�Pn�kI�%�=�[���g��~�?&|����cÙѳ;l6��L�U��Д��%G�ⱉ�i� N*����l�v{��L˰�L�x����̂ռ�BJo���2�H�'�I�^o>q0�(�?>�VŋY=q;i0�(��33�`i��tb���p"�o ���ܺ��LeG����x�W��' -�'��Q��-��y�/91�J��>hd�������(wI��L'H=� -5�S��hG6c����c�k����7kX [�������e���&N%F�EVe_`vV1�I[F2�oP�H�ٖ��桏'�{'�d�y퐽����9/+S?��l��g7�����D����*/r����a#%���`X�`U�:FM<�|`��,}��eg�VHk}�ۂ�,Vg.��tTg.��\P�9_��bQ�¢�f�Rbe�+��=w;��0-��e����%�� +�W�=Z��^a�+�3��naLF�]8��&�,�0gY��6�!6��}D�t��@�@T�E�Q��Gۏ��0BlA9q<r����2Ta%��5|_���Juh�O�Y����%��u�ph�#4}�^*��á���¡:�5�-��N��f1��l�J��fQ�56k!��Y�|y�XN\���V�k��Wv� ����O� l�I4��q��ƈY���� ���@���5-Z}�M?����s;���Ȑ2��z8�i�вz�Ķ�Ic߂4�vM״p�>��5C2ŝ5v�fr��W��|����Un!�Ϡ�g�� -z�g���x�9�S����)�x>94��t���ɕ_I����T����h��Ю�U��6�QK^I��?T&b8/��"��ɋ��KD���yTD����Ǩ�Z�I�Gde�ey�Jd��ڲ7/W�,J�g˾�Y��f�*�ɏ��|ݽ�%��|V��-�p��o���5^��� -|�����=n�'��o|R���Q�T�4�r�ΖIǝ�'N�Z��֭�w]��Ӻ����5�ƈg]�Q�u������i"�s�Ɯ����V�u�C��bm��a�����`�G�W_�< -����T���������Q���ם����S���8�a�u*���Q����^*���-N�1���q�ǜ�}�wQ������w��Ae��<�Lb��=�PK,�߻�PK2*adChatServer.class�V[WW���(���7 �bEj��Ā��ѐ�����^����{�E��j_x-]%�d-ڵ����ۓBĵ��}����۷�����l� -�}(��>T��8*��qLDW)-�w\N����k�#�W|؀�b,�:��P�S�� �b�/�WE�&�|X/Bà��0��"^q^�"L��bT��8'���b���0���4�Ĉ�D|�3����[�5|'����}� ���>�#B -�u]�SƄ٪_0.��4�3y�L�~�1��~]�+Q��'��sX�Z]0�;f8�m��a�M���GS�j�K9��3�$Mc�-c�Ō�D���D�E�t�z(�F"IӶyT�4`�/���i5��g�u����$1E<%h�?�_K�3�T�_>�9l����`�i���U��G -����z -�/����x^ ��$��.oU��G����k&9�"\6w] -� 'j��h�m:��ت+P�v�r�/ F���Ԙ�4�btU�#��A'a}^\���n� ����z����I�v8u���Ź��fQ�w� A���Uf�8��O�R�56pj�jp�I���� -9�l�i"#o;9t5)'k"�2�SF�y�O� #i�,�z��*!lĈP��xܭ�����+s$S�N��H�����ʔ�m��W(� -��i�|�ݕow�w�]�i�B�ۀ�wC�Wp����@y�,��X�æY4�f�Pfq P3�}3*�Sn��B*�ȝT�$�yim�峓z�c8b3WER ���_s.J\e��WK�g�^B��X��G)�a"����=�#��h�ao��Ƌ3����hn������ހ���4�=��kH��4 �ƗӴNce�8���70��CX�Ӽnϰ�KA�h�gюs8µ�q���e2�'�����G�dQau���i -��ԭ#�������nv�8ϻ�8Aj;�z��]�'�R�������^��yT�*��c5��4vW���P�i���iter���r-ϱ�Ҳ��y� -�簭����>�Ɩ�iT<�â�s����̸Cx�H��wr�t� $]�����v�b:8g=�EL-����u�ow�͹��p���~F� ���ɶ�F����=FS����y���� L~{oCŊ4���@~]�%u͸ݭE].�ZN���hb� �RW�6&��i�Ot�}'��PKO��V�� -PK2*adChatSimpleXMLParser.class��ao�P�� ����V�9��1�ñ�n&c˲ - ��Ũ�q.� R��W����_X��?�e<-d�V7�������s����������)!!aQBRDZĚ�u� |� -BĴ-� ���e�Ŗ��)c s�ܕ���� �2�����d<����M� ��t�X;Ѳ-�hf+���-'��!�*\�J�kg[v��d�ڸ�o4���z������xG�2�<�'�e��uC�vȡW���9C���y�]��Vm��t�f�?�텢���4����-��T|��=n2̹��v}��u�ܨӤ�1j�E9ibi�q�5�mr˙��Q�� -��?���1�Y�X�o��t����ō�u�0y�s�^������� P'ڏf��2��42}���4�?L�w� ��F[�Q�'�m�;�7av������d���N��a�s9�!(�)|�����J1�~P���XC��B���{�$�U�G/Y�J��5a5�;���" p���r'F8q�I�.��$QF�p��|�W��ٽ'�z����!�JB��% �N\�� $Lp3��"x�\k��x��PKp�2<�PK2*adChatSystemMessage.class�W WT���3��..�"�� -sA�&��G0� `��3�s!�΃03TS�iScL�V�6jӐ6�E�GB�j���Z�Q�߾s��j�,��g�����}�9�̿���}�Є�*�*R*�*&U�X�9�U���e��xU�k*^W�7U\T�+*S1�bAŗ*�R���U/���/>�bʋϼ����s?6�i?�YD����!���=#Ⰸn�|_�\��^}~T�@~ ݣ��m@Ġ8��;8�G-��� ���S��@N�H�9�K����C -a��i�%������">ď4�/��j�����">‹~�q -�Ǩ�k�)���OD��/4�?��W�<-�3���a -��~okX�5���7�U�o�V���!t6<n���c��� +>�R`N��h�9�JL��s�lyRAe}w�Ծ�D����\V�w�GGM���(]o�_鲨��b@:h�_���V����"�GqL��m��##O��R�E_W��Z�:�`s�|2e�(���Is�ZYF;c�Sv����H�`� O��Wf�V2u����������HԊ[)�%AGQ�9tEV -� �a�/��4v��.��F . ���� eC) -2vw&"���bMȊ���ذ91��Z�I��h>œ��Y3c��b��;;��Dzb�n�#b��A�g�pڊ�z��'9Vh I�m[Y��-fHv���o$O���@�8��Y��ʠ5G�L�m*��hA �g>j⽛K]�D�� -G-�+�l���Xb��%T�c)�Na�T�묩��;�8yq&�޸Ј��0c�I3R2�;i�Ħ$�US�,w*�H�{���9�;U�5�5�%r�+����x&3��M�}����� -��''j>�>��e�]%����n�1a[?A -~��N���u -�x�¸C���Q�pS�Rj�VF��ȅ��>����<��Y� -�g�X����.�y_�౥����U싿XƟ2B%D}�ԟ�W,`�u�.��z%��P�A�,N�����L�Tc�r&�69� عZ�0h���T��W���nz���/�n�]�Fb����4͢��SEB�{�[�C#��te��v-�)xܭ5�~��2��^��k�W˿M�ʷH���}|����������� -�� XDG�I4s'w�"w�-���x -W���|LO�a?_-����h�}��'y(D$� -�d]�W;q�61UmM�N�M q��FX V�Iwa���� -w��v`u'ʕ+���Ө���X�^&M�*��T��{�fضǨbS3pw�Ye7s80�c���+��x�u�S�:|��x�L�a��#�'O�Ga��۱+�?�.��;dw���%�+d��]%���������ft���a�2I��|�:<�t�j�����T�aC/��e����{��{h˳��G�s� -�%��UJ��r�ᜡ{�%a��q��� ,�o��/�M��-|�|�v���e;Jۋ��Xq -q�N8�l�r�p�ּ��('�c��r(�n9�YJ�� n,�� �J�a�]�s�V�Y�G�Gi���^�����Vz��/u�Ƴ��m]�G��vֹ]��\����e ����v~��O�����ކ�������[�puě@'��7�� -:D����E� �#A�g�4�߼L�9g�-}�0{�$�K����@HR�v¡$�չ/�����٫�k��,��o � -���~9�vdh�(G -�� �=�/��%�E�N�6E>y�� r^�%/}��w�\�ZL0 9����C7�j���%U��Sd[;��rRX^��ϙ/$9F~�� c�3y�J3,��U���p79���4s�PK�D��NPK2*adChatterList$2.classmP�J�@}c����֪�EUЈWE��P^*z�6K��n$�6��<)�?J����a���vf������b�ņ�MK�yL�>V��cuB�wpGpz}�v{у��@&�s�Mp�t�W�YE�\ie.���$�}�e&"�eNhFJ˛�t(�[1LX� -�Y6���^ꃅ6iԈ�"'��E*7������N�}�2��續�#� ���=���)�Q��0Is��8������s��0O���/p�V9�,I�J ���5���G���v�)g����|�r�q�`���(\$ ->+ -.p�%4��Bǥ�]&�}N�.�����\!W�����"r������Z���b�Z���Dt��p��7JX7ɱ���-ۭ^�6!o쫂�!q�)6��n� ��x��}��@��8�� -<��M|G�_pP�[xT�_񘎿����6~�����u���:���u�{t���x��x�������:>�7t�������(�׺RxFWy���\xEWn�V�;+�V�'b�\DNK��5��˖���O':�����Ϣ���z�Q����Ù-��w�NTk�M����mk�h�A[.#V(!�m=^��F���n��C4DL��E���Gqnk���A�v�PY�ˤ�FO�#�i��X^�v9)�|ᄱ}��u�h�v.9=����8���鸵����i#�2*�"GGQ��ZF+]�xZl���?�4a�{f��:����j�Ǝ�nJ�Q��p�=9�-|wW���Z�nK��w�VW7����x����'(]� m�'=e��`}.K�R�=.��Y��z.3�2,��KG��p}+F�&KF�Å�WS:�o�;뤚C���C���Za�'�i��Íh6�}̼��b���S3Wvg�θd���"��F;��(���+*��G��mR��c�Y�;���&K�C�d�M�c�6]KG��m�a�|���NVV��Ծ��)��ǰs��H���m%�h����,=خZ�̞ԓvi�1{�F�dkHWH�����7��J|��Ê���� � -V�r&�����!w�[�Ý���|3��͂T| '�鞰���r�@M�b6���X���˷�wx�i�Ґk:y;ۻ-Q��n�S�&;1�?����$����3<���S�_U������hE�'#蟏��A�v�?�iL�� �^���^�9�����E�|��0�W��Wd��,���?"L�c�� �2؇i��8#��^@����� ��C�R!�X"'V -oS�S[�0C��DC0�2�[�}�)�l|Ip?��2�(+�BA����PTm�+��9�������Wf��Lf��y��T7�c+��6T#�9��q,@� �ӑ�ZlǙ����Q�|�q�.�ŸWP�Ÿ�P�&.�oh��� YAts(�jY38���{P!~��wv28s7 -��`�PA�o`Q��{��,��P��q����p7V�:�����d* -҅�r�9j�A>���y�o4��po��d�d��#�� ɷ��~��gEW�E̢�g܂Y�A���#��28�q�a�R~�^�$]���7`V����:7H,��qnj�~��ea���!�e�.�E��"RJ��� �ڇ��1����pX�|*�UCW0��tQ��0W���B\˔_���'���?n��~��F�7�CkU}����_�[�'K�e��E���>���D-�/���O!����}86�`H*5T-e��aI��uuB��R{e����!7�PD��L�Di�� -P���S>,S%hT�X�ƣE��5ݪv�R���&�O5{Gd�-�UY�m�M>��;�2(v -s,Y.g< W��ô�tFn%�ڗ�/�}��P�w�fꑭ}D��8b�9v�Nր!ZZ�AK��Rb�8 +g~hN�n9��gk�f�r���� -���Y�YLƦ:�n��.w߁T7W�UL�ԙ��vrw��X��sȕ.)w�=����H�Wx�L�l�W�+��'z�c�M��ն{�B$9���� =p����6g�l�'�r���V��l�ޅ�$����C�`��C�˙N} -s=�!����f�q4� ��Y��.���E���򭸀/ݕ|��%}=_��� �Om��9�7�y�//���!^R~����+*��U^U���58a�YR)'����� -g���ُsB���)7q�q���f��]y�"�����f -���4 �9R��H�G�'�G���M����0��S�4?�㝙"#�����MT�}��7x�e�����z��ȁ�y���PK6��� rPK2*adChatterListLayout.class��[oA��+�n�\�E�^���}���Ą� ���4����Ͳ�˳��o����/m�IM색Ə��Ji�fϙ���9sf~��rr��p�a��2�ƐbH3d�*U�\##�‹�k"*$,�qq?�"��5D����$%ĵTu������0��e�$D�:�l6vD�!٣��HHh�g'ae�صLa�� m��Ƥ�VL�린K�잘S��6QVݱu�]:mK�n��] ޲��UJS� -ao�F��n�즸���o��s�vU�:y7)5oJ���VϙT�M��tq�x�qW��m���$l -#�u�'ӮF����h�e Q��/(��CM���L���Ŏ�a���m���*��3*r�2lP猞1����k�maۢ5��laX{b�X�w磟�4�>@�-�h��D^N@�L +��^�������X�l�'�3� �<-��\LIg��؟a5��1��H���Z�;����� �������|�/�-���c����L���|��ϯ�B�/��}+zsG����T�;�; -�l��88�U�J�_�*4"6�ߡY� 7��ϑ�dW�kPK���vJ6PK2*adChatterScrollPane.classmUmSW~�h�,W� mՔV�,(j�A��д᥂Z� �$7��d7�l@���'�+���)3�ڙ��N��HH&�s�}�9Ϲ�ܛ����o�p�{�E/vul��Z�7:�ձ��{E%�OGY�:|���1�7� -���� �݊�4& -�2�cZ�n����A����߽p��*�0�3�Q~�x��>1p�T�c��x���J�(�*����w�T�Ʋ@�2X�bA@"%�Ü@�� 8�%� �*���g/ߞ2�R�?b^�g, ��u -��xj�ޱ'��`b�)I��xnB�p�aѷ�'S!~�/�n~b-�7O8dƟ+c2��,�yI�N�:��);��"���� -��c�9�T�\��x7P��˙ːy2�B�;�d�q��W�<Ҏ��M -�̖W��2st�����N��q��ˑYu��;Oy� ��S���q\'x��Ԝ��Ē�*�:W��@�)��՟r\�\-���n���輖��x�L0��Kč5��g䂣�δQk���o*�� -L�{^5hE�2�W,��n�����G���S^|ҋǼ��W@�2>-�32>+�s2>/㴌�d�Z�od�V��dgx�w�N��]*��c*����6�⸊2�#ܩ�Ǭ� ��2���cB�/�_��_�f��#*��S*�Θ����d��BRſ��%��x����IU2iE�e�A��릣������qˊ�,v]��W� j�-��Ӡ9�m%�!}��І�����Ɍ%�'�kQҔ�hZN�jqF�́�$6́���3ݩ ��m���b�N�� -��H���Cz|���+tPw6��b�(bP��°LW�j�x66,����U䏫�����v] <��S��Kk�=D({]8�wϗ��9�'��g���<�9"X=��;�lI����?�������#�%U��E��9Vܿ�/Px�a��J]k�������==�no��II](D5�릡����ׅ���v\7��qK �4�����<[h_�^,9�/ -SoID��x���u���LA���*��ɪ�(��f�!��k�˗������fu�@Q�� -�f(:�Íb��(E���.[����� -3�.*vu��k)Ղ*I�X83%�1% -Z��L@��O �s57kozjDc}Ws�M��,/MˇmG�f/�q���3CRÁ����H�L�yvR��b��#���!���b���L -�,_#lN����'�H8[*���•5�*RwE)3N\#���l^(b���LG3�N��J8'�JذIi҅E!LO�"B�Jh�����}�;��}!7t -d@O��-�F&A�&���=�b�o%]n�yaN�d�k�΋A+�E�[��4ͽ�S�4�>l�)�E4k��iJ� -��i��ʈ�R�8}Zf�y�HF�ݐ�E�� {�1hqY�6����_#�+��`3����H��j�&���N�l� �Yw�ٶn͞%��Ƣj�ׯ���J���otY��B��:%)F��9�qD����+��<�G�!=[�2wrg� �p� �t�)��}�N�:��a�A��H���I�����"��k���e���C��q?�ܑ^M�H�$w�7�;�{��J�ϤGzQ�#��h�|rG)5�{�Fq�я�� �/�q_`+���41i xN��� -L��Pͤ��L�3�e�Ê`�2��l_Ŏ*yQUW�ḋ�!�-����=� -.��t �K�^N��唍ĭ�s����\l �&zJ_Iyj$m3V����G~����h)A�"F�x�I\|��qσ��0c -��C���K��%P��o�?�r3�����[ �זqxQ�uWFN�c�'�1��I.� �t�%YI����g -�=)�WN`�^�i�²���3� �NJ+HД���y -�{|�*I���H��h��%�q���[���� -I\B��I�%q�(�t%�s���1�6�E=�X�L�t�V�Jᓅ�pR�Ӟ8���q>�m|�46p!и�*��--է���W��reQ�'�䧗�!>�DU -?+|wU)�$��WW�+]�li��b[�%™Y6�#(�`[Ɖ�66P����ւ�+vW2�M�\Ms���6m�6I���M��3 -=����C�/�tfW�dd��53of޼y3ߧ�|��}�l��C�Bx0���HxV�s��𢄟I����$�-� ���K �JxO��>�0+ᢄ��9 ����2Z�D��@J���2�pHF �kq(�e,���o� -�e�Ĉ wȸG�oT��1����dDq<�f|���LN�D��],�ͺ���,��i��La��9ϫ�����eRdr�ɽ -�� -^����T�c|[����ܣ৸��vy�ᬂ�a+x��7��!���#<��O��)���gxD���5�T�<�෬�f�_W�|G�()�#��%Wp�C� O(�3����W��7<,��X[J`U�m�V�:������cXf���yCN3�;O���n�zԵ -s�� vL�1�b��<.��X,U?�^��8�,�2G�N�SV�"�>��If57�3t�4W7u� �U7����$��kk��{��;���t%Ԇ�^���i�Ju��$��W�X�Q}�㆙�f�a�X}��NtĖ(X���85EK]���[��_�'����s�i���{+Bc���Ѥe�t��x�g 7���p[`l-����-����=�M�(p�Z����z�l��F4S����Ѵm�rl`�V�c�9w��sRG�Bn�aSOZ�b��{N��͌�`pB�Q�i͘�yM��)����r�] -���䥹C���(-3b%��=���IyM�r�JIT E��2�\��b`Qc�B�KZ�N�r(���\KWy�g�Z���)/���3=1cd�,��i�M��d��y�f�۾��*R��nLgI�,�������劎�V�O�b��j��~��H�yAY�R���S���>�nQ�\z�i��P`��=�k�~~��W"l>��#J�� E��uz���N.���(4Q?k�ã -Xj������T�m=���W��������.K���0�M!hb�Ҽ ��5��n�U43�/ϟ��#�c��O���c�%/a�؄f��y��wO�4S~B�5_�p�?az-������H=�b��-t{��p��֥+yߛ����+c��Q�ܙ6���7�y�}�������%\;]6�M�H�qS}s����~&=Lz�t1���n&�0�og]�V7�x+["�q�+�+�2��:��sX�ag�#"�l��(��y{��D����؜1 ���@��l&!�U�"�� z*5�I4����զS$�J,��T�R&Ѭ*j�ojQ�'Z�`"B E(��x��د�h��6����jYz.!@�5~���S����i�x��9���̢��X�6�A@�x7�O�x�a�p��R[�VUR#�O�����^L_�<�/ +1PF�����It5�B\G��D�ڛ�Q�N��NO���R�C(܏U������9�u���Yl���q7�Al!,��)��:蕸�ж -�e�'�.B���E�'�n��х��[4b�X�}b=���.��cH��p@�p����xų8$^Őx�b�����4�#�6_�^�֡.�khb��:��vVk%p�v�i����4;�p2���F�_�mQ�[����U��0_Q�q3I�黻V��%�����*�3�n��I��)��$U�N��|��j'��G��v���/S�el�i�6x���1�� -��+�'�p�ug�F}J����sX_A!1�~C�����?�,%e��RӋ��5v�Y �����PK��Hd -PK2*adUserInfo.class�PMKQ=�QGmrL�,3����(�A ��pO}���ilѿj!A�~@?*:o$��aν�ι�޹�_��p�-�6�mTr�,�r��pl��`EU�����~�9�ϲ1���юB�N+FY���c��3���\ y����ԾjM�]���b'�m���.�Q� ����+�1�ɜ��f�r졃F[�Z��ˏwan}��^�c��G(� �'ty�}V�̗c���⛈�G����1&��X&�Z���ސ��i�gM�� -="}��W�61�$�,R�#�� -r��n��3�{z'����j���4��= �.�ݬ^�d�PK�{@�M:PK2*adUserInfoExt.classe��N1�O�J�u�NE�а!��L� .���5�&�C��X<e��Ȃ���w��9���5"\☣���hstI�� -T��pz��ʥ�ϥ���ɯ�+� �6�*C�)�F���+�f���ٜ1��{Rc�=2�d6|��+��gh��U8���S�a � -�M�ݚg[�����X��:�j�k��ߋ��<$���{���~7�D�*S �z� ���j�{h�PKD�-�@PK#2* META-INF/��PK#2*����DD=META-INF/MANIFEST.MFPK2*,��6]��OneColumnLayout.classPK2*[�6�jcadChatApplet$1.classPK2*��|&�;adChatApplet$2.classPK2*x�Z���adChatApplet.classPK2*��̖�oadChatClient.classPK2*�cZ�y�EadChatClientInfo.classPK2*����\adChatClientListener.classPK2*�+�,� -#adChatDatasource.classPK2*��Π(��*adChatFormatMessage$1.classPK2* ��v 3�+adChatFormatMessage.classPK2*^@!�&T8adChatLoginMessage.classPK2*,�߻�E<adChatMessage.classPK2*O��V�� -ABadChatServer.classPK2*p�2<� HadChatSimpleXMLParser.classPK2*���&�b�JadChatSystemMessage.classPK2*�D��N~RadChatterList$1.classPK2*���"��TadChatterList$2.classPK2*6��� r!VadChatterList.classPK2*���vJ6taadChatterListLayout.classPK2*�5��-dadChatterScrollPane.classPK2*<`���%hadClientSession.classPK2*��Hd -:qadPrivateChatFrame.classPK2*�{@�M:�xadUserInfo.classPK2*D�-�@SzadUserInfoExt.classPK�~{ \ No newline at end of file +Ƅ=+㜊* ��[ +� �� ㈋� �� *�aB �2�2.*�� %cJ�[������fTl���6.���+�UV W\Sq��xW%�� +zT��{b2��O��eܔP��3�)"A7�R��5a��cg3qSB0j$z& +�7��Al&kYI�XiTB�cf�� k��+F�e��C�Ґ�d��G�҃d�d��!M�����ެ �_=�t\�rt��E�u����|*㮆��{�O1���e�q7I�=��J�*�4-f�8\D��Ѓ^ k< +I�52�w-n�Ź�U�{��:?�Z��N;c��%wtQ�2X�s!�K +p\0yX@b�:��3I��h� +_��ox���S�oߍy>z�������1۩L�%��>�d� �]��¢�!��7�Ӎz�дK�w���B��G~�O�D��E]�/R�%KC�Y�)ҵ�ܨ�.Ɋw�4�īd�Ӧ���Z�>�4k:��~���7�U}ɶ�����>G��,~�i1K�>�,����0.jD�/m��4���w<>��{�Y���7R�l�և�o +^��$v 릳y��&œ +w:=� +O�x�vD�XL7b��x����qLN_�Gd��W�ܼ�5RNљ���b ;�>~�(-�O%�Cy�ɳlJ�e_��!����0g��֕�n�B +W�͠$<���,�fs(K3���3P(���&�jQ��PD +�`=��k� +uD�i�!��D��W��O��B��߱b#� �ʡrU|^�C0��S�ˡ:��j9)�4r�z���8������»f���)�����LcKt�6-9�bϛ9�1�=�n��l�����׻��iGE��v� +�؎k؁�؉;h���>�4�!��+Z�7v�S߂��5/`���Sl�%l��ak�����b{SpG;�`�(��%�=�O�Cc�m����39�y;��An�,d�8�gs�y���¥�r�$B�+�FYTD�:��#�rN���w�(���D�{�O�W����-�ʽ�(G��y�>U����у�3:��{�N� +? �����Ჶ�h�CK�~���Ҷ���<���6�(V��W^�Ɗ��|���x���� +#� Ӎ�=�xc���m�H�H�,0��_Y�k��R̲/�ϰ��b{�ɖ��C-;�!�6=���s���s�����[� +�b"�ALœ����b���tIJ#VD��Xc�� Ӱ� ^5��A(��!T2L��תr�D�6��x�}�O��s�t�_�٦n6��2��ި%5j���vskm�� +ӝ��-�G +��{V�SL��t�b�:M��\z�[]nm8�2B3��N�g4��b`9*R4��а."-#� +O.+#�M�Z�-cO��+1�o�W�yͦ +�N��u�̘�F{2��Hv���0��m^���A4�:�|���-W�����݁wT-�oK�� +��=�ͩ�T��j��"�� :�洞�}��I3�>� +�' +"$��q +<������Hs���������:}?�>�>�|���C`�᩠�Xм�>�崦�Sr�:�H�����1DY�Dr�nJ I�������(j��2�� +����M�ܝ���k:Epqo��!��C�5A�Iz�L`+x�AE1;��2�z�ݟ�N�� �s�oqd�#K�D�E�ı�#<#���߃G�PKLT��G�PK�l4adChatSystemMessage.class�W�W�� +���.�� *��� ����#*����DIl��du��R����5M�1M+Ik�S���BC��α��3��4�ݙaw��9{����ν�������?�| `����x�Q!17�^8qFE‹Q�U1&��������*~,�9�E�/���X��W�̫*^������7�T�rA�[B. +�����qɋ�񶊟����wU��bR�e﫸��y2���*>T� �TqUŔy� ��X�'�N��+1���k��U|&O~��^��*>w���cݽ�(�K�`ǁ����ӫ��:?jp�F�)z�th<H�"�@�1�J�5+p����0�<���%���8���֞S{m07�ӱAc�74%��޲ +�G=��H|�Y�I#�k�X�i2F���i��&��� +��h�@{"�T �Ǔ�Xw(f^�ٰ�bzlKu� +ohtԈ��`{��y$�gŁ@ u0��Ov�.�TM%���2SX�숧���$y{���B�s�Fh�0͕�xf���WG��1g,�+�P�La�Ֆ���toO"=6d<�o +�۟�z�'SF��H&C#����0���5t�I�Va%M57���{ܤ�4� +Ѯ�q�/��⥆C��X���Cn� k��K��f9�� �G#4�Nh8��4�(�k��y��p �n�G�,�hx�qR� !!y:$$ Zݰ2L���b�0��pY��i�C��ڒ�!���p%�-�ܡ�% �M���R����o�^`�(Ot�\���%�6�c9q�Ĺ�XR�<�W��B�0�`�e)�֮�Sy��'{ey��0�Ї74��0�R���z�s�Yk�m�u���#2��L���b3�<�r�g�5��h�`� +����J�S,����=O��2�DE/�N�P8�5b�L�ecЂc��g̈%� +ӊ3y�U�1,��Uc�V����R�Xh��bYuI��{7�ڼ,�Vn8�if)E���HQ�ŨP]h����b��)�p_�@1<���y��͵�\�d�+���r�p-�"Æ����pp�盇�S�P�s���[��.�o�n� +p�ԉr޲k���d�;b�Szh��R_nϯ/�=����-���x������;��_/ɲ4�U��K��5&�V�C�h���I��v��z�}Φ�P+����l���ߋ�)\��U�j���JW%U�ҕ�n�� +�~}�6���/r���-�<ǫ�z55�mAj��)ً� � �66c��v��#�#�&İ)��/���"v��<��x�h��q�6�K[�g<��a?Q�Sv¶2�E�x_C���5��L�!r��ǖ��* v��7���&� �^/ Z4�B�0i_��.[�LD�D� *o:r7�a%�u�&���ȋ�V�o;Q[�j�l���eW��}�~3�� +k}�t�M;�������N�ڏh�Yr�f�,k���Ze�Mw��U��h�LKfeK B廮��:�d�OO���:Vf B�,V�fP�21�粢)�qY���\82�R���3_[��2��w3i ���f� 8�jcc'Ym)�j�59�Qq�����`�$������L���֮F�� ��h� ��.��:n��6}���&��[��,q����%��"��S�.��*�k ���7X�orNp�]`�]$��{C������?��&�w��]�{��&��2ѽOtW�������)d�����e�����)���Ԡ_�mo>�����&@ pu��s�Mع'Y��.Y&����f��n��̍��H�ҍ)���L�'k���#i'�4=���ΐw����s�3��f��Ov���e=\ăl��x���#$<���;������.G[ +���:��F�-��P�&�V���F�-� ˓ڿR�&+5ᠷ7r�ZG��MF�K��8���C�A?d������$�Ͼ��J��8g��f�&gҚ"%�\�Z)��={��PK�* +�^PK�l4adChatterList$1.class}S�n�@�6I�ĸM=8Z�B��C� +-H%)(R)��M�m]9��ބ�Bj�J<��5��i�-Ϯ��f���_���iSX2�ò�]3p=���&�X��>W���X5��c�*Jn���0�zR1�:C���b�e�5�[��J���Ej�L���3��=b[�Ȑ���a�oz����5���@��Nv�˰h7�y�W�WU}!Ue3v�����za[��4@�T��%�-���ȓ���� \U wp��L[��= �Q (�~�DX�;uXe��s�\�V�UH�{�xx���k�>h���#<�XO,�cC��o%E�U�R�5�G����߶�E�x]ۭ�R�<KTv�'f�ύ�Zcv���i�� +It��c�Ψ���9�����3*��b���:��ʘ��+%�OZ#��ڜ̂�X����y$�i����v��̒u�n���9�C0g�������4+C�ܒ#��Ef*G�`/0Fst�k� +�kp~�Sr� +�_�c�� +��Hc=Up��hal���T=� +PK���E�PK�l4adChatterList.class�W x[��ג�$�ٖ��$v�$�d�$��@�8����q�1)8�ֳ��#=9 �(-�B��pi�JRG���(�P��,�QJ[Ζ��\3�$K���|��3;�3������/���ȍ�pa.cr9�3� �+�\�d'���\��&�2�N��na����ԍ���&&�X|3�[Xk7��)�9Knu�6^�6\Ū�3�Å;� w�Q�N���^&�d2��>$�x�W��M~��=.L����ox�^�����x��o]x��w<�=���<��,~ԅ<ƒǙ}��'y���4������<��\��w����%7�c���y�&�+�����kL�ݍ6���7Y�f&�0�����hg��oL��� +�V���;дfuWG`���" P���M-bn�B �FI�(�Z+�-+� 8Z���Z�Sy)f��X�޼���Q�@q{Ӻ5�����Yؤ\@��!���2"A}����F<���A�^�b��Z����}�hL�\��� +qS��RN�F�~�������ĺ 6���3�.7�z$nD#���b�~��~���� +��2 +uk��������V*�$�]�ޮ�i�� ��miS�K��a-P���B�� +R�ŭFD_�w��Zw�%}��.�уS ykZ����@�7Ja�yeC �����˹�`��_3M��f��taLG�Q +ǀfDhד�bk�i�FO\x(��1�W���`�t4�˜���@P3IC +G)CM!��������>�G��6�o�tb�7G($�/�ح�ɜ5I1���Jv�I~�ܜ���U���HO��u٨fƵ=L�6Z�!��o7cF�Oλۣ�X������jil[��況�A���U��_��d3NQ�QQ�`r*b*�LLf�H�-`��=�6�����*>�?U� ��7���U|���X�'�T�@:�*��� +>S�|�� ���K_ё���mL��,���hou����B�<&6U؅C��P�S��u�nUPXBe�P)�XQ��R&e�\��$&�� |��)��*���RT�b:�f0��(��蛷���)f�b�����Yg.�C�E���g��'ഊ�[��*jE�"櫢q�*�c:?����ia]���'���v?�՘0Mn76:S4)�4�c1g�!�"=�ҨB㬸P���Tq�hgBsG�#Uq��N1�Z�*�ᯜ谰�.�g3:�x��ć0�`o@�|\77qC�!��D�UЊy�{�S����mնE�m�eY�6-B +���e�6E�ш<� )�x��э墮����� +�K֑^ӽ��(�V�M��&f��MD���o���.�Ad���-.��Mn���jD��ҩ2�l�Z���60�G�1�y'h5�D��H���;;�4���n+�xE�(� ��s�C���G9o���B3],m�V#��5cz�BQ�mG/�ܐ�i���|�X3k� �A>*I��,�vN�M^�N^��gRD�:\��$�*����?@�M���N���!*�!'5R�8ڔ� \��ζV�=�ښ�[e�J�Q��t�3Mj��&��! +�x�18��T=M�[�T���G���-�I����t� Sq"6�e�m~,�$�O�we�����c��1|0����$��,�2#��lj��R<=Q�7*����"��V��x�k�� �-&_t_�J��� p�o—�y>�6&v&&�L�m�L\̺���ʲB��:�Q�&~^�����%��a��>�mr\��ۖDI��'���1�Ĥ�=��yѓ1�h�b��"܊�2�� ¦�P�E��#Tj ��Fa��p8��������y<���4�8�8����sp.$*H��+z`.��w5J�C�$&�C��c�%q���r�h�E��D��S��*��J�yr�NFc*c��2�i���Sn1�IT�RC��cj)�ILߋ#�&lg��Jb�%����I��@5��F8q1f���R,�eTė�ƙ�n*�s)@Nx �{�"�<ޚ? oj��a*9{:I�L5�����/�n�W@��(�U��k�$]�\�#p=�4�&�yY�5P?�c���)77��G�ԫ����_�;��h�.���=����D0�|����/�۩2��!�����"�KZg˜�W�,�`bU ~���$��6��rd}(�C�{� 5e��L��$,���Ԅ#=�����IP�`���n�9歨�n�C\V�0���^*��E2��}Iw�:5?8Iy� +�Ĭa��O��ұ�ʱ�S���1�1�#w�� �����Jְ�6%��?ʧ���m[S$���p�v���vʁ����L"�p���T +�P)�P2��|܏<@M�aj��P�{ ��8~�'�J���x�R�4�� �Y<���(�Njx��/�E ^��X���1xL4� +q�$���zVYUAȣ��fNk��E��t-�:�|$fdN]z �6������3�ȿME�ݻ$=�K-6E�Z��3��D/�f��~���>"��Q��( ���\��B�l#y�G�T�O�)} +��,�g4s�7{���E�&K�.�B +�&��9^$:d�� K�Q�?J��� c�`9���:��b-m��b����)� +���7@�)4%‰…�F�n�heh�h8ILF��BH̠�^"��oH��&oh'ڭ��PK�7�K" -PK�l4adChatterListLayout.class�S�n�P=��NӤI�J[��]�$�X�e� +�b�$��%�+�)�5���a[6�R�����qb��!��\���=������9����1��8��FVe���M��q +�d��ؐ�� =���S� B�ms��a9|�o7��g6�TI��a�u�~ݵ�\�;>����Y�N���=���Ê�ƯF@=������K�:�<~�=��7�wD�8�w|��z�vY|j���Y��3�lRg���ݐB�;N!I� +���3+�����}�VϿ�(��"㶂;�R�B#�$E%�,"C�F +�1,\Z��y�[T�E����1;��$_����<� +���!�j��Dr$A���^�]{9����-�ڇ6�ԩ�c�>�Y�u�-J�� �K�n�2�,��>ӆa~ +���X�yZ�1KRL!}63 +��HV���)?)�bf�;��n�_!�A,_�����b��#ҕ���RMx/�O~�Ԥ�E^�F�d:V�i+� +��ǃ<<�8�!T��/����3PK�l4adChatterScrollPane.class}U�r�T�%���Y��t!Pj+i��--N��`��!nR� K7��,YN��x +�"ϐ�2�C1�#űg����~���W���?�0���ۘM��X�+XP1�,��>�p�G��K^a[�k�D�� +���}o�G�@�c�/5d��� +s}��k|��[ +{�N��� S��A`_AEC� +l +�^•�i.7m��5 J�o:�[W����4��5LcFC��i�%��g�p)�� +���=�%"X���� ��<}��%�.��V�\���y����4��V�� ��F�⋓���{h8v�I�"�����wy]�k�m؞K^S�(�ʑmU�T�Ƣ*�J��/�� �|<ϗ(�L�L��"dE!�nj�3s��I����# K��{��?5A���&L�t��ݤ�T$a�����p����Z,]����;�߮���'/��$����0�F���;����|��Z }#��w��U��2���"ȼ���-���K=ѽ�u�U�wiW�=�z �.���~��]��!~~ Y�Ǭq��:oC(;����4ɛPH.�,����:��#z?&� ���o���Ls��n*9݂�B̫���{�x�Ʊ��xJy-� ���_�Q��"ˁ�qM��#o1/c!�9+: �z9#�g�'~ǥcL�p��+��!����}��w��4��ѕ��m�(�eܠ��` +O�a ��A&^���(��N��7�f�G�� +ʡH���O��PK� �s��PK�l4adClientSession.class�WyxT��ݗIޛ��6 ��#Z�@D�*��@��$�$,$��<�3��Y��-������jS���$5ui�������V[����U���&�!L���ǜs�9�{�w��S�>`�pyp +bn�A�A�A�A�� �g���n70���������&n�-*ޣ�V^��/n� ���ǔ;<��;��>7��.w{pb�a|@�A��zpix��a>����xp?>��0_�!�``𠆏h��W�c|�_�Ϝ�3x�� �OhxX�'5|�o���ϰ��j���kb��/xp�x��0�xD�5<��(���1��1x�� �T�e�����8��)����a&��ۍ>�.b&��%i�@��&�7��Yv]Cr�63f�L#h�H��N&�̤�̚�I��Y )�ƒ���7�w�$�N�]#LV�r�*�a��66YW�ԊX��fU�n�a��N���N +�����d�یu�!��QtV�PaԎ'����8���t������(�H�4#����7����ᤎ�3��?�$Y�A�]Ku��Z죳��L5�����?Q>�[�]m��+�t��?�)�ۚ:����,�! +lp�ϊ��)|\�d��𚎿�u���O�Kǿ�J��׈��28Q���enaC�6�#��m���O�ao�8��9A���M�J���Xe^���U�.��:��6d��̥��y\GG/�E���TdD��5&Hu՜\ãdB�Q��`Vo�,������L�R͍ɞ^�KXKN7h�8+=%�ZB�[�S>5Ky6��O����Ț4' +9�\V8�e2��3:s_������\C� R��蠖���fsR��.tz�ǎ��%�P|¬k��N�m��Z�Bv��,��j*��1X�֭ȕS*# +���U4[��xo2�w�=�_g�x�����ʺ٫L+4����9���(9�TH�q3��vm�!MAg�^��#�i�h7�j��K5k��e:�B~���MVc�_����T���� q��G�!�:���*2�C�e��}�U�?v��) �8�itR�4�H�����|�eZy�X��Z#�]g2ҝ9O��6� +�� +��5F,���C��0�H���dt%=]�J�J�;HW�J���ς)�Z�6+0��E13l����G�k�]���R�� 1�$�����V��� oIӻҘ� +�Ӂ��׃�fo�r.Z����E�'I>����a�jq +�<�j�1�󪀁Z�w 7o= +� ��Q\]�B �ײ�>T�B) I �lA9��ɎR��O@1��Q����s�u>�V���ZL�|z�/"��ĕ8��m�� )6���JҺ!Ǜ�(@>��`�(�:G��> +%��aT c;6��i��0���G�߯�#���4�#�>�s:�1�{n +3ɣ�����K���.�G +��Og\)\H� �w*��*�)ı���%|1G�� +5�KZ�@�\�Bi�ƙ*�2|�K�t���κ8�K��L,g˫SX� +�A<,yK$��i�4�)HL�yRX�_ƃe�{����]�\'�AZ8r�Xk���>��$o���;��j�rvE�,5�`e?���&�v��TZ��Q1��8��9�M�d��0#C'�jf�����Yj���\:K�p���i9���q���ށ}J/��8.�Sbc�W1�^��P�ҁ��������O�{1u���K�B$q��]�}XJ��u���|M�j��j<?��Mhų4i��Y�"͗Wh¼J��5�3�AT�S\��b!6��V4a�hA�`�����-� ����#�W�v1��1z����x Q�2b�M$ +}Jv*S�[���Jܨ��&enV��-J+nU6�6e nWL�I��S,�W��K9��)a�љP ����<�Q؛�� h( ���h�A�!��cc�H�B�l�iDz�j�I�$��+�t��D?B3�~�D�\��-PKx��  PK�l4adPrivateChatFrame.class�W�w��]li�յ- � �#�l�%����1��ŀkZkkm/H�BZ� I�-M��I��Aڤ-��&���Ц�О~�����==�����9��w����ܙ��ˍ�������C��t3<Άa��N��G>�=(0X 6C�� C����0TT�*Ü�'T��4C��I����TO�3<�,�>���*ֳ�z�S���y_T�_b8�p^��CxF�}�3�c8���lu>��~zV�W�Ͼ�{���U<�X� +�ċ,���%|�e��e���ūL��Ev䢂�|G�w���� +� ����SzU��眞Q�2�a�x���%C���cS%;�g%�i���-�6ՓL�F>'����0��XJ�"e��e'+�c[��Ҁ'"� k%9�玔�Rƚ�I*S�Y��dۅ�IV�>A^�fzƜ�iͰf�,;�Ś�đ�՝t�4,g�&'��]*�N�P��Ι9g� �2-��H'�Z�m��Zc�mG��vΠ0 +��q�R�4J���C$M ���S�i[�F��c���{*u��ZoQmM48� + o +���b��ٕҔ1d���s�%��;�b������V�� T�I��X��^ I��c������8��� ��c8,�~(�#���o/l���?��%�T� ��1(q�� +�nP��� +���e��|�` +�O�GbW)�+˜�v%��ZV�Tf{���S~��\��~-��K�������%NBW��?B��.+��ć��ħ9z��e��j� +����%���.q������YZ��`C���u��z�HT��A�l[!��n�Z�G�`*4�Z�Őc���4+h���գR6�1�,q� K$Ie�՚�X&��4�uK.�/�- +�i�����7]a�A�`Xe��O�R�����̬��+V�L���^����%���� E���f#!�����S��#��mmH�»�e���Ҏ�n6t +Bf��1�Prf�Z��������t�ɍ3=_^������):�1�m�N�ݐ�Z�.o�$N�oi��K�������S�+�Hd����n2o����9���N��D�rӠ�*nG�H�3�g�K�H���;y�hm��Ԧ���$��'�$ / �8 �K^��XĪx���hp\��Wb3� �������Mv���ek����Wb���"�$�8�ZM��0�B1q>&N���A�h������T�~ʻ�3b� +,`m�������ԫ�`Ѻ�'҂�T����"'iv2��m��+�T�&�V�MkIE�`*F�'�6��B�]�".�Ҋz +�i��#�.6��Җ��E�͑Y@�L�h�Z��=��tq/��7ߺ�nRkӢ���\l�G�I��E�xmY2���N�xr +�]��C� ���k�I_�m�QlC �S~w�g��X�G�Qm�S%uPլ� +YO����;}?bN��]wc��9l�bxI\D�D7.��лd;�������O��/<�����W(�%��'6c���ы~��8�"��"�!���yd���/^���-���q@,R�6�>�W(Y[E��N���T�.��ފ&�Cta��|���uU��}� ��b�K��(/����x�/N�e?8E�9M �h�^�5�I��̵��C� �e�;AcGg�"v�*�*�Q��khw��]��ΐ��Jz��\���Q"�F��܌�/^@ tw�)�����3�����PK���= +PK�l4adUserInfo.class��OKAƟq77muM��AuH�H:]� ;X^b�IFt��Cߪ��}��-�"��g�ݏϷw���"�r X1f՘5�6�ɣ��t_���'��`�hǑ'��8�c�x�U$�0]���t|&�_����;�9^S�5�Tt-{#Vj�Bt +#�'ѽ��fΓ���2x�L��6],"�"k�\�̺ +3�Uo��c�rR�a��"-G���RV������`�Uv≧O1�!O�1k1���W_L�2��)l����L_����#$�����S�ĨB�* {��}K�M��'ۯ2� �B~ �)�Q��s�/&)}PKB&kO:PK�l4adUserInfoExt.classeN�j�@=�D�Ę��w�׊i����n4c�G�\��E?����H�E��ǹ�˹\�����A݃��E�②*3Uh��� ��f�����ws����h����Ms������Q"���m�BO�<��?.vz!�e �y:Zqc�N��t�O\<���P��t+�ZoC�;F��:���i�z�b�m�A���Z� ��v�S +o�O:5 +F X~PK���e�PK�l4OneColumnLayout.class�S]oW={w�ˆ���|�@��JLBk�M�C�� %B +�6���Ի�נ��?�>��+H$�Z�H��v��uL�����s�33���?�X���\�q_l�����IK�1�EN��s���mA�u�7 5��� +!�l8�Z%��]ߍ��t��T�� �T]_��x�"�p�[s����kЉ*����tu�y�Z��(�G��7�݈�<*�e�� +�<��O����P<a(z���1��Gx?r�iX�ﺞ��n�� ���:�`��V�B��I +���B�i�:-'�����Ċ+ s��W�N�����v�i�y���Y�31�13���"n����L�P�p���X2�~4qG����.�SA2�=�������.)™�.<��5��_������y*p�!��P�jP��p.����(�ɠ~�*AGv�����<��\�|��?އ�n���v�1�|�Y�{�_�5?��B���n=j� 7��h�tm-3�z���W�';����F�毈_�5${ß�Ƌ[���]�8�7������7�c2�g I�82� �;6��DCU��t�6.��>f;��l�A�fsH�>��̧�'Vj�ƥ� ++�}$7�޳S��d��$���N��r�R���4[ۇ�;�ҧJ)[���b��B���ǩ��Ⱦ�Г'E�J��y�?z���l�� +��3���-�b�%W�0����E�4���Ma��q�.!G3X�Y������c���$3��I��w����H`x-�u?���+�wr�"%��K�I�*i�Mfok} {0,��y����PbEsG�K��#;u�6+�F��d`P���8�a�摡�:n�~�E<���-*�F7��l<��PK� Ue�PK�l4 META-INF/��PK�l4m���GG=META-INF/MANIFEST.MFPK�l4' ETI��adChatApplet$1.classPK�l4�A�ǫ"QadChatApplet.classPK�l4<��_��<adChatClient.classPK�l4&WC1}��adChatClientInfo.classPK�l4�$�w�adChatClientListener.classPK�l46 ��L� +�adChatDatasource.classPK�l4zN]K�t&adChatFormatMessage$1.classPK�l4˧2y0 �(adChatFormatMessage.classPK�l4��&4adChatLoginMessage.classPK�l4G����w8adChatMessage.classPK�l4�6�{ +z>adChatServer.classPK�l4LT��G�UDadChatSimpleXMLParser.classPK�l4�* +�^�FadChatSystemMessage.classPK�l4�0U?��NadChatterList$1.classPK�l4���E�-QadChatterList$2.classPK�l4�7�K" -�RadChatterList.classPK�l4�>��3^adChatterListLayout.classPK�l4� �s���`adChatterScrollPane.classPK�l4x��  �dadClientSession.classPK�l4���= +�madPrivateChatFrame.classPK�l4B&kO:TuadUserInfo.classPK�l4���e��vadUserInfoExt.classPK�l4� Ue��wOneColumnLayout.classPK��{ \ No newline at end of file Index: openacs-4/packages/chat/www/chat.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/chat.tcl,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/chat.tcl 11 Dec 2003 21:40:00 -0000 1.4 +++ openacs-4/packages/chat/www/chat.tcl 14 Mar 2006 12:16:09 -0000 1.5 @@ -9,7 +9,7 @@ } { room_id client - {message ""} + {message:html ""} } -properties { context_bar:onevalue user_id:onevalue @@ -26,7 +26,7 @@ } if { [catch {set room_name [chat_room_name $room_id]} errmsg] } { - ad_return_complaint 1 "Room not found, Invalid room id" + ad_return_complaint 1 "[_ chat.Room_not_found]" } set context_bar [list $room_name] @@ -54,23 +54,23 @@ # Get chat screen name. set user_name [chat_user_name $user_id] - # Determine which template to use for html or java client if {$client == "java"} { set template_use "java-chat" # Get config paramater for applet. - set width [ad_parameter AppletWidth "" 800] - set height [ad_parameter AppletHeight "" 600] - set host [ns_config "ns/server/[ns_info server]/module/nssock" Hostname] - set port [ad_parameter ServerPort] + set width [ad_parameter AppletWidth "" 500] + set height [ad_parameter AppletHeight "" 400] + + set host [ad_parameter ServerHost "" [ns_config "ns/server/[ns_info server]/module/nssock" Hostname]] + set port [ad_parameter ServerPort "" 8200] } else { set template_use "html-chat" chat_message_retrieve msgs $room_id $user_id if { ![empty_string_p $message] } { - chat_message_post $room_id $user_id $message $moderator_p + chat_message_post $room_id $user_id $message $moderator_p } Index: openacs-4/packages/chat/www/html-chat.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/html-chat.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/html-chat.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/html-chat.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -2,13 +2,13 @@ @context_bar;noquote@ @room_name;noquote@ -[Log off] +[#chat.Log_off#]
-Chat: +#chat.Chat#: - +
    Index: openacs-4/packages/chat/www/index-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/index-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/index-oracle.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,20 @@ + + +oracle8.1.6 + + + + select rm.room_id, rm.pretty_name, rm.description, rm.moderated_p, rm.active_p, rm.archive_p, + acs_permission.permission_p(room_id, :user_id, 'chat_room_admin') as admin_p, + acs_permission.permission_p(room_id, :user_id, 'chat_read') as user_p, + (select site_node.url(site_nodes.node_id) + from site_nodes + where site_nodes.object_id = obj.context_id) as base_url + from chat_rooms rm, acs_objects obj + where obj.context_id = :package_id + and rm.room_id = obj.object_id + order by rm.pretty_name + + + + \ No newline at end of file Index: openacs-4/packages/chat/www/index-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/index-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/index-postgresql.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,26 @@ + + + +postgresql7.1 + + + + select rm.room_id, + rm.pretty_name, + rm.description, + rm.moderated_p, + rm.active_p, + rm.archive_p, + acs_permission__permission_p(room_id, :user_id, 'chat_room_admin') as admin_p, + acs_permission__permission_p(room_id, :user_id, 'chat_read') as user_p, + (select site_node__url(site_nodes.node_id) + from site_nodes + where site_nodes.object_id = obj.context_id) as base_url + from chat_rooms rm, + acs_objects obj + where rm.room_id = obj.object_id + order by rm.pretty_name + + + + Index: openacs-4/packages/chat/www/index.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/index.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/index.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/index.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -7,28 +7,45 @@ --> @context_bar;noquote@ -Chat main page +#chat.Chat_main_page# + + -[Create a new room] +[#chat.Create_a_new_room#] -

    There are no rooms available. +

    #chat.There_are_no_rooms_available# - - - + + - - - + + + +

    @rooms.pretty_name@

    - [HTML chat] - [Java chat] - [room admin] + <% + set can_see 0 + if {($rooms(active_p) eq "t" && $rooms(user_p) eq "t") || ($rooms(admin_p) eq "t")} { + set can_see 1 + } + %> + +
    @rooms.pretty_name@ + [ HTML | java ] - @rooms.description@
    + + [#chat.room_admin#] + + + (NO #chat.Active#) + + <% set desc [string range $rooms(description) 0 50] %> + + @desc@ +
    Index: openacs-4/packages/chat/www/index.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/index.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/index.tcl 4 Sep 2002 08:12:50 -0000 1.2 +++ openacs-4/packages/chat/www/index.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -22,16 +22,10 @@ set room_create_p [ad_permission_p $package_id chat_room_create] -db_multirow rooms rooms_list { - select rm.room_id, rm.pretty_name, rm.description, rm.moderated_p, rm.active_p, rm.archive_p, - acs_permission.permission_p(room_id, :user_id, 'chat_room_admin') as admin_p - from chat_rooms rm, acs_objects obj - where obj.context_id = :package_id - and rm.room_id = obj.object_id - order by rm.pretty_name -} +db_multirow rooms rooms_list {} + ad_return_template Index: openacs-4/packages/chat/www/message-delete-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/message-delete-2.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/message-delete-2.tcl 11 Dec 2003 21:40:00 -0000 1.2 +++ openacs-4/packages/chat/www/message-delete-2.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -11,8 +11,9 @@ ad_require_permission $room_id chat_room_delete + if { [catch {chat_room_message_delete $room_id} errmsg] } { - ad_return_complaint 1 "Delete messages failed: $errmsg" + ad_return_complaint 1 "[_ chat.Delete_messages_failed]: $errmsg" } ad_returnredirect . \ No newline at end of file Index: openacs-4/packages/chat/www/message-delete.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/message-delete.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/message-delete.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/message-delete.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -7,10 +7,10 @@ --> @context_bar;noquote@ -Confirm message delete +#chat.Confirm_message_delete#

    -Are you sure you want to delete @message_count@ messages in @pretty_name@? -

    +#chat.Are_you_sure_you_want_to_delete# @message_count@ #chat.messages_in# @pretty_name@? +

    \ No newline at end of file Index: openacs-4/packages/chat/www/message-delete.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/message-delete.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/message-delete.tcl 4 Sep 2002 08:12:50 -0000 1.2 +++ openacs-4/packages/chat/www/message-delete.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -16,7 +16,7 @@ ad_require_permission $room_id chat_room_delete -set context_bar [list [list "room?room_id=$room_id" "Room information"] "Delete messages"] +set context_bar [list [list "room?room_id=$room_id" "[_ chat.Room_Information]"] "[_ chat.Delete_messages]"] set pretty_name [chat_room_name $room_id] Index: openacs-4/packages/chat/www/moderator-grant-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/moderator-grant-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/moderator-grant-oracle.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,14 @@ + + +oracle8.1.6 + + + + + select party_id, acs_object.name(party_id) as name + from parties + + + + + Index: openacs-4/packages/chat/www/moderator-grant-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/moderator-grant-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/moderator-grant-postgresql.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,12 @@ + + +postgresql7.1 + + + + select party_id, acs_object__name(party_id) as name + from parties + + + + Index: openacs-4/packages/chat/www/moderator-grant.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/moderator-grant.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/moderator-grant.tcl 4 Sep 2002 08:12:50 -0000 1.2 +++ openacs-4/packages/chat/www/moderator-grant.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -19,15 +19,12 @@ ad_require_permission $room_id chat_moderator_grant -set context_bar [list "Grant moderator"] -set submit_label "Grant" -set title "Grant moderator" +set context_bar [list "[_ chat.Grant_moderator]"] +set submit_label "[_ chat.Grant]" +set title "[_ chat.Grant_moderator]" set action "moderator-grant-2" -set description "Grant moderator for [chat_room_name $room_id] to" -db_multirow parties list_parties { - select party_id, acs_object.name(party_id) as name - from parties -} +set description "[_ chat.Grant_moderator_for] [chat_room_name $room_id] [_ chat.to]" +db_multirow parties list_parties {} ad_return_template grant-entry Index: openacs-4/packages/chat/www/moderator-revoke-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/moderator-revoke-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/moderator-revoke-oracle.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,13 @@ + + +oracle8.1.6 + + + + + select acs_object.name(:party_id) from dual + + + + + Index: openacs-4/packages/chat/www/moderator-revoke-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/moderator-revoke-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/moderator-revoke-postgresql.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,11 @@ + + +postgresql7.1 + + + + select acs_object__name(:party_id) from dual + + + + Index: openacs-4/packages/chat/www/moderator-revoke.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/moderator-revoke.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/moderator-revoke.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/moderator-revoke.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -7,11 +7,11 @@ --> @context_bar;noquote@ -Confirm revoke moderator +#chat.Confirm_revoke_moderator#
    -Are you sure you want to revoke moderator privilege of @party_pretty_name@ from @pretty_name@? -

    +#chat.Are_you_sure_you_want_to_revoke_moderator# @party_pretty_name@ #chat.from# @pretty_name@? +

    \ No newline at end of file Index: openacs-4/packages/chat/www/moderator-revoke.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/moderator-revoke.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/moderator-revoke.tcl 4 Sep 2002 08:12:50 -0000 1.2 +++ openacs-4/packages/chat/www/moderator-revoke.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -13,9 +13,9 @@ ad_require_permission $room_id chat_moderator_revoke -set context_bar [list [list "room?room_id=$room_id" "Room information"] "Revoke moderator"] +set context_bar [list [list "room?room_id=$room_id" "[_ chat.Room_Information]"] "[_ chat.Revoke_moderator]"] -set party_pretty_name [db_string get_party_name "select acs_object.name(:party_id) from dual"] +set party_pretty_name [db_string get_party_name {}] set pretty_name [chat_room_name $room_id] Index: openacs-4/packages/chat/www/noactive.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/noactive.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/noactive.adp 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,12 @@ + + +@context_bar;noquote@ +#chat.Room_no_active# + +#chat.Room_no_active#. Index: openacs-4/packages/chat/www/noactive.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/noactive.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/noactive.tcl 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,14 @@ +#/chat/www/noactive.tcl +ad_page_contract { + Display noactive room message. + + @author Agustin Lopez (Agustin.Lopez@uv.es) + @creation-date October 10, 2004 + @cvs-id $Id: noactive.tcl,v 0.1d 2004/10/10 +} -properties { + context_bar:onevalue +} + +set context_bar [list "[_ chat.Unauthorized_privilege]"] + +ad_return_template Index: openacs-4/packages/chat/www/person.gif =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/person.gif,v diff -u Binary files differ Index: openacs-4/packages/chat/www/room-delete-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/room-delete-2.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/room-delete-2.tcl 11 Dec 2003 21:40:00 -0000 1.2 +++ openacs-4/packages/chat/www/room-delete-2.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -12,7 +12,7 @@ ad_require_permission $room_id chat_room_delete if { [catch {chat_room_delete $room_id} errmsg] } { - ad_return_complaint 1 "Delete room failed: $errmsg" + ad_return_complaint 1 "[_ chat.Delete_room_failed]: $errmsg" } ad_returnredirect . Index: openacs-4/packages/chat/www/room-delete.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/room-delete.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/room-delete.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/room-delete.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -7,12 +7,12 @@ --> @context_bar;noquote@ -Confirm room delete +#chat.Confirm_room_delete#
    -Are you sure you want to delete @pretty_name@? -

    +#chat.Are_you_sure_you_want_to_delete# @pretty_name@? +

    Index: openacs-4/packages/chat/www/room-delete.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/room-delete.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/room-delete.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/room-delete.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -15,7 +15,7 @@ ad_require_permission $room_id chat_room_delete -set context_bar [list [list "room?room_id=$room_id" "Room information"] "Delete room"] +set context_bar [list [list "room?room_id=$room_id" "[_ chat.Room_Information]"] "[_ chat.Delete_room]"] set pretty_name [chat_room_name $room_id] Index: openacs-4/packages/chat/www/room-edit-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/room-edit-2.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/chat/www/room-edit-2.tcl 11 Dec 2003 21:40:00 -0000 1.3 +++ openacs-4/packages/chat/www/room-edit-2.tcl 14 Mar 2006 12:16:09 -0000 1.4 @@ -11,14 +11,17 @@ {description:trim ""} {moderated_p "f"} {archive_p "f"} - {active_p "t"} + {active_p "f"} } ad_require_permission $room_id chat_room_edit +ns_log notice "receive: moderated_p:$moderated_p archive_p:$archive_p active_p:$active_p" + + if {[catch {chat_room_edit $room_id $pretty_name $description $moderated_p $active_p $archive_p} errmsg]} { - ad_return_complaint 1 "Could not update room: $errmsg" + ad_return_complaint 1 "[_ chat.Could_not_update_room]: $errmsg" } Index: openacs-4/packages/chat/www/room-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/room-edit.tcl,v diff -u -r1.3 -r1.4 --- openacs-4/packages/chat/www/room-edit.tcl 11 Dec 2003 21:40:00 -0000 1.3 +++ openacs-4/packages/chat/www/room-edit.tcl 14 Mar 2006 12:16:09 -0000 1.4 @@ -16,24 +16,27 @@ pretty_name:onevalue description:onevalue moderated_p:onevalue + active_p:onevalue room:onerow } ad_require_permission $room_id chat_room_edit if {[catch {db_1row room_info { - select pretty_name, description, moderated_p, archive_p, active_p + select pretty_name, description, moderated_p, archive_p, active_p from chat_rooms where room_id = :room_id}} errmsg]} { - ad_return_complaint 1 "Room not found." + ad_return_complaint 1 "[_ chat.Room_not_found]." } +ns_log notice "send: moderated_p:$moderated_p archive_p:$archive_p active_p:$active_p" + set context_bar [list "Edit room '$pretty_name'"] set title "Edit room '$pretty_name'" set action "room-edit-2" -set submit_label "Update room" +set submit_label "[_ chat.Update_room]" ad_return_template "room-entry" Index: openacs-4/packages/chat/www/room-enter.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/room-enter.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/room-enter.tcl 18 Sep 2002 13:03:47 -0000 1.2 +++ openacs-4/packages/chat/www/room-enter.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -13,17 +13,21 @@ chat_start_server set user_id [ad_conn user_id] -set read_p [ad_permission_p $room_id "chat_read"] +set read_p [ad_permission_p $room_id "chat_read"] set write_p [ad_permission_p $room_id "chat_write"] -set ban_p [ad_permission_p $room_id "chat_ban"] +set ban_p [ad_permission_p $room_id "chat_ban"] +set active [room_active_status $room_id] -if { ($read_p == "0" && $write_p == "0") || ($ban_p == "1") } { + +if { ($read_p == "0" && $write_p == "0") || ($ban_p == "1") || ($active == "f") } { #Display unauthorize privilege page. ad_returnredirect unauthorized ad_script_abort } if {$client == "html"} { - chat_message_post $room_id $user_id "has entered the room." "1" + + + chat_message_post $room_id $user_id "[_ chat.has_entered_the_room]." "1" } ad_returnredirect "chat?room_id=$room_id&client=$client" Index: openacs-4/packages/chat/www/room-entry.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/room-entry.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/room-entry.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/room-entry.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -14,35 +14,42 @@
    - + - + - + + + + + + + + + + + + + + - + - + Index: openacs-4/packages/chat/www/room-exit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/room-exit.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/room-exit.tcl 18 Sep 2002 13:03:47 -0000 1.2 +++ openacs-4/packages/chat/www/room-exit.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -22,6 +22,7 @@ ad_script_abort } -chat_message_post $room_id $user_id "has left the room." "1" +chat_message_post $room_id $user_id "[_ chat.has_left_the_room]." "1" -ad_returnredirect index +#ad_returnredirect index +ad_returnredirect [dotlrn::get_url] Index: openacs-4/packages/chat/www/room-new-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/room-new-2.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/room-new-2.tcl 11 Dec 2003 21:40:00 -0000 1.2 +++ openacs-4/packages/chat/www/room-new-2.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -25,10 +25,22 @@ -archive_p $archive_p \ -context_id $package_id \ -creation_user $user_id \ - -creation_ip $creation_ip $pretty_name]} errmsg]} { - ad_return_complaint 1 "Create new room failed: $errmsg" + -creation_ip $creation_ip $pretty_name]} errmsg]} { + ad_return_complaint 1 "[_ chat.Create_new_room_failed]: $errmsg" } +set comm_id [dotlrn_community::get_community_id] +if {$comm_id ne ""} { + chat_user_grant $room_id [dotlrn_community::get_community_id] +} else { + #-2 Registered Users + #chat_user_grant $room_id -2 + #0 Unregistered Visitor + #chat_user_grant $room_id 0 + #-1 The Public + chat_user_grant $room_id -1 +} + ad_returnredirect "room?room_id=$room_id" Index: openacs-4/packages/chat/www/room-new.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/room-new.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/room-new.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/room-new.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -18,10 +18,10 @@ ad_require_permission [ad_conn package_id] chat_room_create -set context_bar [list "Create a room"] -set title "Create a room" +set context_bar [list "[_ chat.Create_a_room]"] +set title "[_ chat.Create_a_room]" set action "room-new-2" -set submit_label "Create room" +set submit_label "[_ chat.Create_room]" set pretty_name "" set description "" set moderated_p "f" Index: openacs-4/packages/chat/www/room-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/room-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/room-oracle.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,51 @@ + + +oracle8.1.6 + + + + + select party_id, acs_object.name(party_id) as name + from acs_object_party_privilege_map + where object_id = :room_id + and privilege = 'chat_room_moderate' + + + + + + select distinct party_id, acs_object.name(party_id) as name + from acs_object_party_privilege_map + where object_id = :room_id + and (privilege = 'chat_read' or privilege = 'chat_write') + + + + + + + select party_id, acs_object.name(party_id) as name + from acs_object_party_privilege_map + where object_id = :room_id + and privilege = 'chat_ban' + + + + + + + select transcript_id, pretty_name + from chat_transcripts + where room_id = :room_id + + + + + + + + + + + + Index: openacs-4/packages/chat/www/room-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/room-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/room-postgresql.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,50 @@ + + +postgresql7.1 + + + + select party_id, acs_object__name(party_id) as name + from acs_object_party_privilege_map + where object_id = :room_id + and privilege = 'chat_room_moderate' + + + + + + select distinct party_id, acs_object__name(party_id) as name + from acs_object_party_privilege_map + where object_id = :room_id + and (privilege = 'chat_read' or privilege = 'chat_write') + + + + + + + select party_id, acs_object__name(party_id) as name + from acs_object_party_privilege_map + where object_id = :room_id + and privilege = 'chat_ban' + + + + + + + select transcript_id, pretty_name + from chat_transcripts + where room_id = :room_id + + + + + + + + + + + + Index: openacs-4/packages/chat/www/room.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/room.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/room.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/room.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -7,78 +7,86 @@ --> @context_bar;noquote@ -Room Information +#chat.Room_Information# -

    Room information

    +

    #chat.Room_Information#

      -
    • Room name: @pretty_name@ -
    • Description:
      @description@
      -
    • Moderated: @moderated_p@ -
    • Active: @active_p@ -
    • Archive: @archive_p@ +
    • #chat.Room_name#: @pretty_name@ +
    • #chat.Description#:
      @description@
      + +
    • #chat.Active#: @active_p@ +
    • #chat.Archive#: @archive_p@ -

      (Edit) +

      (#chat.Edit#)

    -

    No information available. +

    #chat.No_information_available#. -

    Users allow +

    #chat.Users_allow#

    -Users ban +#chat.Users_ban# -Room moderators + + + + + +

    #chat.Transcripts#

    -

    Extreme Actions +

    #chat.Extreme_Actions#

    Index: openacs-4/packages/chat/www/room.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/room.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/room.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/room.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -33,7 +33,7 @@ chat_transcripts:multirow } -set context_bar [list "Room information"] +set context_bar [list "[_ chat.Room_Information]"] ### @@ -60,44 +60,34 @@ ### # Get room basic information. ### + + +#db_1row room_info { +# select pretty_name, description, decode(moderated_p, 't', 'Yes', 'No') as moderated_p, +# decode(archive_p, 't', 'Yes', 'No') as archive_p, +# decode(active_p, 't', 'Yes', 'No') as active_p +# from chat_rooms +# where room_id = :room_id +#} + db_1row room_info { - select pretty_name, description, decode(moderated_p, 't', 'Yes', 'No') as moderated_p, - decode(archive_p, 't', 'Yes', 'No') as archive_p, - decode(active_p, 't', 'Yes', 'No') as active_p + select pretty_name, description, moderated_p, active_p, archive_p from chat_rooms where room_id = :room_id } - # List available room moderators. -db_multirow moderators list_moderators { - select party_id, acs_object.name(party_id) as name - from acs_object_party_privilege_map - where object_id = :room_id - and privilege = 'chat_room_moderate' -} +db_multirow moderators list_moderators {} # List authorized chat users. -db_multirow users_allow list_user_allow { - select distinct party_id, acs_object.name(party_id) as name - from acs_object_party_privilege_map - where object_id = :room_id - and (privilege = 'chat_read' or privilege = 'chat_write') -} +db_multirow users_allow list_user_allow {} + # List user ban from chat -db_multirow users_ban list_user_allow { - select party_id, acs_object.name(party_id) as name - from acs_object_party_privilege_map - where object_id = :room_id - and privilege = 'chat_ban' -} +db_multirow users_ban list_user_ban {} + # List available chat transcript -db_multirow chat_transcripts list_transcripts { - select transcript_id, pretty_name - from chat_transcripts - where room_id = :room_id -} +db_multirow chat_transcripts list_transcripts {} ad_return_template Index: openacs-4/packages/chat/www/search-2.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/search-2.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/search-2.adp 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,30 @@ + +#chat.Add_user_to_room# +@context;noquote@ + + + + #dotlrn.lt_The_results_of_your_s#
    + (#chat.What_search# @SQL_LIMIT@) +
    + + for email "@email@" + + for last name "@last_name@" + + + + Index: openacs-4/packages/chat/www/search-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/search-2.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/search-2.tcl 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,146 @@ +ad_page_contract { + +} { + {email ""} + {last_name ""} + keyword:optional + target + type:notnull + room_id:notnull + {passthrough ""} + {limit_users_in_group_id ""} +} -properties { + group_name:onevalue + search_type:onevalue + keyword:onevalue + email:onevalue + last_name:onevalue + export_authorize:onevalue + passthrough_parameters:onevalue + context:onevalue +} + +# Check input. +set exception_count 0 +set exception_text "" +set SQL_LIMIT 10 + +set context [list [list "./" "Users"] "Search"] + +if [info exists keyword] { + # this is an administrator + if { [empty_string_p $keyword] } { + incr exception_count + append exception_text "
  • You forgot to type a search string!\n" + } +} else { + # from one of the user pages + if { (![info exists email] || [empty_string_p $email]) && \ + (![info exists last_name] || [empty_string_p $last_name]) } { + incr exception_count + append exception_text "
  • You must specify either an email address or last name to search for.\n" + } + + if { [info exists email] && [info exists last_name] && \ + ![empty_string_p $email] && ![empty_string_p $last_name] } { + incr exception_count + append exception_text "
  • You can only specify either email or last name, not both.\n" + } + + if { ![info exists target] || [empty_string_p $target] } { + incr exception_count + append exception_text "
  • Target was not specified. This shouldn't have happened, +please contact the administrator +and let them know what happened.\n" + } +} + +if { $exception_count != 00 } { + ad_return_complaint $exception_count $exception_text + return +} + +#### +# Input okay. Now start building the SQL + +set where_clause [list] +if { [info exists keyword] } { + set search_type "keyword" + set sql_keyword "%[string tolower $keyword]%" + lappend where_clause "(username like :sql_keyword or email like :sql_keyword or lower(first_names || ' ' || last_name) like :sql_keyword)" +} elseif { [info exists email] && ![empty_string_p $email] } { + set search_type "email" + set sql_email "%[string tolower $email]%" + lappend where_clause "email like :sql_email" +} else { + set search_type "last" + set sql_last_name "%[string tolower $last_name]%" + lappend where_clause "lower(last_name) like :sql_last_name" +} + +lappend where_clause {member_state = 'approved'} + +if { ![info exists passthrough] } { + set passthrough_parameters "" +} else { + set passthrough_parameters "[export_entire_form_as_url_vars $passthrough]" +} + +if { [exists_and_not_null limit_to_users_in_group_id] } { +set query "select distinct first_names, last_name, email, member_state, email_verified_p, cu.user_id +from cc_users cu, group_member_map gm, membership_rels mr +where cu.user_id = gm.member_id + and gm.rel_id = mr.rel_id + and gm.group_id = :limit_to_users_in_group_id + and [join $where_clause "\nand "]" + +} else { +set query "select username, user_id, email_verified_p, first_names, last_name, email, member_state +from cc_users +where [join $where_clause "\nand "]" +} + +set i 0 + +set user_items "" + +set rowcount 0 +set only_authorized_p 1 + +db_foreach user_search_admin $query { + incr rowcount + + set user_id_from_search $user_id + set first_names_from_search $first_names + set last_name_from_search $last_name + set email_from_search $email + + set user_search:[set rowcount](user_id) $user_id + set user_search:[set rowcount](first_names) $first_names + set user_search:[set rowcount](last_name) $last_name + set user_search:[set rowcount](email) $email + set user_search:[set rowcount](export_vars) [export_url_vars user_id_from_search first_names_from_search last_name_from_search email_from_search] + set user_search:[set rowcount](member_state) $member_state + + + if { $member_state != "approved" } { + set user_search:[set rowcount](user_finite_state_links) [join [ad_registration_finite_state_machine_admin_links $member_state $email_verified_p $user_id_from_search "search?[export_url_vars email last_name keyword target passthrough limit_users_in_group_id only_authorized_p]"] " | "] + } else { + set user_search:[set rowcount](user_finite_state_links) "" + } +} + +set user_search:rowcount $rowcount + +# We are limiting the search to one group - display that group's name +if { [exists_and_not_null limit_to_users_in_group_id] && ![regexp {[^0-9]} $limit_to_users_in_group_id] } { + set group_name [db_string user_group_name_from_id "select group_name from user_groups where group_id = :limit_to_users_in_group_id"] + set title "User search in $group_name" +} else { + set group_name "" + set title "User search" +} + +set export_authorize [export_ns_set_vars {url} {only_authorized_p}] + +ad_return_template Index: openacs-4/packages/chat/www/search-3.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/search-3.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/search-3.tcl 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,17 @@ +ad_page_contract { + +} { + type:notnull + room_id:integer,notnull + party_id:integer,notnull +} + +if {[string equal $type "user"] == 1} { + ad_require_permission $room_id chat_user_grant + chat_user_grant $room_id $party_id +} else { + ad_require_permission $room_id chat_user_ban + chat_user_ban $room_id $party_id +} +ad_returnredirect "room?room_id=$room_id" + Index: openacs-4/packages/chat/www/search.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/search.adp,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/search.adp 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,12 @@ + +#chat.Add_user_to_room# +@context;noquote@ + +
    + + + + + + + Index: openacs-4/packages/chat/www/search.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/search.tcl,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/search.tcl 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,29 @@ +ad_page_contract { + +} { + type:notnull + room_id:notnull +} + +set context [list "Users"] + +db_1row users_n_users {} + +set n_users [util_commify_number $n_users] +set last_registration [lc_time_fmt $last_registration "%q"] + +set groups [db_html_select_value_options groups_select { + select groups.group_id, + groups.group_name, + m.num as n_members, + c.num as n_components + from groups, + (select group_id, count(*) as num + from group_member_map group by group_id) m, + (select group_id, count(*) as num + from group_component_map group by group_id) c + where groups.group_id=m.group_id + and groups.group_id = c.group_id + order by group_name +} ] + Index: openacs-4/packages/chat/www/search.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/search.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/search.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,15 @@ + + + + + + select count(user_id) as n_users, + max(creation_date) as last_registration + from users u, + acs_objects o + where o.object_id = u.user_id + and user_id <> 0 + + + + Index: openacs-4/packages/chat/www/transcript-delete-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/transcript-delete-2.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/transcript-delete-2.tcl 11 Dec 2003 21:40:00 -0000 1.2 +++ openacs-4/packages/chat/www/transcript-delete-2.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -9,8 +9,10 @@ ad_require_permission $transcript_id chat_transcript_delete + + if { [catch {chat_transcript_delete $transcript_id} errmsg] } { - ad_return_complaint 1 "Delete transcript failed: $errmsg" + ad_return_complaint 1 "[_ chat.Delete_transcript_failed]: $errmsg" } ad_returnredirect "room?room_id=$room_id" Index: openacs-4/packages/chat/www/transcript-delete.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/transcript-delete.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/transcript-delete.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/transcript-delete.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -7,11 +7,11 @@ --> @context_bar;noquote@ -Confirm chat transcript delete +#chat.Confirm_chat_transcript_delete#
    -Are you sure you want to delete Replace with transcript name? -

    +#chat.Are_you_sure_you_want_to_delete# Replace with transcript name? +

    \ No newline at end of file Index: openacs-4/packages/chat/www/transcript-delete.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/transcript-delete.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/transcript-delete.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/transcript-delete.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -16,5 +16,5 @@ ad_require_permission $transcript_id chat_transcript_delete -set context_bar [list "Delete transcript"] +set context_bar [list "[_ chat.Delete_transcript]"] ad_return_template Index: openacs-4/packages/chat/www/transcript-edit-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/transcript-edit-2.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/transcript-edit-2.tcl 11 Dec 2003 21:40:00 -0000 1.2 +++ openacs-4/packages/chat/www/transcript-edit-2.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -15,8 +15,9 @@ ad_require_permission $transcript_id chat_transcript_edit + if { [catch {chat_transcript_edit $transcript_id $transcript_name $description $contents} errmsg] } { - ad_return_complaint 1 "Could not update transcript: $errmsg" + ad_return_complaint 1 "[_ chat.Could_not_update_transcript]: $errmsg" } ad_returnredirect "transcript-view?transcript_id=$transcript_id&room_id=$room_id" \ No newline at end of file Index: openacs-4/packages/chat/www/transcript-edit.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/transcript-edit.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/transcript-edit.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/transcript-edit.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -21,11 +21,11 @@ } ad_require_permission $transcript_id chat_transcript_edit -set context_bar [list "Edit transcript"] +set context_bar [list "[_ chat.Edit_transcript]"] -set title "Edit transcript" +set title "[_ chat.Edit_transcript]" set action "transcript-edit-2" -set submit_label "Edit" +set submit_label "[_ chat.Edit]" db_1row get_transcript_info { select pretty_name as transcript_name, Index: openacs-4/packages/chat/www/transcript-entry.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/transcript-entry.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/transcript-entry.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/transcript-entry.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -14,15 +14,15 @@

  • Room name:#chat.Room_name#:
    Description:#chat.Description#:
    #chat.Active#:
    Archive:#chat.Archive#:
    - + - + - + Index: openacs-4/packages/chat/www/transcript-new-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/transcript-new-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/transcript-new-oracle.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,17 @@ + + +oracle8.1.6 + + + + + select msg, person.name(creation_user) as name + from chat_msgs + where room_id = :room_id + and msg is not null + order by msg_id + + + + + Index: openacs-4/packages/chat/www/transcript-new-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/transcript-new-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/transcript-new-postgresql.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,15 @@ + + +postgresql7.1 + + + + select msg, person__name(creation_user) as name + from chat_msgs + where room_id = :room_id + and msg is not null + order by msg_id + + + + Index: openacs-4/packages/chat/www/transcript-new.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/transcript-new.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/transcript-new.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/transcript-new.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -16,24 +16,18 @@ ad_require_permission $room_id chat_transcript_create -set context_bar [list [list "room?room_id=$room_id" "Room Information"] "Create transcript"] +set context_bar [list [list "room?room_id=$room_id" "[_ chat.Room_Information]"] "[_ chat.Create_transcript]"] set transcript_id "" -set transcript_name "Untitled" +set transcript_name "[_ chat.Untitled]" set description "" set contents "" set action "transcript-new-2" -set title "Create transcript" -set submit_label "Create transcript" +set title "[_ chat.Create_transcript]" +set submit_label "[_ chat.Create_transcript]" #Build a list of all message. -db_foreach get_archives_messages { - select msg, person.name(creation_user) as name - from chat_msgs - where room_id = :room_id - and msg is not null - order by msg_id -} { +db_foreach get_archives_messages {} { append contents "$name: $msg
    \n" } Index: openacs-4/packages/chat/www/transcript-view.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/transcript-view.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/transcript-view.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/transcript-view.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -7,17 +7,13 @@ --> @context_bar;noquote@ -Transcript preview +#chat.Transcript_preview# -[Edit] +[#chat.Edit#]
      -
    • Name: @transcript_name@ -
    • Description: @description@ -
    • Contents: - -
        -

        @contents@ +

      • #chat.Name#: @transcript_name@
      • +
      • #chat.Description#: @description@
      • +
      • #chat.Contents#:

        @contents@

      -
    Index: openacs-4/packages/chat/www/transcript-view.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/transcript-view.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/transcript-view.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/transcript-view.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -18,7 +18,7 @@ ad_require_permission $transcript_id chat_transcript_view -set context_bar [list "View transcript"] +set context_bar [list "[_ chat.View_transcript]"] db_1row get_transcript { select pretty_name as transcript_name, description, Index: openacs-4/packages/chat/www/unauthorized.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/unauthorized.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/unauthorized.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/unauthorized.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -7,6 +7,6 @@ --> @context_bar;noquote@ -Unauthorized +#chat.Unauthorized# -You don't have permission to enter this chat room. +#chat.You_dont_have_permission_room#. Index: openacs-4/packages/chat/www/unauthorized.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/unauthorized.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/unauthorized.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/unauthorized.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -9,6 +9,6 @@ context_bar:onevalue } -set context_bar [list "Unauthorized privilege"] +set context_bar [list "[_ chat.Unauthorized_privilege]"] ad_return_template \ No newline at end of file Index: openacs-4/packages/chat/www/user-ban-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-ban-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/user-ban-oracle.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,14 @@ + + +oracle8.1.6 + + + + + select party_id, acs_object.name(party_id) as name + from parties + + + + + Index: openacs-4/packages/chat/www/user-ban-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-ban-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/user-ban-postgresql.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,12 @@ + + +postgresql7.1 + + + + select party_id, acs_object__name(party_id) as name + from parties + + + + Index: openacs-4/packages/chat/www/user-ban.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/user-ban.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/user-ban.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/user-ban.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -20,14 +20,11 @@ ad_require_permission $room_id chat_user_ban -set context_bar [list "Ban user"] -set submit_label "Ban" -set title "Ban user" +set context_bar [list "[_ chat.Ban_user]"] +set submit_label "[_ chat.Ban]" +set title "[_ chat.Ban_user]" set action "user-ban-2" -set description "Ban chat read/write privilege for [chat_room_name $room_id] to" -db_multirow parties list_parties { - select party_id, acs_object.name(party_id) as name - from parties -} +set description "[_ chat.Ban_chat_read_write] [chat_room_name $room_id] [_ chat.to]" +db_multirow parties list_parties {} ad_return_template grant-entry Index: openacs-4/packages/chat/www/user-grant-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-grant-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/user-grant-oracle.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,14 @@ + + +oracle8.1.6 + + + + + select party_id, acs_object.name(party_id) as name + from parties + + + + + Index: openacs-4/packages/chat/www/user-grant-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-grant-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/user-grant-postgresql.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,12 @@ + + +postgresql7.1 + + + + select party_id, acs_object__name(party_id) as name + from parties + + + + Index: openacs-4/packages/chat/www/user-grant.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-grant.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/user-grant.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/user-grant.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -20,15 +20,12 @@ ad_require_permission $room_id chat_user_grant -set context_bar [list "Grant user"] -set submit_label "Grant" -set title "Grant user" +set context_bar [list "[_ chat.Grant_user]"] +set submit_label "[_ chat.Grant]" +set title "[_ chat.Grant_user]" set action "user-grant-2" -set description "Grant chat read/write privilege for [chat_room_name $room_id] to" -db_multirow parties list_parties { - select party_id, acs_object.name(party_id) as name - from parties -} +set description "[_ chat.Grant_chat_read_rite_privilege_for] [chat_room_name $room_id] [_ chat.to]" +db_multirow parties list_parties { } ad_return_template grant-entry Index: openacs-4/packages/chat/www/user-revoke-2.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-revoke-2.tcl,v diff -u -r1.1 -r1.2 --- openacs-4/packages/chat/www/user-revoke-2.tcl 20 Apr 2001 20:51:08 -0000 1.1 +++ openacs-4/packages/chat/www/user-revoke-2.tcl 14 Mar 2006 12:16:09 -0000 1.2 @@ -15,4 +15,4 @@ chat_user_revoke $room_id $party_id -ad_returnredirect "room?room_id=$room_id" \ No newline at end of file +ad_returnredirect "room?room_id=$room_id" Index: openacs-4/packages/chat/www/user-revoke-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-revoke-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/user-revoke-oracle.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,13 @@ + + +oracle8.1.6 + + + + + select acs_object.name(:party_id) from dual + + + + + Index: openacs-4/packages/chat/www/user-revoke-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-revoke-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/user-revoke-postgresql.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,11 @@ + + +postgresql7.1 + + + + select acs_object__name(:party_id) from dual + + + + Index: openacs-4/packages/chat/www/user-revoke.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-revoke.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/user-revoke.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/user-revoke.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -7,12 +7,12 @@ --> @context_bar;noquote@ -Confirm revoke user +#chat.Confirm_revoke_user#
    -Are you sure you want to revoke chat user privilege of @party_pretty_name@ from @pretty_name@? -

    +#chat.Are_you_sure_you_want_to_revoke# @party_pretty_name@ #chat.from# @pretty_name@? +

    Index: openacs-4/packages/chat/www/user-revoke.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-revoke.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/user-revoke.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/user-revoke.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -13,9 +13,9 @@ ad_require_permission $room_id chat_user_revoke -set context_bar [list [list "room?room_id=$room_id" "Room information"] "Revoke user"] +set context_bar [list [list "room?room_id=$room_id" "[_ chat.Room_Information]"] "[_ chat.Revoke_user]"] -set party_pretty_name [db_string get_party_name "select acs_object.name(:party_id) from dual"] +set party_pretty_name [db_string get_party_name {} ] set pretty_name [chat_room_name $room_id] Index: openacs-4/packages/chat/www/user-unban-oracle.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-unban-oracle.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/user-unban-oracle.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,13 @@ + + +oracle8.1.6 + + + + + select acs_object.name(:party_id) from dual + + + + + Index: openacs-4/packages/chat/www/user-unban-postgresql.xql =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/Attic/user-unban-postgresql.xql,v diff -u --- /dev/null 1 Jan 1970 00:00:00 -0000 +++ openacs-4/packages/chat/www/user-unban-postgresql.xql 14 Mar 2006 12:16:09 -0000 1.1 @@ -0,0 +1,11 @@ + + +postgresql7.1 + + + + select acs_object__name(:party_id) from dual + + + + Index: openacs-4/packages/chat/www/user-unban.adp =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/user-unban.adp,v diff -u -r1.4 -r1.5 --- openacs-4/packages/chat/www/user-unban.adp 22 May 2003 14:26:08 -0000 1.4 +++ openacs-4/packages/chat/www/user-unban.adp 14 Mar 2006 12:16:09 -0000 1.5 @@ -7,11 +7,12 @@ --> @context_bar;noquote@ -Confirm unban user +#chat.Confirm_unban_user# -
    + -Are you sure you want to unban @party_pretty_name@ from @pretty_name@? -

    +#chat.Are_you_sure_you_want_to_unban# @party_pretty_name@ #chat.from# @pretty_name@? +

    + Index: openacs-4/packages/chat/www/user-unban.tcl =================================================================== RCS file: /usr/local/cvsroot/openacs-4/packages/chat/www/user-unban.tcl,v diff -u -r1.2 -r1.3 --- openacs-4/packages/chat/www/user-unban.tcl 4 Sep 2002 08:12:51 -0000 1.2 +++ openacs-4/packages/chat/www/user-unban.tcl 14 Mar 2006 12:16:09 -0000 1.3 @@ -13,10 +13,11 @@ ad_require_permission $room_id chat_user_unban -set context_bar [list [list "room?room_id=$room_id" "Room information"] "Unban user"] +set context_bar [list [list "room?room_id=$room_id" "[_ chat.Room_Information]"] "[_ chat.Unban_user]"] -set party_pretty_name [db_string get_party_name "select acs_object.name(:party_id) from dual"] +set party_pretty_name [db_string get_party_name {}] + set pretty_name [chat_room_name $room_id] ad_return_template \ No newline at end of file

    Transcript name:#chat.Transcript_name#:
    Description:#chat.Description# :
    Contents:#chat.Contents#: