1 <?php
3 class govirusserver extends goService{
5 /* This plugin only writes its objectClass */
6 var $objectclasses = array("goVirusServer");
7 var $attributes = array("avMaxThreads","avMaxDirectoryRecursions","avUser","avFlags","avArchiveMaxFileSize","avArchiveMaxRecursion",
8 "avArchiveMaxCompressionRatio","avDatabaseMirror","avChecksPerDay","avHttpProxyURL");
9 var $StatusFlag = "avStatus";
11 /* This class can't be assigned twice so it conflicts with itsself */
12 var $conflicts = array("goVirusServer");
14 var $DisplayName = "";
15 var $dn = NULL;
16 var $cn = "";
17 var $avStatus = "";
19 var $ui = NULL;
21 var $Flags = array("D","S","A","E");
23 var $avFlags = "DS";
24 var $avFlagsD = TRUE;
25 var $avFlagsS = TRUE;
26 var $avFlagsA = FALSE;
27 var $avFlagsE = FALSE;
29 var $avMaxThreads = 5;
30 var $avMaxDirectoryRecursions = 4;
31 var $avArchiveMaxFileSize = 4000;
32 var $avArchiveMaxRecursion = 5;
33 var $avArchiveMaxCompressionRatio = 95;
34 var $avChecksPerDay = 12;
36 var $avUser = "";
37 var $avHttpProxyURL = "";
38 var $avDatabaseMirror = "";
39 var $view_logged =FALSE;
41 function govirusserver(&$config,$dn, $parent= NULL)
42 {
43 /* Init class */
44 goService::goService($config,$dn, $parent);
45 $this->DisplayName = _("Anti virus");
47 /* Get userinfo & acls */
48 $this->ui = get_userinfo();
50 /* Get Flags */
51 foreach($this->Flags as $flag){
52 $var = "avFlags".$flag;
53 if(preg_match("/".$flag."/",$this->avFlags)){
54 $this->$var = TRUE;
55 }
56 }
57 }
60 function execute()
61 {
62 $smarty = get_smarty();
64 if($this->is_account && !$this->view_logged){
65 $this->view_logged = TRUE;
66 new log("view","server/".get_class($this),$this->dn);
67 }
70 /* Set acls */
71 $tmp = $this->plInfo();
72 foreach($tmp['plProvidedAcls'] as $name => $translation) {
73 $smarty->assign($name."ACL",$this->getacl($name));
74 }
76 $display = "";
77 $smarty->assign("servtabs",FALSE);
78 $this->is_account = true;
80 /* Assign smarty vars */
81 foreach($this->attributes as $attr){
82 $smarty->assign($attr,$this->$attr);
83 }
85 /* Assign checkbox states */
86 foreach($this->Flags as $Flag){
87 $var = "avFlags".$Flag;
88 if($this->$var){
89 $smarty->assign("avFlags".$Flag."CHK"," checked " );
90 }else{
91 $smarty->assign("avFlags".$Flag."CHK","");
92 }
93 }
95 /* Assign value for max thread select box */
96 $tmp = array();
97 for($i = 1 ; $i <= 20 ; $i ++){
98 $tmp[$i] = $i;
99 }
100 $smarty->assign("ThreadValues",$tmp);
102 if($this->avFlagsA){
103 $smarty->assign("avFlagsAState" , "" );
104 }else{
105 $smarty->assign("avFlagsAState" , " disabled " );
106 }
108 return($display.$smarty->fetch(get_template_path("goVirusServer.tpl",TRUE,dirname(__FILE__))));
109 }
112 function save()
113 {
114 if(!$this->is_account) return;
116 /* Create Flags */
117 $this->avFlags = "";
118 foreach($this->Flags as $flag){
119 $var = "avFlags".$flag;
120 if($this->$var){
121 $this->avFlags .=$flag;
122 }
123 }
125 plugin::save();
127 if(!$this->avFlagsA){
128 $arr = array("avArchiveMaxFileSize","avArchiveMaxRecursion","avArchiveMaxCompressionRatio");
129 foreach($arr as $attr){
130 $this->attrs[$attr] = array();
131 }
132 $this->attrs['avFlags'] = preg_replace("/E/","",$this->attrs['avFlags']);
133 }
135 /* Check if this is a new entry ... add/modify */
136 $ldap = $this->config->get_ldap_link();
137 $ldap->cat($this->dn,array("objectClass"));
138 if($ldap->count()){
139 $ldap->cd($this->dn);
140 $ldap->modify($this->attrs);
141 }else{
142 $ldap->cd($this->dn);
143 $ldap->add($this->attrs);
144 }
145 if($this->initially_was_account){
146 $this->handle_post_events("modify");
147 new log("modify","server/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
148 }else{
149 $this->handle_post_events("add");
150 new log("create","server/".get_class($this),$this->dn,array_keys($this->attrs),$ldap->get_error());
151 }
153 show_ldap_error($ldap->get_error(), sprintf(_("Saving of server services/anti virus with dn '%s' failed."),$this->dn));
154 }
156 function check()
157 {
158 $message = plugin::check();
160 $mustBeNumeric = array(
161 "avMaxDirectoryRecursions" =>_("Maximum directory recursions"),
162 "avMaxThreads" =>_("Maximum threads"),
163 "avArchiveMaxFileSize" =>_("Maximum file size"),
164 "avArchiveMaxRecursion" =>_("Maximum recursions"),
165 "avArchiveMaxCompressionRatio" =>_("Maximum compression ratio"),
166 "avChecksPerDay" =>_("Checks per day"));
168 foreach($mustBeNumeric as $key => $trans){
169 if(!is_numeric($this->$key)){
170 $message[] = sprintf(_("The specified value for '%s' must be a numeric value."),$trans);
171 }
172 }
174 foreach(array("avUser"=>_("Database user"),"avHttpProxyURL"=>_("Http proxy URL"),"avDatabaseMirror"=>_("Database mirror")) as $attr => $name){
175 if(!preg_match("/^[a-z0-9:_\-\.\/]*$/",$this->$attr)){
176 $message[] = sprintf(_("Please specify a valid value for '%s'."),$name);
177 }
178 }
180 return($message);
181 }
184 function save_object()
185 {
186 if(isset($_POST['goVirusServer'])){
187 plugin::save_object();
188 foreach($this->Flags as $flag){
190 $var = "avFlags".$flag;
191 if($this->acl_is_writeable($var)){
192 if(isset($_POST[$var])){
193 $this->$var = TRUE;
194 }else{
195 $this->$var = FALSE;
196 }
197 }
198 }
199 }
200 }
203 /* For newer service management dialogs */
204 function getListEntry()
205 {
206 $fields = goService::getListEntry();
207 $fields['AllowEdit'] = true;
208 $fields['Message'] = _("Anti virus");
209 return($fields);
210 }
213 /* Return plugin informations for acl handling */
214 function plInfo()
215 {
216 return (array(
217 "plShortName" => _("Anti virus"),
218 "plDescription" => _("Anti virus")." ("._("Services").")",
219 "plSelfModify" => FALSE,
220 "plDepends" => array(),
221 "plPriority" => 96,
222 "plSection" => array("administration"),
223 "plCategory" => array("server"),
224 "plProvidedAcls"=> array(
226 "start" => _("Start"),
227 "stop" => _("Stop"),
228 "restart" => _("Restart"),
230 "avFlagsD" =>_("Enable debugging"),
231 "avFlagsS" =>_("Enable mail scanning"),
232 "avFlagsA" =>_("Enable scanning of archives"),
233 "avFlagsE" =>_("Block encrypted archives"),
235 "avMaxThreads" =>_("Maximum threads"),
236 "avMaxDirectoryRecursions" =>_("Maximum directory recursions"),
237 "avUser" =>_("Anti virus user"),
238 "avArchiveMaxFileSize" =>_("Maximum file size"),
239 "avArchiveMaxRecursion" =>_("Maximum recursions"),
240 "avArchiveMaxCompressionRatio" =>_("Maximum compression ratio"),
241 "avDatabaseMirror" =>_("Database mirror"),
242 "avChecksPerDay" =>_("Checks per day"),
243 "avHttpProxyURL" =>_("Http proxy URL"))
244 ));
245 }
246 }
247 // vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler:
248 ?>