diff --git a/plugins/gofon/phoneaccount/class_phoneAccount.inc b/plugins/gofon/phoneaccount/class_phoneAccount.inc
index 6268e9a6ae52efcb9f104cbb29402f7a3d6ee94e..0cf7ac03a6684df4a90025ec05e5a1f02382b3cc 100644 (file)
var $has_mailAccount= FALSE;
/* Attributes */
- var $telephoneNumber = "";
+ var $telephoneNumber = array();
var $goFonHardware = "";
var $goFonFormat = "";
var $goFonPIN = "";
var $hardware_list = array();
var $used_hardware = array();
var $goFonMacro = "";
- var $macro = 0; // Selected Macro
+ var $macro = 0; // Selected Macroi
+ var $lastmacro = "";
var $macros = array(); // List of macros for smarty select box
var $macroarray = array(); // All needed macro informations
var $macrostillavailable = false;
var $cli_parameters = array("eins" => "Eins ist toll", "zwei" => "Zwei ist noch besser");
/* attribute list for save action */
- var $attributes = array("goFonDeliveryMode", "goFonFormat","uid","cn","mail",
+ var $CopyPasteVars = array("phoneNumbers","macroarray","macrostillavailable"/*"phoneNumbers" -Reset- */,
+ "hardware_list","used_hardware");
+
+ var $attributes = array("goFonDeliveryMode", "goFonFormat","uid","cn",
"goFonHardware","goFonPIN","goFonVoicemailPIN","telephoneNumber", "goFonMacro","macro");
var $objectclasses= array("goFonAccount");
- function phoneAccount ($config, $dn= NULL)
+ var $uid;
+
+ function phoneAccount ($config, $dn= NULL, $parent= NULL)
{
- plugin::plugin ($config, $dn);
+ plugin::plugin ($config, $dn, $parent);
/* Set phone hardware */
if (!isset($this->attrs['goFonHardware'])){
$a_SETUP= array();
if(array_key_exists('config',$_SESSION) &&
array_key_exists('SERVERS',$_SESSION['config']->data) &&
- array_key_exists('FON',$_SESSION['config']->data['SERVERS'])) {
+ array_key_exists('FON',$_SESSION['config']->data['SERVERS']) &&
+ is_callable("mysql_connect")
+ ) {
$a_SETUP = $_SESSION['config']->data['SERVERS']['FON'];
$r_con = @mysql_pconnect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']);
if(!$r_con){
}
/* Parse macro data, unset count for parameterarrays */
- unset($attrs['goFonMacroParameter']['count']);
+ if (isset($attrs['goFonMacroParameter']['count'])){
+ unset($attrs['goFonMacroParameter']['count']);
+ }
/* Go through available parameters and parse all attributes, like parametername, type, default ...*/
if((isset($attrs['goFonMacroParameter']))&&(is_array($attrs['goFonMacroParameter']))){
}
- /* Get voicemail PIN from MySQL DB
- * Because every user can change his PIN directly from the phone
- * without any update to the ldap
- * This means, the PIN in the DB is up to date
- */
+ /* Get voicemail PIN from MySQL DB
+ * Because every user can change his PIN directly from the phone
+ * without any update to the ldap
+ * This means, the PIN in the DB is up to date
+ */
// Connect to DB server
- if((isset($a_SETUP))&&(isset($a_SETUP['SERVER']))&&(isset($a_SETUP['LOGIN']))&&(isset($a_SETUP['PASSWORD']))){
+ if((is_callable("mysql_pconnect"))&&(isset($a_SETUP))&&(isset($a_SETUP['SERVER']))&&(isset($a_SETUP['LOGIN']))&&(isset($a_SETUP['PASSWORD']))){
$r_con = @mysql_pconnect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']);
if($r_con){
$r_db = @mysql_select_db($a_SETUP['DB'],$r_con);
}
}
}
- @mysql_close($r_con) ;
+ $this->lastmacro=$this->macro;
+
+ if(is_callable("mysql_close")&&(isset($r_con))&&($r_con)){
+ @mysql_close($r_con) ;
+ }
}
function generate_mysql_entension_entries($save = false){
if(!isset($_SESSION['config']->data['SERVERS']['FON'])){
- print_red(_("There is currently no asterisk server defined. Possibly you are missing a server that handles the asterisk management (goFonServer). \n Your Settings can't be saved to asterisk Database. "));
+ if($save)
+ print_red(_("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."));
return(true);
}
+ if(!is_callable("mysql_pconnect")){
+ if($save)
+ print_red(_("Can't save any changes to asterisk database, there is no mysql extension available."));
+ return(true);
+ }
+
// Get Configuration for Mysql database Server
$a_SETUP = $_SESSION['config']->data['SERVERS']['FON']; // DB Configuration
$s_parameter = ""; // Contains paramter for selected Macro
$s_ip = NULL; // Contains ip for Sip entry
$s_host = NULL; // Contains host for Sip entry
- $s_qualify = NULL; // Qualify entry
+ $s_qualify = "yes"; // Qualify entry
$s_pin = NULL; // Entry for secret
$s_type = NULL; // Entry for phone type (friend , peer ..)
$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
+ $i_is_accounted = false; // Ensure that extension entry, for name to number is only once in table
// Connect to DB server
* Generate SQL, for insert new entries
*/
if($save == true){
+
+ foreach($this->a_old_telenums as $tele){
+ $oldnums[]= preg_replace("/[^0-9]/","",$tele);
+ }
+
+ foreach($this->phoneNumbers as $tele){
+ $newnums[]= preg_replace("/[^0-9]/","",$tele);
+ }
// Attribute GoFonDefaultIP set ?
if(((isset($a_ldap_attrs['goFonDefaultIP'][0]))&&($a_ldap_attrs['goFonDefaultIP'][0] != "dynamic"))){
// 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];
+ reset($newnums);
+ $i_new_key = key($newnums);
+ $sip_entry['callerid'] =$newnums[$i_new_key];
+ $sip_entry['mailbox'] =$newnums[$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;
$s_mail = "";
}
-
// $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].";";
+ $SQL[] = "DELETE FROM ".$a_SETUP['VOICE_TABLE']." WHERE customer_id=".$newnums[$i_new_key].";";
// 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(isset($oldnums) && is_array($oldnums)){
+ foreach($oldnums 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($this->goFonHardware=="automatic"){
foreach($SQL as $query ){
mysql_query($query) ;
}
$SQL[]= "INSERT INTO ".$a_SETUP['VOICE_TABLE']." (`customer_id`,`context`,`mailbox`,`password`,`fullname`,`email`,`pager`)
- VALUES ('".$this->phoneNumbers[$i_new_key]."',
+ VALUES ('".$newnums[$i_new_key]."',
'default',
- '".$this->phoneNumbers[$i_new_key]."',
+ '".$newnums[$i_new_key]."',
'".$this->goFonVoicemailPIN."',
'".$CNname."',
'".$s_mail."',
$is_inserted_once = false;
// Entension entries Hint / Dial / Goto
- foreach($this->phoneNumbers as $s_telenums){
+ foreach($newnums as $s_telenums){
if(!$is_inserted_once){
$is_inserted_once = true;
// Perform queries ...
foreach($SQL as $query){
if(!@mysql_query($query,$r_con)){
- print_red(_("Error while performing query ".mysql_error()));
+ print_red(_("Error while performing query:")." ".mysql_error());
return false;
}
}
function execute()
{
+ /* Call parent execute */
+ plugin::execute();
+
$display = "";
if(empty($this->macro)&&(!empty($this->goFonMacro))){
/* check if there is a FON server created */
if(!isset($_SESSION['config']->data['SERVERS']['FON'])){
- print_red(_("There is currently no asterisk server defined. Possibly you are missing a server that handles the asterisk management (goFonServer). \n Your Settings can't be saved to asterisk Database. "));
+ print_red(_("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."));
}
/* Create parameter table, skip if no parameters given */
$macrotab ="<table summary=\""._("Parameter")."\">";
/* for every single parameter-> display textfile,combo, or true false switch*/
+ foreach($this->phoneNumbers as $phonenum){
+ $tmp[] = $phonenum;
+ }
- /* Automatic fill out */
- if(isset($_POST['fillout'])){
-
- foreach($this->phoneNumbers as $phonenum){
- $tmp[] = $phonenum;
- }
-
+
+
+ if($this->macro != $this->lastmacro){
/* 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);
}
$string = preg_replace("/%telephoneNumber_".($i+1)."/i",$tmp[$i],$string);
}
}
-
+ if(isset($tmp[0])){
+ $string = preg_replace("/%telephoneNumber/i",$tmp[0],$string);
+ }
$this->macroarray[$this->macro][$key]['choosen']=$string;
}
}
switch ($type){
case "combo":
- $str= "<select name='".$var."' ".chkacl($this->acl, "goFonMacro")." ".chkacl($this->acl, "goFonMacro").">";
+ $str= "<select name='".$var."' ".chkacl($this->acl, "goFonMacro")." >";
foreach(split(":",$default) as $choice){
if($choosen==$choice){
$str.= "\n<option value='".$choice."' selected>".$choice." </option>";
/* Transfer ACL's */
foreach($this->attributes as $val){
- $smarty->assign($val."ACL", chkacl($this->acl, "$val"));
+ $smarty->assign($val."ACL", chkacl($this->acl,$val));
if(isset($this->$val)){
$smarty->assign($val,$this->$val);
}else{
/* Fill arrays */
$smarty->assign ("goFonHardware", $this->goFonHardware);
if (!count($this->phoneNumbers)){
- $smarty->assign ("phoneNumbers", array(""));
+ $smarty->assign ("phoneNumbers", array());
} else {
$smarty->assign ("phoneNumbers", $this->phoneNumbers);
}
$smarty->assign ("hardware_list", $hl);
/* Show main page */
-
+ $this->lastmacro = $this->macro;
$display.= $smarty->fetch(get_template_path('generic.tpl', TRUE, dirname(__FILE__)));
return($display);
}
function check()
{
- /* Reset message array */
- $message= array();
+ /* Call common method to give check the hook */
+ $message= plugin::check();
if((strlen($this->goFonVoicemailPIN)==0)||(strlen($this->goFonVoicemailPIN)>4)){
$message[]=(_("Voicemail PIN must be between 1-4 characters."));
}else{
if(preg_match("/[^0-9]/",$this->goFonVoicemailPIN)){
- $message[]=(_("The specified oicemail PIN contains invalid characters, only numeric values are allowed here."));
+ $message[]=(_("The specified Voicemail PIN contains invalid characters, only numeric values are allowed here."));
}
}
-
- if((strlen($this->goFonPIN)!=4)){
- $message[]=(_("Phone PIN must be 4 characters long."));
+ if((strlen($this->goFonPIN)<=0)){
+ $message[]=(_("Phone PIN must be at least one character long."));
}else{
- if(preg_match("/[^0-9]/",$this->goFonPIN)){
- $message[]=(_("The specified phone PIN contains invalid characters, only numeric values are allowed here."));
+ if(preg_match("/[^0-9a-z]/i",$this->goFonPIN)){
+ $message[]=(_("The specified phone PIN contains invalid characters, only aphanumeric values are allowed here."));
}
}
/* Write back to ldap */
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->dn);
- $ldap->modify($this->attrs);
- show_ldap_error($ldap->get_error());
+ $this->cleanup();
+ $ldap->modify ($this->attrs);
+
+ show_ldap_error($ldap->get_error(), _("Saving phone account failed"));
/* 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->handle_post_events("modify",array("uid" => $this->uid));
}
} else {
- $this->handle_post_events("add");
+ $this->handle_post_events("add",array("uid" => $this->uid));
}
}
function remove_from_parent()
{
-
+ if(!$this->initially_was_account) return;
+
foreach($this->attributes as $key=>$val){
- if(in_array($val,array("uid","cn","mail"))){
+ if(in_array($val,array("uid","cn"))){
unset($this->attributes[$key]);
unset($this->$val);
}
}
-
if(array_key_exists('config', $_SESSION) &&
array_key_exists('SERVERS', $_SESSION['config']->data) &&
- array_key_exists('FON', $_SESSION['config']->data['SERVERS'])) {
+ array_key_exists('FON', $_SESSION['config']->data['SERVERS']) &&
+ is_callable("mysql_pconnect")) {
// Get Configuration for Mysql database Server
$a_SETUP = $_SESSION['config']->data['SERVERS']['FON'];
$s_parameter ="";
// 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']);
+ print_red(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;
}
// 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']);
+ print_red(sprintf(_("Can't select database %s on %s."),$a_SETUP['DB'],$a_SETUP['SERVER']));
gosa_log(@mysql_error());
return false;
}
$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;
}
}
+ }else{
+ print_red(_("Can't remove phone account, the mysql extension is not present in php configuration."));
+ return false;
}
-
/* unset macro attr, it will cause an error */
$tmp = array_flip($this->attributes);
unset($tmp['macro']);
$this->attrs['telephoneNumber']= array();
}
+
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
$ldap->search("(objectClass=goFonQueue)", array("member"));
}
}
$ldap->cd($this->dn);
- $ldap->modify($this->attrs);
- show_ldap_error($ldap->get_error());
+ $this->cleanup();
+ $ldap->modify ($this->attrs);
+
+ show_ldap_error($ldap->get_error(), _("Removing phone account failed"));
/* Optionally execute a command after we're done */
@mysql_close($r_con);
- $this->handle_post_events('remove');
+ $this->handle_post_events('remove',array("uid"=> $this->uid));
}
}
}
}
+
+
+ /* Create phoneAccount part of copy & paste dialog */
+ function getCopyDialog()
+ {
+ if(!$this->is_account) return("");
+ $smarty = get_smarty();
+ if (!count($this->phoneNumbers)){
+ $smarty->assign ("phoneNumbers", array(""));
+ } else {
+ $smarty->assign ("phoneNumbers", $this->phoneNumbers);
+ }
+
+ $smarty->assign("goFonVoicemailPIN",$this->goFonVoicemailPIN);
+ $smarty->assign("goFonPIN",$this->goFonPIN);
+
+ $display= $smarty->fetch(get_template_path('paste_generic.tpl', TRUE, dirname(__FILE__)));
+ $ret =array();
+ $ret['string'] = $display;
+ $ret['status'] = "";
+ return($ret);
+ }
+
+ /* Save posts from copy & paste dialog dialog */
+ function saveCopyDialog()
+ {
+ if(!$this->is_account) return;
+ $this->execute();
+ if(isset($_POST['goFonVoicemailPIN'])) {
+ $this->goFonVoicemailPIN = $_POST['goFonVoicemailPIN'];
+ }
+ if(isset($_POST['goFonPIN'])){
+ $this->goFonPIN = $_POST['goFonPIN'];
+ }
+ }
}
// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: