summary | shortlog | log | commit | commitdiff | tree
raw | patch | inline | side by side (parent: 0f5f569)
raw | patch | inline | side by side (parent: 0f5f569)
author | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Tue, 9 Jan 2007 08:05:02 +0000 (08:05 +0000) | ||
committer | hickert <hickert@594d385d-05f5-0310-b6e9-bd551577e9d8> | |
Tue, 9 Jan 2007 08:05:02 +0000 (08:05 +0000) |
git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.5@5490 594d385d-05f5-0310-b6e9-bd551577e9d8
plugins/admin/ogroups/class_ogroup.inc | patch | blob | history | |
plugins/admin/ogroups/class_phonequeue.inc | patch | blob | history | |
plugins/admin/ogroups/phonequeue.tpl | patch | blob | history |
index ed44e8ea46b873609ce008b4eac4352f98b23ce1..1f9b454ab01c091d3fd4bb2b55b880dc643d6108 100644 (file)
$ldap= $this->config->get_ldap_link();
/* Try to resolv the entry again, if it still fails, display error msg */
- $ldap->cat($dn, array("cn", "sn", "givenName", "ou", "description", "objectClass"));
+ $ldap->cat($dn, array("cn", "sn", "givenName", "ou", "uid", "description", "objectClass"));
/* It has failed, add entry with type flag I (Invalid)*/
if ($ldap->error != "Success"){
diff --git a/plugins/admin/ogroups/class_phonequeue.inc b/plugins/admin/ogroups/class_phonequeue.inc
index b665f91dff80356813ad728f8cca85e8317e5295..ac0107cc356cd8bb978bb7609f98c910deb212c8 100644 (file)
/* plugin specific values */
var $mail= "";
var $cn= "";
-
+ var $old_cn ="";
var $goFonTimeOut ="20";
var $goFonMaxLen ="20"; //
var $goFonQueueStrategyOptions=array();
var $goFonQueueStrategyOptionsR=array();
-
var $old_phone_numbers =array();
+ var $goFonHomeServer = "0";
+ var $init_HomeServer = "0";
+
/* attribute list for save action */
var $attributes= array( "goFonTimeOut","goFonMaxLen","goFonAnnounceFrequency","goFonDialOption_t","goFonDialOption_T",
- "goFonDialOption_h","goFonDialOption_r","cn",
+ "goFonDialOption_h","goFonDialOption_r","cn","goFonHomeServer",
"goFonDialOption_H","goFonMusiconHold","goFonWelcomeMusic","goFonQueueReportHold","goFonQueueYouAreNext",
"goFonQueueThereAre","goFonQueueCallsWaiting","goFonQueueThankYou","goFonQueueMinutes","goFonQueueSeconds","goFonQueueLessThan",
"telephoneNumber","goFonQueueLanguage","goFonQueueStrategy","goFonQueueAnnounceHoldtime","goFonQueueAnnounce","goFonDialOption","goFonQueueRetry");
+
/* ObjectClass */
var $objectclasses= array("goFonQueue");
/* Save initial account state */
$this->initially_was_account= $this->is_account;
+ /* Check server configurations
+ * Load all server configuration in $this->goFonHomeServers if available
+ * and use first server as default if necessary.
+ */
+ if(array_key_exists('config',$_SESSION) &&
+ array_key_exists('SERVERS',$_SESSION['config']->data) &&
+ array_key_exists('FON',$_SESSION['config']->data['SERVERS']) &&
+ count($_SESSION['config']->data['SERVERS']['FON']) &&
+ is_callable("mysql_connect")
+ ) {
+
+ /* Set available server */
+ $this->goFonHomeServers = $_SESSION['config']->data['SERVERS']['FON'];
+
+ /* Set default server */
+ if($this->dn == "new"){
+ $this->goFonHomeServer = $this->goFonHomeServers[0]['DN'];
+ }
+
+ /* Remember inital home server, to be able to remove old entries */
+ $this->init_HomeServer = $this->goFonHomeServer;
+
+ /* get config */
+ if(!isset($this->goFonHomeServers[$this->goFonHomeServer])){
+ print_red(sprintf(_("The specified home server '%s' is not available in GOsa server configuration. Saving this account will create a new entry on the server '%s'. Use cancel if you do not want to create a new entry while ignoring old accounts."),$this->goFonHomeServer, $this->goFonHomeServers[0]['DN']));
+ $this->goFonHomeServer = $this->goFonHomeServers[0]['DN'];
+ $this->init_HomeServer = $this->goFonHomeServers[0]['DN'];
+ }
+ $cur_cfg = $this->goFonHomeServers[$this->goFonHomeServer];
+ }
+
+
+ /* Load telephone numbers */
if($this->is_account){
if(isset($this->attrs['telephoneNumber'])){
$this->telephoneNumber=$this->attrs['telephoneNumber'];
unset($this->telephoneNumber['count']);
}
-
for($i = 0; $i < strlen($this->goFonDialOption); $i++){
$name = "goFonDialOption_".$this->goFonDialOption[$i];
$this->$name=$this->goFonDialOption[$i];
}
}
- if($this->goFonQueueAnnounceHoldtime == "no"){
+ if(preg_match("/no/i",$this->goFonQueueAnnounceHoldtime)){
$this->goFonQueueAnnounceHoldtime=false;
}
$this->old_phone_numbers = $this->telephoneNumber;
- $types= array('ringall' =>_("ring all"),
- 'roundrobin' =>_("round robin"),
- 'leastrecent'=>_("least recently called"),
- 'fewestcalls'=>_("fewest completed calls"),
- 'random' =>_("random"),
- 'rrmemory' =>_("round robin with memory"));
-
- $i = 0;
- foreach($types as $type => $name){
- $i++;
- $this->goFonQueueStrategyOptions[$i] =$name;
- $this->goFonQueueStrategyOptionsR[$i] =$type;
- $tmp[$type] = $i;
- }
-
- $this->goFonQueueStrategy= $tmp[$this->goFonQueueStrategy];
-
+ $types= array('ringall' =>_("ring all"),
+ 'roundrobin' =>_("round robin"),
+ 'leastrecent'=>_("least recently called"),
+ 'fewestcalls'=>_("fewest completed calls"),
+ 'random' =>_("random"),
+ 'rrmemory' =>_("round robin with memory"));
+
+ $i = 0;
+ foreach($types as $type => $name){
+ $i++;
+ $this->goFonQueueStrategyOptions[$i] =$name;
+ $this->goFonQueueStrategyOptionsR[$i] =$type;
+ $tmp[$type] = $i;
+ }
+
+
+ $this->old_cn = $this->cn;
+ $this->goFonQueueStrategy= $tmp[$this->goFonQueueStrategy];
+ }
+
+ /* This function ensure that the selected home server
+ * and the initially selecte home server are reachable and accessible
+ **/
+ function check_database_accessibility()
+ {
+ /* Check if mysql extension is available */
+ if(!is_callable("mysql_pconnect")){
+ return(_("Can't save any changes to asterisk database, there is currently no mysql extension available in your php setup."));
+ }
+
+ /********************
+ * Check currently selected home server
+ ********************/
+
+ $cfg_Current = $this->goFonHomeServers[$this->goFonHomeServer];
+ $r_current = @mysql_pconnect($cfg_Current['SERVER'],$cfg_Current['LOGIN'],$cfg_Current['PASSWORD']);
+ if(!$r_current){
+ gosa_log(@mysql_error($r_current));
+ return(sprintf(_("The MySQL home server '%s' isn't reachable as user '%s', check GOsa log for mysql error."),
+ $cfg_Current['SERVER'],$cfg_Current['LOGIN']));
+ }
+ $db_current = @mysql_select_db($cfg_Current['DB'],$r_current);
+ if(!$db_current){
+ gosa_log(@mysql_error($r_current));
+ mysql_close($r_current);
+ return( sprintf(_("Can't select database '%s' on home server '%s'."),$cfg_Current['DB'],$cfg_Current['SERVER']));
+ }
+
+ /********************
+ * Check init home server
+ ********************/
+
+ if($this->initially_was_account){
+ $cfg_Init = $this->goFonHomeServers[$this->init_HomeServer] ;
+ $r_init = @mysql_pconnect($cfg_Init['SERVER'],$cfg_Init['LOGIN'],$cfg_Init['PASSWORD']);
+ if(!$r_init){
+ gosa_log(@mysql_error($r_init));
+ return(sprintf(_("The MySQL initial home server '%s' isn't reachable as user '%s', check GOsa log for mysql error."),
+ $cfg_Init['SERVER'],$cfg_Init['LOGIN']));
+ }
+ $db_init = @mysql_select_db($cfg_Init['DB'],$r_init);
+ if(!$db_init){
+ gosa_log(@mysql_error($r_init));
+ mysql_close($r_init);
+ return( sprintf(_("Can't select database '%s' on initial home server '%s'."),$cfg_Init['DB'],$cfg_Init['SERVER']));
+ }
+ }
}
+
+
function execute()
{
- /* Call parent execute */
- plugin::execute();
+ /* Call parent execute */
+ plugin::execute();
/* Do we need to flip is_account state? */
if (isset($_POST['modify_state'])){
}
}
+ /* Assign samrty variables */
$smarty= get_smarty();
-
$smarty->assign("goFonQueueLanguageOptions",array('de'=>_('German')));
$smarty->assign("goFonQueueStrategyOptions", $this->goFonQueueStrategyOptions);
foreach($this->attributes as $key => $val){
$smarty->assign($val,$this->$val);
-
if($this->$val == false){
$smarty->assign($val."CHK","");
}else{
$smarty->assign($val."CHK"," checked ");
}
-
if(chkacl($this->acl,$key)==""){
$smarty->assign($val."ACL","");
}else{
$smarty->assign($val."ACL"," disabled ");
}
}
+
+ /* Create array with goFonHomeServer */
+ $tmp = array();
+ foreach($this->goFonHomeServers as $dn => $val){
+ if(!is_numeric($dn)){
+ $tmp[$dn] = $val['SERVER'];
+ }
+ }
+ $smarty->assign("goFonHomeServers",$tmp);
+
return ($display.$smarty->fetch (get_template_path('phonequeue.tpl', TRUE)));
}
{
/* Call common method to give check the hook */
$message= plugin::check();
-
+ if(!count($this->goFonHomeServers)){
+ $message[] = _("There must be at least one server with an asterisk database to create a phone account.");
+ }
+ if(empty($this->goFonHomeServer)){
+ $message[] = _("Please select a valid goFonHomeServer.");
+ }
if($this->is_number_used()){
$message[] = $this->is_number_used();
}
-
- if($this->generate_mysql_table_entries()){
- $message[] = $this->generate_mysql_table_entries();
- }
-
if(!((is_numeric($this->goFonTimeOut))||(empty($this->goFonTimeOut)))){
$message[] = _("Timeout must be numeric");
}
$message[] = _("There must be least one queue number defined.");
}
+ /* check if add to database could be successfull */
+ $str = $this->add_to_database();
+ if(!empty($str)){
+ $message[] = $str;
+ }
return $message;
}
- function generate_mysql_table_entries($save = false)
+ /* This function removes the old database entries.
+ * If this entry should be removed or the home server has changed
+ * this function is called to ensure that all old entries will be deleted.
+ */
+ function remove_from_database($save = false)
{
+ /* Check if we must remove old entries */
+ if($this->initially_was_account){
- $SQL = array();
+ /* Check if there is at least on server configuration */
+ if(!count($this->goFonHomeServers)){
+ return( _("There is currently no asterisk server defined. Possibly you are missing a server that handles the asterisk management (goFonServer). Your settings can't be saved to asterisk database."));
+ }
- if(!isset($_SESSION['config']->data['SERVERS']['FON'][0])){
- return(_("There is currently no asterisk server defined. Your settings can't be saved."));
- }
+ /********************
+ * Get configuration and check it
+ ********************/
- // Get Configuration for Mysql database Server
- $a_SETUP = $_SESSION['config']->data['SERVERS']['FON'][0];
- $s_parameter ="";
+ /* Check if databases are reachable, returns an error string if anything fails */
+ $error_str = $this->check_database_accessibility();
+ if($error_str){
+ return($error_str);
+ }
- // Connect to DB server
- $r_con = @mysql_pconnect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']);
+ /* Connect to current database to be able to add new entries */
+ $cfg_Current = $this->goFonHomeServers[$this->init_HomeServer] ;
+ $res_cur = @mysql_pconnect($cfg_Current['SERVER'],$cfg_Current['LOGIN'],$cfg_Current['PASSWORD']);
+ $db_cur = @mysql_select_db($cfg_Current['DB'],$res_cur);
+
+ /* Create sql entries */
+ $delete[]= "DELETE FROM ".$cfg_Current['EXT_TABLE']." WHERE exten='".$this->old_cn."';\n";
+ $delete[]= "DELETE FROM ".$cfg_Current['QUEUE_TABLE']." WHERE name='".$this->old_cn."'; \n";
+ $delete[]= "DELETE FROM ".$cfg_Current['QUEUE_MEMBER_TABLE']." WHERE queue_name='".$this->old_cn."';\n";
+ foreach($this->old_phone_numbers as $number){
+ $delete[]= "DELETE FROM ".$cfg_Current['EXT_TABLE']." WHERE exten='".$number."';\n";
+ }
- // Check if we are connected correctly
- if(!$r_con){
- gosa_log(mysql_error());
- return (sprintf(_("The MySQL server '%s' isn't reachable as user '%s', check GOsa log for mysql error."),
- $a_SETUP['SERVER'],$a_SETUP['LOGIN']));
+ /* Execute the queries */
+ if($save){
+ foreach($delete as $sql){
+ $res = @mysql_query($sql,$res_cur);
+ if(!$res){
+ gosa_log(@mysql_error($res_cur));
+ return(_("Error while removing old queue entries from database.").
+ " "._("Please have a look a the gosa logfiles."));
+ }
+ }
+ }
}
+ }
- // Select database for Extensions
- $db = @mysql_select_db($a_SETUP['DB'],$r_con);
- // Test if we have the database selected correctly
- if(!$db){
- gosa_log(mysql_error());
- return( sprintf(_("Can't select database %s on %s."),$a_SETUP['DB'],$a_SETUP['SERVER']));
+ /* This function handles the database entries for this
+ * queue.
+ * Existing entries will be updated if possible.
+ */
+ function add_to_database($save = false)
+ {
+ /* Check if there is at least on server configuration */
+ if(!count($this->goFonHomeServers)){
+ return( _("There is currently no asterisk server defined. Possibly you are missing a server that handles the asterisk management (goFonServer). Your settings can't be saved to asterisk database."));
}
- if($save){
- $i = 0;
- $prio = 11;
+ /********************
+ * Get configuration and check it
+ ********************/
- $delete = array();
- if(!empty($this->parent->by_object['ogroup'])){
- $new_cn = $this->parent->by_object['ogroup']->cn;
+ /* Check if databases are reachable, returns an error string if anything fails */
+ $error_str = $this->check_database_accessibility();
+ if($error_str){
+ return($error_str);
+ }
+
+ /* Connect to current database to be able to add new entries */
+ $cfg_Current = $this->goFonHomeServers[$this->goFonHomeServer] ;
+ $res_cur = @mysql_pconnect($cfg_Current['SERVER'],$cfg_Current['LOGIN'],$cfg_Current['PASSWORD']);
+ $db_cur = @mysql_select_db($cfg_Current['DB'],$res_cur);
+
+ /* Connect to old home server and remove old entries if necessary */
+ if(($this->initially_was_account) && ($this->init_HomeServer != $this->goFonHomeServer)){
+ $str = $this->remove_from_database($save);
+ if(!empty($str)){
+ return($str);;
}
- $old_cn = $this->cn;
+ }
- $delete[]= "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$new_cn."';\n";
- $delete[]= "DELETE FROM ".$a_SETUP['QUEUE_TABLE']." WHERE name='".$new_cn."'; \n";
- $delete[]= "DELETE FROM ".$a_SETUP['QUEUE_MEMBER_TABLE']." WHERE queue_name='".$new_cn."';\n";
- $delete[]= "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$old_cn."';\n";
- $delete[]= "DELETE FROM ".$a_SETUP['QUEUE_TABLE']." WHERE name='".$old_cn."'; \n";
- $delete[]= "DELETE FROM ".$a_SETUP['QUEUE_MEMBER_TABLE']." WHERE queue_name='".$old_cn."';\n";
+ /* Ensure that we have the new cn in $this->cn and the old cn in $this->old_cn */
+ $this->cn = $this->parent->by_object['ogroup']->cn;
- // Delete old Entries
- if(is_array($this->old_phone_numbers)){
- foreach($this->old_phone_numbers as $phone){
- $delete[]= "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$phone."';\n";
- }
+ if($save){
+
+ /* Check if QUEUE_TABLE entry exists.
+ * If this entry is missing - create it
+ * else update the entry with new values.
+ */
+ $query = "SELECT * FROM ".$cfg_Current['QUEUE_TABLE']." WHERE name='".$this->cn."';";
+ $res = mysql_query($query,$res_cur);
+ if(!$res){
+ gosa_log(@mysql_error($res_cur));
+ return(_("Could not detect old queue entry, query failed.")." "._("Please have a look a the gosa logfiles."));
}
+ $cnt = mysql_affected_rows($res_cur);
+
+ /* Create queue table entry */
+ $queue["announce"] = "0";
+ $queue["monitor_join"] = "0";
+ $queue["monitor_format"] = "0";
+ $queue["queue_holdtime"] = $this->goFonQueueAnnounce;
+ $queue["queue_lessthan"] = $this->goFonQueueLessThan;
+ $queue["announce_round_seconds"]= "0";
+ $queue["retry"] = $this->goFonQueueRetry;
+ $queue["wrapuptime"] = "0";
+ $queue["servicelevel"] = "0";
+ $queue["joinempty"] = "no";
+ $queue["leavewhenempty"] = "yes";
+ $queue["eventmemberstatus"] = "0";
+ $queue["eventwhencalled"] = "0";
+ $queue["reportholdtime"] = "1";
+ $queue["memberdelay"] = "0";
+ $queue["weight"] = "0";
+ $queue["timeoutrestart"] = "0";
+
+ $queue["context"] = "default";
+ $queue["name"] = $this->cn;
+ $queue["timeout"] = $this->goFonTimeOut;
+ $queue["maxlen"] = $this->goFonMaxLen;
+ $queue["strategy" ] = $this->goFonQueueStrategyOptionsR[$this->goFonQueueStrategy];
+ $queue["queue_thankyou"] = $this->goFonQueueThankYou;
+ $queue["queue_reporthold"] = $this->goFonQueueReportHold;
+ $queue["announce_frequency"] = $this->goFonAnnounceFrequency;
+ $queue["queue_youarenext"] = $this->goFonQueueYouAreNext;
+ $queue["queue_thereare"] = $this->goFonQueueThereAre;
+ $queue["queue_callswaiting"] = $this->goFonQueueCallsWaiting;
+ $queue["queue_minutes"] = $this->goFonQueueMinutes;
+ $queue["queue_seconds"] = $this->goFonQueueSeconds;
+ $queue["announce_holdtime"] = $this->goFonQueueAnnounceHoldtime;
+ $queue["musiconhold"] = $this->goFonMusiconHold;
+
+
+ /* Create new queue table entry
+ */
+ if($cnt == 0){
+
+ /* Parse and Add Queue */
+ $entries = "";
+ $values = "";
+ foreach($queue as $attr=>$val){
+ if($val == "") continue;
+ $entries.= "`".$attr."`,";
+ $values .= "'".$val."',";
+ }
+ $values = preg_replace("/,$/","",$values);
+ $entries = preg_replace("/,$/","",$entries );
+ $SQL[]="INSERT INTO ".$cfg_Current['QUEUE_TABLE']." (".$entries.") VALUES (".$values.");";
+ }elseif($cnt == 1){
+
+ /* Update queue table entry
+ */
+ $queue_old = @mysql_fetch_assoc($res);
+ foreach($queue_old as $name => $value){
+ if($queue[$name] == $value){
+ unset($queue[$name]);
+ }
+ }
- /* Perform queries to delte old entries */
- foreach($delete as $query){
- if(!mysql_query($query)){
- gosa_log(mysql_error());
- return(mysql_error(). sprintf(_("Can't delete in Database %s, on Server %s."),$a_SETUP['DB'],$a_SETUP['SERVER']));
+ /* Parse and Add Queue */
+ if(count($queue)){
+ $query = "UPDATE ".$cfg_Current['QUEUE_TABLE']." SET ";
+ foreach($queue as $key => $val){
+ $query.= "".$key."='".$val."',";
+ }
+ $query = preg_replace("/,$/","",$query);
+ $query.= " WHERE name='".$this->cn."';";
+ $SQL[] = $query;
}
+ }else{
+ return(sprintf(_("More than one entry in queue table found, that uses the name ('%s'). Please fix this issue manually first."),$this->cn));
}
- $this->attrs['cn'][0] = $new_cn;
-
+
+ /* Add the queue member entries
+ * First we must remove all old user entries.
+ * to be able to add a clean set of members.
+ */
+ $SQL[]= "DELETE FROM ".$cfg_Current['QUEUE_MEMBER_TABLE']." WHERE queue_name='".$this->cn."';";
+ $SQL[]= "DELETE FROM ".$cfg_Current['QUEUE_MEMBER_TABLE']." WHERE queue_name='".$this->old_cn."';";
+
/* Append new Member for this queue */
- $i = 0;
$queueuser =array();
- foreach($this->parent->by_object['ogroup']->memberList as $member){
- if(isset($member['objectClass'])){
- if(in_array("goFonAccount",$member['objectClass'])){
+ $i = 0;
+ $parent = $this->parent->by_object['ogroup'];
+ foreach($parent->memberList as $member => $mem_data){
+ $obj = $parent->objcache[$member];
+ if(isset($obj['objectClass'])){
+ if(in_array("goFonAccount",$obj['objectClass'])){
$i ++ ;
- $queueuser[$i]['queue_name'] = $this->attrs['cn'][0];
- $queueuser[$i]['interface'] = "SIP/".$member['uid'][0];
+ $queueuser[$i]['queue_name'] = $this->cn;
+ $queueuser[$i]['interface'] = "SIP/".$obj['uid'][0];
$queueuser[$i]['penalty'] = 1;
}
}
$values = preg_replace("/,$/","",$values);
$entries = preg_replace("/,$/","",$entries );
- $SQL[]="INSERT INTO ".$a_SETUP['QUEUE_MEMBER_TABLE']." (".$entries.") VALUES (".$values.")";
+ $SQL[]="INSERT INTO ".$cfg_Current['QUEUE_MEMBER_TABLE']." (".$entries.") VALUES (".$values.")";
}
}
- /* generate Extension entries, with priority */
+
+ /* Add the extension entries
+ * First we must remove all old entensions.
+ */
+ $SQL[]= "DELETE FROM ".$cfg_Current['EXT_TABLE']." WHERE exten='".$this->cn."';\n";
+ $SQL[]= "DELETE FROM ".$cfg_Current['EXT_TABLE']." WHERE exten='".$this->old_cn."';\n";
- $queueusers=0;
- foreach($this->parent->by_object['ogroup']->memberList as $member){
- if(isset($member['objectClass'])){
- if(in_array("goFonAccount",$member['objectClass'])){
- $queueusers++;
- }
+ /* Delete old enxtension entries for the old telephone nubmer */
+ if(is_array($this->old_phone_numbers)){
+ foreach($this->old_phone_numbers as $phone){
+ $SQL[]= "DELETE FROM ".$cfg_Current['EXT_TABLE']." WHERE exten='".$phone."';\n";
+ }
+ }
+
+ /* Delete enxtension entries for telephone numbers */
+ if(is_array($this->telephoneNumber)){
+ foreach($this->telephoneNumber as $phone){
+ $SQL[]= "DELETE FROM ".$cfg_Current['EXT_TABLE']." WHERE exten='".$phone."';\n";
}
}
-
- $i = 0;
-
+ /* Create a extension entry fpr each telephoneNumber */
$i_insert_only_once = false;
-
+ $prio = 11;
foreach($this->telephoneNumber as $num){
-
- // If there are no member in a Queue
- // Play sound an quit
- // A Queue is not deleted directly, it is stored until the o group is deleted
-
+ /* The naming refrences */
if($i_insert_only_once == false){
$i_insert_only_once = true;
$a_ext[$i]['context'] = 'GOsa';
- $a_ext[$i]['exten'] = $this->attrs['cn'][0];
+ $a_ext[$i]['exten'] = $this->cn;
$a_ext[$i]['priority'] = 1;
$a_ext[$i]['app'] = "Goto";
$a_ext[$i]['appdata'] = $num."|1";
$i ++ ;
}
-
- if($queueusers == 0){
+
+
+ if(count($queueuser)==0){
$a_ext[$i]['context'] = 'GOsa';
$a_ext[$i]['exten'] = $num;
$a_ext[$i]['priority'] = 1;
$a_ext[$i]['app'] = "SetLanguage";
$a_ext[$i]['appdata'] = "de";
$i ++ ;
-
+
$a_ext[$i]['context'] = 'GOsa';
$a_ext[$i]['exten'] = $num;
$a_ext[$i]['priority'] = 2;
$a_ext[$i]['app'] = "Playback";
$a_ext[$i]['appdata'] = "ss-noservice";
$i ++ ;
-
+
$a_ext[$i]['context'] = 'GOsa';
$a_ext[$i]['exten'] = $num;
$a_ext[$i]['priority'] = 3;
if(!empty($this->parent->by_object['ogroup']->description)){
$a_ext[$i]['appdata'] = $this->parent->by_object['ogroup']->description;
}else{
- $a_ext[$i]['appdata'] = $this->attrs['cn'][0]." - ".$num;
+ $a_ext[$i]['appdata'] = $this->cn." - ".$num;
}
$i ++ ;
$a_ext[$i]['context'] = 'GOsa';
$a_ext[$i]['exten'] = $num;
$a_ext[$i]['priority'] = 6;
$a_ext[$i]['app'] = "Queue";
- $a_ext[$i]['appdata'] = $this->attrs['cn'][0].
+ $a_ext[$i]['appdata'] = $this->cn;
"|".
$this->goFonDialOption_t.
$this->goFonDialOption_T.
$this->goFonDialOption_r;
}
- if($this->goFonQueueAnnounceHoldtime != false) {
- $this->goFonQueueAnnounceHoldtime = "yes";
- }else{
- $this->goFonQueueAnnounceHoldtime = "no";
- }
-
-
- /* Generate Priority Entry */
- $queue["announce"] = "";
- $queue["monitor_join"] = "";
- $queue["monitor_format"] = "";
- $queue["queue_holdtime"] = $this->goFonQueueAnnounce;
- $queue["queue_lessthan"] = $this->goFonQueueLessThan;
- $queue["announce_round_seconds"]= "";
- $queue["retry"] = $this->goFonQueueRetry;
- $queue["wrapuptime"] = "";
- $queue["servicelevel"] = "";
- $queue["joinempty"] = "no";
- $queue["leavewhenempty"] = "yes";
- $queue["eventmemberstatus"] = "";
- $queue["eventwhencalled"] = "";
- $queue["reportholdtime"] = "yes";
- $queue["memberdelay"] = "";
- $queue["weight"] = "";
- $queue["timeoutrestart"] = "";
-
- $queue["context"] = "default";
- $queue["name"] = $this->attrs['cn'][0];
- $queue["timeout"] = $this->goFonTimeOut;
- $queue["maxlen"] = $this->goFonMaxLen;
- $queue["strategy" ] = $this->goFonQueueStrategyOptionsR[$this->goFonQueueStrategy];
- $queue["queue_thankyou"] = $this->goFonQueueThankYou;
- $queue["queue_reporthold"] = $this->goFonQueueReportHold;
- $queue["announce_frequency"] = $this->goFonAnnounceFrequency;
- $queue["queue_youarenext"] = $this->goFonQueueYouAreNext;
- $queue["queue_thereare"] = $this->goFonQueueThereAre;
- $queue["queue_callswaiting"] = $this->goFonQueueCallsWaiting;
- $queue["queue_minutes"] = $this->goFonQueueMinutes;
- $queue["queue_seconds"] = $this->goFonQueueSeconds;
- $queue["announce_holdtime"] = $this->goFonQueueAnnounceHoldtime;
- $queue["musiconhold"] = $this->goFonMusiconHold;
-
$i++;
}
}
$values = preg_replace("/,$/","",$values);
$entries = preg_replace("/,$/","",$entries );
- $SQL[]="INSERT INTO ".$a_SETUP['EXT_TABLE']." (".$entries.") VALUES (".$values.")";
- }
-
-
- /* Parse and Add Queue */
- $entries = "";
- $values = "";
- foreach($queue as $attr=>$val){
- if($val == "") continue;
- $entries.= "`".$attr."`,";
- $values .= "'".$val."',";
+ $SQL[]="INSERT INTO ".$cfg_Current['EXT_TABLE']." (".$entries.") VALUES (".$values.")";
}
- $values = preg_replace("/,$/","",$values);
- $entries = preg_replace("/,$/","",$entries );
- $SQL[]="INSERT INTO ".$a_SETUP['QUEUE_TABLE']." (".$entries.") VALUES (".$values.")";
- foreach($SQL as $query){
- if(!mysql_query($query)){
- gosa_log(mysql_error());
- print_red(mysql_error());
- return(mysql_error(). sprintf(_("Can't delete in Database %s, on Server %s."),$a_SETUP['DB'],$a_SETUP['SERVER']));
- }
+ foreach($SQL as $query)
+ $res = mysql_query($query,$res_cur);
+ if(!$res){
+ gosa_log(@mysql_error($res_cur));
+ return(_("Mysql query failed.")." "._("Please have a look a the gosa logfiles."));
}
-
}
@mysql_close($r_con);
return(false);
}
-
- /* This function checks if the given phonenumbers are available or already in use*/
-
+ /* This function checks if the given phonenumbers
+ * are available or already in use
+ */
function is_number_used()
{
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
- $ldap->search("(|(objectClass=goFonAccount)(objectClass=goFonQueue)(objectClass=goFonConference))", array("telephoneNumber","cn","uid"));
+ $ldap->search("(&(& (!(uid=".$this->cn."))
+ (!(cn=".$this->cn.")))
+ (| (objectClass=goFonAccount)
+ (objectClass=goFonQueue)
+ (objectClass=goFonConference)))", array("telephoneNumber","cn","uid"));
while($attrs = $ldap->fetch()) {
unset($attrs['telephoneNumber']['count']);
foreach($attrs['telephoneNumber'] as $tele){
}
-
-
-
+ /* Get posted attributes */
function save_object()
{
plugin::save_object();
}else{
$this->goFonQueueAnnounceHoldtime = false;
}
-
}
-
}
+
function save()
{
#fixme workaround : Tab is not initialised correct
if(!$this->is_account) return;
- $ldap= $this->config->get_ldap_link();
- $this->generate_mysql_table_entries(true);
+ $ldap= $this->config->get_ldap_link();
plugin::save();
$this->attrs['goFonDialOption'] = "";
$this->attrs['goFonQueueStrategy'] = $this->goFonQueueStrategyOptionsR[$this->goFonQueueStrategy];
+
+ $str = $this->add_to_database(true);
+ if(!empty($str)){
+ print_red($str);
+ }
+
/* Save data to LDAP */
$ldap->cd($this->dn);
$this->cleanup();
/* remove object from parent */
function remove_from_parent()
{
- $SQL = array();
-
- // Get Configuration for Mysql database Server
- $a_SETUP = $_SESSION['config']->data['SERVERS']['FON'][0];
- $s_parameter ="";
-
- // Connect to DB server
- $r_con = @mysql_pconnect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']);
-
- // Check if we are connected correctly
- if(!$r_con){
- gosa_log(mysql_error());
- return (sprintf(_("The MySQL Server '%s' isn't reachable as user '%s', check GOsa log for mysql error."),
- $a_SETUP['SERVER'],$a_SETUP['LOGIN']));
+ /* Cancel if nothing is to do here */
+ if (!$this->initially_was_account){
+ return;
}
- // Select database for Extensions
- $db = @mysql_select_db($a_SETUP['DB'],$r_con);
-
- // Test if we have the database selected correctly
- if(!$db){
- gosa_log(mysql_error());
- return( sprintf(_("Can't select database %s on %s."),$a_SETUP['DB'],$a_SETUP['SERVER']));
+ /* Remove database entries,
+ * if fails display errors and abort
+ */
+ $str = $this->remove_from_database(true);
+ if(!empty($str)){
+ print_red($str);
+ return false;
}
-
+
/* Remove all temporary attributes */
$tmp = array_flip($this->attributes);
foreach(array("goFonDialOption_t","goFonDialOption_T","goFonDialOption_r","goFonDialOption_h","goFonDialOption_H","cn") as $val){
}
$this->attributes = $tmp2;
- $i = 0;
- $prio = 11;
-
- if(empty($this->cn)){
- $this->cn = $this->parent->by_object['ogroup']->cn;
- $this->attrs['cn'][0] = $this->parent->by_object['ogroup']->cn;
- }
-
- // Delete old Entries
- $delete = array();
- foreach($this->old_phone_numbers as $phone){
- $delete[]= "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$phone."';\n";
- }
- $delete[]= "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$this->attrs['cn'][0]."';\n";
- $delete[]= "DELETE FROM ".$a_SETUP['QUEUE_TABLE']." WHERE name=\"".$this->attrs['cn'][0]."\"; \n";
- $delete[]= "DELETE FROM ".$a_SETUP['QUEUE_MEMBER_TABLE']." WHERE queue_name=\"".$this->attrs['cn'][0]."\";\n";
-
- /* Perform queries to delte old entries */
- foreach($delete as $query){
- if(!mysql_query($query)){
- gosa_log(mysql_error());
- return(mysql_error(). sprintf(_("Can't delete in Database %s, on Server %s."),$a_SETUP['DB'],$a_SETUP['SERVER']));
- }
- }
-
-
-
- /* Cancel if there's nothing to do here */
- if (!$this->initially_was_account){
- return;
- }
-
/* include global link_info */
$ldap= $this->config->get_ldap_link();
/* Remove and write to LDAP */
plugin::remove_from_parent();
- @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__,
- $this->attributes, "Save");
+ @DEBUG (DEBUG_LDAP, __LINE__, __FUNCTION__, __FILE__,$this->attributes, "Save");
$ldap->cd($this->dn);
$this->cleanup();
$ldap->modify ($this->attrs);
-
show_ldap_error($ldap->get_error(), _("Removing phone queue failed"));
}
index 95f7b52e49b278e362e3ca6defdb1476daa86b8d..5f4d59c69979f7de094fdd27e7c610808dd03be0 100644 (file)
<tr>
<td colspan=2><h2><img class="center" alt="" src="images/select_ogroup.png" align="middle"> {t}Options{/t}</h2></td>
</tr>
+ <tr>
+ <td><LABEL for="goFonHomeServer">{t}Home server{/t}</LABEL>{$must}</td>
+ <td>
+ <select name='goFonHomeServer'>
+ {html_options options=$goFonHomeServers selected=$goFonHomeServer}
+ </select>
+ </td>
+ </tr>
+
<tr>
<td>
{t}Language{/t}