diff --git a/include/class.canned.php b/include/class.canned.php index 52a487529c368bc158777359260d36b808dc1d90..0550e81ba839da8273558e029881e186f9d4c844 100644 --- a/include/class.canned.php +++ b/include/class.canned.php @@ -35,7 +35,7 @@ class Canned { .' count(filter.id) as filters ' .' FROM '.CANNED_TABLE.' canned ' .' LEFT JOIN '.CANNED_ATTACHMENT_TABLE.' attach ON (attach.canned_id=canned.canned_id) ' - .' LEFT JOIN '.EMAIL_FILTER_TABLE.' filter ON (canned.canned_id = filter.canned_response_id) ' + .' LEFT JOIN '.FILTER_TABLE.' filter ON (canned.canned_id = filter.canned_response_id) ' .' WHERE canned.canned_id='.db_input($id); if(!($res=db_query($sql)) || !db_num_rows($res)) return false; @@ -100,7 +100,7 @@ class Canned { if (!$this->_filters) { $this->_filters = array(); $res = db_query( - 'SELECT name FROM '.EMAIL_FILTER_TABLE + 'SELECT name FROM '.FILTER_TABLE .' WHERE canned_response_id = '.db_input($this->getId()) .' ORDER BY name'); while ($row = db_fetch_row($res)) diff --git a/include/class.filter.php b/include/class.filter.php index b6c81b42b60d0d4b8c67d3f7b33b1138695fa1e7..a7015d4ee18bb7e15463828406de38951191560f 100644 --- a/include/class.filter.php +++ b/include/class.filter.php @@ -18,7 +18,7 @@ class Filter { var $id; var $ht; - function Filter($id){ + function Filter($id) { $this->id=0; $this->load($id); } @@ -29,8 +29,8 @@ class Filter { return false; $sql='SELECT filter.*,count(rule.id) as rule_count ' - .' FROM '.EMAIL_FILTER_TABLE.' filter ' - .' LEFT JOIN '.EMAIL_FILTER_RULE_TABLE.' rule ON(rule.filter_id=filter.id) ' + .' FROM '.FILTER_TABLE.' filter ' + .' LEFT JOIN '.FILTER_RULE_TABLE.' rule ON(rule.filter_id=filter.id) ' .' WHERE filter.id='.db_input($id) .' GROUP BY filter.id'; @@ -47,27 +47,31 @@ class Filter { return $this->load($this->getId()); } - function getId(){ + function getId() { return $this->id; } - function getName(){ + function getTarget() { + return $this->ht['target']; + } + + function getName() { return $this->ht['name']; } - function getNotes(){ + function getNotes() { return $this->ht['notes']; } - function getInfo(){ + function getInfo() { return $this->ht; } - function getNumRules(){ + function getNumRules() { return $this->ht['rule_count']; } - function getExecOrder(){ + function getExecOrder() { return $this->ht['execorder']; } @@ -75,7 +79,7 @@ class Filter { return $this->ht['email_id']; } - function isActive(){ + function isActive() { return ($this->ht['isactive']); } @@ -83,23 +87,23 @@ class Filter { return !strcasecmp($this->getName(),'SYSTEM BAN LIST'); } - function getDeptId(){ + function getDeptId() { return $this->ht['dept_id']; } - function getPriorityId(){ + function getPriorityId() { return $this->ht['priority_id']; } - function getSLAId(){ + function getSLAId() { return $this->ht['sla_id']; } - function getStaffId(){ + function getStaffId() { return $this->ht['staff_id']; } - function getTeamId(){ + function getTeamId() { return $this->ht['team_id']; } @@ -107,36 +111,36 @@ class Filter { return $this->ht['canned_response_id']; } - function stopOnMatch(){ + function stopOnMatch() { return ($this->ht['stop_on_match']); } - function matchAllRules(){ + function matchAllRules() { return ($this->ht['match_all_rules']); } - function rejectEmail(){ + function rejectEmail() { return ($this->ht['reject_email']); } - function useReplyToEmail(){ + function useReplyToEmail() { return ($this->ht['use_replyto_email']); } - function disableAlerts(){ + function disableAlerts() { return ($this->ht['disable_autoresponder']); } - function sendAlerts(){ + function sendAlerts() { return (!$this->disableAlerts()); } - function getRules(){ + function getRules() { if (!$this->ht['rules']) { $rules=array(); //We're getting the rules...live because it gets cleared on update. - $sql='SELECT * FROM '.EMAIL_FILTER_RULE_TABLE.' WHERE filter_id='.db_input($this->getId()); - if(($res=db_query($sql)) && db_num_rows($res)){ + $sql='SELECT * FROM '.FILTER_RULE_TABLE.' WHERE filter_id='.db_input($this->getId()); + if(($res=db_query($sql)) && db_num_rows($res)) { while($row=db_fetch_array($res)) $rules[]=array('w'=>$row['what'],'h'=>$row['how'],'v'=>$row['val']); } @@ -145,11 +149,11 @@ class Filter { return $this->ht['rules']; } - function getFlatRules(){ //Format used on html... I'm ashamed + function getFlatRules() { //Format used on html... I'm ashamed $info=array(); - if(($rules=$this->getRules())){ - foreach($rules as $k=>$rule){ + if(($rules=$this->getRules())) { + foreach($rules as $k=>$rule) { $i=$k+1; $info["rule_w$i"]=$rule['w']; $info["rule_h$i"]=$rule['h']; @@ -169,7 +173,7 @@ class Filter { function removeRule($what, $how, $val) { - $sql='DELETE FROM '.EMAIL_FILTER_RULE_TABLE + $sql='DELETE FROM '.FILTER_RULE_TABLE .' WHERE filter_id='.db_input($this->getId()) .' AND what='.db_input($what) .' AND how='.db_input($how) @@ -197,7 +201,7 @@ class Filter { } else { # Fetch from database return 0 != db_count( - "SELECT COUNT(*) FROM ".EMAIL_FILTER_RULE_TABLE + "SELECT COUNT(*) FROM ".FILTER_RULE_TABLE ." WHERE filter_id=".db_input($this->id) ." AND what=".db_input($what)." AND how=".db_input($how) ." AND val=".db_input($val) @@ -306,7 +310,7 @@ class Filter { ); } - function update($vars,&$errors){ + function update($vars,&$errors) { if(!Filter::save($this->getId(),$vars,$errors)) return false; @@ -316,47 +320,55 @@ class Filter { return true; } - function delete(){ + function delete() { $id=$this->getId(); - $sql='DELETE FROM '.EMAIL_FILTER_TABLE.' WHERE id='.db_input($id).' LIMIT 1'; - if(db_query($sql) && ($num=db_affected_rows())){ - db_query('DELETE FROM '.EMAIL_FILTER_RULE_TABLE.' WHERE filter_id='.db_input($id)); + $sql='DELETE FROM '.FILTER_TABLE.' WHERE id='.db_input($id).' LIMIT 1'; + if(db_query($sql) && ($num=db_affected_rows())) { + db_query('DELETE FROM '.FILTER_RULE_TABLE.' WHERE filter_id='.db_input($id)); } return $num; } /** static functions **/ - function create($vars,&$errors){ + function getTargets() { + return array( + 'All' => 'All', + 'Web' => 'Web Forms', + 'Email' => 'Emails', + 'API' => 'API Calls'); + } + + function create($vars,&$errors) { return Filter::save(0,$vars,$errors); } - function getIdByName($name){ + function getIdByName($name) { - $sql='SELECT id FROM '.EMAIL_FILTER_TABLE.' WHERE name='.db_input($name); + $sql='SELECT id FROM '.FILTER_TABLE.' WHERE name='.db_input($name); if(($res=db_query($sql)) && db_num_rows($res)) list($id)=db_fetch_row($res); return $id; } - function lookup($id){ + function lookup($id) { return ($id && is_numeric($id) && ($f= new Filter($id)) && $f->getId()==$id)?$f:null; } - function validate_rules($vars,&$errors){ + function validate_rules($vars,&$errors) { return self::save_rules(0,$vars,$errors); } - function save_rules($id,$vars,&$errors){ + function save_rules($id,$vars,&$errors) { $matches=array('name','email','subject','body','header'); $types=array('equal','not_equal','contains','dn_contain'); $rules=array(); for($i=1; $i<=25; $i++) { //Expecting no more than 25 rules... - if($vars["rule_w$i"] || $vars["rule_h$i"]){ + if($vars["rule_w$i"] || $vars["rule_h$i"]) { if(!$vars["rule_w$i"] || !in_array($vars["rule_w$i"],$matches)) $errors["rule_$i"]='Invalid match selection'; elseif(!$vars["rule_h$i"] || !in_array($vars["rule_h$i"],$types)) @@ -367,7 +379,7 @@ class Filter { $errors["rule_$i"]='Valid email required for the match type'; else //for everything-else...we assume it's valid. $rules[]=array('w'=>$vars["rule_w$i"],'h'=>$vars["rule_h$i"],'v'=>$vars["rule_v$i"]); - }elseif($vars["rule_v$i"]){ + }elseif($vars["rule_v$i"]) { $errors["rule_$i"]='Incomplete selection'; } } @@ -383,7 +395,7 @@ class Filter { if(!$id) return true; //When ID is 0 then assume it was just validation... //Clear existing rules...we're doing mass replace on each save!! - db_query('DELETE FROM '.EMAIL_FILTER_RULE_TABLE.' WHERE filter_id='.db_input($id)); + db_query('DELETE FROM '.FILTER_RULE_TABLE.' WHERE filter_id='.db_input($id)); $num=0; foreach($rules as $rule) { $rule['filter_id']=$id; @@ -394,39 +406,49 @@ class Filter { return $num; } - function save($id,$vars,&$errors){ + function save($id,$vars,&$errors) { if(!$vars['execorder']) - $errors['execorder']='Order required'; + $errors['execorder'] = 'Order required'; elseif(!is_numeric($vars['execorder'])) - $errors['execorder']='Must be numeric value'; + $errors['execorder'] = 'Must be numeric value'; if(!$vars['name']) - $errors['name']='Name required'; + $errors['name'] = 'Name required'; elseif(($sid=self::getIdByName($vars['name'])) && $sid!=$id) - $errors['name']='Name already in-use'; + $errors['name'] = 'Name already in-use'; if(!$errors && !self::validate_rules($vars,$errors) && !$errors['rules']) - $errors['rules']='Unable to validate rules as entered'; + $errors['rules'] = 'Unable to validate rules as entered'; + + if(!is_numeric($vars['target']) && !in_array($vars['target'], array('All', 'Email', 'Web'))) + $errors['target'] = 'Unknown or invalid target'; if($errors) return false; - $sql=' updated=NOW() '. - ',isactive='.db_input($vars['isactive']). - ',name='.db_input($vars['name']). - ',execorder='.db_input($vars['execorder']). - ',email_id='.db_input($vars['email_id']). - ',dept_id='.db_input($vars['dept_id']). - ',priority_id='.db_input($vars['priority_id']). - ',sla_id='.db_input($vars['sla_id']). - ',match_all_rules='.db_input($vars['match_all_rules']). - ',stop_onmatch='.db_input(isset($vars['stop_onmatch'])?1:0). - ',reject_email='.db_input(isset($vars['reject_email'])?1:0). - ',use_replyto_email='.db_input(isset($vars['use_replyto_email'])?1:0). - ',disable_autoresponder='.db_input(isset($vars['disable_autoresponder'])?1:0). - ',canned_response_id='.db_input($vars['canned_response_id']). - ',notes='.db_input($vars['notes']); + $emailId = 0; + if(is_numeric($vars['target'])) { + $emailId = $vars['target']; + $vars['target'] = 'Email'; + } + + $sql=' updated=NOW() ' + .',isactive='.db_input($vars['isactive']) + .',target='.db_input($vars['target']) + .',name='.db_input($vars['name']) + .',execorder='.db_input($vars['execorder']) + .',email_id='.db_input($emailId) + .',dept_id='.db_input($vars['dept_id']) + .',priority_id='.db_input($vars['priority_id']) + .',sla_id='.db_input($vars['sla_id']) + .',match_all_rules='.db_input($vars['match_all_rules']) + .',stop_onmatch='.db_input(isset($vars['stop_onmatch'])?1:0) + .',reject_email='.db_input(isset($vars['reject_email'])?1:0) + .',use_replyto_email='.db_input(isset($vars['use_replyto_email'])?1:0) + .',disable_autoresponder='.db_input(isset($vars['disable_autoresponder'])?1:0) + .',canned_response_id='.db_input($vars['canned_response_id']) + .',notes='.db_input($vars['notes']); //Auto assign ID is overloaded... @@ -438,11 +460,11 @@ class Filter { $sql.=',staff_id=0,team_id=0 '; //no auto-assignment! if($id) { - $sql='UPDATE '.EMAIL_FILTER_TABLE.' SET '.$sql.' WHERE id='.db_input($id); + $sql='UPDATE '.FILTER_TABLE.' SET '.$sql.' WHERE id='.db_input($id); if(!db_query($sql)) $errors['err']='Unable to update the filter. Internal error occurred'; }else{ - $sql='INSERT INTO '.EMAIL_FILTER_TABLE.' SET '.$sql.',created=NOW() '; + $sql='INSERT INTO '.FILTER_TABLE.' SET '.$sql.',created=NOW() '; if(!db_query($sql) || !($id=db_insert_id())) $errors['err']='Unable to add filter. Internal error'; } @@ -464,14 +486,14 @@ class FilterRule { var $filter; - function FilterRule($id,$filterId=0){ + function FilterRule($id,$filterId=0) { $this->id=0; $this->load($id,$filterId); } function load($id,$filterId=0) { - $sql='SELECT rule.* FROM '.EMAIL_FILTER_RULE_TABLE.' rule ' + $sql='SELECT rule.* FROM '.FILTER_RULE_TABLE.' rule ' .' WHERE rule.id='.db_input($id); if($filterId) $sql.=' AND rule.filter_id='.db_input($filterId); @@ -529,9 +551,9 @@ class FilterRule { return true; } - function delete(){ + function delete() { - $sql='DELETE FROM '.EMAIL_FILTER_RULE_TABLE.' WHERE id='.db_input($this->getId()).' AND filter_id='.db_input($this->getFilterId()); + $sql='DELETE FROM '.FILTER_RULE_TABLE.' WHERE id='.db_input($this->getId()).' AND filter_id='.db_input($this->getFilterId()); return (db_query($sql) && db_affected_rows()); } @@ -559,12 +581,12 @@ class FilterRule { $sql.=',notes='.db_input($vars['notes']); if($id) { - $sql='UPDATE '.EMAIL_FILTER_RULE_TABLE.' SET '.$sql.' WHERE id='.db_input($id).' AND filter_id='.db_input($vars['filter_id']); + $sql='UPDATE '.FILTER_RULE_TABLE.' SET '.$sql.' WHERE id='.db_input($id).' AND filter_id='.db_input($vars['filter_id']); if(db_query($sql)) return true; } else { - $sql='INSERT INTO '.EMAIL_FILTER_RULE_TABLE.' SET created=NOW(), filter_id='.db_input($vars['filter_id']).', '.$sql; + $sql='INSERT INTO '.FILTER_RULE_TABLE.' SET created=NOW(), filter_id='.db_input($vars['filter_id']).', '.$sql; if(db_query($sql) && ($id=db_insert_id())) return $id; } @@ -665,7 +687,7 @@ class EmailFilter { } /* static */ function getAllActive() { - $sql="SELECT id FROM ".EMAIL_FILTER_TABLE." WHERE isactive" + $sql="SELECT id FROM ".FILTER_TABLE." WHERE isactive" ." ORDER BY execorder"; return db_query($sql); @@ -695,8 +717,8 @@ class EmailFilter { */ /* static */ function quickList($addr, $name=false, $subj=false, $emailid=0) { - $sql="SELECT DISTINCT filter_id FROM ".EMAIL_FILTER_RULE_TABLE." rule" - ." INNER JOIN ".EMAIL_FILTER_TABLE." filter" + $sql="SELECT DISTINCT filter_id FROM ".FILTER_RULE_TABLE." rule" + ." INNER JOIN ".FILTER_TABLE." filter" ." ON (filter.id=rule.filter_id)" ." WHERE filter.isactive"; # Filter by recipient email-id if specified @@ -713,8 +735,8 @@ class EmailFilter { # sender-email-addresses or sender-names or subjects $sql.=") OR filter.id IN (" ." SELECT filter_id " - ." FROM ".EMAIL_FILTER_RULE_TABLE." rule" - ." INNER JOIN ".EMAIL_FILTER_TABLE." filter" + ." FROM ".FILTER_RULE_TABLE." rule" + ." INNER JOIN ".FILTER_TABLE." filter" ." ON (rule.filter_id=filter.id)" ." GROUP BY filter_id" ." HAVING COUNT(*)-COUNT(NULLIF(what,'email'))=0"; @@ -724,8 +746,8 @@ class EmailFilter { # have at least one rule 'what' type that wasn't considered $sql.=") OR filter.id IN (" ." SELECT filter_id" - ." FROM ".EMAIL_FILTER_RULE_TABLE." rule" - ." INNER JOIN ".EMAIL_FILTER_TABLE." filter" + ." FROM ".FILTER_RULE_TABLE." rule" + ." INNER JOIN ".FILTER_TABLE." filter" ." ON (rule.filter_id=filter.id)" ." WHERE what NOT IN ('email'" # Handle sender-name and subject if specified @@ -751,8 +773,8 @@ class EmailFilter { /* static */ function isBanned($addr) { $sql='SELECT filter.id, what, how, UPPER(val) ' - .' FROM '.EMAIL_FILTER_TABLE.' filter' - .' INNER JOIN '.EMAIL_FILTER_RULE_TABLE.' rule' + .' FROM '.FILTER_TABLE.' filter' + .' INNER JOIN '.FILTER_RULE_TABLE.' rule' .' ON (filter.id=rule.filter_id)' .' WHERE filter.reject_email' .' AND filter.match_all_rules=0' diff --git a/include/staff/banlist.inc.php b/include/staff/banlist.inc.php index 0b61d1e8b779edaf48c448c82eb38c3d1ce3deed..b2b37b284b0ae4de0750650b2feb9fae2135cf5d 100644 --- a/include/staff/banlist.inc.php +++ b/include/staff/banlist.inc.php @@ -3,7 +3,7 @@ if(!defined('OSTADMININC') || !$thisstaff || !$thisstaff->isAdmin() || !$filter) $qstr=''; $select='SELECT rule.* '; -$from='FROM '.EMAIL_FILTER_RULE_TABLE.' rule '; +$from='FROM '.FILTER_RULE_TABLE.' rule '; $where='WHERE rule.filter_id='.db_input($filter->getId()); $search=false; if($_REQUEST['q'] && strlen($_REQUEST['q'])>3) { diff --git a/include/staff/filter.inc.php b/include/staff/filter.inc.php index c2aad0bcf4456d5bade4fa323a4ba3c991c39929..ccba2502ef2fbf40030dadaf58f11f1f292b6f21 100644 --- a/include/staff/filter.inc.php +++ b/include/staff/filter.inc.php @@ -33,7 +33,7 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info); <tr> <th colspan="2"> <h4><?php echo $title; ?></h4> - <em>Filters are executed based on execution order.</em> + <em>Filters are executed based on execution order. Filter can target specific ticket source.</em> </th> </tr> </thead> @@ -71,31 +71,36 @@ $info=Format::htmlchars(($errors && $_POST)?$_POST:$info); </td> </tr> <tr> - <td width="180"> - To Email Address: + <td width="180" class="required"> + Target: </td> <td> - <select name="email_id"> - <option value="0">— Filter applies to ALL incoming emails ‐</option> + <select name="target"> + <option value="All" <?php echo ($info['target']=='All')?'selected="selected"':''; ?>>— Applies to ALL Tickets ‐</option> + <option value="Web" <?php echo ($info['target']=='Web')?'selected="selected"':''; ?>>Web Forms</option> + <option value="API" <?php echo ($info['target']=='API')?'selected="selected"':''; ?>>API Calls</option> + <option value="Email" <?php echo ($info['target']=='Email')?'selected="selected"':''; ?>>Emails</option> <?php $sql='SELECT email_id,email,name FROM '.EMAIL_TABLE.' email ORDER by name'; - if(($res=db_query($sql)) && db_num_rows($res)){ - while(list($id,$email,$name)=db_fetch_row($res)){ + if(($res=db_query($sql)) && db_num_rows($res)) { + echo '<OPTGROUP label="Specific Incoming Emails">'; + while(list($id,$email,$name)=db_fetch_row($res)) { $selected=($info['email_id'] && $id==$info['email_id'])?'selected="selected"':''; if($name) $email=Format::htmlchars("$name <$email>"); echo sprintf('<option value="%d" %s>%s</option>',$id,$selected,$email); } + echo '</OPTGROUP>'; } ?> </select> - <br><em>(Highly recommended if the filter is specific to one incoming email address)</em> + + <span class="error"> <?php echo $errors['target']; ?></span> </td> </tr> <tr> <th colspan="2"> - <em><strong>Filter Rules</strong>: Rules are applied based on the criteria. - <span class="error">* <?php echo $errors['rules']; ?></span></em> + <em><strong>Filter Rules</strong>: Rules are applied based on the criteria. <span class="error">* <?php echo $errors['rules']; ?></span></em> </th> </tr> <tr> diff --git a/include/staff/filters.inc.php b/include/staff/filters.inc.php index 7f3aab393f56cb3b1eb3f8dc3da0113204d35e41..7573eceec7d3a82950a52e9e04ce2fce213754e8 100644 --- a/include/staff/filters.inc.php +++ b/include/staff/filters.inc.php @@ -1,13 +1,13 @@ <?php if(!defined('OSTADMININC') || !$thisstaff->isAdmin()) die('Access Denied'); - +$targets = Filter::getTargets(); $qstr=''; $sql='SELECT filter.*,count(rule.id) as rules '. - 'FROM '.EMAIL_FILTER_TABLE.' filter '. - 'LEFT JOIN '.EMAIL_FILTER_RULE_TABLE.' rule ON(rule.filter_id=filter.id) '. + 'FROM '.FILTER_TABLE.' filter '. + 'LEFT JOIN '.FILTER_RULE_TABLE.' rule ON(rule.filter_id=filter.id) '. 'GROUP BY filter.id'; $sortOptions=array('name'=>'filter.name','status'=>'filter.isactive','order'=>'filter.execorder','rules'=>'rules', - 'created'=>'filter.created','updated'=>'filter.updated'); + 'target'=>'filter.target', 'created'=>'filter.created','updated'=>'filter.updated'); $orderWays=array('DESC'=>'DESC','ASC'=>'ASC'); $sort=($_REQUEST['sort'] && $sortOptions[strtolower($_REQUEST['sort'])])?strtolower($_REQUEST['sort']):'name'; //Sorting options... @@ -28,7 +28,7 @@ $x=$sort.'_sort'; $$x=' class="'.strtolower($order).'" '; $order_by="$order_column $order "; -$total=db_count('SELECT count(*) FROM '.EMAIL_FILTER_TABLE.' filter '); +$total=db_count('SELECT count(*) FROM '.FILTER_TABLE.' filter '); $page=($_GET['p'] && is_numeric($_GET['p']))?$_GET['p']:1; $pageNav=new Pagenate($total, $page, PAGE_LIMIT); $pageNav->setURL('filters.php',$qstr.'&sort='.urlencode($_REQUEST['sort']).'&order='.urlencode($_REQUEST['order'])); @@ -44,7 +44,7 @@ else ?> <div style="width:700;padding-top:5px; float:left;"> - <h2>Email Filters</h2> + <h2>Ticket Filters</h2> </div> <div style="float:right;text-align:right;padding-top:5px;padding-right:5px;"> <b><a href="filters.php?a=add" class="Icon newEmailFilter">Add New Filter</a></b></div> @@ -58,9 +58,10 @@ else <tr> <th width="7"> </th> <th width="320"><a <?php echo $name_sort; ?> href="filters.php?<?php echo $qstr; ?>&sort=name">Name</a></th> - <th width="100"><a <?php echo $status_sort; ?> href="filters.php?<?php echo $qstr; ?>&sort=status">Status</a></th> + <th width="80"><a <?php echo $status_sort; ?> href="filters.php?<?php echo $qstr; ?>&sort=status">Status</a></th> <th width="80" style="text-align:center;"><a <?php echo $order_sort; ?> href="filters.php?<?php echo $qstr; ?>&sort=order">Order</a></th> <th width="80" style="text-align:center;"><a <?php echo $rules_sort; ?> href="filters.php?<?php echo $qstr; ?>&sort=rules">Rules</a></th> + <th width="100"><a <?php echo $target_sort; ?> href="filters.php?<?php echo $qstr; ?>&sort=target">Target</a></th> <th width="120" nowrap><a <?php echo $created_sort; ?>href="filters.php?<?php echo $qstr; ?>&sort=created">Date Added</a></th> <th width="150" nowrap><a <?php echo $updated_sort; ?>href="filters.php?<?php echo $qstr; ?>&sort=updated">Last Updated</a></th> </tr> @@ -85,6 +86,7 @@ else <td><?php echo $row['isactive']?'Active':'<b>Disabled</b>'; ?></td> <td style="text-align:right;padding-right:25px;"><?php echo $row['execorder']; ?> </td> <td style="text-align:right;padding-right:25px;"><?php echo $row['rules']; ?> </td> + <td> <?php echo Format::htmlchars($targets[$row['target']]); ?></td> <td> <?php echo Format::db_date($row['created']); ?></td> <td> <?php echo Format::db_datetime($row['updated']); ?></td> </tr> @@ -93,7 +95,7 @@ else endif; ?> <tfoot> <tr> - <td colspan="7"> + <td colspan="8"> <?php if($res && $num){ ?> Select: <a href="#" onclick="return select_all(document.forms['filters'],true)">All</a> diff --git a/include/upgrader/sql/d0e37dca-58ef694d.patch.sql b/include/upgrader/sql/d0e37dca-58ef694d.patch.sql new file mode 100644 index 0000000000000000000000000000000000000000..337cffa7932d89f92206dabe77c509397cdf11ba --- /dev/null +++ b/include/upgrader/sql/d0e37dca-58ef694d.patch.sql @@ -0,0 +1,19 @@ +/** + * @version v1.7 RC3 + * @signature 58ef694d5ebf73cc291e07e597c6f85d + * + * Upgrade from 1.6 RC3 + filters + * + */ + +RENAME TABLE `%TABLE_PREFIX%email_filter` TO `%TABLE_PREFIX%filter`; + +RENAME TABLE `%TABLE_PREFIX%email_filter_rule` TO `%TABLE_PREFIX%filter_rule`; + +ALTER TABLE `%TABLE_PREFIX%filter` + ADD `target` ENUM( 'All', 'Web', 'Email', 'API' ) NOT NULL DEFAULT 'All' AFTER `sla_id` , + ADD INDEX ( `target` ); + +-- Finished with patch +UPDATE `%TABLE_PREFIX%config` + SET `schema_signature`='58ef694d5ebf73cc291e07e597c6f85d'; diff --git a/main.inc.php b/main.inc.php index abcbfeabdaee005bdd83abb7719ac163e0e531af..d9ee629e1081af76d3c7f906a12750a7f51d297c 100644 --- a/main.inc.php +++ b/main.inc.php @@ -63,8 +63,7 @@ #Current version && schema signature (Changes from version to version) define('THIS_VERSION','1.7-RC2'); //Shown on admin panel - define('SCHEMA_SIGNATURE','d0e37dca324648f1ce2d10528a6026d4'); //MD5 signature of the db schema. (used to trigger upgrades) - + define('SCHEMA_SIGNATURE','58ef694d5ebf73cc291e07e597c6f85d'); //MD5 signature of the db schema. (used to trigger upgrades) #load config info $configfile=''; if(file_exists(ROOT_DIR.'ostconfig.php')) //Old installs prior to v 1.6 RC5 @@ -159,8 +158,10 @@ define('EMAIL_TABLE',TABLE_PREFIX.'email'); define('EMAIL_TEMPLATE_TABLE',TABLE_PREFIX.'email_template'); - define('EMAIL_FILTER_TABLE',TABLE_PREFIX.'email_filter'); - define('EMAIL_FILTER_RULE_TABLE',TABLE_PREFIX.'email_filter_rule'); + + define('FILTER_TABLE',TABLE_PREFIX.'filter'); + define('FILTER_RULE_TABLE',TABLE_PREFIX.'filter_rule'); + define('BANLIST_TABLE',TABLE_PREFIX.'email_banlist'); //Not in use anymore....as of v 1.7 define('SLA_TABLE',TABLE_PREFIX.'sla'); diff --git a/scp/banlist.php b/scp/banlist.php index 081fde9b4ed0cd18713cab78e795c2e0eaf1df1b..a31d91d7e8d2392c2d7e23dba570a07257532ec8 100644 --- a/scp/banlist.php +++ b/scp/banlist.php @@ -68,7 +68,7 @@ if($_POST && !$errors && $filter){ }else{ $count=count($_POST['ids']); if($_POST['enable']){ - $sql='UPDATE '.EMAIL_FILTER_RULE_TABLE.' SET isactive=1 WHERE filter_id='. + $sql='UPDATE '.FILTER_RULE_TABLE.' SET isactive=1 WHERE filter_id='. db_input($filter->getId()). ' AND id IN ('. implode(',', db_input($_POST['ids'])).')'; @@ -81,7 +81,7 @@ if($_POST && !$errors && $filter){ $errors['err']='Unable to enable selected emails'; } }elseif($_POST['disable']){ - $sql='UPDATE '.EMAIL_FILTER_RULE_TABLE.' SET isactive=0 WHERE filter_id='. + $sql='UPDATE '.FILTER_RULE_TABLE.' SET isactive=0 WHERE filter_id='. db_input($filter->getId()). ' AND id IN ('. implode(',', db_input($_POST['ids'])).')'; diff --git a/scp/filters.php b/scp/filters.php index 2fe1f9fb7c06f9848f958d1e2e8b6ebe62b17390..29045410fe685f10a86a362942f34259a6401edd 100644 --- a/scp/filters.php +++ b/scp/filters.php @@ -49,7 +49,7 @@ if($_POST){ }else{ $count=count($_POST['ids']); if($_POST['enable']){ - $sql='UPDATE '.EMAIL_FILTER_TABLE.' SET isactive=1 WHERE id IN ('. + $sql='UPDATE '.FILTER_TABLE.' SET isactive=1 WHERE id IN ('. implode(',', db_input($_POST['ids'])).')'; if(db_query($sql) && ($num=db_affected_rows())){ if($num==$count) @@ -60,7 +60,7 @@ if($_POST){ $errors['err']='Unable to enable selected filters'; } }elseif($_POST['disable']){ - $sql='UPDATE '.EMAIL_FILTER_TABLE.' SET isactive=0 WHERE id IN ('. + $sql='UPDATE '.FILTER_TABLE.' SET isactive=0 WHERE id IN ('. implode(',', db_input($_POST['ids'])).')'; if(db_query($sql) && ($num=db_affected_rows())) { if($num==$count) diff --git a/setup/inc/sql/osTicket-mysql.sql b/setup/inc/sql/osTicket-mysql.sql index 5cfba00d6538506e29e136f188610df4508551cb..614a0fa07ec72c19bc7b2ca985eed443eec6b036 100644 --- a/setup/inc/sql/osTicket-mysql.sql +++ b/setup/inc/sql/osTicket-mysql.sql @@ -228,8 +228,8 @@ CREATE TABLE `%TABLE_PREFIX%email` ( KEY `dept_id` (`dept_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -DROP TABLE IF EXISTS `%TABLE_PREFIX%email_filter`; -CREATE TABLE `%TABLE_PREFIX%email_filter` ( +DROP TABLE IF EXISTS `%TABLE_PREFIX%filter`; +CREATE TABLE `%TABLE_PREFIX%filter` ( `id` int(11) unsigned NOT NULL auto_increment, `execorder` int(10) unsigned NOT NULL default '99', `isactive` tinyint(1) unsigned NOT NULL default '1', @@ -245,20 +245,22 @@ CREATE TABLE `%TABLE_PREFIX%email_filter` ( `staff_id` int(10) unsigned NOT NULL default '0', `team_id` int(10) unsigned NOT NULL default '0', `sla_id` int(10) unsigned NOT NULL default '0', + `target` ENUM( 'All', 'Web', 'Email', 'API' ) NOT NULL DEFAULT 'All', `name` varchar(32) NOT NULL default '', `notes` text, `created` datetime NOT NULL, `updated` datetime NOT NULL, PRIMARY KEY (`id`), + KEY `target` (`target`), KEY `email_id` (`email_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -INSERT INTO `%TABLE_PREFIX%email_filter` ( +INSERT INTO `%TABLE_PREFIX%filter` ( `id`,`isactive`,`execorder`,`reject_email`,`name`,`notes`,`created`) VALUES (1, 1, 99, 1, 'SYSTEM BAN LIST', 'Internal list for email banning. Do not remove', NOW()); -DROP TABLE IF EXISTS `%TABLE_PREFIX%email_filter_rule`; +DROP TABLE IF EXISTS `%TABLE_PREFIX%filter_rule`; CREATE TABLE `%TABLE_PREFIX%email_filter_rule` ( `id` int(11) unsigned NOT NULL auto_increment, `filter_id` int(10) unsigned NOT NULL default '0', @@ -274,7 +276,7 @@ CREATE TABLE `%TABLE_PREFIX%email_filter_rule` ( UNIQUE `filter` (`filter_id`, `what`, `how`, `val`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8; -INSERT INTO `%TABLE_PREFIX%email_filter_rule` ( +INSERT INTO `%TABLE_PREFIX%filter_rule` ( `id`, `filter_id`, `isactive`, `what`,`how`,`val`,`created`) VALUES (1, 1, 1, 'email', 'equal', 'test@example.com',NOW()); diff --git a/setup/inc/sql/osTicket-mysql.sql.md5 b/setup/inc/sql/osTicket-mysql.sql.md5 index 63d2ce443b0448ca776ebc37b298a3c4ff93c387..bf779b6ab7e045bbf0cb92fc286e337572f89c05 100644 --- a/setup/inc/sql/osTicket-mysql.sql.md5 +++ b/setup/inc/sql/osTicket-mysql.sql.md5 @@ -1 +1 @@ -d0e37dca324648f1ce2d10528a6026d4 +58ef694d5ebf73cc291e07e597c6f85d