"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 $objectclasses= array("goFonAccount");
function phoneAccount ($config, $dn= NULL)
{
plugin::plugin ($config, $dn);
/* Set phone hardware */
if (!isset($this->attrs['goFonHardware'])){
$this->goFonHardware= "automatic";
}
/* Preset voice format */
if (!isset($this->attrs['goFonFormat'])){
$this->goFonFormat= "wav";
}
/* Assemble phone numbers */
if (isset($this->attrs['telephoneNumber'])){
for ($i= 0; $i<$this->attrs['telephoneNumber']['count']; $i++){
$number= $this->attrs['telephoneNumber'][$i];
$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("");
}
/* Set up has_mailAccount */
if (isset($this->attrs['objectClass'])){
if (in_array("gosaMailAccount", $this->attrs['objectClass'])){
$this->has_mailAccount= TRUE;
}
}
/* Load hardware list */
$ldap= $this->config->get_ldap_link();
$ldap->cd($this->config->current['BASE']);
$ldap->search("(objectClass=goFonHardware)", array('cn', 'description'));
while ($attrs= $ldap->fetch()){
$cn= $attrs['cn'][0];
if (isset($attrs['description'])){
$description= " - ".$attrs['description'][0];
} else {
$description= "";
}
$this->hardware_list[$cn]= "$cn$description";
}
/* Prepare templating */
$smarty= get_smarty();
/* Perform search, to get Macro Parameters,Name,Dn,Displayname etc*/
$ldap->search("(objectClass=goFonMacro)", array("*"));
/* Add none for no macro*/
$this->macros['none']=_("none");
$this->macro ="none";
/* Fetch all Macros*/
while ($attrs= $ldap->fetch()){
/* Only visisble */
if((isset($attrs['goFonMacroVisible'][0]))&&($attrs['goFonMacroVisible'][0] ==1)){
/* unset Count, we don't need that here */
unset($attrs['displayName']['count']);
/* fill Selectfield variable with Macros */
if(isset($attrs['displayName'][0])){
$this->macros[$attrs['dn']] = $attrs['displayName'][0]." (".$attrs['cn'][0].")";
}else{
$this->macros[$attrs['dn']] = _("undefined");
}
/* Parse macro data, unset count for parameterarrays */
unset($attrs['goFonMacroParameter']['count']);
/* Go through available parameters and parse all attributes, like parametername, type, default ...*/
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']="N/A";
$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];
}//foreach
}//is_array
}//visible = 1
}//while
/* Go through already saved values, for a parameter */
$tmp = split("!",$this->goFonMacro);
/* it is possible that nothing has been saved yet */
if(is_array($tmp)){
/* First value is the macroname */
$this->macro = $tmp[0];
/* Macroname saved, delete that index */
unset($tmp[0]);
/* Check if makro has been removed */
if(!isset($this->macroarray[$this->macro])){
$this->macrostillavailable = false;
}else{
$this->macrostillavailable = true;
}
/* for each parametervalues ( parameterID#value like 25#twentyfive) */
foreach($tmp as $var){
/* Split this, so we have $varar[0] = parameterID $varar[1] = SelectedValue */
$varar = split("#",$var);
/* 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){
$ldap->search("(goFonHardware=$cn)", array('cn'));
if ($ldap->count() > 0){
$ldap->fetch();
if ($ldap->getDN() != $this->dn){
$this->used_hardware[$cn]= $ldap->getDN();
}
}
}
$this->hardware_list["automatic"]= _("automatic");
ksort($this->hardware_list);
}
function execute()
{
/* Do we need to flip is_account state? */
if (isset($_POST['modify_state'])){
$this->is_account= !$this->is_account;
}
/* Select no macro if, state is empty, this is the case, if the selected macro is no longer available */
if(empty($this->macro)){
$this->macro ="none";
}
/* 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."));
}
/* Prepare templating */
$smarty= get_smarty();
/* Assing macroselectbox values */
$smarty->assign("macros",$this->macros);
$smarty->assign("macro", $this->macro);
/* Create parameter table, skip if no parameters given */
if(!isset($this->macroarray[$this->macro])){
$macrotab="";
}else{
$macrotab ="
";
/* for every single parameter-> display textfile,combo, or true false switch*/
foreach($this->macroarray[$this->macro] as $paras){
/* get al vars */
$var = $paras['var'];
$name = $paras['name'];
$default = $paras['default'];
$type = $paras['type'];
$choosen = $paras['choosen'] ;
$str = $default;
/* in case of a combo box display a combobox with selected attr */
if($type == "combo"){
$str="";
}
/* Display switch for true false*/
if($type == "bool"){
$str="
";
}//is_array()
/* Give smarty the table */
$smarty->assign("macrotab",$macrotab);
/* Do we represent a valid account? */
if (!$this->is_account && $this->parent == NULL){
$display= " ".
_("This account has no phone extensions.")."";
$display.= back_to_main();
return($display);
}
$display= "";
/* Show tab dialog headers */
if ($this->parent != NULL){
if ($this->is_account){
$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."));
return ($display);
}
}
/* Add phone number */
if (isset($_POST["add_phonenumber"]) && $_POST['phonenumber']){
if (is_phone_nr($_POST['phonenumber'])){
$number= $_POST["phonenumber"];
$this->phoneNumbers[$number]= $number;
$this->is_modified= TRUE;
} else {
print_red(_("Please enter a valid phone number!"));
}
}
/* Remove phone number */
if (isset($_POST["delete_phonenumber"]) && isset($_POST["phonenumber_list"])){
foreach ($_POST['phonenumber_list'] as $number){
unset($this->phoneNumbers[$number]);
$this->is_modified= TRUE;
}
}
/* 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"));
}
/* Fill arrays */
$smarty->assign ("goFonHardware", $this->goFonHardware);
if (!count($this->phoneNumbers)){
$smarty->assign ("phoneNumbers", array(""));
} else {
$smarty->assign ("phoneNumbers", $this->phoneNumbers);
}
$hl= "acl, "goFonHardware").">\n";
foreach ($this->hardware_list as $cn => $description){
if ($cn == $this->goFonHardware){
$selected= "selected";
} else {
$selected= "";
}
if (isset($this->used_hardware[$cn])){
$color= "style=\"color:#A0A0A0\"";
} else {
$color= "";
}
$hl.= " \n";
}
$hl.= "\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.= "