X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=plugins%2Fadmin%2Fsystems%2Fclass_printGeneric.inc;h=a8843d920550ae492647e4e60614122cd63d7649;hb=38e36135b451936d249b671857b133a7d55b7360;hp=211cec67fd5b8e602d20e2d1d09d497023dc7a20;hpb=9674d300a61bd19f9cafab6167bacb81584bc0bd;p=gosa.git diff --git a/plugins/admin/systems/class_printGeneric.inc b/plugins/admin/systems/class_printGeneric.inc index 211cec67f..a8843d920 100644 --- a/plugins/admin/systems/class_printGeneric.inc +++ b/plugins/admin/systems/class_printGeneric.inc @@ -26,18 +26,22 @@ class printgeneric extends plugin var $UserMember =""; var $UserMembers =array(); var $UserMemberKeys =array(); - + var $AdminMember =""; var $AdminMembers =array(); var $AdminMemberKeys =array(); - + + var $is_terminalBased = false; + + var $PPDdialogToSave = NULL; + var $member =array(); var $strings = ""; var $type = ""; var $dialog =NULL; /* attribute list for save action */ - var $attributes = array("cn", "description", "l", "labeledURI", "gotoPrinterPPD","macAddress", "ipHostNumber"); + var $attributes = array("cn", "description", "l", "labeledURI", "macAddress", "ipHostNumber","gotoPrinterPPD"); var $objectclasses = array("top", "gotoPrinter"); function printgeneric ($config, $dn= NULL) @@ -50,23 +54,40 @@ class printgeneric extends plugin $ui= get_userinfo(); $this->base= dn2base($ui->dn); $this->cn= ""; + $this->is_terminal = true; } else { $this->base= preg_replace ("/^[^,]+,[^,]+,[^,]+,/", "", $this->dn); } + if(isset($this->gotoPrinterPPD)){ + $this->gotoPrinterPPD = preg_replace("/^http.*ppd\//i","",$this->gotoPrinterPPD); + } /* In case of gotoWorkstation this tab is calles from workstation plugin * in case of gotoTerminal it is called from a terminal tab * else it is a standalone printer */ - if((in_array("gotoWorkstation",$this->attrs['objectClass']))){ - $this->is_terminal = "true"; - $this->dn = preg_replace("/ou=workstation/","ou=printer",$this->dn); - $this->type = "station"; - }elseif((in_array("gotoTerminal",$this->attrs['objectClass']))){ - $this->type = "terminal"; - $this->is_terminal = "true"; - $this->dn = preg_replace("/ou=terminal/","ou=printer",$this->dn); + if((isset($this->attrs['objectClass']))&&(in_array("gotoWorkstation",$this->attrs['objectClass']))){ + /* Fix for new Workstations */ + if(preg_match("/ou=incoming/",$this->dn)){ + $this->is_terminal = "true"; + $this->dn = preg_replace("/ou=incoming/","ou=printers",$this->dn); + $this->type = "station"; + }else{ + $this->is_terminal = "true"; + $this->dn = preg_replace("/ou=workstations/","ou=printers",$this->dn); + $this->type = "station"; + } + }elseif((isset($this->attrs['objectClass']))&&(in_array("gotoTerminal",$this->attrs['objectClass']))){ + if(preg_match("/ou=incoming/",$this->dn)){ + $this->is_terminal = "true"; + $this->dn = preg_replace("/ou=incoming/","ou=printers",$this->dn); + $this->type = "terminal"; + }else{ + $this->type = "terminal"; + $this->is_terminal = "true"; + $this->dn = preg_replace("/ou=terminal/","ou=printers",$this->dn); + } }else{ /* Save dn for later references */ $this->orig_dn= $this->dn; @@ -89,7 +110,6 @@ class printgeneric extends plugin } } - /* Prepare different member types */ foreach(array("AddUser" =>"gotoUserPrinter", @@ -100,7 +120,9 @@ class printgeneric extends plugin /* $this->members contains all members */ $this->member[$type]=array(); - unset($this->attrs[$attr]['count']); + if (isset($this->attrs[$attr]['count'])) { + unset($this->attrs[$attr]['count']); + } if(isset($this->attrs[$attr])){ foreach($this->attrs[$attr] as $mem){ @@ -120,10 +142,30 @@ class printgeneric extends plugin } } } + + $ldap->search("(&(cn=".$this->cn.")(|(objectClass=gotoTerminal)(objectClass=gotoWorkstation)))",array("cn","objectClass")); + if($attrs = $ldap->fetch()){ + if(in_array("gotoTerminal",$attrs['objectClass'])){ + $this->is_terminalBased = "Terminal"; + }else{ + $this->is_terminalBased = "Workstation"; + } + } + + /* A printer was only saved if the printer belongs to a workstation. + * If there was a new single printer created, it was never saved. + * -This allows new printers to be saved. + */ + if($this->dn == "new"){ + $this->is_account = true; + } } function execute() { + /* Call parent execute */ + plugin::execute(); + $smarty= get_smarty(); $display=""; /* Template management. @@ -147,23 +189,37 @@ class printgeneric extends plugin } if($this->is_terminal){ - if ($this->is_account){ - if($this->type=="station"){ - $display= $this->show_header(_("Remove printer extension"), - _("This workstation has printer extension enabled. You can disable it by clicking below.")); + if(empty($this->cn)){ + if(!in_array("gotoPrinter",$this->objectclasses)){ + $display= $this->show_header(_("Add printer extension"), + _("This workstation has printer extension disabled. You can't enable it while 'cn' is not present in entry. Possibly you are currently creating a new terminal template"),TRUE,TRUE); + $this->is_account= false; + return $display; }else{ - $display= $this->show_header(_("Remove printer extension"), - _("This terminal has printer extension enabled. You can disable it by clicking below.")); + $smarty->assign("is_terminal","false"); + $skip = true; } - }else{ - if($this->type=="station"){ - $display= $this->show_header(_("Add printer extension"), - _("This workstation has printer extension disabled. You can enable it by clicking below.")); + } + + if(!isset($skip)){ + if (($this->is_account)){ + if($this->type=="station"){ + $display= $this->show_header(_("Remove printer extension"), + _("This workstation has printer extension enabled.You can disable it by clicking below.")); + }else{ + $display= $this->show_header(_("Remove printer extension"), + _("This terminal has printer extension enabled. You can disable it by clicking below.")); + } }else{ - $display= $this->show_header(_("Add printer extension"), - _("This terminal has printer extension disabled. You can enable it by clicking below.")); - } - return ($display); + if($this->type=="station"){ + $display= $this->show_header(_("Add printer extension"), + _("This workstation has printer extension disabled. You can enable it by clicking below.")); + }else{ + $display= $this->show_header(_("Add printer extension"), + _("This terminal has printer extension disabled. You can enable it by clicking below.")); + } + return ($display); + } } } @@ -184,7 +240,7 @@ class printgeneric extends plugin $smarty->assign($attr."ACL", chkacl($this->acl, $attr)); $smarty->assign("$attr", $this->$attr); } - + if(isset($_POST['AddUser'])){ $this->dialog = new selectUserToPrinterDialog($this->config, get_userinfo(),"AddUser"); } @@ -198,10 +254,47 @@ class printgeneric extends plugin $this->dialog = new selectUserToPrinterDialog($this->config, get_userinfo(),"AddAdminGroup"); } + if(isset($_POST['EditDriver'])){ + if($this->PPDdialogToSave){ + $this->dialog = $this->PPDdialogToSave; + }else{ + $this->dialog = new printerPPDDialog($this->config, $this->dn,$this->gotoPrinterPPD); + } + } + if(isset($_POST['PrinterCancel'])){ unset($this->dialog); $this->dialog= NULL; } + + if(isset($_POST['RemoveDriver'])){ + $this->gotoPrinterPPD = array(); + $this->PPDdialogToSave = NULL; + } + + if(isset($_POST['SavePPD'])){ + $this->dialog->save_object(); + if(count($this->dialog->check())){ + foreach($this->dialog->check() as $msg){ + print_red($msg); + } + }else{ + $this->gotoPrinterPPD = array(); + + $this->gotoPrinterPPD = $this->dialog->save(); + $this->PPDdialogToSave = $this->dialog; + unset($this->dialog); + $this->dialog=NULL; + } + + } + + if(isset($_POST['ClosePPD'])){ + unset($this->dialog); + $this->dialog=NULL; + } + + if((isset($_POST['DelUser']))&&(isset($_POST['UserMember']))){ if(isset($this->member['AddUser'][$_POST['UserMember']])){ @@ -222,7 +315,7 @@ class printgeneric extends plugin } if((isset($_POST['DelAdmin']))&&(isset($_POST['AdminMember']))){ - if(isset($this->member['AddAdmingroup'][$_POST['AdminMember']])){ + if(isset($this->member['AddAdminGroup'][$_POST['AdminMember']])){ unset($this->member['AddAdminGroup'][$_POST['AdminMember']]); } } @@ -253,13 +346,32 @@ class printgeneric extends plugin } if($this->dialog != NULL){ + $this->dialog->save_object(); $display = $this->dialog->execute(); return $display; } /* Don't show Asterisk for non-required attribute ipHostNumber and macAddress */ $smarty->assign("staticAddress", ""); - $smarty->assign("driverInfo", "Not implemented yet"); + + + require_once ("class_ppdManager.inc"); + + if((isset($_SESSION['config']->data['MAIN']['PPD_PATH']))&&(is_dir($_SESSION['config']->data['MAIN']['PPD_PATH']))){ + $ppdManager= new ppdManager($_SESSION['config']->data['MAIN']['PPD_PATH']); + if(!empty($this->gotoPrinterPPD)){ + if((!file_exists($_SESSION['config']->data['MAIN']['PPD_PATH'].$this->gotoPrinterPPD))){ + $smarty->assign("driverInfo", "".sprintf(_("Your currently selected PPD file '%s' doesn't exist."),$this->gotoPrinterPPD)).""; + }else{ + $smarty->assign("driverInfo", $ppdManager->loadDescription($_SESSION['config']->data['MAIN']['PPD_PATH'].$this->gotoPrinterPPD)); + } + }else{ + $smarty->assign("driverInfo", _("not defined")); + } + }else{ + $smarty->assign("driverInfo",_("can't get ppd informations.")); + } + $list=$this->generateList(); $userlist = array_merge($list['AddUser'],$list['AddGroup']); @@ -267,7 +379,16 @@ class printgeneric extends plugin asort($userlist); asort($adminlist); - + if($this->is_terminalBased){ + if($this->is_terminalBased == "Terminal"){ + $smarty->assign("desc" ,sprintf(_("This printer belongs to terminal %s. You can't rename this printer."),"".$this->cn."")); + }else{ + $smarty->assign("desc" ,sprintf(_("This printer belongs to workstation %s. You can't rename this printer."),"".$this->cn."")); + } + $smarty->assign("cnACL" ," disabled "); + }else{ + $smarty->assign("desc" ,""); + } $smarty->assign("UserMember" ,$this->UserMember); $smarty->assign("UserMembers" ,$userlist); $smarty->assign("UserMemberKeys",array_flip($userlist)); @@ -282,6 +403,7 @@ class printgeneric extends plugin function remove_from_parent() { + $this->dn= preg_replace('/ou=workstations,/', 'ou=printers,', $this->dn); $ldap= $this->config->get_ldap_link(); $ldap->rmdir($this->dn); show_ldap_error($ldap->get_error()); @@ -347,19 +469,25 @@ class printgeneric extends plugin /* Save to LDAP */ function save() { + if (!$this->is_account){ + return; + } + + if($this->PPDdialogToSave){ + $this->PPDdialogToSave->save_ppd(); + } $dn= $this->dn; plugin::save(); + $ldap= $this->config->get_ldap_link(); if((in_array("gotoTerminal",$this->attrs['objectClass']))){ - $this->dn= preg_replace("/ou=terminal/","ou=printer",$this->dn); + $this->dn= preg_replace("/ou=terminals,/","ou=printers,",$this->dn); } - + if((in_array("gotoWorkstation",$this->attrs['objectClass']))){ - $this->dn= preg_replace("/ou=workstation/","ou=printer",$this->dn); + $this->dn= preg_replace("/ou=workstations,/","ou=printers,",$this->dn); } - $ldap= $this->config->get_ldap_link(); - /* We are currently editing a Terminal, so we want to save a seperate printer which cn is the terminla cn */ if($this->is_terminal){ @@ -388,6 +516,16 @@ class printgeneric extends plugin $this->attrs= $attrs; } + if(preg_match("/https/i",$_SERVER['HTTP_REFERER'])){ + $method="https://"; + }else{ + $method="http://"; + } + + if(!is_array($this->attrs['gotoPrinterPPD'])) { + $this->attrs['gotoPrinterPPD'] = $this->attrs['gotoPrinterPPD']; + $this->attrs['gotoPrinterPPD'] = $method.str_replace("//","/",$_SERVER['SERVER_NAME']."/ppd/".$this->attrs['gotoPrinterPPD']); + } /* Append printer user */ @@ -454,8 +592,6 @@ class printgeneric extends plugin } return($a_return); } - - }