Page 579 - Asterisk™: The Future of Telephony
P. 579

APPENDIX G

                                       An Example of func_odbc














               This appendix  contains the examples from the hot-desking feature in the “Getting
               Funky with func_odbc: Hot-Desking” section in Chapter 12. It may be useful to follow
               along with this example in Chapter 12 as it can be useful to see where the code is going
               while reading along with the explanation.


               Hot-Desking (extensions.conf)                                   Dialplan code
               ; Hot Desking Feature
               [hotdesk]
               ; Hot Desk Login
               exten => _11XX,1,NoOp()
               exten => _11XX,n,Set(E=${EXTEN})
               exten => _11XX,n,Verbose(1|Hot Desk Extension ${E} is changing status)
               exten => _11XX,n,Verbose(1|Checking current status of extension ${E})
               exten => _11XX,n,Set(${E}_STATUS=${HOTDESK_INFO(status,${E})})
               exten => _11XX,n,Set(${E}_PIN=${HOTDESK_INFO(pin,${E})})
               exten => _11XX,n,GotoIf($[${ISNULL(${${E}_STATUS})}]?invalid_user)

               exten => _11XX,n,GotoIf($[${${E}_STATUS} = 1]?logout,1:login,1)

               exten => login,1,NoOp()
               exten => login,n,Set(PIN_TRIES=0)
               exten => login,n,Set(MAX_PIN_TRIES=3)
               exten => login,n(get_pin),NoOp()
               exten => login,n,Set(PIN_TRIES=$[${PIN_TRIES} + 1])
               exten => login,n,Read(PIN_ENTERED|enter-password|${LEN(${${E}_PIN})})
               exten => login,n,GotoIf($[${PIN_ENTERED} = ${${E}_PIN}]?valid_login,1)
               exten => login,n,Playback(invalid-pin,1)
               exten => login,n,GotoIf($[${PIN_TRIES} <= ${MAX_PIN_TRIES}]?get_pin:login_fail,1)
               exten => valid_login,1,NoOp()
               exten => valid_login,n,Set(LOCATION=${CUT(CHANNEL,/,2)})
               exten => valid_login,n,Set(LOCATION=${CUT(LOCATION,-,1)})
               exten => valid_login,n,Set(ARRAY(USERS_LOGGED_IN)=${HOTDESK_CHECK_PHONE_LOGINS
               (${LOCATION})})
               exten => valid_login,n,GotoIf($[${USERS_LOGGED_IN} > 0]?logout_login,1)


                                                                                     551
   574   575   576   577   578   579   580   581   582   583   584