diff --git a/plugins/gofon/conference/class_phoneConferenceGeneric.inc b/plugins/gofon/conference/class_phoneConferenceGeneric.inc
index b277a3b4167e40b2d49c8e1e0455eda1c30765e4..cd62cf5c5d54f99be6d58a4c6289d588dc2bbedd 100644 (file)
<?php
/*
- This code is part of GOsa (https://gosa.gonicus.de)
- Copyright (C) 2003 Cajus Pollmeier
+ This code is part of GOsa (https://gosa.gonicus.de)
+ Copyright (C) 2003 Cajus Pollmeier
- This program is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2 of the License, or
- (at your option) any later version.
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
- This program is distributed in the hope that it will be useful,
- but WITHOUT ANY WARRANTY; without even the implied warranty of
- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- GNU General Public License for more details.
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
- You should have received a copy of the GNU General Public License
- along with this program; if not, write to the Free Software
- Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
-*/
+ You should have received a copy of the GNU General Public License
+ along with this program; if not, write to the Free Software
+ Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+ */
class conference extends plugin
{
var $base = "";
var $ou = "";
var $goFonPIN = "";
+ var $old_cn = "";
var $goFonConferenceOption = "";
- var $goFonConferenceOption_D = ""; // Set PIN
+ var $goFonConferenceOption_P = ""; // Set PIN
var $goFonConferenceOption_r = ""; // record Conference
var $goFonConferenceOption_M = ""; // Play Music opn hold
var $goFonConferenceOption_s = ""; // activate menu
var $goFonConferenceOption_i = ""; // announce new and leaving user
var $goFonConferenceOption_c = ""; // Count User
- var $goFonConferenceOption_P = ""; // Conference Type, no PIN/PIN
+ var $goFonConferenceOption_D = ""; // Conference Type, no PIN/PIN
+
+ var $goFonConferenceOwner = "";
+
+ var $error_shown = false;
var $goFonConferenceOptionFormat = "";
var $goFonConferenceOptionLifetime = "";
- var $goFonConferenceOptionNumber = "";
+ var $telephoneNumber = "";
var $old_tele_number = false;
var $generate_error = "";
+ var $old_dn;
+
/* Headpage attributes */
var $last_dep_sorting= "invalid";
var $departments= array();
+ var $dialog ;
+
/* attribute list for save action */
- var $attributes= array("cn", "description", "goFonPIN","goFonConferenceOption_D","goFonConferenceOption_r",
- "goFonConferenceOption_M","goFonConferenceOption_s","goFonConferenceOption_i","goFonConferenceOption_c",
- "goFonConferenceOption_P","goFonConferenceOptionFormat","goFonConferenceOptionLifetime","goFonConferenceOptionNumber");
+ var $attributes= array("cn","base", "description", "goFonPIN","goFonConferenceOption_P","goFonConferenceOption_r",
+ "goFonConferenceOption_M","goFonConferenceOption_s","goFonConferenceOption_i","goFonConferenceOption_c",
+ "goFonConferenceOption_D","goFonConferenceOptionFormat","goFonConferenceOptionLifetime","telephoneNumber","goFonConferenceOwner");
var $objectclasses= array("top", "goFonConference");
- function conference ($config, $dn)
+ function conference ($config, $dn, $plugin= NULL)
{
- plugin::plugin($config, $dn);
+ plugin::plugin($config, $dn, $plugin);
$this->is_account = TRUE;
$this->ui = get_userinfo();
$this->dn = $dn;
/* Set base */
if ($this->dn == "new"){
$ui= get_userinfo();
- if(isset($_SESSION['conferencefilter']['depselect'])){
- $this->base = $_SESSION['conferencefilter']['depselect'];
+ if(isset($_SESSION['CurrentMainBase'])){
+ $this->base = $_SESSION['CurrentMainBase'];
}else{
$this->base= dn2base($ui->dn);
}
$this->base= preg_replace ("/^[^,]+,/", "", $this->dn);
}
+ $ui= get_userinfo();
+ $acl= get_permissions ($ui->dn, $this->ui->subtreeACL);
+ $this->acl= get_module_permission($acl, "conference", $ui->dn);
+ $this->goFonConferenceOwner=$this->ui->dn;
/* Parse Options ...
* Parameter|Lifetime|number
for($i = 0 ; $i < strlen($tmp1[0]);$i++){
$varname = "goFonConferenceOption_".$tmp1[0][$i];
- $this->$varname = $tmp1[0][$i];
+ if($tmp1[0][$i]=="d"){
+ $this->goFonConferenceOption_D = $tmp1[0][$i];
+ }else{
+ $this->$varname = $tmp1[0][$i];
+ }
}
$this->goFonConferenceOptionLifetime = $tmp1[1];
- $this->goFonConferenceOptionNumber = $tmp1[2];
- $this->old_tele_number = $tmp1[2];
+ $this->old_tele_number = $this->telephoneNumber;
}
+ $this->old_dn = $this->dn;
+ $this->old_cn = $this->cn;
}
function execute()
{
- $this->config->departments = get_departments($this->dn);
- $this->config->make_idepartments();
- $smarty= get_smarty();
-
- $smarty->assign("goFonConferenceOptions", array("P"=>"Conference ",""=>"Conference without PIN"));
- $smarty->assign("goFonConferenceOptionFormats", array("WAV"=>"Wave","GSM"=>"GSM","WAV49"=>"Wave49"));
- $smarty->assign("goFonConferenceOption", $this->goFonConferenceOption_P);
-
- foreach ($this->attributes as $val){
- $smarty->assign("$val", $this->$val);
- $smarty->assign("$val"."ACL", chkacl($this->acl, "$val"));
- if(!$this->$val){
- $smarty->assign($val."CHK", "");
- }else{
- $smarty->assign($val."CHK", " checked ");
- }
- }
- return($smarty->fetch (get_template_path('generic.tpl', TRUE)));
+ /* Call parent execute */
+ plugin::execute();
+
+ $smarty= get_smarty();
+
+ $smarty->assign("bases" ,$this->config->idepartments);
+ $smarty->assign("base" ,$this->base);
+
+ $once = true;
+ foreach($_POST as $name => $value){
+ if(preg_match("/^chooseBase/",$name) && $once){
+ $once = false;
+ $this->dialog = new baseSelectDialog($this->config);
+ $this->dialog->setCurrentBase($this->base);
+ }
+ }
+
+ /* Dialog handling */
+ if(is_object($this->dialog)){
+ /* Must be called before save_object */
+ $this->dialog->save_object();
+
+ if($this->dialog->isClosed()){
+ $this->dialog = false;
+ }elseif($this->dialog->isSelected()){
+ $this->base = $this->dialog->isSelected();
+ $this->dialog= false;
+ }else{
+ return($this->dialog->execute());
+ }
+ }
+
+ $smarty->assign("goFonConferenceOptions", array("D"=>"Conference ","d"=>"Conference without PIN"));
+ $smarty->assign("goFonConferenceOptionFormats", array("WAV"=>"Wave","GSM"=>"GSM","WAV49"=>"Wave49"));
+ $smarty->assign("goFonConferenceOption", $this->goFonConferenceOption_D);
+
+ foreach ($this->attributes as $val){
+ $smarty->assign("$val", $this->$val);
+ $smarty->assign("$val"."ACL", chkacl($this->acl, "$val"));
+ if(!$this->$val){
+ $smarty->assign($val."CHK", "");
+ }else{
+ $smarty->assign($val."CHK", " checked ");
+ }
+ }
+
+ if($_SESSION['js']==1){
+ if($this->goFonConferenceOption_P != "P"){
+ $smarty->assign("goFonPINACL"," disabled ");
+ $smarty->assign("goFonPIN","");
+ }
+ if($this->goFonConferenceOption_r != "r"){
+ $smarty->assign("goFonConferenceOptionFormatACL"," disabled ");
+ }
+ }
+ return($smarty->fetch (get_template_path('generic.tpl', TRUE)));
}
function remove_from_parent()
{
- $ldap= $this->config->get_ldap_link();
- $ldap->cd ($this->dn);
- $ldap->recursive_remove();
+ $this->SQL_remove_me(true);
+
+ $ldap= $this->config->get_ldap_link();
+ $ldap->cd ($this->dn);
+ $ldap->recursive_remove();
- /* Optionally execute a command after we're done */
- $this->handle_post_events('remove');
+ /* Optionally execute a command after we're done */
+ $this->handle_post_events('remove');
}
{
plugin::save_object();
if(isset($_POST['cn'])){
- foreach(array("goFonConferenceOption_D","goFonConferenceOption_r","goFonConferenceOption_M","goFonConferenceOption_s",
- "goFonConferenceOption_i","goFonConferenceOption_c","goFonConferenceOption_P") as $attrs){
- if(isset($_POST[$attrs])){
- $this->$attrs = $_POST[$attrs];
- }else{
- $this->$attrs = false;
+ foreach(array("goFonConferenceOption_P","goFonConferenceOption_r","goFonConferenceOption_M","goFonConferenceOption_s",
+ "goFonConferenceOption_i","goFonConferenceOption_c","goFonConferenceOption_D","goFonPIN") as $attrs){
+ if(isset($_POST[$attrs])){
+ $this->$attrs = $_POST[$attrs];
+ }else{
+ $this->$attrs = false;
}
}
}
/* Check values */
function check()
{
- $message= array();
-
- if(empty($this->cn)){
- $message[] =_("Please enter a name for the conference.");
- }
-
- if(!is_numeric($this->goFonConferenceOptionNumber)){
- $message[] =_("Only numeric chars are allowed in Number field.");
- }
+ /* Call common method to give check the hook */
+ $message= plugin::check();
- if(!is_numeric($this->goFonConferenceOptionLifetime)){
- $message[] =_("Only numbers are allowed in Lifetime.");
- }
-
- $this->SQL_remove_me(false);
- $this->SQL_add_me(false);
-
- if(!empty($this->generate_error)){
- $message[]=$this->generate_error;
- $this->generate_error="";
- }
+ if($this->is_number_used()){
+ $message[] = $this->is_number_used();
+ }
+
+ if((!empty($this->goFonPIN)||($this->goFonConferenceOption_P=="P"))&&($this->goFonConferenceOption_D=="d")){
+ $message[] =_("You have specified a conference 'without PIN' ... please leave the PIN fields empty.");
+ }
+
+ if((empty($this->goFonPIN))&&($this->goFonConferenceOption_P=="P")&&($this->goFonConferenceOption_D=="D")){
+ $message[]= _("Please enter a PIN.");
+ }
+
+ if(empty($this->cn)){
+ $message[] =_("Please enter a name for the conference.");
+ }
+
+ if(!is_numeric($this->telephoneNumber)){
+ $message[] =_("Only numeric chars are allowed in Number field.");
+ }
+
+ if(!((is_numeric($this->goFonConferenceOptionLifetime))||(empty($this->goFonConferenceOptionLifetime)))){
+ $message[] =_("Only numbers are allowed in Lifetime.");
+ }
+
+ $this->SQL_remove_me(false);
+ $this->SQL_add_me(false);
- return $message;
+ if(!empty($this->generate_error)){
+ $message[]=$this->generate_error;
+ $this->generate_error="";
+ }
+
+ return $message;
}
function SQL_add_me($save){
+
+ if(!isset($_SESSION['config']->data['SERVERS']['FON'])){
+ $this->generate_error = _("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(false);
+ }
+
// Get Configuration for Mysql database Server
$a_SETUP = $_SESSION['config']->data['SERVERS']['FON'];
// Connect to DB server
- $r_con = @mysql_connect($a_SETUP['SERVER'],$a_SETUP['LOGIN'],$a_SETUP['PASSWORD']);
+ $r_con = false;
+
+ if(!is_callable("mysql_pconnect")){
+ if(!$this->error_shown){
+ print_red(_("Can't save any changes to asterisk database, there is currently no mysql extension available in your php setup."));
+ $this->error_shown = true;
+ }
+ return(true);
+ }
+ $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."),
+ $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;
gosa_log(mysql_error());
return false;
}
-
- if((!empty($this->goFonConferenceOptionNumber))&&($save==true)){
-
+
+ if((!empty($this->telephoneNumber))&&($save==true)){
+
$EXT=array();
$parameter ="";
- foreach(array("goFonConferenceOption_D","goFonConferenceOption_r","goFonConferenceOption_M","goFonConferenceOption_s",
- "goFonConferenceOption_i","goFonConferenceOption_c","goFonConferenceOption_P") as $attrs){
+ foreach(array("goFonConferenceOption_P","goFonConferenceOption_r","goFonConferenceOption_M","goFonConferenceOption_s",
+ "goFonConferenceOption_i","goFonConferenceOption_c","goFonConferenceOption_D") as $attrs){
$parameter .= $this->$attrs;
}
$i=1;
$context="GOsa";
// Set Language to German
- $EXT[$i]['exten'] =$this->goFonConferenceOptionNumber;
+ $EXT[$i]['exten'] =$this->telephoneNumber;
$EXT[$i]['context'] = $context;
$EXT[$i]['priority']= $i;
$EXT[$i]['app'] ="SetLanguage";
if($this->goFonConferenceOption_r == "r"){
- // Recordingformat for conference
- $EXT[$i]['exten'] =$this->goFonConferenceOptionNumber;
- $EXT[$i]['context'] =$context;
- $EXT[$i]['priority']= $i;
- $EXT[$i]['app'] ="Setvar";
- $EXT[$i]['appdata'] ="MEETME_RECORDINGFORMAT=".$this->goFonConferenceOptionFormat;
- $i++;
+ // Recordingformat for conference
+ $EXT[$i]['exten'] =$this->telephoneNumber;
+ $EXT[$i]['context'] =$context;
+ $EXT[$i]['priority']= $i;
+ $EXT[$i]['app'] ="Setvar";
+ $EXT[$i]['appdata'] ="MEETME_RECORDINGFORMAT=".$this->goFonConferenceOptionFormat;
+ $i++;
}
// Answer Call
- $EXT[$i]['exten'] =$this->goFonConferenceOptionNumber;
+ $EXT[$i]['exten'] =$this->telephoneNumber;
$EXT[$i]['context'] =$context;
$EXT[$i]['priority']=$i;
$EXT[$i]['app'] ="answer";
$i++;
// Start Conference
- $EXT[$i]['exten'] =$this->goFonConferenceOptionNumber;
+ $EXT[$i]['exten'] =$this->telephoneNumber;
$EXT[$i]['context'] =$context;
$EXT[$i]['priority']=$i;
$EXT[$i]['app'] ="MeetMe";
- $EXT[$i]['appdata'] =$this->goFonConferenceOptionNumber."|".$parameter."|".$this->goFonPIN;
+
+ if(empty($this->goFonPIN)) {
+ $EXT[$i]['appdata'] =$this->telephoneNumber."|".$parameter;
+ }else{
+ $EXT[$i]['appdata'] =$this->telephoneNumber."|".$parameter."|".$this->goFonPIN;
+ }
$i++;
// Start Conference
$EXT[$i]['context'] =$context;
$EXT[$i]['priority']=1;
$EXT[$i]['app'] ="Goto";
- $EXT[$i]['appdata'] =$this->goFonConferenceOptionNumber."|1";
+ $EXT[$i]['appdata'] =$this->telephoneNumber."|1";
$SQL=array();
-
+
foreach($EXT as $keytop => $valtop){
- $s_keys = "";
- $s_values = "";
+ $s_keys = "";
+ $s_values = "";
foreach($valtop as $key=>$val){
$s_keys .="`".$key."`,";
$s_values .="'".$val."',";
mysql_query($sqlsyn);
}
}
-
+ @mysql_close($r_con);
return(true);
}
function SQL_remove_me($save){
+ if(!is_callable("mysql_pconnect")){
+ if(!$this->error_shown){
+ print_red(_("Can't save any changes to asterisk database, there is currently no mysql extension available in your php setup."));
+ $this->error_shown = true;
+ }
+ return(true);
+ }
if($this->old_tele_number){
// Get Configuration for Mysql database Server
$a_SETUP = $_SESSION['config']->data['SERVERS']['FON'];
// 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){
return false;
}
- $SQL = "DELETE FROM ".$a_SETUP['EXT_TABLE']." WHERE (exten= '".$this->old_tele_number."') OR (exten='".$this->goFonConferenceOptionNumber."')";
-
+ $SQL = "DELETE FROM ".$a_SETUP['EXT_TABLE']."
+ WHERE (exten='".$this->old_tele_number."')
+ OR (exten='".$this->telephoneNumber."')
+ OR (exten='".$this->cn."')
+ OR (exten='".$this->old_cn."')";
+
if($save){
@mysql_query($SQL);
}
}//ENDE old num availiable ...
+ @mysql_close($r_con);
return(true);
}
}
}
- 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]);
- }
+ $num = $this->telephoneNumber;
+ if((isset($numbers[$num]))&&(($numbers[$num]['cn'][0]!=$this->old_cn))){
+ 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]);
}
}
}
-
/* Save to LDAP */
function save()
{
- plugin::save();
- $this->SQL_remove_me(true);
- $this->SQL_add_me(true);
+ if((!isset($this->attrs['goFonPIN']))){
+ $pin_use = false;
+ }else{
+ $pin_use = true;
+ }
- $this->attrs['goFonConferenceOption']="";
- foreach(array("goFonConferenceOption_D","goFonConferenceOption_r","goFonConferenceOption_M","goFonConferenceOption_s",
- "goFonConferenceOption_i","goFonConferenceOption_c","goFonConferenceOption_P","goFonConferenceOptionFormat") as $attrs){
- $this->attrs['goFonConferenceOption'] .= $this->$attrs;
- unset($this->attrs[$attrs]);
- }
+ plugin::save();
+
+ if(empty($this->old_tele_number)){
+ $this->old_tele_number= $this->telephoneNumber;
+ }
+
+ $this->SQL_remove_me(true);
+ $this->SQL_add_me(true);
+
+ if(empty($this->goFonConferenceOption_P)){
+ if($pin_use){
+ $this->attrs['goFonPIN']=array();
+ }else{
+ unset($this->attrs['goFonPIN']);
+ }
+ }
+ $this->attrs['goFonConferenceOption']="";
+ foreach(array("goFonConferenceOption_P","goFonConferenceOption_r","goFonConferenceOption_M","goFonConferenceOption_s",
+ "goFonConferenceOption_i","goFonConferenceOption_c","goFonConferenceOption_D","goFonConferenceOptionFormat") as $attrs){
+ $this->attrs['goFonConferenceOption'] .= $this->$attrs;
+ unset($this->attrs[$attrs]);
+ }
+
+ $this->attrs['goFonConferenceOption'].="|".$this->goFonConferenceOptionLifetime;
+ unset($this->attrs['goFonConferenceOptionLifetime']);
+
+ /* Write back to ldap */
+
+ unset($this->attrs['base']);
+
+ foreach($this->attributes as $atr){
+ if(chkacl($this->acl, $atr)!=""){
+ unset($this->attrs[$atr]);
+ }
+ }
+
+ $ldap= $this->config->get_ldap_link();
+ $ldap->cd($this->config->current['BASE']);
+ $ldap->cat($this->dn, array('dn'));
+
+ if ($ldap->count()){
+ $ldap->cd($this->dn);
+ $this->cleanup();
+ $ldap->modify ($this->attrs);
+ $this->handle_post_events('modify');
+ } else {
+ $ldap->create_missing_trees(preg_replace('/^[^,]+,/', '', $this->dn));
+ $ldap->cd($this->dn);
+ $ldap->add($this->attrs);
+ $this->handle_post_events('add');
+ }
+ show_ldap_error($ldap->get_error(), _("Saving phone conference failed"));
- $this->attrs['goFonConferenceOption'].="|".$this->goFonConferenceOptionLifetime;
- unset($this->attrs['goFonConferenceOptionLifetime']);
-
- $this->attrs['goFonConferenceOption'].="|".$this->goFonConferenceOptionNumber;
- unset($this->attrs['goFonConferenceOptionNumber']);
-
-
- /* Write back to ldap */
- $ldap= $this->config->get_ldap_link();
- $ldap->cat($this->dn);
- $a= $ldap->fetch();
- $ldap->cd($this->dn);
- if (count($a)){
- $ldap->modify($this->attrs);
- $this->handle_post_events('modify');
- } else {
- $ldap->add($this->attrs);
- $this->handle_post_events('add');
- }
- show_ldap_error($ldap->get_error());
-
- /* Optionally execute a command after we're done */
- $this->postcreate();
+ /* Optionally execute a command after we're done */
+ $this->postcreate();
}
}