Exemplo n.º 1
0
def get(user, rooms = None, fields = None, filters = None):
	# There is this horrible bug out here.
	# Looks like if frappe.call sends optional arguments (not in right order), the argument turns to an empty string.
	# I'm not even going to think searching for it.
	# Hence, the hack was get_if_empty (previous assign_if_none)
	# - Achilles Rasquinha [email protected]
	authenticate(user)

	rooms, fields, filters = safe_json_loads(rooms, fields, filters)

	rooms   = listify(get_if_empty(rooms,  [ ]))
	fields  = listify(get_if_empty(fields, [ ]))

	const   = [ ] # constraints
	if rooms:
		const.append(['Chat Room', 'name', 'in', rooms])
	if filters:
		if isinstance(filters[0], list):
			const = const + filters
		else:
			const.append(filters)

	default = ['name', 'type', 'room_name', 'creation', 'owner', 'avatar']
	handle  = ['users', 'last_message']

	param   = [f for f in fields if f not in handle]

	rooms   = frappe.get_all('Chat Room',
		or_filters = [
			['Chat Room', 	   'owner', '=', user],
			['Chat Room User', 'user',  '=', user]
		],
		filters  = const,
		fields   = param + ['name'] if param else default,
		distinct = True
	)

	if not fields or 'users' in fields:
		for i, r in enumerate(rooms):
			droom = frappe.get_doc('Chat Room', r.name)
			rooms[i]['users'] = [ ]

			for duser in droom.users:
				rooms[i]['users'].append(duser.user)

	if not fields or 'last_message' in fields:
		for i, r in enumerate(rooms):
			droom = frappe.get_doc('Chat Room', r.name)
			if droom.last_message:
				rooms[i]['last_message'] = chat_message.get(droom.last_message)
			else:
				rooms[i]['last_message'] = None

	rooms = squashify(dictify(rooms))

	return rooms
Exemplo n.º 2
0
def get(user, rooms=None, fields=None, filters=None):
    # There is this horrible bug out here.
    # Looks like if frappe.call sends optional arguments (not in right order), the argument turns to an empty string.
    # I'm not even going to think searching for it.
    # Hence, the hack was get_if_empty (previous assign_if_none)
    # - Achilles Rasquinha [email protected]
    authenticate(user)

    rooms, fields, filters = safe_json_loads(rooms, fields, filters)

    rooms = listify(get_if_empty(rooms, []))
    fields = listify(get_if_empty(fields, []))

    const = []  # constraints
    if rooms:
        const.append(['Chat Room', 'name', 'in', rooms])
    if filters:
        if isinstance(filters[0], list):
            const = const + filters
        else:
            const.append(filters)

    default = ['name', 'type', 'room_name', 'creation', 'owner', 'avatar']
    handle = ['users', 'last_message']

    param = [f for f in fields if f not in handle]

    rooms = frappe.get_all('Chat Room',
                           or_filters=[['Chat Room', 'owner', '=', user],
                                       ['Chat Room User', 'user', '=', user]],
                           filters=const,
                           fields=param + ['name'] if param else default,
                           distinct=True)

    if not fields or 'users' in fields:
        for i, r in enumerate(rooms):
            droom = frappe.get_doc('Chat Room', r.name)
            rooms[i]['users'] = []

            for duser in droom.users:
                rooms[i]['users'].append(duser.user)

    if not fields or 'last_message' in fields:
        for i, r in enumerate(rooms):
            droom = frappe.get_doc('Chat Room', r.name)
            if droom.last_message:
                rooms[i]['last_message'] = chat_message.get(droom.last_message)
            else:
                rooms[i]['last_message'] = None

    rooms = squashify(dictify(rooms))

    return rooms
Exemplo n.º 3
0
def create(kind, owner, users=None, name=None):
    authenticate(owner)

    users = safe_json_loads(users)

    room = frappe.new_doc('Chat Room')
    room.type = kind
    room.owner = owner
    room.room_name = name

    dusers = []

    if users:
        users = listify(users)
        for user in users:
            duser = frappe.new_doc('Chat Room User')
            duser.user = user
            dusers.append(duser)

    room.users = dusers
    room.save(ignore_permissions=True)

    room = get(owner, rooms=room.name)
    users = [room.owner] + [u for u in room.users]

    for u in users:
        frappe.publish_realtime('frappe.chat.room:create',
                                room,
                                user=u,
                                after_commit=True)

    return room
