def phone_set_feature(agi, cursor, args): userid = agi.get_variable('XIVO_USERID') xlen = len(args) if xlen == 0: agi.dp_break("Invalid number of arguments") feature = args[0] if feature in ("vm", "dnd", "callrecord", "incallfilter"): if xlen > 1 and args[1] != '': try: if xlen == 2: context = objects.User(agi, cursor, xid=int(userid)).context else: context = args[2] user = objects.User(agi, cursor, exten=args[1], context=context) except (ValueError, LookupError), e: agi.dp_break(str(e)) else: try: userid = int(userid) user = objects.User(agi, cursor, userid) except (ValueError, LookupError), e: agi.dp_break(str(e))
def user_get_vmbox(agi, cursor, args): userid = agi.get_variable('XIVO_USERID') xlen = len(args) if xlen > 0 and args[0] != '': try: if xlen == 1: context = objects.User(agi, cursor, xid=int(userid)).context else: context = args[1] user = objects.User(agi, cursor, exten=args[0], context=context) except (ValueError, LookupError), e: agi.dp_break(str(e))
def fwdundoall(agi, cursor, args): userid = agi.get_variable('XIVO_USERID') try: user = objects.User(agi, cursor, int(userid)) except (ValueError, LookupError), e: agi.dp_break(str(e))
def phone_progfunckey(agi, cursor, args): userid = agi.get_variable('XIVO_USERID') xlen = len(args) if xlen < 1: agi.dp_break("Invalid number of arguments (args: %r)" % args) if xlen > 1 and args[1] != '': try: if xlen == 2: context = objects.User(agi, cursor, xid=int(userid)).context else: context = args[2] user = objects.User(agi, cursor, exten=args[1], context=context) except (ValueError, LookupError), e: agi.dp_break(str(e))
def phone_get_features(agi, cursor, args): userid = agi.get_variable('XIVO_USERID') feature_list = objects.ExtenFeatures(agi, cursor) try: user = objects.User(agi, cursor, int(userid)) except (ValueError, LookupError), e: agi.dp_break(str(e))
def handynumbers(agi, cursor, args): userid = agi.get_variable('XIVO_USERID') dstnum = agi.get_variable('XIVO_DSTNUM') exten_pattern = agi.get_variable('XIVO_EXTENPATTERN') if userid: try: user = objects.User(agi, cursor, int(userid)) except (ValueError, LookupError), e: user = None agi.verbose(str(e))
def phone_progfunckey_devstate(agi, cursor, args): userid = agi.get_variable('XIVO_USERID') xlen = len(args) if xlen < 2: agi.dp_break("Invalid number of arguments (args: %r)" % args) devstate = args[1] if devstate not in ('BUSY', 'INUSE', 'INVALID', 'NOT_INUSE', 'ONHOLD', 'RINGING', 'RINGINUSE', 'UNAVAILABLE', 'UNKNOWN'): agi.dp_break("Invalid device state: %r" % devstate) if xlen > 3 and args[3] != '': try: if xlen == 4: context = objects.User(agi, cursor, xid=int(userid)).context else: context = args[4] user = objects.User(agi, cursor, exten=args[3], context=context) except (ValueError, LookupError), e: agi.dp_break(str(e))
def incoming_user_set_features(agi, cursor, args): userid = agi.get_variable('XIVO_USERID') dstid = agi.get_variable('XIVO_DSTID') zone = agi.get_variable('XIVO_CALLORIGIN') bypass_filter = agi.get_variable('XIVO_CALLFILTER_BYPASS') # FIXME: this is only for the callrecord feature, which is likely to change srcnum = agi.get_variable('XIVO_SRCNUM') dstnum = agi.get_variable('XIVO_DSTNUM') feature_list = objects.ExtenFeatures(agi, cursor) if userid: try: caller = objects.User(agi, cursor, int(userid)) except (ValueError, LookupError): caller = None else: caller = None try: user = objects.User(agi, cursor, int(dstid)) except (ValueError, LookupError), e: agi.dp_break(str(e))
def groupmember(agi, cursor, args): userid = agi.get_variable('XIVO_USERID') xlen = len(args) if xlen < 3: agi.dp_break("Invalid number of arguments (args: %r)" % args) elif args[0] not in ('group', 'queue'): agi.dp_break("Invalid type (args: %r, excepted: 'group' or 'queue')" % args[0]) elif args[1] not in ('add', 'remove', 'toggle'): agi.dp_break( "Invalid action (args: %r, excepted: 'add', 'remove' or 'toggle')" % args[1]) if xlen > 3 and args[3] != '': try: if xlen == 4: context = objects.User(agi, cursor, xid=int(userid)).context else: context = args[4] user = objects.User(agi, cursor, exten=args[3], context=context) except (ValueError, LookupError), e: agi.dp_break(str(e))
def vmbox_toggle_enabled(agi, cursor, args): vmboxid = agi.get_variable('XIVO_VMBOXID') userid = agi.get_variable('XIVO_USERID') xlen = len(args) if xlen > 0: try: if xlen == 1: context = objects.User(agi, cursor, xid=int(userid)).context else: context = args[1] vmbox = objects.VMBox(agi, cursor, mailbox=args[0], context=context, commentcond=False) except (ValueError, LookupError), e: agi.dp_break(str(e))
def vmbox_get_info(agi, cursor, args): vmboxid = agi.get_variable('XIVO_VMBOXID') xlen = len(args) caller = vmbox = None if xlen > 0 and args[0] != '': try: if xlen == 1: userid = agi.get_variable('XIVO_USERID') caller = objects.User(agi, cursor, xid=int(userid)) context = caller.context else: context = args[1] vmbox = objects.VMBox(agi, cursor, mailbox=args[0], context=context) except (ValueError, LookupError), e: agi.dp_break(str(e))
needanswer = "0" agi.set_variable('XIVO_REAL_NUMBER', group.number) agi.set_variable('XIVO_REAL_CONTEXT', group.context) agi.set_variable('XIVO_GROUPNAME', group.name) agi.set_variable('XIVO_GROUPOPTIONS', options) agi.set_variable('XIVO_GROUPNEEDANSWER', needanswer) pickupmark = [] memberlist = agi.get_variable("QUEUE_MEMBER_LIST(%s)" % group.name).split(',') for member in memberlist: try: protocol, name = member.split('/', 1) user = objects.User(agi, cursor, name=name, protocol=protocol) except (ValueError, LookupError): continue if user.number: pickupmark.append("%s%%%s" % (user.number, user.context)) agi.set_variable('__PICKUPMARK', '&'.join(pickupmark)) if group.preprocess_subroutine: preprocess_subroutine = group.preprocess_subroutine else: preprocess_subroutine = "" if group.timeout: timeout = group.timeout
def _user_set_call_rights(agi, cursor, args): userid = agi.get_variable('XIVO_USERID') dstnum = agi.get_variable('XIVO_DSTNUM') outcallid = agi.get_variable('XIVO_OUTCALLID') cursor.query("SELECT ${columns} FROM rightcallexten", ('rightcallid', 'exten')) res = cursor.fetchall() if not res: call_rights.allow(agi) rightcallidset = set((row['rightcallid'] for row in res if call_rights.extension_matches(dstnum, row['exten']))) if not rightcallidset: call_rights.allow(agi) rightcallids = '(' + ','.join((str(el) for el in rightcallidset)) + ')' try: user = objects.User(agi, cursor, int(userid)) except (ValueError, LookupError): if not outcallid: call_rights.allow(agi) else: cursor.query("SELECT ${columns} FROM rightcall " "INNER JOIN rightcallmember " "ON rightcall.id = rightcallmember.rightcallid " "WHERE rightcall.id IN " + rightcallids + " " "AND rightcallmember.type = 'user' " "AND rightcallmember.typeval = %s " "AND rightcall.commented = 0", (call_rights.RIGHTCALL_AUTHORIZATION_COLNAME, call_rights.RIGHTCALL_PASSWD_COLNAME), (user.id,)) res = cursor.fetchall() call_rights.apply_rules(agi, res) cursor.query("SELECT ${columns} FROM groupfeatures " "INNER JOIN queuemember " "ON groupfeatures.name = queuemember.queue_name " "INNER JOIN queue " "ON queue.name = queuemember.queue_name " "WHERE groupfeatures.deleted = 0 " "AND queuemember.userid = %s " "AND queuemember.usertype = 'user' " "AND queuemember.category = 'group' " "AND queuemember.commented = 0 " "AND queue.category = 'group' " "AND queue.commented = 0", ('groupfeatures.id',), (user.id,)) res = cursor.fetchall() if res: groupids = [row['groupfeatures.id'] for row in res] cursor.query("SELECT ${columns} FROM rightcall " "INNER JOIN rightcallmember " "ON rightcall.id = rightcallmember.rightcallid " "WHERE rightcall.id IN " + rightcallids + " " "AND rightcallmember.type = 'group' " "AND rightcallmember.typeval IN (" + ", ".join(["%s"] * len(res)) + ") " "AND rightcall.commented = 0", (call_rights.RIGHTCALL_AUTHORIZATION_COLNAME, call_rights.RIGHTCALL_PASSWD_COLNAME), groupids) res = cursor.fetchall() call_rights.apply_rules(agi, res) if outcallid: cursor.query("SELECT ${columns} FROM rightcall " "INNER JOIN rightcallmember " "ON rightcall.id = rightcallmember.rightcallid " "INNER JOIN outcall " "ON rightcallmember.typeval = outcall.id " "WHERE rightcall.id IN " + rightcallids + " " "AND rightcallmember.type = 'outcall' " "AND outcall.id = %s " "AND rightcall.commented = 0", (call_rights.RIGHTCALL_AUTHORIZATION_COLNAME, call_rights.RIGHTCALL_PASSWD_COLNAME), outcallid) res = cursor.fetchall() call_rights.apply_rules(agi, res) call_rights.allow(agi)
if xlen < 1: agi.dp_break("Invalid number of arguments (args: %r)" % args) if xlen > 1 and args[1] != '': try: if xlen == 2: context = objects.User(agi, cursor, xid=int(userid)).context else: context = args[2] user = objects.User(agi, cursor, exten=args[1], context=context) except (ValueError, LookupError), e: agi.dp_break(str(e)) else: try: user = objects.User(agi, cursor, int(userid)) except (ValueError, LookupError), e: agi.dp_break(str(e)) try: fklist = split_extension(args[0]) except ValueError, e: agi.dp_break(str(e)) if userid != fklist[0]: agi.dp_break("Wrong userid. (userid: %r, excepted: %r)" % (fklist[0], userid)) feature = "" try: extenfeatures = objects.ExtenFeatures(agi, cursor)
agi.set_variable('XIVO_USERID_OWNER', user.id) elif feature in ("unc", "rna", "busy"): if xlen < 2: agi.dp_break("Invalid number of arguments for %s" % feature) enabled = int(args[1]) if xlen > 2: arg = args[2] else: arg = None if xlen > 3 and args[3] != '': try: if xlen == 4: context = objects.User(agi, cursor, xid=int(userid)).context else: context = args[4] user = objects.User(agi, cursor, exten=args[3], context=context) except (ValueError, LookupError), e: agi.dp_break(str(e)) else: try: user = objects.User(agi, cursor, int(userid)) except (ValueError, LookupError), e: agi.dp_break(str(e))