auth->check_module_permissions('mail'); // Loading classes $app->uses('tpl,tform,tform_actions'); $app->load('tform_actions'); class page_action extends tform_actions { function onSubmit() { global $app, $conf; // Get the parent mail_user record $mailuser = $app->db->queryOneRecord("SELECT * FROM mail_user WHERE mailuser_id = '".intval($_REQUEST["mailuser_id"])."' AND ".$app->tform->getAuthSQL('r')); // Check if Domain belongs to user if($mailuser["mailuser_id"] != $_POST["mailuser_id"]) $app->tform->errorMessage .= $app->tform->wordbook["no_mailuser_perm"]; // Set the mailuser_id $this->dataRecord["mailuser_id"] = $mailuser["mailuser_id"]; parent::onSubmit(); } function onAfterInsert() { global $app, $conf; $mailuser = $app->db->queryOneRecord("SELECT sys_groupid, custom_mailfilter FROM mail_user WHERE mailuser_id = ".$this->dataRecord["mailuser_id"]); $rule_content = $mailuser['custom_mailfilter']."\n".$app->db->quote($this->getRule()); $rule_content = $app->db->quote($rule_content); $app->db->datalogUpdate('mail_user', "custom_mailfilter = '$rule_content'", 'mailuser_id', $this->dataRecord["mailuser_id"]); // set permissions $app->db->query("UPDATE mail_user_filter SET sys_groupid = ".$mailuser['sys_groupid']." WHERE filter_id = ".$this->id); } function onAfterUpdate() { global $app, $conf; $mailuser = $app->db->queryOneRecord("SELECT custom_mailfilter FROM mail_user WHERE mailuser_id = ".$this->dataRecord["mailuser_id"]); $skip = false; $lines = explode("\n",$mailuser['custom_mailfilter']); $out = ''; $found = false; foreach($lines as $line) { $line = trim($line); if($line == '### BEGIN FILTER_ID:'.$this->id) { $skip = true; $found = true; } if($skip == false && $line != '') $out .= $line ."\n"; if($line == '### END FILTER_ID:'.$this->id) { $out .= $this->getRule(); $skip = false; } } // We did not found our rule, so we add it now. if($found == false) { $out .= $this->getRule(); } $out = $app->db->quote($out); $app->db->datalogUpdate('mail_user', "custom_mailfilter = '$out'", 'mailuser_id', $this->dataRecord["mailuser_id"]); } function getRule() { $content = ''; $content .= '### BEGIN FILTER_ID:'.$this->id."\n"; $TargetNoQuotes = $this->dataRecord["target"]; $TargetQuotes = "\"$TargetNoQuotes\""; $TestChDirNoQuotes = '$DEFAULT/.'.$TargetNoQuotes; $TestChDirQuotes = "\"$TestChDirNoQuotes\""; $MailDirMakeNoQuotes = $TargetQuotes.' $DEFAULT'; $EchoTargetFinal = $TargetNoQuotes; if($this->dataRecord["action"] == 'move') { $content .= " `test -e ".$TestChDirQuotes." && exit 1 || exit 0` if ( ".'$RETURNCODE'." != 1 ) { `maildirmake -f $MailDirMakeNoQuotes` `chmod -R 0700 ".$TestChDirQuotes."` `echo \"INBOX.$EchoTargetFinal\" >> ".'$DEFAULT'."/courierimapsubscribed` } "; } $content .= "if (/^".$this->dataRecord["source"].":"; $searchterm = preg_quote($this->dataRecord["searchterm"]); if($this->dataRecord["op"] == 'contains') { $content .= ".*".$searchterm."/:h)\n"; } elseif ($this->dataRecord["op"] == 'is') { $content .= $searchterm."$/:h)\n"; } elseif ($this->dataRecord["op"] == 'begins') { $content .= $searchterm."/:h)\n"; } elseif ($this->dataRecord["op"] == 'ends') { $content .= ".*".$searchterm."$/:h)\n"; } $content .= "{\n"; $content .= "exception {\n"; if($this->dataRecord["action"] == 'move') { $content .= 'ID' . "$this->id" . 'EndFolder = "$DEFAULT/.' . $this->dataRecord['target'] . '/"' . "\n"; $content .= "to ". '$ID' . "$this->id" . 'EndFolder' . "\n"; } else { $content .= "to /dev/null\n"; } $content .= "}\n"; $content .= "}\n"; //} $content .= '### END FILTER_ID:'.$this->id."\n"; return $content; } } $page = new page_action; $page->onLoad(); ?>