Exemplo n.º 4
0
def create(kind, token, users=None, name=None):
	authenticate(token)

	users = safe_json_loads(users)
	create = True

	if kind == 'Visitor':
		room = squashify(frappe.db.sql("""
			SELECT name
			FROM   `tabChat Room`
			WHERE  owner=%s
			""", (frappe.session.user), as_dict=True))

		if room:
			room = frappe.get_doc('Chat Room', room.name)
			create = False

	if create:
		room = frappe.new_doc('Chat Room')
		room.type = kind
		room.owner = frappe.session.user
		room.room_name = name

	dusers = []

	if kind != 'Visitor':
		if users:
			users = listify(users)
			for user in users:
				duser = frappe.new_doc('Chat Room User')
				duser.user = user
				dusers.append(duser)

			room.users = dusers
	else:
		dsettings = frappe.get_single('Website Settings')
		room.room_name = dsettings.chat_room_name

		users = [user for user in room.users] if hasattr(room, 'users') else []

		for user in dsettings.chat_operators:
			if user.user not in users:
				# appending user to room.users will remove the user from chat_operators
				# this is undesirable, create a new Chat Room User instead
				chat_room_user = {"doctype": "Chat Room User", "user": user.user}
				room.append('users', chat_room_user)

	room.save(ignore_permissions=True)

	room = get(token=token, rooms=room.name)
	if room:
		users = [room.owner] + [u for u in room.users]

		for user in users:
			frappe.publish_realtime('frappe.chat.room:create', room, user=user, after_commit=True)

	return room
Exemplo n.º 5
0
def create(kind, owner, users = None, name = None):
	authenticate(owner)

	users  = safe_json_loads(users)
	create = True

	if kind == 'Visitor':
		room = squashify(frappe.db.sql("""
			SELECT name
			FROM   `tabChat Room`
			WHERE  owner = "{owner}"
		""".format(owner = owner), as_dict = True))

		if room:
			room   = frappe.get_doc('Chat Room', room.name)
			create = False

	if create:
		room  		   = frappe.new_doc('Chat Room')
		room.type 	   = kind
		room.owner	   = owner
		room.room_name = name

	dusers = [ ]

	if kind != 'Visitor':
		if users:
			users  = listify(users)
			for user in users:
				duser 	   = frappe.new_doc('Chat Room User')
				duser.user = user
				dusers.append(duser)

			room.users = dusers
	else:
		dsettings	   = frappe.get_single('Website Settings')
		room.room_name = dsettings.chat_room_name

		users          = [user for user in room.users] if hasattr(room, 'users') else [ ]

		for user in dsettings.chat_operators:
			if user.user not in users:
				# appending user to room.users will remove the user from chat_operators
				# this is undesirable, create a new Chat Room User instead
				chat_room_user = {"doctype": "Chat Room User", "user": user.user}
				room.append('users', chat_room_user)

	room.save(ignore_permissions = True)

	room  = get(owner, rooms = room.name)
	users = [room.owner] + [u for u in room.users]

	for u in users:
		frappe.publish_realtime('frappe.chat.room:create', room, user = u, after_commit = True)

	return room
def create(kind, owner, users = None, name = None):
	authenticate(owner)

	users  = safe_json_loads(users)
	create = True

	if kind == 'Visitor':
		room = squashify(frappe.db.sql("""
			SELECT name
			FROM   `tabChat Room`
			WHERE  owner = "{owner}"
		""".format(owner = owner), as_dict = True))

		if room:
			room   = frappe.get_doc('Chat Room', room.name)
			create = False

	if create:
		room  		   = frappe.new_doc('Chat Room')
		room.type 	   = kind
		room.owner	   = owner
		room.room_name = name
		
	dusers = [ ]

	if kind != 'Visitor':
		if users:
			users  = listify(users)
			for user in users:
				duser 	   = frappe.new_doc('Chat Room User')
				duser.user = user
				dusers.append(duser)

			room.users = dusers
	else:
		dsettings	   = frappe.get_single('Website Settings')
		room.room_name = dsettings.chat_room_name

		users          = [user for user in room.users] if hasattr(room, 'users') else [ ]

		for user in dsettings.chat_operators:
			if user.user not in users:
				room.append('users', user)
			
	room.save(ignore_permissions = True)

	room  = get(owner, rooms = room.name)
	users = [room.owner] + [u for u in room.users]

	for u in users:
		frappe.publish_realtime('frappe.chat.room:create', room, user = u, after_commit = True)

	return room