From f87086b3743ba5a1639e251b53c0f5e5cce31534 Mon Sep 17 00:00:00 2001
From: Richard Mudgett <rmudgett@digium.com>
Date: Tue, 8 Oct 2013 20:18:37 +0000
Subject: [PATCH] app_confbridge: Can now set the language used for
 announcements to the conference.

ConfBridge now has the ability to set the language of announcements to the
conference.  The language can be set on a bridge profile in
confbridge.conf or by the dialplan function
CONFBRIDGE(bridge,language)=en.

(closes issue ASTERISK-19983)
Reported by: Jonathan White
Patches:
      M19983_rev2.diff (license #5138) patch uploaded by junky (modified)
Tested by: rmudgett
........

Merged revisions 400741 from http://svn.asterisk.org/svn/asterisk/branches/11
........

Merged revisions 400742 from http://svn.asterisk.org/svn/asterisk/branches/12


git-svn-id: https://origsvn.digium.com/svn/asterisk/trunk@400744 65c4cc65-6c06-0410-ace0-fbb531ad65f3
---
 CHANGES                              |  4 ++++
 apps/app_confbridge.c                |  3 +++
 apps/confbridge/conf_config_parser.c | 11 +++++++++++
 apps/confbridge/include/confbridge.h |  1 +
 configs/confbridge.conf.sample       |  3 +++
 5 files changed, 22 insertions(+)

diff --git a/CHANGES b/CHANGES
index 6fc2b3765e..3c6748d98c 100644
--- a/CHANGES
+++ b/CHANGES
@@ -161,6 +161,10 @@ ConfBridge
    when the recording is stopped and then re-started, the existing recording
    will be used and appended to.
 
+ * ConfBridge now has the ability to set the language of announcements to the
+   conference.  The language can be set on a bridge profile in confbridge.conf
+   or by the dialplan function CONFBRIDGE(bridge,language)=en.
+
 ControlPlayback
 ------------------
  * The channel variable CPLAYBACKSTATUS may now return the value
diff --git a/apps/app_confbridge.c b/apps/app_confbridge.c
index 47cfa0b8ba..6f1420fcd2 100644
--- a/apps/app_confbridge.c
+++ b/apps/app_confbridge.c
@@ -1339,6 +1339,9 @@ static int alloc_playback_chan(struct confbridge_conference *conference)
 		return -1;
 	}
 
+	/* To make sure playback_chan has the same language of that profile */
+	ast_channel_language_set(conference->playback_chan, conference->b_profile.language);
+
 	ast_debug(1, "Created announcer channel '%s' to conference bridge '%s'\n",
 		ast_channel_name(conference->playback_chan), conference->name);
 	return 0;
diff --git a/apps/confbridge/conf_config_parser.c b/apps/confbridge/conf_config_parser.c
index 6c57f1614f..97c0696a7d 100644
--- a/apps/confbridge/conf_config_parser.c
+++ b/apps/confbridge/conf_config_parser.c
@@ -257,6 +257,15 @@ ASTERISK_FILE_VERSION(__FILE__, "$Revision$")
 						will be used.
 					</para></description>
 				</configOption>
+				<configOption name="language" default="en">
+					<synopsis>The language used for announcements to the conference.</synopsis>
+					<description><para>
+						By default, announcements to a conference use English.  Which means
+						the prompts played to all users within the conference will be
+						English.  By changing the language of a bridge, this will change
+						the language of the prompts played to all users.
+					</para></description>
+				</configOption>
 				<configOption name="mixing_interval">
 					<synopsis>Sets the internal mixing interval in milliseconds for the bridge</synopsis>
 					<description><para>
@@ -1417,6 +1426,7 @@ static char *handle_cli_confbridge_show_bridge_profile(struct ast_cli_entry *e,
 
 	ast_cli(a->fd,"--------------------------------------------\n");
 	ast_cli(a->fd,"Name:                 %s\n", b_profile.name);
+	ast_cli(a->fd,"Language:             %s\n", b_profile.language);
 
 	if (b_profile.internal_sample_rate) {
 		snprintf(tmp, sizeof(tmp), "%d", b_profile.internal_sample_rate);
@@ -1934,6 +1944,7 @@ int conf_load_config(void)
 	aco_option_register(&cfg_info, "record_file_append", ACO_EXACT, bridge_types, "yes", OPT_BOOLFLAG_T, 1, FLDSET(struct bridge_profile, flags), BRIDGE_OPT_RECORD_FILE_APPEND);
 	aco_option_register(&cfg_info, "max_members", ACO_EXACT, bridge_types, "0", OPT_UINT_T, 0, FLDSET(struct bridge_profile, max_members));
 	aco_option_register(&cfg_info, "record_file", ACO_EXACT, bridge_types, NULL, OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct bridge_profile, rec_file));
+	aco_option_register(&cfg_info, "language", ACO_EXACT, bridge_types, "en", OPT_CHAR_ARRAY_T, 0, CHARFLDSET(struct bridge_profile, language));
 	aco_option_register_custom(&cfg_info, "^sound_", ACO_REGEX, bridge_types, NULL, sound_option_handler, 0);
 	/* This option should only be used with the CONFBRIDGE dialplan function */
 	aco_option_register_custom(&cfg_info, "template", ACO_EXACT, bridge_types, NULL, bridge_template_handler, 0);
diff --git a/apps/confbridge/include/confbridge.h b/apps/confbridge/include/confbridge.h
index 7c2abda6c4..71ae5f7de3 100644
--- a/apps/confbridge/include/confbridge.h
+++ b/apps/confbridge/include/confbridge.h
@@ -192,6 +192,7 @@ struct bridge_profile_sounds {
 
 struct bridge_profile {
 	char name[64];
+	char language[MAX_LANGUAGE];		  /*!< Language used for playback_chan */
 	char rec_file[PATH_MAX];
 	unsigned int flags;
 	unsigned int max_members;          /*!< The maximum number of participants allowed in the conference */
diff --git a/configs/confbridge.conf.sample b/configs/confbridge.conf.sample
index 08a2dd3057..a4f829aa2c 100644
--- a/configs/confbridge.conf.sample
+++ b/configs/confbridge.conf.sample
@@ -197,6 +197,9 @@ type=bridge
                            ;               is the single source of video distribution among all participants. If
                            ;               that user leaves, the marked user to join after them becomes the source.
 
+;language=en               ; Set the language used for announcements to the conference.
+                           ; Default is en (English).
+
 ; All sounds in the conference are customizable using the bridge profile options below.
 ; Simply state the option followed by the filename or full path of the filename after
 ; the option.  Example: sound_had_joined=conf-hasjoin  This will play the conf-hasjoin
-- 
GitLab