index 0b8c5caadfc8f68d4c91e397148b2b5794b442f5..1e4f6829f73e71e83093dbf245f9333e9b3b63d6 100644 (file)
{
var $_parsed = array();
var $TYPE = "if";
- var $id = -1;
+ var $object_id = -1;
var $address_parts = array();
var $comparators = array();
"gt" => _("greater than"),
"ne" => _("not equal"));
- $this->id = $object_id;
- $this->elements = $elements;
- $this->_parsed = $this->_parse($elements['ELEMENTS'],1);
+ $this->object_id = $object_id;
+ if($elements!=NULL){
+ $this->elements = $elements;
+ $this->_parsed = $this->_parse($elements['ELEMENTS'],1);
+ }
}
}
+ /* Return error msgs */
+ function check()
+ {
+ $check = $this->check_recursive();
+ return($check);
+ }
+
+
+ /* Recursivly fetch all error msgs */
+ function check_recursive($parsed = NULL,$id = 1,$obj_id=1)
+ {
+ $ret = array();
+ if($parsed == NULL){
+ $parsed = $this->_parsed;
+ }
+
+ /* Walk through all elements */
+ foreach($parsed as $key => $data){
+
+ /* Create elements */
+ switch($key)
+ {
+ /*******************
+ * Allof / Anyof
+ *******************/
+ case "anyof" :
+ case "allof" :
+ {
+ foreach($data as $key2 => $dat){
+ if(($key2 === "Inverse") && ($key2 == "Inverse")){
+ continue;
+ }
+ $msgs = $this->check_recursive($dat, ($id +1),$key2);
+
+ foreach($msgs as $msg){
+ $ret[] = $msg;
+ }
+ }
+ break;
+ }
+
+ /*******************
+ * True / False
+ *******************/
+
+ case "true" :
+ case "fasle" :
+ {
+ /* Can't fail anyway */
+ break;
+ }
+
+ /*******************
+ * Default
+ *******************/
+
+ default:
+ {
+ if(isset($data['LastError']) && !empty($data['LastError'])){
+ $ret[] = $data['LastError'];
+ }
+ }
+ }
+ }
+ return($ret);
+ }
+
+
/* Recursivly create a sieve script out of the given
* tags and tokens provided by $parsed.
* $id specifies the depth of the current element.
$parsed = $this->_parsed;
}
+
+ if(!is_array($parsed)){
+ return;
+ }
+
/* Walk through all elements */
foreach($parsed as $key => $data){
if($Inverse){
$script .= "not ";
}
-
$script .= $key;
-
break;
}
/* Add comparator */
if(!empty($data['Comparator']) && $data['Comparator'] != ""){
- $script .= ":comparator ".$data['Comparator']." ";
+ $script .= preg_replace('/\"\"/',"\"", ":comparator \"".$data['Comparator']."\" ");
}
/* Add match type */
/* Add special match type for count and value */
if(in_array($data['Match_type'], array(":value",":count")) && !empty($data['Match_type_value'])) {
- $script .= $data['Match_type_value']." ";
+ $script .= sieve_create_strings($data['Match_type_value'])." ";
}
$script .= sieve_create_strings($data['Key_List']);
/* Add comparator */
if(!empty($data['Comparator']) && $data['Comparator'] != ""){
- $script .= ":comparator ".$data['Comparator']." ";
+ $script .= preg_replace('/\"\"/',"\"", ":comparator \"".$data['Comparator']."\" ");
}
/* Add match type */
/* Add special match type for count and value */
if(in_array($data['Match_type'], array(":value",":count")) && !empty($data['Match_type_value'])) {
- $script .= $data['Match_type_value']." ";
+ $script .= sieve_create_strings($data['Match_type_value'])." ";
}
$script .= sieve_create_strings($data['Key_List']);
/* Add comparator */
if(!empty($data['Comparator']) && $data['Comparator'] != ""){
- $script .= ":comparator ".$data['Comparator']." ";
+ $script .= preg_replace('/\"\"/',"\"", ":comparator \"".$data['Comparator']."\" ");
}
/* Add match type */
/* Add special match type for count and value */
if(in_array($data['Match_type'], array(":value",":count")) && !empty($data['Match_type_value'])) {
- $script .= $data['Match_type_value']." ";
+ $script .= sieve_create_strings($data['Match_type_value'])." ";
}
$script .= sieve_create_strings($data['Key_List']);
return($script);
}
+
+ function add_test($data,$type)
+ {
+ switch($type)
+ {
+ case "header" :
+ case "address" :
+ case "envelope" :
+ {
+ /* Add to Tree */
+ $values = array( "Inverse" => FALSE,
+ "Comparator" => "",
+ "Expert" => FALSE,
+ "LastError" => "",
+ "Match_type" => ":contains",
+ "Match_type_value"=> "",
+ "Key_List" => array(_("emtpy")),
+ "Value_List" => array(_("empty"))) ;
+ if($type == "address"){
+ $values["Address_Part"] = ":all";
+ }
+ $data[$type]=$values;
+ break;
+ }
+ case "allof" :
+ case "anyof" :
+ {
+ $data[$type] = array("Inverse" => FALSE);
+ break;
+ }
+ case "size" :
+ {
+ $tmp= array(
+ "Inverse" => FALSE,
+ "Match_type" => ":contains",
+ "Value_List" => array(1,"M"));
+
+ $tmp['LastError'] = "";
+ $data[$type] = $tmp;
+ break;
+ }
+ case "true":
+ {
+ $data['true'] = "true";
+ $data['true']['LastError'] = "";
+ break;
+ }
+ case "false":
+ {
+ $data['false'] = "false";
+ $data['false']['LastError'] = "";
+ break;
+ }
+ case "exists" :
+ {
+ $data['exists'] = array('Inverse' => FALSE,
+ 'Values' => array(_("Nothing specified right now")),
+ 'LastError' => "");
+ break;
+ }
+ default : echo "Still buggy ";exit;
+ }
+
+ return($data);
+ }
+
/* Ensure that all changes made on the ui
* will be saved.
*/
function save_object()
{
+
+ if(isset($_POST['add_type']) && isset($_POST["test_type_to_add_".$this->object_id])){
+ $this->_parsed = $this->add_test($this->_parsed,$_POST["test_type_to_add_".$this->object_id]);
+ }
+
$tmp = $this->save_object_recursive($parsed = NULL,$id = 1,$obj_id=1);
$this->_parsed = $tmp;
}
$parsed = $this->_parsed;
}
+ if(!is_array($parsed)) return;
+
/* Walk through all elements */
foreach($parsed as $key => $data){
/* Id used to have unique html names */
- $element_id = $this->id."_".$id."_".$obj_id;
+ $element_id = $this->object_id."_".$id."_".$obj_id;
+
+ foreach($_POST as $name => $value){
+ if(preg_match("/Remove_Test_Object_".$element_id."_(x|y)/",$name)) {
+ return(false);
+ }
+ }
+
+
+ if(isset($_POST['add_type']) && isset($_POST["test_type_to_add_".$element_id])){
+ $parsed[$key][] = $this->add_test(array(),$_POST["test_type_to_add_".$element_id]);
+ }
/* Create elements */
switch($key)
{
-
/*******************
* Address
*******************/
$match_types = $this->match_types;
$operators = $this->operators;
+ $parsed[$key]['LastError'] = "";
+
/* Toggle Inverse ? */
if(isset($_POST['toggle_inverse_'.$element_id])){
$parsed[$key]['Inverse'] = !$parsed[$key]['Inverse'];
if(isset($_POST['address_part_'.$element_id])){
$ap = $_POST['address_part_'.$element_id];
- if(isset($address_parts[$ap])){
- $parsed[$key]['Address_Part'] = $ap;
+ if(!isset($address_parts[$ap])){
+ $parsed[$key]['LastError'] = _("Invalid type of address part.") ;
}
+ $parsed[$key]['Address_Part'] = $ap;
}
/* Check if match type has changed */
if(isset($_POST['matchtype_'.$element_id])){
$mt = $_POST['matchtype_'.$element_id];
- if(isset($match_types[$mt])){
- $parsed[$key]['Match_type'] = $mt;
+ if(!isset($match_types[$mt])){
+ $parsed[$key]['LastError'] = _("Invalid match type given.");
}
+ $parsed[$key]['Match_type'] = $mt;
}
/* Get the comparator tag, if posted */
if(isset($_POST['comparator_'.$element_id])){
$cp = $_POST['comparator_'.$element_id];
- if(isset($comparators[$cp])){
- $parsed[$key]['Comparator'] = $cp;
+ if(!isset($comparators[$cp])){
+ $parsed[$key]['LastError'] = _("Invalid operator given.");
}
+ $parsed[$key]['Comparator'] = $cp;
}
/* In case of :count and :value match types
if(isset($_POST['operator_'.$element_id])){
$op = $_POST['operator_'.$element_id];
- if(isset($operators[$op])){
- $parsed[$key]['Match_type_value'] = $op;
+ if(!isset($operators[$op])){
+ $parsed[$key]['LastError'] = _("Please specify a valid operator.");
}
+ $parsed[$key]['Match_type_value'] = $op;
}
}
case "exists" :
{
+ /* Toggle Inverse ? */
+ if(isset($_POST['toggle_inverse_'.$element_id])){
+ $parsed[$key]['Inverse'] = !$parsed[$key]['Inverse'];
+ }
+
/* get list of match values */
if(isset($_POST['Values_'.$element_id])){
$vls = stripslashes($_POST['Values_'.$element_id]);
"K" => _("Kilobyte"));
/* Reset error */
- $parsed['size']['LastError'] ="";
+ $parsed[$key]['LastError'] ="";
/* Get match type */
if(isset($_POST['Match_type_'.$element_id])){
$mt = $_POST['Match_type_'.$element_id];
- if(isset($Match_types[$mt])){
- $parsed['size']['Match_type'] = $mt;
- }else{
- $parsed['size']['LastError'] = _("Please select a valid match type in the list box below.");
+ if(!isset($Match_types[$mt])){
+ $parsed[$key]['LastError'] = _("Please select a valid match type in the list box below.");
}
+ $parsed[$key]['Match_type'] = $mt;
}
/* Get old values */
- $value = preg_replace("/[^0-9]*$/","",$parsed['size']['Value_List'][0]);
- $unit = preg_replace("/^[0-9]*/","",$parsed['size']['Value_List'][0]);
+ $value = preg_replace("/[^0-9]*$/","",$parsed[$key]['Value_List'][0]);
+ $unit = preg_replace("/^[0-9]*/","",$parsed[$key]['Value_List'][0]);
/* Get value */
if(isset($_POST['Value_'.$element_id])){
$vl = $_POST['Value_'.$element_id];
- if(is_numeric($vl) && preg_match("/^[0-9]*$/",$vl)){
- $value = $vl;
- }else{
- $parsed['size']['LastError'] = _("Only numeric values are allowed here.");
+ if(!(is_numeric($vl) && preg_match("/^[0-9]*$/",$vl))){
+ $parsed[$key]['LastError'] = _("Only numeric values are allowed here.");
}
+ $value = preg_replace("/[^0-9]/","",$vl);
}
/* Get unit */
if(isset($_POST['Value_Unit_'.$element_id])){
$ut = $_POST['Value_Unit_'.$element_id];
- if(isset($Units[$ut])){
- $unit = $ut;
- }else{
- $parsed['size']['LastError'] = _("No valid unit selected");
+ if(!isset($Units[$ut])){
+ $parsed[$key]['LastError'] = _("No valid unit selected");
}
- }
-
- $parsed['size']['Value_List'][0] = $value.$unit;
+ $unit = $ut;
+ }
+ $parsed[$key]['Value_List'] = array();
+ $parsed[$key]['Value_List'][0] = $value.$unit;
break;
}
if(($key2 === "Inverse") && ($key2 == "Inverse")){
continue;
}
- $parsed[$key][$key2] = $this->save_object_recursive($dat, ($id +1),$key2);
+ $tmp_data = $this->save_object_recursive($dat, ($id +1),$key2."-".$obj_id);
+ if($tmp_data != false){
+ $parsed[$key][$key2] = $tmp_data;
+ }else{
+ unset( $parsed[$key][$key2]);
+ }
}
break ;
}
if(($key2 === "Inverse") && ($key2 == "Inverse")){
continue;
}
- $parsed[$key][$key2] = $this->save_object_recursive($dat, ($id + 1),$key2);
+ $tmp_data = $this->save_object_recursive($dat, ($id +1),$key2."-".$obj_id);
+ if($tmp_data != false){
+ $parsed[$key][$key2] = $tmp_data;
+ }else{
+ unset( $parsed[$key][$key2]);
+ }
}
break ;
}
}
- }
+ }
return($parsed);
}
$name .= " - "._("Else");
}
- /* Create new html block */
- $str ="<table cellspacing=0 width='100%'>
- <tr>
- <td style='width:100%;background-color:#DDDDDD; padding:5px; border: solid 2px #AAAAAA;'>".
- $name;
- $str .= $this->get_as_html();
- $str .= " </td>
- </tr>
- </table>";
+ $smarty = get_smarty();
+ $smarty->assign("ID", $this->object_id);
+
+ /* Only display navigation elements if necessary */
+ if($this->TYPE == "if"){
+ $object_container = $smarty->fetch(get_template_path("templates/object_container.tpl",TRUE,dirname(__FILE__)));
+ }else{
+ $object_container = $smarty->fetch(get_template_path("templates/object_container_clear.tpl",TRUE,dirname(__FILE__)));
+ }
+
+ $smarty->assign("Name", $name);
+ $smarty->assign("Contents", $this->get_as_html());
+ $object = $smarty->fetch(get_template_path("templates/element_if_else.tpl",TRUE,dirname(__FILE__)));
+ $str = preg_replace("/%%OBJECT_CONTENT%%/",$object,$object_container);
return($str);
}
$parsed = $this->_parsed;
}
+ if((!is_array($parsed)) || !count($parsed)) {
+ $smarty = get_smarty();
+ $smarty->assign("ID",$this->object_id);
+ $smarty->assign("DisplayAdd",TRUE);
+ $smarty->assign("DisplayDel",FALSE);
+ $str = $smarty->fetch(get_template_path("templates/object_test_container.tpl",TRUE,dirname(__FILE__)));
+ $ret .= preg_replace("/%%OBJECT_CONTENT%%/",_("Empty"),$str);
+ return($ret);
+ }
+
/* Walk through all elements */
foreach($parsed as $key => $data){
/* Create Inverse Tag */
if(is_array($data) && isset($data['Inverse']) && $data['Inverse']){
- $str_inverse = "<font color='red'><b>"._("Not")."</b></font> ";
$Inverse = TRUE;
}else{
- $str_inverse = "";
$Inverse = FALSE;
}
/* Id used to have unique html names */
- $element_id = $this->id."_".$id."_".$obj_id;
+ $element_id = $this->object_id."_".$id."_".$obj_id;
/* Create elements */
switch($key)
$smarty->assign("comparators",$comparators);
$smarty->assign("match_types",$match_types);
$smarty->assign("operators",$operators);
-
+ $smarty->assign("LastError",$data['LastError']);
$smarty->assign("match_type", $data['Match_type']);
$smarty->assign("operator" , preg_replace("/\"/","",$data['Match_type_value']));
- $smarty->assign("comparator", $data['Comparator']);
-
+ $smarty->assign("comparator", preg_replace("/\"/","",$data['Comparator']));
$keys = "";
foreach($data['Key_List'] as $key){
$smarty->assign("Inverse",$Inverse);
$smarty->assign("values",$values);
$smarty->assign("Expert", $data['Expert']);
-
$smarty->assign("ID" , $element_id);
$ret .= $smarty->fetch(get_template_path("templates/element_header.tpl",TRUE,dirname(__FILE__)));
$smarty->assign("Expert", $data['Expert']);
$smarty->assign("match_types",$match_types);
$smarty->assign("operators",$operators);
-
+ $smarty->assign("LastError",$data['LastError']);
$smarty->assign("match_type", $data['Match_type']);
$smarty->assign("operator" , preg_replace("/\"/","",$data['Match_type_value']));
- $smarty->assign("comparator", $data['Comparator']);
+ $smarty->assign("comparator", preg_replace("/\"/","",$data['Comparator']));
$keys = "";
foreach($data['Key_List'] as $key){
$smarty->assign("address_parts",$address_parts);
$smarty->assign("comparators",$comparators);
$smarty->assign("match_types",$match_types);
+ $smarty->assign("LastError",$data['LastError']);
$smarty->assign("operators",$operators);
-
$smarty->assign("match_type", $data['Match_type']);
$smarty->assign("operator" , preg_replace("/\"/","",$data['Match_type_value']));
- $smarty->assign("comparator", $data['Comparator']);
+ $smarty->assign("comparator", preg_replace("/\"/","",$data['Comparator']));
$smarty->assign("address_part", $data['Address_Part']);
-
$smarty->assign("Expert", $data['Expert']);
$keys = "";
$values = preg_replace("/,$/","",trim($values));
$smarty->assign("keys",$keys);
$smarty->assign("values",$values);
-
-
$smarty->assign("ID" , $element_id);
$ret .= $smarty->fetch(get_template_path("templates/element_address.tpl",TRUE,dirname(__FILE__)));
break;
/*******************
* Exists
*******************/
-
case "exists" :
{
if(($key === "Inverse") && ($key == "Inverse")){
continue;
}
- $Contents .= $this->get_as_html($dat, ($id +1),$key);
+ $Contents .= $this->get_as_html($dat, ($id +1),$key."-".$obj_id);
}
+
$smarty = get_smarty();
+ $smarty->assign("ID" , $element_id);
+ $smarty->assign("DisplayAdd",TRUE);
+ $smarty->assign("DisplayDel",FALSE);
+ $cont_tmp = $smarty->fetch(get_template_path("templates/object_test_container.tpl",TRUE,dirname(__FILE__)));
+ $cont_tmp = preg_replace("/%%OBJECT_CONTENT%%/",_("Klick here to add a new test"),$cont_tmp);
+
$smarty->assign("Inverse",$Inverse);
- $smarty->assign("Contents",$Contents);
+ $smarty->assign("Contents",$cont_tmp.$Contents);
$smarty->assign("ID" , $element_id);
- $ret .= $smarty->fetch(get_template_path("templates/element_allof.tpl",TRUE,dirname(__FILE__)));
+ $allof_tmp = $smarty->fetch(get_template_path("templates/element_allof.tpl",TRUE,dirname(__FILE__)));
+
+ $ret = $allof_tmp;
break ;
}
if(($key === "Inverse") && ($key == "Inverse")){
continue;
}
- $Contents .= $this->get_as_html($dat, ($id +1),$key);
+ $Contents .= $this->get_as_html($dat, ($id +1),$key."-".$obj_id);
}
$smarty = get_smarty();
- $smarty->assign("Inverse",$Inverse);
- $smarty->assign("Contents",$Contents);
$smarty->assign("ID" , $element_id);
- $ret .= $smarty->fetch(get_template_path("templates/element_anyof.tpl",TRUE,dirname(__FILE__)));
+ $smarty->assign("DisplayAdd",TRUE);
+ $smarty->assign("DisplayDel",FALSE);
+ $cont_tmp = $smarty->fetch(get_template_path("templates/object_test_container.tpl",TRUE,dirname(__FILE__)));
+ $cont_tmp = preg_replace("/%%OBJECT_CONTENT%%/",_("Klick here to add a new test"),$cont_tmp);
+
+ $smarty->assign("Inverse",$Inverse);
+ $smarty->assign("Contents",$cont_tmp.$Contents);
+ $allof_tmp = $smarty->fetch(get_template_path("templates/element_anyof.tpl",TRUE,dirname(__FILE__)));
+
+ $ret = $allof_tmp;
+
break ;
}
default :
}
}
}
+
+ if(!isset($smarty)){
+ $smarty =get_smarty();
+ }
+
+ $smarty->assign("ID",$element_id);
+ $smarty->assign("DisplayAdd",FALSE);
+ $smarty->assign("DisplayDel",TRUE);
+ $str = $smarty->fetch(get_template_path("templates/object_test_container.tpl",TRUE,dirname(__FILE__)));
+ $ret = preg_replace("/%%OBJECT_CONTENT%%/",$ret,$str);
return($ret);
}
$values["Address_Part"] = $Address_Part;
}
$tmp[$type] = $values;
+ $tmp[$type]['LastError'] = "";
break;
}
$tmp[$type]= array( "Inverse" => $Inverse,
"Match_type" => $Match_type,
"Value_List" => $Value_List);
+ $tmp[$type]['LastError'] = "";
break;
}
case "true":
{
$tmp['true'] = "true";
+ $tmp['true']['LastError'] = "";
break;
}
case "false":
{
$tmp['false'] = "false";
+ $tmp['false']['LastError'] = "";
break;
}
$tmp['exists'] = array('Inverse' => $Inverse,
'Values' => $tmp2['STRINGS']);
+ $tmp[$type]['LastError'] = "";
break;
}