diff --git a/plugins/gofon/phoneaccount/class_phoneAccount.inc b/plugins/gofon/phoneaccount/class_phoneAccount.inc
index 68864741ca773c8a876f432255ef7efef152a5bd..819b5b2da46c90e7cf98e978c41d8d63e0d55bd8 100644 (file)
/* Attributes */
var $telephoneNumber = "";
var $goFonHardware = "";
- var $goFonForwarding = "";
var $goFonFormat = "";
var $goFonPIN = "";
+ var $goFonVoicePIN = "";
var $goFonDeliveryMode = "";
var $phoneNumbers = array();
- var $forwarders = array();
var $mail = "";
var $hardware_list = array();
var $used_hardware = array();
var $goFonMacro = "";
- var $macro = 0; // Selected Macor
+ var $macro = 0; // Selected Macro
var $macros = array(); // List of macros for smarty select box
var $macroarray = array(); // All needed macro informations
var $macrostillavailable = false;
+ var $generate_error = "";
+ var $a_old_telenums = array();
+ var $goFonPINVoice = "";
/* CLI vars */
var $cli_summary = "Manage users phone account";
var $cli_parameters = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
/* attribute list for save action */
- var $attributes = array("goFonDeliveryMode", "goFonForwarding", "goFonFormat",
- "goFonHardware", "goFonPIN", "telephoneNumber", "goFonMacro","macro");
+ var $attributes = array("goFonDeliveryMode", "goFonFormat","uid","cn","mail",
+ "goFonHardware","goFonPIN", "telephoneNumber", "goFonMacro","macro");
var $objectclasses= array("goFonAccount");
function phoneAccount ($config, $dn= NULL)
}
}
- /* Assemble forwarders */
- if (isset($this->attrs['goFonForwarding'])){
- for ($i= 0; $i<$this->attrs['goFonForwarding']['count']; $i++){
- list($num, $v1, $v2) =split(';', $this->attrs['goFonForwarding'][$i]);
- $this->forwarders[$num]= "$v1;$v2";
- }
- } else {
- $this->forwarders= array("");
- }
-
/* Set up has_mailAccount */
if (isset($this->attrs['objectClass'])){
if (in_array("gosaMailAccount", $this->attrs['objectClass'])){
}
}
+ $a_SETUP = $_SESSION['config']->data['SERVERS']['FON'];
+ $r_con = @mysql_pconnect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']);
+ if(!$r_con){
+ $this->generate_error = sprintf(_("The MySQL Server '%s' isn't reachable as user '%s', check GOsa log for mysql error."),
+ $a_SETUP['SERVER'],$a_SETUP['LOGIN']);
+ gosa_log(mysql_error());
+ return false;
+ }
+ $db = @mysql_select_db($a_SETUP['DB'],$r_con);
+ if(!$db){
+ $this->generate_error = sprintf(_("Can't select database %s on %s."),$a_SETUP['DB'],$a_SETUP['SERVER']);
+ gosa_log(mysql_error());
+ return false;
+ }
+
+ $first = false;
+ foreach($this->phoneNumbers as $key => $val){
+ if(!$first){
+ $first = $key;
+ }
+ }
+
+ $attrs = @mysql_fetch_row(@mysql_query("SELECT * FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id=".$this->phoneNumbers[$first].";"));
+ if($attrs){
+ $this->goFonPINVoice = $attrs[4];
+ }else{
+ $this->goFonPINVoice = false;
+ }
+
/* Load hardware list */
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
}
- /* Prepare templating */
- $smarty= get_smarty();
-
-
/* Perform search, to get Macro Parameters,Name,Dn,Displayname etc*/
$ldap->search("(objectClass=goFonMacro)", array("*"));
if((isset($attrs['goFonMacroParameter']))&&(is_array($attrs['goFonMacroParameter']))){
foreach($attrs['goFonMacroParameter'] as $pkey=>$pval){
-
/* Split Data in readable values, by delimiter ! */
$data = split("!",$attrs['goFonMacroParameter'][$pkey]);
/* Set all attrs */
$id = $data[0];
$this->macroarray[$attrs['dn']][$id]['var'] ="var".$id;
- $this->macroarray[$attrs['dn']][$id]['choosen']=$data[3];
- $this->macroarray[$attrs['dn']][$id]['id'] = $id;
+ $this->macroarray[$attrs['dn']][$id]['choosen']=$data[3];
+ $this->macroarray[$attrs['dn']][$id]['id'] =$id;
$this->macroarray[$attrs['dn']][$id]['name'] =$data[1];
$this->macroarray[$attrs['dn']][$id]['type'] =$data[2];
$this->macroarray[$attrs['dn']][$id]['default']=$data[3];
+ if($data[2] == "bool"){
+ $this->macroarray[$attrs['dn']][$id]['choosen']=$data[3];
+ }
}//foreach
}//is_array
}//visible = 1
/* Only insert if the parameter still exists */
if(isset($this->macroarray[$this->macro][$varar[0]])){
-
/* Assign value */
$this->macroarray[$this->macro][$varar[0]]['choosen']=$varar[1];
}
}
}
+
/* Eventually colorize phones */
$ldap->cd($this->config->current['BASE']);
foreach ($this->hardware_list as $cn => $desc){
}
}
}
-
$this->hardware_list["automatic"]= _("automatic");
ksort($this->hardware_list);
+ $this->a_old_telenums = $this->phoneNumbers;
+
+ if($this->is_account){
+ $this->is_modified = true;
+ }
+
+ /* Set PINs to false,
+ * to avoid setting them before we explicitly
+ * pressed set voicemail PIN or Phone PIN
+ */
+
+ if(count(split("\|",$this->goFonPIN))==2){
+ $tmp = split("\|",$this->goFonPIN);
+ $this->goFonPIN = $tmp[0];
+ $this->goFonVoicePIN = $tmp[1];
+ }else{
+ $this->goFonVoicePIN = $this->goFonPIN;
+ }
+
+ // Unset goFonPIN, to avoid save_object for this attribute
+ foreach($this->attributes as $key=>$val){
+ if($val == "goFonPIN"){
+ unset($this->attributes[$key]);
+ }
+ }
+
+ }
+
+
+ // Generate MySQL Syntax
+ function generate_mysql_entension_entries($save = false){
+
+ // Get Configuration for Mysql database Server
+ $a_SETUP = $_SESSION['config']->data['SERVERS']['FON']; // DB Configuration
+ $s_parameter = ""; // Contains paramter for selected Macro
+ $r_con = false; // DB connection
+ $r_db = false; // Selected DB
+ $r_res = false; // Result resource
+ $a_ldap_attrs = array(); //
+
+ $s_ip = NULL; // Contains ip for Sip entry
+ $s_host = NULL; // Contains host for Sip entry
+ $s_qualify = NULL; // Qualify entry
+ $s_pin = NULL; // Entry for secret
+ $s_type = NULL; // Entry for phone type (friend , peer ..)
+
+ $sip_data_array = array(); // Contains complete sip entry, to generate SQL syntax
+ $i_old_key = false; // Contains index for first old phonenumber, to delete old entries corectly
+ $i_new_key = false; // Contains index for first new phonenumber, to generate new entries corectly
+
+ $s_sip_values = ""; // Contains string with all values for given attributes in SQL syntax
+ $s_sip_keys = ""; // Contains all needed attributes to generate sip entry in DB
+
+ $s_sip_key = ""; // Key for SIP entry index
+ $s_sip_val = ""; // Value for SIP entry index
+
+ $b_first_deleted= false; // Only delete first entry,
+ $s_telenums = ""; // for each value variable
+
+ $i_is_accounted =false; // Ensure that extension entry, for name to number is only once in table
+
+
+ // Connect to DB server
+ $r_con = @mysql_connect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']);
+
+ // Check if we are connected correctly
+ if(!$r_con){
+ $this->generate_error = sprintf(_("The MySQL Server '%s' isn't reachable as user '%s', check GOsa log for mysql error."),
+ $a_SETUP['SERVER'],$a_SETUP['LOGIN']);
+ gosa_log(mysql_error());
+ return false;
+ }
+
+ // Select database for Extensions
+ $r_db = @mysql_select_db($a_SETUP['DB'],$r_con);
+
+ // Test if we have the database selected correctly
+ if(!$r_db){
+ $this->generate_error = sprintf(_("Can't select database %s on %s."),$a_SETUP['DB'],$a_SETUP['SERVER']);
+ gosa_log(mysql_error());
+ return false;
+ }
+
+ // Get phonehardware to setup sip entry
+ $ldap = $this->config->get_ldap_link();
+ $r_res = $ldap->search("(&(objectClass=goFonHardware)(cn=".$this->goFonHardware."))", array('*'));
+ $a_ldap_attrs = $ldap->fetch();
+
+ if($this->is_number_used()){
+ $this->generate_error = $this->is_number_used();
+ return false;
+ }
+
+ $existence = @mysql_fetch_row(@mysql_query( "SELECT * FROM ".$a_SETUP['SIP_TABLE']." WHERE name='".$this->uid."';"));
+
+ if(!$existence&&((empty($this->goFonPIN))||(empty($this->goFonVoicePIN)))){
+ $this->generate_error = _("You are currently creating a new phone account, please specify a value for phone PIN and voice PIN.");
+ return(false);
+ }
+
+ if((empty($this->goFonPIN))&&(empty($existence[27]))){
+ $this->generate_error = _("The PIN attribute is missing in database entry. Please assign a valid phone PIN.");
+ return(false);
+ }
+
+ if(isset($existence[15])){
+ $voice = @mysql_fetch_row(@mysql_query("SELECT password FROM ".$a_SETUP['VOICE_TABLE']." where customer_id='".$existence[15]."'"));
+ if((empty($this->goFonVoicePIN))&&(empty($voice[0]))){
+ $this->generate_error = _("The voice PIN attribute is missing in database entry. Please assign a valid voice PIN.");
+ return(false);
+ }
+ }
+
+ /* If Save == true, we should save something.
+ * Generate SQL, for drop of old entries
+ * Generate SQL, for insert new entries
+ */
+ if($save == true){
+
+ /* Get old voice passwword if no new isset */
+ if($this->goFonPIN==false){
+ $pin = @mysql_fetch_row(@mysql_query("SELECT secret FROM ".$a_SETUP['SIP_TABLE']." where name='".$this->uid."'"));
+ $this->goFonPIN = $pin[0];
+ }
+
+ // Attribute GoFonDefaultIP set ?
+ if(((isset($a_ldap_attrs['goFonDefaultIP'][0]))&&($a_ldap_attrs['goFonDefaultIP'][0] != "dynamic"))){
+ $s_ip = $a_ldap_attrs['goFonDefaultIP'][0];
+ $s_host = $s_ip;
+ }else{
+ $s_ip = NULL;
+ $s_host = "dynamic";
+ }
+
+ // Attribute GoFonQualify set ?
+ if(isset($a_ldap_attrs['goFonQualify'])){
+ $s_qualify = $a_ldap_attrs['goFonQualify'][0];
+ }
+
+ // Attribute GoFonPIN set ?
+ if(isset($this->goFonPIN)){
+ $s_pin = $this->goFonPIN;
+ }
+
+ // Attribute GoFonType set ?
+ if(isset($a_ldap_attrs['goFonType'])){
+ $s_type = $a_ldap_attrs['goFonType'][0];
+ }
+
+ if(isset($a_ldap_attrs['goFonDmtfMode'][0])){
+ $sip_data_array['dtmfmode'] = $a_ldap_attrs['goFonDmtfMode'][0];
+ }else{
+ $sip_data_array['dtmfmode'] ="rfc2833";
+ }
+
+ // generate SIP entry
+ $sip_data_array['id'] = "";
+ $sip_data_array['name'] = $this->uid;
+ $sip_data_array['accountcode'] = NULL;
+ $sip_data_array['amaflags'] = NULL;
+ $sip_data_array['callgroup'] = NULL;
+ $sip_data_array['callerid'] = "";
+ $sip_data_array['canreinvite'] = "no";
+ $sip_data_array['context'] = "default";
+ $sip_data_array['defaultip'] = NULL;
+ $sip_data_array['fromuser'] = NULL;
+ $sip_data_array['fromdomain'] = NULL;
+ $sip_data_array['host'] = $s_host;
+ $sip_data_array['insecure'] = NULL;
+ $sip_data_array['language'] = NULL;
+ $sip_data_array['mailbox'] = "asterisk";
+ $sip_data_array['md5secret'] = NULL;
+ $sip_data_array['nat'] = "no";
+ $sip_data_array['permit'] = NULL;
+ $sip_data_array['deny'] = NULL;
+ $sip_data_array['mask'] = NULL;
+ $sip_data_array['pickupgroup'] = NULL;
+ $sip_data_array['port'] = NULL;
+ $sip_data_array['qualify'] = $s_qualify;
+ $sip_data_array['restrictcid'] = "n";
+ $sip_data_array['rtptimeout'] = NULL;
+ $sip_data_array['rtpholdtimeout']=NULL;
+ $sip_data_array['secret'] = $s_pin;
+ $sip_data_array['type'] = $s_type ;
+ $sip_data_array['username'] = $this->uid;
+ $sip_data_array['disallow'] = NULL;
+ $sip_data_array['allow'] = NULL;
+ $sip_data_array['musiconhold'] = NULL;
+ $sip_data_array['regseconds'] = NULL;
+ $sip_data_array['ipaddr'] = $s_ip;
+ $sip_data_array['regexten'] = NULL;
+ $sip_data_array['cancallforward']=NULL;
+
+ // Get selected Macro Parameter and create parameter entry
+ if(isset($this->macroarray[$this->macro])){
+ foreach($this->macroarray[$this->macro] as $key => $val ){
+ $s_parameter .= $val['choosen']."|";
+ }
+ $s_parameter = preg_replace("/\|$/","",$s_parameter);
+ }
+
+ if($this->is_number_used()){
+ $this->generate_error = $this->is_number_used();
+ return false;
+ }
+
+ // Create new SIP entry ...
+ $sip_entry = $sip_data_array;
+ reset($this->phoneNumbers);
+ $i_new_key = key($this->phoneNumbers);
+ $sip_entry['callerid'] =$this->phoneNumbers[$i_new_key];
+ $sip_entry['mailbox'] =$this->phoneNumbers[$i_new_key];
+
+ if((isset($this->parent))&&(isset($this->parent->by_object['mailAccount']))&&($this->parent->by_object['mailAccount']->is_account==true)){
+ $s_mail = $this->parent->by_object['mailAccount']->mail;
+ }else{
+ $s_mail = "";
+ }
+
+
+ /* Get old voice passwword if no new isset */
+ if($this->goFonVoicePIN==false){
+ $voice = @mysql_fetch_row(@mysql_query("SELECT password FROM ".$a_SETUP['VOICE_TABLE']." where customer_id=".$this->phoneNumbers[$i_new_key].""));
+ $this->goFonVoicePIN = $voice[0];
+ }
+
+ /* Get old voice passwword if no new isset */
+ if($this->goFonPIN==false){
+ $pin = @mysql_fetch_row(@mysql_query("SELECT secret FROM ".$a_SETUP['SIP_TABLE']." where name='".$this->uid."'"));
+ $this->goFonPIN = $pin[0];
+ }
+
+ // $SQL contains all queries
+ $SQL = array();
+ $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$this->uid."';\n";
+ $SQL[] = "DELETE FROM ".$a_SETUP['SIP_TABLE']." WHERE name='".$this->uid."';\n";
+ $SQL[] = "DELETE FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id=".$this->phoneNumbers[$i_new_key].";";
+
+ // Generate Strings with keys and values
+ foreach($sip_entry as $s_sip_key=>$s_sip_val){
+ if($s_sip_val == NULL) continue;
+ $s_sip_values.="'".$s_sip_val."',";
+ $s_sip_keys .="`".$s_sip_key."`,";
+ }
+ // Remove last ,
+ $s_sip_values = preg_replace("/,$/","",$s_sip_values);
+ $s_sip_keys = preg_replace("/,$/","",$s_sip_keys);
+
+ // Append SIP Entry
+ $SQL[] ="INSERT INTO ".$a_SETUP['SIP_TABLE']." (".$s_sip_keys.") VALUES (".$s_sip_values.");";
+
+ // Delete old entries
+ $b_first_deleted =false;
+ foreach($this->a_old_telenums as $s_telenums){
+ $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$s_telenums."';\n";
+ if(!$b_first_deleted){
+ $b_first_deleted=true;
+ $SQL[] = "DELETE FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id=".$s_telenums.";";
+ }
+ }
+
+ if(empty($this->goFonPINVoice)){
+ $this->goFonPINVoice = $this->goFonPIN;
+ }
+
+ /* If deletion starts from userslist, cn uid are not set */
+ if((isset($this->parent->by_object['user']->uid))&&(!empty($this->parent->by_object['user']->uid))){
+ $this->uid = $this->parent->by_object['user']->uid;
+ }
+
+ if((isset($this->parent->by_object['user']->cn))&&(!empty($this->parent->by_object['user']->cn))){
+ $this->cn = $this->parent->by_object['user']->cn;
+ }
+
+ if((!isset($this->cn))||(empty($this->cn))){
+ $CNname= $this->uid;
+ }else{
+ $CNname= $this->cn;
+ }
+
+ $SQL[]= "INSERT INTO ".$a_SETUP['VOICE_TABLE']." (`customer_id`,`context`,`mailbox`,`password`,`fullname`,`email`,`pager`)
+ VALUES ('".$this->phoneNumbers[$i_new_key]."',
+ 'default',
+ '".$this->phoneNumbers[$i_new_key]."',
+ '".$this->goFonVoicePIN."',
+ '".$CNname."',
+ '".$s_mail."',
+ '');";
+ $i_is_accounted=false;
+
+ $i = 0;
+
+ // Entension entries Hint / Dial / Goto
+ foreach($this->phoneNumbers as $s_telenums){
+
+ /* Mapping : Name TO Number*/
+ $EXT[$i]['context'] = 'GOsa';
+ $EXT[$i]['exten'] = $this->uid;
+ $EXT[$i]['priority']= 1;
+ $EXT[$i]['app'] = "Goto";
+ $EXT[$i]['appdata'] = $s_telenums."|1";
+ $i ++;
+ /* Hint Entry */
+ $EXT[$i]['context'] = 'GOsa';
+ $EXT[$i]['exten'] = $s_telenums;
+ $EXT[$i]['priority']= "Hint";
+ $EXT[$i]['app'] = 'SIP/'.$this->uid;
+ $i ++;
+ /* SetCID */
+ $EXT[$i]['context'] = 'GOsa';
+ $EXT[$i]['exten'] = $s_telenums;
+ $EXT[$i]['priority']= 1;
+ $EXT[$i]['app'] = "SetCIDName";
+ $EXT[$i]['appdata'] = $CNname;
+ $i ++;
+
+ // If no macro is selected use Dial
+ if($this->macro!="none"){
+ $macroname = preg_replace("/,.*$/","",$this->macro);
+ $macroname = preg_replace("/^.*=/","",$macroname);
+ $s_app = "Macro";$macroname;
+ $s_par = $macroname."|".$s_parameter;
+ }else{
+ $s_app = "Dial";
+ $s_par = 'SIP/'.$this->uid;
+ }
+
+ $EXT[$i]['context'] = 'GOsa';
+ $EXT[$i]['exten'] = $s_telenums;
+ $EXT[$i]['priority']= 2;
+ $EXT[$i]['app'] = $s_app;
+ $EXT[$i]['appdata'] = $s_par;
+ $i ++;
+
+ }
+
+ // Append all these Entries
+ foreach($EXT as $entr){
+ $SQL_syn = "INSERT INTO ".$a_SETUP['EXT_TABLE']." (";
+ foreach($entr as $key2 => $val2){
+ $SQL_syn.= "`".$key2."`,";
+ }
+ $SQL_syn = preg_replace("/,$/","",$SQL_syn);
+ $SQL_syn .= ") VALUES (";
+ foreach($entr as $key2 => $val2){
+ $SQL_syn .= "'".$val2."',";
+ }
+ $SQL_syn = preg_replace("/,$/","",$SQL_syn);
+ $SQL_syn .=");\n";
+ $SQL[] =$SQL_syn;
+ $SQL_syn ="";
+ }
+
+ // Perform queries ...
+ foreach($SQL as $query){
+ if(!@mysql_query($query,$r_con)){
+ print_red(_("Error while performing query ".mysql_error()));
+ return false;
+ }
+ }
+ }
+ return true;
}
function execute()
{
+ /* Do we represent a valid account? */
+ if (!$this->is_account && $this->parent == NULL){
+ $display= "<img alt=\"\" src=\"images/stop.png\" align=\"middle\"> <b>".
+ _("This account has no phone extensions.")."</b>";
+ $display.= back_to_main();
+ return ($display);
+ }
+
/* Do we need to flip is_account state? */
if (isset($_POST['modify_state'])){
$this->is_account= !$this->is_account;
$this->macro ="none";
}
+ if(isset($_POST['goFonVoicePINSet'])){
+ if((strlen($_POST['goFonVoicePIN'])==0)||(strlen($_POST['goFonVoicePIN'])>4)){
+ print_red(_("Voicemail PIN must be between 1-4 characters."));
+ }else{
+ if(preg_match("/[^0-9]/",$_POST['goFonVoicePIN'])){
+ print_red(_("The specified Voicemail PIN contains invalid characters, only numeric values are allowed here."));
+ }else{
+ $this->goFonVoicePIN=$_POST['goFonVoicePIN'];
+ }
+ }
+ }
+
+ if(isset($_POST['goFonPINSet'])){
+ if((strlen($_POST['goFonPIN'])!=4)){
+ print_red(_("Phone PIN must be 4 characters long."));
+ }else{
+ if(preg_match("/[^0-9]/",$_POST['goFonVoicePIN'])){
+ print_red(_("The specified phone PIN contains invalid characters, only numeric values are allowed here."));
+ }else{
+ $this->goFonPIN=$_POST['goFonPIN'];
+ }
+ }
+ }
+
/* tell user that the pluging selected is no longer available*/
if((!$this->macrostillavailable)&&($this->macro!="none")){
- print_red(_("The macro you selected in the past, is no longer available for you, please choose another one."));
+ print_red(_("The macro you selected, is no longer available for you, please choose another one."));
}
/* Prepare templating */
$macrotab ="<table summary=\""._("Parameter")."\">";
/* for every single parameter-> display textfile,combo, or true false switch*/
+
+
+ /* Automatic fill out */
+ if(isset($_POST['fillout'])){
+
+ foreach($this->phoneNumbers as $phonenum){
+ $tmp[] = $phonenum;
+ }
+
+ /* Go through all params */
+ foreach($this->macroarray[$this->macro] as $key => $paras){
+
+ $string = $paras['default'];
+
+ $string=preg_replace("/%uid/i",$this->uid,$string);
+
+ if(isset($this->cn)){
+ $string=preg_replace("/%cn/i",$this->cn,$string);
+ }
+
+ for($i = 0 ; $i < 10; $i++){
+ if(isset($tmp[$i])){
+ $string = preg_replace("/%telephoneNumber_".($i+1)."/i",$tmp[$i],$string);
+ }
+ }
+
+ $this->macroarray[$this->macro][$key]['choosen']=$string;
+ }
+ }
+
foreach($this->macroarray[$this->macro] as $paras){
/* get al vars */
case "combo":
$str= "<select name='".$var."' ".chkacl($this->acl, "goFonMacro")." ".chkacl($this->acl, "goFonMacro").">";
- foreach(split(":",$default) as $choice){
- if($choosen==$choice){
- $str.= "\n<option value='".$choice."' selected>".$choice." </option>";
- }else{
- $str.= "\n<option value='".$choice."'>".$choice." </option>";
- }
+ foreach(split(":",$default) as $choice){
+ if($choosen==$choice){
+ $str.= "\n<option value='".$choice."' selected>".$choice." </option>";
+ }else{
+ $str.= "\n<option value='".$choice."'>".$choice." </option>";
}
- $str.="</select>";
- $macrotab.= "<td>$name</td><td>$str";
- break;
+ }
+ $str.="</select>";
+ $macrotab.= "<td>".base64_decode($name)."</td><td>$str";
+ break;
case "bool":
if(!$choosen){
}else{
$str="\n<input type='checkbox' name='".$var."' value='1' checked ".chkacl($this->acl, "goFonMacro").">";
}
- $macrotab.= "<td colspan='2'>$str $name";
- break;
+ $macrotab.= "<td colspan='2'>$str ".base64_decode($name)."";
+ break;
case "string":
- $str="<input name='".$var."' value='".$choosen."' ".chkacl($this->acl, "goFonMacro").">";
- $macrotab.= "<td>$name</td><td>$str";
- break;
+ $str="<input name='".$var."' value='".$choosen."' ".chkacl($this->acl, "goFonMacro")." style='width:340px;'>";
+ $macrotab.= "<td>".base64_decode($name)."</td><td>$str";
+ break;
}
- $macrotab.= "</td</tr>";
+ $macrotab.= "</td></tr>";
}
- $macrotab.="</table>";
+ $macrotab.="</table><input name='post_success' type='hidden' value='1'>";
}//is_array()
/* Give smarty the table */
$display= $this->show_header(_("Remove phone account"),
_("This account has phone features enabled. You can disable them by clicking below."));
} else {
- $display= $this->show_header(_("Create phone account"),
- _("This account has phone features disabled. You can enable them by clicking below."));
+ if(empty($this->uid)){
+ $display= $this->show_header(_("Create phone account"),
+ _("This account has phone features disabled. You can't enable them while no uid is set."),TRUE,TRUE);
+ }else{
+ $display= $this->show_header(_("Create phone account"),
+ _("This account has phone features disabled. You can enable them by clicking below."));
+ }
return ($display);
}
}
}
}
- /* Check for forwarding action */
- foreach ($this->forwarders as $nr => $fw){
-
- /* Buttons pressed? */
- if (isset($_POST["add_fw$nr"])){
- $this->forwarders= $this->insert_after("", $nr, $this->forwarders);
- }
- if (isset($_POST["remove_fw$nr"])){
- unset($this->forwarders[$nr]);
- }
- }
-
/* Transfer ACL's */
foreach($this->attributes as $val){
$smarty->assign($val."ACL", chkacl($this->acl, "$val"));
- $smarty->assign($val,$this->$val);
+ if(isset($this->$val)){
+ $smarty->assign($val,$this->$val);
+ }else{
+ $smarty->assign($val,"");
+ }
}
/* Fill arrays */
$hl.= "</select>\n";
$smarty->assign ("hardware_list", $hl);
- /* Generate forwarder view */
- $forwarder_list="";
- $acl= chkacl($this->acl, "goFonForwaring");
- foreach ($this->forwarders as $nr => $fw){
- if ($fw == ""){
- $number= ""; $timeout= "";
- } else {
- list($number, $timeout)= split(";", $fw);
- }
- $forwarder_list.= "<tr><td>";
- $forwarder_list.= "<input name=\"fwn$nr\" size=25 align=\"middle\" maxlength=60 value=\"$number\" $acl>";
- $forwarder_list.= "</td><td>";
- $forwarder_list.= "<input name=\"fwt$nr\" size=5 align=\"middle\" maxlength=5 value=\"$timeout\" $acl>";
- $forwarder_list.= "</td><td>";
- $forwarder_list.= "<input type=\"submit\" value=\""._("Add")."\" name=\"add_fw$nr\" $acl>";
- if (count($this->forwarders) > 1){
- $forwarder_list.= "<input type=\"submit\" value=\""._("Remove")."\" name=\"remove_fw$nr\" $acl>";
- }
- $forwarder_list.= "</td></tr>";
+ /* Show main page */
+
+ foreach(array("goFonVoicePIN","goFonPIN") as $attrs ){
+ $smarty->assign($attrs,$this->$attrs);
+ $smarty->assign($attrs."ACL",chkacl($this->acl,$attrs));
}
- $smarty->assign("forwarder_list", $forwarder_list);
- /* Show main page */
+
$display.= $smarty->fetch(get_template_path('generic.tpl', TRUE, dirname(__FILE__)));
return($display);
}
$this->goFonDeliveryMode= $tmp;
}
- /* Save forwarding numbers and timeouts */
- if (chkacl ($this->acl, "goFonForwarder") == ""){
- foreach ($this->forwarders as $nr => $fw){
- $tmp= $_POST["fwn$nr"].";".$_POST["fwt$nr"];
- if ($this->forwarders[$nr] != $tmp){
- $this->is_modified= TRUE;
- }
- $this->forwarders[$nr]= $tmp;
- }
- }
-
/* Every macro in the select box are available */
if((isset($_POST['macro']))){
$this->macrostillavailable=true;
}
+ if(is_array($this->phoneNumbers)){
+ foreach($this->phoneNumbers as $telenumms) {
+ $nummsinorder[]=$telenumms;
+ }
+ }else{
+ $nummsinorder=array("");
+ }
+
/* get all Postvars */
if(isset($this->macroarray[$this->macro])){
foreach($this->macroarray[$this->macro] as $key => $paras){
if(isset($_POST[$paras['var']])){
- $this->macroarray[$this->macro][$key]['choosen'] = $_POST[$paras['var']];
+ $this->macroarray[$this->macro][$key]['choosen'] = $_POST[$paras['var']];
}
-
+
/* Checkboxes are special, they are not Posted if they are not selected, so the won't be changed with the above code
We need this code below to read and save checkboxes correct
- */
- if($this->macroarray[$this->macro][$key]['type']=="bool"){
- if(isset($_POST[$this->macroarray[$this->macro][$key]['var']])) {
- $this->macroarray[$this->macro][$key]['choosen']=$_POST[$paras['var']];
- }else{
- $this->macroarray[$this->macro][$key]['choosen']=false;
+ */
+
+ if(isset($_POST['post_success'])){
+ if($this->macroarray[$this->macro][$key]['type']=="bool"){
+ if(isset($_POST[$this->macroarray[$this->macro][$key]['var']])) {
+ $this->macroarray[$this->macro][$key]['choosen']=$_POST[$paras['var']];
+ }else{
+ $this->macroarray[$this->macro][$key]['choosen']=false;
+ }
}
}
}
}
}
-
-
}
function check()
/* Reset message array */
$message= array();
+ if(!$this->generate_mysql_entension_entries()){
+ $message[] = $this->generate_error;
+ }
+
/* We need at least one phone number */
if (count($this->phoneNumbers) == 0){
$message[]= sprintf(_("You need to specify at least one phone number!"));
}
- if(($this->goFonPIN)==""){
- $this->goFonPIN = array();
- }else{
- if(strcmp ((int)($this->goFonPIN),($this->goFonPIN))){
- $message[] = sprintf(_("The given PIN is not valid, only numbers are allowed for this type."));
- }elseif(strlen($this->goFonPIN) < 4){
- $message[] = sprintf(_("The given PIN is too short"));
- }
-
- }
- /* Check timestamps and phonenumbers */
- foreach ($this->forwarders as $fw){
-
- /* Skip empty values */
- if ($fw == ";"){
- continue;
- }
-
- /* Check */
- list($number, $timeout)= split(";", $fw);
- if (!is_phone_nr($number)){
- $message[]= sprintf(_("The number '%s' is no valid phone number!"), $number);
- }
- if (!is_id($timeout)){
- $message[]= sprintf(_("The timeout '%s' contains invalid characters!"), $timeout);
- }
- }
-
/* check for ! in any parameter setting*/
if(isset($this->macroarray[$this->macro])){
foreach($this->macroarray[$this->macro] as $val){
foreach ($this->phoneNumbers as $number){
$this->attrs['telephoneNumber'][]= $number;
}
- $this->attrs['goFonForwarding']= array();
- foreach ($this->forwarders as $index => $number){
- $this->attrs['goFonForwarding'][]= "$index;$number";
- }
/* Save settings, or remove goFonMacro attribute*/
if($this->macro!="none"){
}
unset($this->attrs['macro']) ;
+ $this->attrs['goFonForwarding']=array();
+
+ $this->generate_mysql_entension_entries(true);
+
if($this->attrs['goFonMacro']==""){
$this->attrs['goFonMacro']=array();
}
+
+ /* Cahnged behavior for goFonPIN */
+ $this->attrs['goFonPIN'] = $this->goFonPIN."|".$this->goFonVoicePIN;
+
+ unset($this->attrs['cn']);
+
/* Write back to ldap */
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->dn);
show_ldap_error($ldap->get_error());
/* Optionally execute a command after we're done */
+
if ($this->initially_was_account == $this->is_account){
if ($this->is_modified){
$this->handle_post_events("modify");
$this->phoneNumbers[$number]= $number;
}
}
-
- /* Assemble forwarders */
- if (isset($this->attrs['goFonForwarding'])){
- for ($i= 0; $i<$this->attrs['goFonForwarding']['count']; $i++){
- list($num, $v1, $v2) =split(';', $this->attrs['goFonForwarding'][$i]);
- $this->forwarders[$num]= "$v1;$v2";
- }
- } else {
- $this->forwarders= array("");
- }
}
function remove_from_parent()
{
+
+ foreach($this->attributes as $key=>$val){
+ if(in_array($val,array("uid","cn","mail"))){
+ unset($this->attributes[$key]);
+ unset($this->$val);
+ }
+ }
+
+ $this->attributes[]="goFonPIN";
+
+ // Get Configuration for Mysql database Server
+ $a_SETUP = $_SESSION['config']->data['SERVERS']['FON'];
+ $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){
+ $this->generate_error = sprintf(_("The MySQL Server '%s' isn't reachable as user '%s', check GOsa log for mysql error."),
+ $a_SETUP['SERVER'],$a_SETUP['LOGIN']);
+ gosa_log(@mysql_error());
+ return false;
+ }
+
+ // Select database for Extensions
+ $db = @mysql_select_db($a_SETUP['DB'],$r_con);
+
+ // Test if we have the database selected correctly
+ if(!$db){
+ $this->generate_error = sprintf(_("Can't select database %s on %s."),$a_SETUP['DB'],$a_SETUP['SERVER']);
+ gosa_log(@mysql_error());
+ return false;
+ }
+
+ $SQL="";
+
+ /* If deletion starts from userslist, cn uid are not set */
+ if((isset($this->parent->by_object['user']->uid))&&(!empty($this->parent->by_object['user']->uid))){
+ $this->uid = $this->parent->by_object['user']->uid;
+ }
+
+ if((isset($this->parent->by_object['user']->cn))&&(!empty($this->parent->by_object['user']->cn))){
+ $this->cn = $this->parent->by_object['user']->cn;
+ }
+
+ $first_num = false;
+ // Delete old entries
+ foreach($this->a_old_telenums as $s_telenums){
+ if(!$first_num){
+ $first_num = $s_telenums;
+ }
+ $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$s_telenums."';\n";
+ }
+
+ $SQL[] = "DELETE FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id='".$first_num."';";
+ $SQL[] = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE exten='".$this->uid."';\n";
+ $SQL[] = "DELETE FROM ".$a_SETUP['SIP_TABLE']." WHERE name='".$this->uid."';\n";
+
+
+ foreach($SQL as $query){
+ if(!@mysql_query($query,$r_con)){
+ print_red(_("Stop".mysql_error()));
+ return false;
+ }
+ }
+
+
+
/* unset macro attr, it will cause an error */
$tmp = array_flip($this->attributes);
unset($tmp['macro']);
$this->attributes=array_flip($tmp);
-
+
/* Cancel if there's nothing to do here */
if (!$this->initially_was_account){
return;
/* Just keep one phone number */
if (count($this->telephoneNumber) && $this->telephoneNumber != ""){
- $this->attrs['telephoneNumber']= $this->telephoneNumber[0];
+ $this->attrs['telephoneNumber']= $this->telephoneNumber;
} else {
$this->attrs['telephoneNumber']= array();
}
$ldap= $this->config->get_ldap_link();
+ $ldap->cd($this->config->current['BASE']);
+ $ldap->search("(objectClass=goFonQueue)", array("member"));
+ while($attr = $ldap->fetch()){
+ if(in_array($this->dn,$attr['member'])){
+ $new =new ogrouptabs($this->config, $this->config->data['TABS']['OGROUPTABS'],$attr['dn']);
+ unset($new->by_object['ogroup']->memberList[$this->dn]);
+ unset($new->by_object['ogroup']->member[$this->dn]);
+ $new->save();
+ print_red(sprintf(_("Removed user '%s' from phone queue '%s'."),$this->uid,$new->by_object['ogroup']->attrs['cn']));
+ }
+ }
$ldap->cd($this->dn);
$ldap->modify($this->attrs);
show_ldap_error($ldap->get_error());
}
+
+ /* 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"));
+ while($attrs = $ldap->fetch()) {
+ unset($attrs['telephoneNumber']['count']);
+ foreach($attrs['telephoneNumber'] as $tele){
+ if(!isset($attrs['cn'][0])) $attrs['cn'][0]=$attrs['dn'];
+ if(!isset($attrs['uid'][0])) $attrs['uid'][0]=$attrs['dn'];
+ $numbers[$tele]=$attrs;
+ }
+ }
+
+ foreach($this->phoneNumbers as $num){
+ if(!isset($this->cn)) $this->cn = "";
+
+ if((isset($numbers[$num]))&&(($numbers[$num]['uid'][0]!=$this->uid))){
+ if(isset($numbers[$num]['uid'][0])){
+ return sprintf(_("The specified telephonenumber '%s' is already assigned to '%s'."),$num,$numbers[$num]['uid'][0]);
+ }else{
+ return sprintf(_("The specified telephonenumber '%s' is already assigned to '%s'."),$num,$numbers[$num]['cn'][0]);
+ }
+ }
+ }
+ }
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: