diff --git a/plugins/gofon/phoneaccount/class_phoneAccount.inc b/plugins/gofon/phoneaccount/class_phoneAccount.inc
index 5ab022af63a3c54d0973ac5fffb8dd0bf8407445..819b5b2da46c90e7cf98e978c41d8d63e0d55bd8 100644 (file)
var $goFonHardware = "";
var $goFonFormat = "";
var $goFonPIN = "";
+ var $goFonVoicePIN = "";
var $goFonDeliveryMode = "";
var $phoneNumbers = 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 $uid;
- var $cn;
+ 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", "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)
}
}
+ $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();
}
- /* Prepare templating */
- $smarty= get_smarty();
-
-
/* Perform search, to get Macro Parameters,Name,Dn,Displayname etc*/
$ldap->search("(objectClass=goFonMacro)", array("*"));
$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
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 of new 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];
$sip_data_array['amaflags'] = NULL;
$sip_data_array['callgroup'] = NULL;
$sip_data_array['callerid'] = "";
- $sip_data_array['canreinvite'] = "yes";
+ $sip_data_array['canreinvite'] = "no";
$sip_data_array['context'] = "default";
$sip_data_array['defaultip'] = NULL;
$sip_data_array['fromuser'] = NULL;
$sip_entry['callerid'] =$this->phoneNumbers[$i_new_key];
$sip_entry['mailbox'] =$this->phoneNumbers[$i_new_key];
- if((isset($this->parent->by_object['mailAccount']->mail))&&($this->parent->by_object['mailAccount']->is_account==true)){
+ 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[]= "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->goFonPIN."','".$this->sn."','".$s_mail."','');";
+ if(empty($this->goFonPINVoice)){
+ $this->goFonPINVoice = $this->goFonPIN;
+ }
- $i_is_accounted=false;
+ /* 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){
- // Entry to call by name
- $s_entry_name['context'] = 'GOsa';
- $s_entry_name['exten'] = $this->uid;
- $s_entry_name['priority'] = 1;
- $s_entry_name['app'] = 'Goto';
- $s_entry_name['appdata'] = $s_telenums."|1";
-
- // hint
- $s_entry_hint['context'] = 'GOsa';
- $s_entry_hint['exten'] = $s_telenums;
- $s_entry_hint['priority'] = 'hint';
- $s_entry_hint['app'] = 'SIP/'.$this->uid;
+
+ /* 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"){
$s_par = 'SIP/'.$this->uid;
}
- // Entry to call by number
- $s_entry_phone['context'] = 'GOsa';
- $s_entry_phone['exten'] = $s_telenums;
- $s_entry_phone['priority'] = 1;
- $s_entry_phone['app'] = $s_app;
- $s_entry_phone['appdata'] = $s_par;
-
- // append name entry only once
- if(!$i_is_accounted){
- $i_is_accounted = true;
- $entries[]=array("hint"=>$s_entry_hint,"phone"=>$s_entry_phone,"name"=>$s_entry_name);
- }else{
- $entries[]=array("hint"=>$s_entry_hint,"phone"=>$s_entry_phone);
- }
+ $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($entries as $num => $val){
- foreach($val 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 ="";
+ 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)){
+ if(!@mysql_query($query,$r_con)){
print_red(_("Error while performing query ".mysql_error()));
return false;
}
}
-
-
-
-
-
-
-
-
-
-
-
-
function execute()
{
- /* force postmodify event, to restart phones */
-
- $this->parent->by_object['user']->is_modified=TRUE;
- $this->is_modified=TRUE;
-
- $this->uid = $this->parent->by_object['user']->uid;
- $this->cn = $this->parent->by_object['user']->cn;
-
+ /* 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->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 */
$string = $paras['default'];
$string=preg_replace("/%uid/i",$this->uid,$string);
- $string=preg_replace("/%cn/i",$this->cn,$string);
+
+ if(isset($this->cn)){
+ $string=preg_replace("/%cn/i",$this->cn,$string);
+ }
for($i = 0 ; $i < 10; $i++){
if(isset($tmp[$i])){
/* 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 */
$smarty->assign ("hardware_list", $hl);
/* Show main page */
+
+ foreach(array("goFonVoicePIN","goFonPIN") as $attrs ){
+ $smarty->assign($attrs,$this->$attrs);
+ $smarty->assign($attrs."ACL",chkacl($this->acl,$attrs));
+ }
+
+
$display.= $smarty->fetch(get_template_path('generic.tpl', TRUE, dirname(__FILE__)));
return($display);
}
if(isset($this->macroarray[$this->macro])){
foreach($this->macroarray[$this->macro] as $key => $paras){
if(isset($_POST[$paras['var']])){
- // $par = $this->macroarray[$this->macro][$key];
- // $string = "";
- // if(preg_match("/.*%telephoneNumber_.*/",$par['default'])){
- // $string = $par['default'];
- // foreach($nummsinorder as $nummsinorderkey=> $nummsinorderval){
- // $string = (str_replace("%telephoneNumber_".($nummsinorderkey+1),$nummsinorderval,$string));
- // }
- // }
-
- // if(preg_match("/.*%uid.*/",$par['default'])){
- // if(empty($string)) $string = $par['default'];
- // $string = str_replace("%uid",$this->uid,$string);
- // }
-
- // if(!empty($string)){
- // $this->macroarray[$this->macro][$key]['choosen'] = $string;
- // }else{
$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
$message[]= sprintf(_("You need to specify at least one phone number!"));
}
- if(($this->goFonPIN)==""){
- $message[]= sprintf(_("You need to specify a Phone PIN."));
- }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 for ! in any parameter setting*/
if(isset($this->macroarray[$this->macro])){
foreach($this->macroarray[$this->macro] as $val){
}
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);
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_connect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']);
+ $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());
+ gosa_log(@mysql_error());
return false;
}
// 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());
+ gosa_log(@mysql_error());
return false;
}
$SQL="";
/* If deletion starts from userslist, cn uid are not set */
- $this->uid = $this->parent->by_object['user']->uid;
- $this->cn = $this->parent->by_object['user']->cn;
+ 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($SQL as $query){
- if(!mysql_query($query,$r_con)){
+ if(!@mysql_query($query,$r_con)){
print_red(_("Stop".mysql_error()));
return false;
}
}
}
}
-
-
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: