From 9278eccf1a15ae7ee9316c90e9f3f5df6c41e268 Mon Sep 17 00:00:00 2001 From: hickert Date: Mon, 31 Jul 2006 10:50:57 +0000 Subject: [PATCH] Added Spam dialog git-svn-id: https://oss.gonicus.de/repositories/gosa/branches/2.5@4348 594d385d-05f5-0310-b6e9-bd551577e9d8 --- plugins/admin/systems/class_goSpamServer.inc | 447 ++++++++++++++++++ .../admin/systems/class_goSpamServerRule.inc | 49 ++ plugins/admin/systems/goSpamServer.tpl | 82 ++++ plugins/admin/systems/goSpamServerRule.tpl | 27 ++ 4 files changed, 605 insertions(+) create mode 100644 plugins/admin/systems/class_goSpamServer.inc create mode 100644 plugins/admin/systems/class_goSpamServerRule.inc create mode 100644 plugins/admin/systems/goSpamServer.tpl create mode 100644 plugins/admin/systems/goSpamServerRule.tpl diff --git a/plugins/admin/systems/class_goSpamServer.inc b/plugins/admin/systems/class_goSpamServer.inc new file mode 100644 index 000000000..aac824dd2 --- /dev/null +++ b/plugins/admin/systems/class_goSpamServer.inc @@ -0,0 +1,447 @@ +DisplayName = _("Spamassassin"); + + /* Get userinfo & acls */ + $this->ui = get_userinfo(); + + /* Set up the users ACL's for this 'dn' */ + $this->acl= get_permissions ($this->dn, $this->ui->subtreeACL); + + /* Get Flags */ + foreach($this->Flags as $flag){ + $var = "saFlags".$flag; + if(preg_match("/".$flag."/",$this->saFlags)){ + $this->$var = TRUE; + } + } + + /* Get trusted networks */ + $this->TrustedNetworks = array(); + if(isset($this->attrs['saTrustedNetworks']) && is_array($this->attrs['saTrustedNetworks'])){ + $var = $this->attrs['saTrustedNetworks']; + for($i = 0 ; $i < $var['count'] ; $i ++ ){ + $var2 = $this->attrs['saTrustedNetworks'][$i]; + $this->TrustedNetworks[ $var2 ] = $var2; + } + } + + /* Get rules */ + $this->Rules = array(); + if(isset($this->attrs['saRule']) && is_array($this->attrs['saRule'])){ + $var = $this->attrs['saRule']; + for($i = 0 ; $i < $var['count'] ; $i ++ ){ + $var2 = $this->attrs['saRule'][$i]; + $name = preg_replace("/:.*$/","",$var2); + $value= base64_decode(preg_replace("/^.*:/","",$var2)); + $this->Rules[ $name ] = $value; + } + } + } + + + function execute() + { + /* Do we need to flip is_account state? */ + if (isset($_POST['modify_state'])) { + $this->is_account = !$this->is_account; + } + + /* Show tab dialog headers */ + if ($this->is_account) { + /* call Add Acoount to add account */ + $display = $this->show_header(_("Remove spamassassin extension"), + _("This server has spamassassin features enabled. You can disable them by clicking below.")); + } else { + /* call remove Account */ + $display = $this->show_header(_("Add spamassassin service"), + _("This server has spamassassin features disabled. You can enable them by clicking below.")); + return ($display); + } + + /* Add new trusted network */ + if(isset($_POST['AddNewTrust'])){ + $this->AddTrust($_POST['NewTrustName']); + } + + /* Delete selected trusted network */ + if(isset($_POST['DelTrust'])){ + $this->DelTrust($_POST['TrustedNetworks']); + } + + /* Add a new rule */ + if(isset($_POST['AddRule'])){ + $this->dialog = new goSpamServerRule($this->config,$this->dn); + } + + /* Cancel adding/editing specified rule */ + if(isset($_POST['CancelRule'])){ + $this->dialog = NULL; + } + + /* Handle post to delete rules */ + $once = true; + foreach($_POST as $name => $value){ + if(preg_match("/^editRule_/",$name) && $once ){ + $once = false; + $entry = preg_replace("/^editRule_/","",$name); + $entry = preg_replace("/_(x|y)$/","",$entry); + $rule = $this->Rules[$entry]; + $name = $entry; + $this->dialog = new goSpamServerRule($this->config,$this->dn,$name,$rule); + } + if(preg_match("/^delRule_/",$name) && $once ){ + $once = false; + $entry = preg_replace("/^delRule_/","",$name); + $entry = preg_replace("/_(x|y)$/","",$entry); + unset($this->Rules[$entry]); + } + } + + /* Save rules */ + if(isset($_POST['SaveRule'])){ + $this->dialog->save_object(); + $msgs = $this->dialog->check(); + if(count($msgs)){ + foreach($msgs as $msg){ + print_red($msg); + } + }else{ + $ret = $this->dialog->save(); + print_a($ret); + if((!empty($ret['orig_name'])) && isset($this->Rules[$ret['orig_name']])){ + unset($this->Rules[$ret['orig_name']]); + } + $this->Rules[$ret['name']] = $ret['rule']; + $this->dialog = NULL; + } + } + + /* Display dialog if available */ + if($this->dialog && $this->dialog->config){ + $this->dialog->save_object(); + return($this->dialog->execute()); + } + + /* Assign smarty vars */ + $smarty = get_smarty(); + foreach($this->attributes as $attr){ + $smarty->assign($attr,$this->$attr); + $smarty->assign($attr."ACL",chkacl($this->acl,$attr)); + } + + /* Assign checkbox states */ + foreach($this->Flags as $Flag){ + $var = "saFlags".$Flag; + $smarty->assign("saFlags".$Flag."ACL",chkacl($this->acl,$Flag)); + if($this->$var){ + $smarty->assign("saFlags".$Flag."CHK"," checked " ); + }else{ + $smarty->assign("saFlags".$Flag."CHK",""); + } + } + + /* Create divlist */ + $DivRules = new divSelectBox("SpamRules"); + $DivRules->SetHeight(150); + + if(preg_match("/disabled/",chkacl($this->acl,"saTrustedNetworks"))){ + $actions = ""; + }else{ + $actions = ""; + $actions.= ""; + } + + foreach($this->Rules as $key => $net){ + $field1 = array("string" => $key ); + $field2 = array("string" => sprintf($actions,$key,$key) , "attach" => "style='border-right:0px;width:36px;'"); + $DivRules->AddEntry(array($field1,$field2)); + } + $smarty->assign("divRules",$DivRules->DrawList()); + $smarty->assign("TrustedNetworks",$this->TrustedNetworks); + + return($display.$smarty->fetch(get_template_path("goSpamServer.tpl",TRUE,dirname(__FILE__)))); + } + + + /* Add $post to list of configured trusted */ + function AddTrust($post) + { + if(!empty($post)){ + $this->TrustedNetworks[$post] = $post; + } + } + + + /* Delete trusted network */ + function DelTrust($posts) + { + foreach($posts as $post){ + if(isset($this->TrustedNetworks[$post])){ + unset($this->TrustedNetworks[$post]); + } + } + } + + + /* remove this extension */ + function remove_from_parent() + { + if(!$this->is_account && $this->initially_was_account){ + plugin::remove_from_parent(); + + /* Check if this is a new entry ... add/modify */ + $ldap = $this->config->get_ldap_link(); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + }else{ + $ldap->cd($this->dn); + $ldap->add($this->attrs); + } + show_ldap_error($ldap->get_error(), sprintf(_("Removing of server services/spamassassin with dn '%s' failed."),$this->dn)); + $this->handle_post_events("remove"); + } + } + + + function save() + { + if(!$this->is_account) return; + plugin::save(); + + /* Create Flags */ + $this->attrs['saFlags'] = ""; + foreach($this->Flags as $flag){ + $var = "saFlags".$flag; + if($this->$var){ + $this->attrs['saFlags'].=$flag; + } + } + + /* Create trusted network entries */ + $this->attrs['saTrustedNetworks'] = array(); + foreach($this->TrustedNetworks as $net){ + $this->attrs['saTrustedNetworks'][] = $net; + } + + /* Rules */ + $this->attrs['saRule'] = array(); + foreach($this->Rules as $name => $rule){ + $this->attrs['saRule'][] = $name.":".base64_encode($rule); + } + + /* Check if this is a new entry ... add/modify */ + $ldap = $this->config->get_ldap_link(); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + $ldap->cd($this->dn); + $ldap->modify($this->attrs); + }else{ + $ldap->cd($this->dn); + $ldap->add($this->attrs); + } + if($this->initially_was_account){ + $this->handle_post_events("modify"); + }else{ + $this->handle_post_events("add"); + } + + show_ldap_error($ldap->get_error(), sprintf(_("Saving of server services/spamassassin with dn '%s' failed."),$this->dn)); + } + + function check() + { + $message = plugin::check(); + return($message); + } + + + function save_object() + { + if(isset($_POST['goSpamServer'])){ + plugin::save_object(); + + print_a($_POST); + + foreach($this->Flags as $flag){ + $var = "saFlags".$flag; + if(isset($_POST[$var])){ + $this->$var = TRUE; + }else{ + $this->$var = FALSE; + } + } + } + } + + + /* Return plugin informations for acl handling + function plInfo() + { + return (array( + "plShortName" => _("Spamassassin"), + "plDescription" => _("Spamassassin service"), + "plSelfModify" => FALSE, + "plDepends" => array(), + "plPriority" => 0, + "plSection" => array("administration"), + "plCategory" => array("server"), + "plProvidedAcls"=> array( + + "saRewriteHeader" => _("Rewrite header"), + "saTrustedNetworks" => _("Trusted networks"), + "saRequiredScore" => _("Required score"), + "saRule" => _("Rules"), + + "saFlagB" => _("Enable use of bayes filtering"), + "saFlagb" => _("Enabled bayes auto learning"), + "saFlagC" => _("Enable RBL checks"), + "saFlagR" => _("Enable use of Razor"), + "saFlagD" => _("Enable use of DDC"), + "saFlagP" => _("Enable use of Pyzor")) + )); + } + */ + + /* For newer service management dialogs */ + /*function getListEntry() + { + $this->updateStatusState(); + $flag = $this->StatusFlag; + $fields['Status'] = $this->$flag; + $fields['Message'] = _("spamassassin"); + $fields['AllowStart'] = true; + $fields['AllowStop'] = true; + $fields['AllowRestart'] = true; + $fields['AllowRemove'] = true; + $fields['AllowEdit'] = true; + return($fields); + } + + function updateStatusState() + { + if(empty($this->StatusFlag)) return; + + $attrs = array(); + $flag = $this->StatusFlag; + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->cn); + $ldap->cat($this->dn,array($flag)); + if($ldap->count()){ + $attrs = $ldap->fetch(); + } + if(isset($attrs[$flag][0])){ + $this->$flag = $attrs[$flag][0]; + } + } + function action_hook($add_attrs= array()) + { + /* Find postcreate entries for this class * / + $command= search_config($this->config->data['MENU'], get_class($this), "ACTION_HOOK"); + if ($command == "" && isset($this->config->data['TABS'])){ + $command= search_config($this->config->data['TABS'], get_class($this), "ACTION_HOOK"); + } + if ($command != ""){ + /* Walk through attribute list * / + foreach ($this->attributes as $attr){ + if (!is_array($this->$attr)){ + $command= preg_replace("/%$attr/", $this->$attr, $command); + } + } + $command= preg_replace("/%dn/", $this->dn, $command); + /* Additional attributes * / + foreach ($add_attrs as $name => $value){ + $command= preg_replace("/%$name/", $value, $command); + } + + /* If there are still some %.. in our command, try to fill these with some other class vars * / + if(preg_match("/%/",$command)){ + $attrs = get_object_vars($this); + foreach($attrs as $name => $value){ + if(!is_string($value)) continue; + $command= preg_replace("/%$name/", $value, $command); + } + } + + if (check_command($command)){ + @DEBUG (DEBUG_SHELL, __LINE__, __FUNCTION__, __FILE__, + $command, "Execute"); + + exec($command); + } else { + $message= sprintf(_("Command '%s', specified as ACTION_HOOK for plugin '%s' doesn't seem to exist."), $command, get_class($this)); + print_red ($message); + } + } + } + + /* Directly save new status flag * / + function setStatus($value) + { + if($value == "none") return; + if(!$this->initially_was_account) return; + $ldap = $this->config->get_ldap_link(); + $ldap->cd($this->dn); + $ldap->cat($this->dn,array("objectClass")); + if($ldap->count()){ + + $tmp = $ldap->fetch(); + for($i = 0; $i < $tmp['objectClass']['count']; $i ++){ + $attrs['objectClass'][] = $tmp['objectClass'][$i]; + } + $flag = $this->StatusFlag; + $attrs[$flag] = $value; + $this->$flag = $value; + $ldap->modify($attrs); + show_ldap_error($ldap->get_error(), sprintf(_("Set status flag for server services/spamassassin with dn '%s' failed."),$this->dn)); + $this->action_hook(); + } + } + + + */ + +} +// vim:tabstop=2:expandtab:shiftwidth=2:filetype=php:syntax:ruler: +?> diff --git a/plugins/admin/systems/class_goSpamServerRule.inc b/plugins/admin/systems/class_goSpamServerRule.inc new file mode 100644 index 000000000..4883ba99f --- /dev/null +++ b/plugins/admin/systems/class_goSpamServerRule.inc @@ -0,0 +1,49 @@ +name = $this->orig_name= $name; + $this->rule = $rule; + } + + + function execute() + { + $smarty = get_smarty(); + foreach($this->attributes as $attr){ + $smarty->assign($attr,$this->$attr); + } + return($smarty->fetch(get_template_path("goSpamServerRule.tpl",TRUE,dirname(__FILE__)))); + } + + function save_object() + { + plugin::save_object(); + } + + + function save() + { + $ret =array(); + $ret['orig_name'] = $this->orig_name; + $ret['name'] = $this->name; + $ret['rule'] = $this->rule; + return($ret); + } + + function check() + { + $messages = plugin::check(); + return($messages); + } +} + +?> diff --git a/plugins/admin/systems/goSpamServer.tpl b/plugins/admin/systems/goSpamServer.tpl new file mode 100644 index 000000000..7f1bb256b --- /dev/null +++ b/plugins/admin/systems/goSpamServer.tpl @@ -0,0 +1,82 @@ + + + + + + + + + + + +

Spam tagging

+ + + + + + + + + + +
+ {t}Rewrite header{/t} + + +
+ {t}Required score{/t} + + +
+ +

Trusted networks

+ + + + + +
+
+   + + +
+ +

Flags

+ + + + + +
+  {t}Enable use of bayes filtering{/t}
+  {t}Enable bayes auto learning{/t}
+  {t}Enable RBL checks{/t} +
+
+ + + + +
+  {t}Enable use of Razor{/t}
+  {t}Enable use of DDC{/t}
+  {t}Enable use of Pyzer{/t} +
+ +

Rules

+ + + + + +
+ {$divRules}
+ +
+ +
+ diff --git a/plugins/admin/systems/goSpamServerRule.tpl b/plugins/admin/systems/goSpamServerRule.tpl new file mode 100644 index 000000000..8673f15df --- /dev/null +++ b/plugins/admin/systems/goSpamServerRule.tpl @@ -0,0 +1,27 @@ +

Edit spam rule

+ + + + + + + + + +
+ {t}Name{/t} + + +
+ {t}Rule{/t} + +
+

 

+

+

+ +   + +
+

+ -- 2.30.2