From c16542c1d07be07aa3ec61151b012d7c7f01233a Mon Sep 17 00:00:00 2001 From: Mark Spencer Date: Thu, 5 Aug 2004 22:02:33 +0000 Subject: [PATCH] Allow directory to be searched by first name (bug #2208) git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@3580 65c4cc65-6c06-0410-ace0-fbb531ad65f3 --- apps/app_directory.c | 36 +++++++++++++++++++++++++----------- sounds.txt | 2 ++ sounds/dir-intro-fn.gsm | Bin 0 -> 17424 bytes 3 files changed, 27 insertions(+), 11 deletions(-) create mode 100755 sounds/dir-intro-fn.gsm diff --git a/apps/app_directory.c b/apps/app_directory.c index 1e2fe18696..6d417444e8 100755 --- a/apps/app_directory.c +++ b/apps/app_directory.c @@ -32,13 +32,15 @@ static char *app = "Directory"; static char *synopsis = "Provide directory of voicemail extensions"; static char *descrip = -" Directory(vm-context[|dial-context]): Presents the user with a directory\n" +" Directory(vm-context[|dial-context[|options]]): Presents the user with a directory\n" "of extensions from which they may select by name. The list of names \n" "and extensions is discovered from voicemail.conf. The vm-context argument\n" "is required, and specifies the context of voicemail.conf to use. The\n" "dial-context is the context to use for dialing the users, and defaults to\n" -"the vm-context if unspecified. Returns 0 unless the user hangs up. It also\n" -"sets up the channel on exit to enter the extension the user selected.\n"; +"the vm-context if unspecified. The 'f' option causes the directory to match\n" +"based on the first name in voicemail.conf instead of the last name.\n" +"Returns 0 unless the user hangs up. It also sets up the channel on exit\n" +"to enter the extension the user selected.\n"; /* For simplicity, I'm keeping the format compatible with the voicemail config, but i'm open to suggestions for isolating it */ @@ -208,7 +210,7 @@ static int play_mailbox_owner(struct ast_channel *chan, char *context, char *dia return(res); } -static int do_directory(struct ast_channel *chan, struct ast_config *cfg, char *context, char *dialcontext, char digit) +static int do_directory(struct ast_channel *chan, struct ast_config *cfg, char *context, char *dialcontext, char digit, int last) { /* Read in the first three digits.. "digit" is the first digit, already read */ char ext[NUMDIGITS + 1]; @@ -225,7 +227,6 @@ static int do_directory(struct ast_channel *chan, struct ast_config *cfg, char * "(context in which to interpret extensions)\n"); return -1; } - memset(ext, 0, sizeof(ext)); ext[0] = digit; res = 0; @@ -245,7 +246,7 @@ static int do_directory(struct ast_channel *chan, struct ast_config *cfg, char * if (pos) { strncpy(name, pos, sizeof(name) - 1); /* Grab the last name */ - if (strrchr(pos, ' ')) + if (last && strrchr(pos,' ')) pos = strrchr(pos, ' ') + 1; conv = convert(pos); if (conv) { @@ -312,7 +313,9 @@ static int directory_exec(struct ast_channel *chan, void *data) int res = 0; struct localuser *u; struct ast_config *cfg; - char *context, *dialcontext, *dirintro; + int last = 1; + char *context, *dialcontext, *dirintro, *options; + if (!data) { ast_log(LOG_WARNING, "directory requires an argument (context[,dialcontext])\n"); return -1; @@ -329,13 +332,24 @@ top: if (dialcontext) { *dialcontext = '\0'; dialcontext++; - } else + options = strchr(dialcontext, '|'); + if (options) { + *options = '\0'; + options++; + if (strchr(options, 'f')) + last = 0; + } + } else dialcontext = context; dirintro = ast_variable_retrieve(cfg, context, "directoryintro"); if (!dirintro || ast_strlen_zero(dirintro)) dirintro = ast_variable_retrieve(cfg, "general", "directoryintro"); - if (!dirintro || ast_strlen_zero(dirintro)) - dirintro = "dir-intro"; + if (!dirintro || ast_strlen_zero(dirintro)) { + if (last) + dirintro = "dir-intro"; + else + dirintro = "dir-intro-fn"; + } if (chan->_state != AST_STATE_UP) res = ast_answer(chan); if (!res) @@ -346,7 +360,7 @@ top: if (!res) res = ast_waitfordigit(chan, 5000); if (res > 0) { - res = do_directory(chan, cfg, context, dialcontext, res); + res = do_directory(chan, cfg, context, dialcontext, res, last); if (res > 0) { res = ast_waitstream(chan, AST_DIGIT_ANY); ast_stopstream(chan); diff --git a/sounds.txt b/sounds.txt index 92ea6e6c2c..0d8e2a4da7 100755 --- a/sounds.txt +++ b/sounds.txt @@ -64,6 +64,8 @@ %dir-intro.gsm%Welcome to the Asterisk directory. Please enter the first three letters of your parties last name using your touch tone keypad. Use the 7 key for Q and the 9 key for Z. +%dir-intro-fn.gsm%Welcome to the Asterisk directory. Please enter the first three letters of your parties first name using your touch tone keypad. Use the 7 key for Q and the 9 key for Z. + %dir-nomatch.gsm%No directory entries match your search. %dir-nomore.gsm%There are no more compatible entries in the directory. diff --git a/sounds/dir-intro-fn.gsm b/sounds/dir-intro-fn.gsm new file mode 100755 index 0000000000000000000000000000000000000000..c399ee5ff55dde1bc702fb6fca28c28cf2d0bfdb GIT binary patch literal 17424 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 literal 0 HcmV?d00001