All pastes #177599 Raw Edit

Mine

public text v1 · immutable
#177599 ·published 2006-09-20 15:25 UTC
rendered paste body
[macro-huntgroup]
; ARG1  --  PBX
; ARG2  --  huntgroup
;
exten => s,1,Verbose(1|Entering huntgroup ${ARG2} for PBX ${ARG1})
exten => s,n,Verbose(1|Getting initial values: strategy, music, timeout for PBX ${ARG1} in huntgroup ${ARG2})
exten => s,n,Set(ARRAY(Q_ID,STRATEGY,MUSIC,TIMEOUT)=${HUNT_INITIAL(${ARG1},${ARG2})})
exten => s,n,Verbose(1|Returned: ${Q_ID} - ${STRATEGY} - ${MUSIC} - ${TIMEOUT})
exten => s,n,Goto(members,1)
exten => s,n,Hangup()

exten => members,1,Verbose(1|Gathering members)
exten => members,n,Set(COUNT=${HUNT_MEMBERS_COUNT(${Q_ID})})
exten => members,n,GotoIf($[${COUNT} = 0]?h,end)
exten => members,n,Set(X=1)
        ; Start at 1 so we don't have an infinite loop
exten => members,n,While($[${X} <= ${COUNT}])
exten => members,n,Set(OFFSET=$[${X} - 1])
        ; We want to start assigning at record 1, but SQL wants record 0
exten => members,n,Set(HASH(HUNT_${X})=${HUNT_MEMBERS(${Q_ID}|${OFFSET})})
exten => members,n,Verbose(1|HASH: ${HASH(HUNT_${X}|tech)} - ${HASH(HUNT_${X}|member_id)})
        ; Only No Operation if the HASH(HUNT_${X}|rrm_mark) returns NULL
exten => members,n,Verbose(1|Value of hash: ${HASH(HUNT_${X}|rrm_mark)})
;exten => members,n,NoOp(1|${IF($[${HASH(HUNT_${X}|rrm_mark)} = 1]?SETTING RRM_START - ${SET(RRM_START=${X})}:RRM_START VALUE - ${RRM_START})})
exten => members,n,Set(${IF($[${HASH(HUNT_${X}|rrm_mark)} = 1]?RRM_START=${X})})
exten => members,n,Verbose(1|RRM_START: ${RRM_START} - HASH rrm_mark: ${HASH(HUNT_${X}|rrm_mark)})
exten => members,n,Set(X=$[${X} + 1])
exten => members,n,EndWhile(End of loop)
exten => members,n,Set(${IF($["${RRM_START}" = ""]?RRM_START=1)})
exten => members,n,Goto(${STRATEGY},1)

exten => rrmemory,1,Verbose(1|Entering round-robin memory strategy)
        ; If we are less than or equal to COUNT (last position), return one less than start postion, else, return start (one)
exten => rrmemory,n,Verbose(1|RRM_START: ${RRM_START})
exten => rrmemory,n,Set(RRM_END=${IF($[${RRM_START} <= ${COUNT} & ${RRM_START} != 1]?$[${RRM_START} - 1]:${COUNT})})
exten => rrmemory,n,Verbose(1|RRM_START: ${RRM_START})
exten => rrmemory,n,Set(POS=${RRM_START})
exten => rrmemory,n(start),Verbose(1|Calling ${HASH(HUNT_${POS}|tech)} - ${HASH(HUNT_${POS}|member_id)})
exten => rrmemory,n,Wait(6)
exten => rrmemory,n,GotoIf($[${POS} = ${RRM_END}]?h,1)
        ; If we're on our last position, set the next start position back to the start of the list
exten => rrmemory,n,Set(POS=${IF($[${POS} = ${COUNT}]?1:$[${POS} + 1])})
exten => rrmemory,n,Goto(start)

exten => h,1,Verbose(1|Cleanup!)
exten => h,n,Set(HUNT_RRM_CLEAR(${Q_ID})=)      ; set fields NULL
exten => h,n,Set(HUNT_MEMBERS(${Q_ID})=${IF($[${EXISTS(${POS})} & ${POS} > 1 & ${POS} != ${COUNT}]?$[${POS} - 1]:0)})   ; set member for memory
exten => h,n(end),Verbose(1|All done -- goodbye)