Ejemplo n.º 1
0
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))
Ejemplo n.º 2
0
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))
Ejemplo n.º 3
0
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))
Ejemplo n.º 6
0
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))
Ejemplo n.º 9
0
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))
Ejemplo n.º 11
0
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)
Ejemplo n.º 15
0
        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))