Esempio n. 1
0
 /**
 	this takes the parsed array originally returned from parse_field_mask($display_mask) and expands it with the
 	specific $item_instance_r information.
 */
 function _expand_title_mask($item_instance_r, $mask, &$mask_element_rs, $config_var_rs = NULL)
 {
     // if no parsed mask elements, then return $mask.
     if (is_empty_or_not_array($mask_element_rs)) {
         // only return mask if there is something to return.
         if (strlen($mask) > 0) {
             return $mask;
         } else {
             return $item_instance_r['title'];
         }
     }
     for ($i = 0; $i < count($mask_element_rs); $i++) {
         // no array set, or simple attribute variable 's_attribute_type.option' not set.
         if (is_not_empty_array($mask_element_rs[$i]) && !isset($mask_element_rs[$i]['s_attribute_type']) && !isset($mask_element_rs[$i]['option'])) {
             // replace the array index.
             switch ($mask_element_rs[$i]['type']) {
                 case 'ifdef':
                     // ifdef(s_attribute_type, "if_mask"[, "else_mask"])
                     if (is_item_attribute_set($item_instance_r['item_id'], $item_instance_r['instance_no'], strtoupper($mask_element_rs[$i]['varname']))) {
                         $value = $this->_expand_title_mask($item_instance_r, $mask_element_rs[$i]['if_mask'], $mask_element_rs[$i]['if_mask_elements']);
                     } else {
                         if (strlen($mask_element_rs[$i]['else_mask']) > 0) {
                             $value = $this->_expand_title_mask($item_instance_r, $mask_element_rs[$i]['else_mask'], $mask_element_rs[$i]['else_mask_elements']);
                         } else {
                             $value = NULL;
                         }
                     }
                     break;
                 case 'if':
                     // if(varname[<|<=|>=|>|==|!=]value, "if_mask"[, "else_mask"])
                     if ($mask_element_rs[$i]['varname'] == 'instance_no') {
                         $value = $item_instance_r['instance_no'];
                     } else {
                         if ($mask_element_rs[$i]['varname'] == 's_status_type') {
                             $value = $item_instance_r['s_status_type'];
                         } else {
                             if ($mask_element_rs[$i]['varname'] == 's_item_type') {
                                 $value = $item_instance_r['s_item_type'];
                             } else {
                                 $value = fetch_attribute_val($item_instance_r['item_id'], $item_instance_r['instance_no'], strtoupper($mask_element_rs[$i]['varname']));
                             }
                         }
                     }
                     // the attribute is defined, so now lets do the comparison.
                     if ($value !== false) {
                         if ($this->_test_if_condition($value, $mask_element_rs[$i]['op'], $mask_element_rs[$i]['value'])) {
                             $value = $this->_expand_title_mask($item_instance_r, $mask_element_rs[$i]['if_mask'], $mask_element_rs[$i]['if_mask_elements']);
                         } else {
                             if (strlen($mask_element_rs[$i]['else_mask']) > 0) {
                                 $value = $this->_expand_title_mask($item_instance_r, $mask_element_rs[$i]['else_mask'], $mask_element_rs[$i]['else_mask_elements']);
                             } else {
                                 $value = NULL;
                             }
                         }
                     } else {
                         $value = NULL;
                     }
                     break;
                 case 'switch':
                     if ($mask_element_rs[$i]['varname'] == 'instance_no') {
                         $value = $item_instance_r['instance_no'];
                     } else {
                         if ($mask_element_rs[$i]['varname'] == 's_status_type') {
                             $value = $item_instance_r['s_status_type'];
                         } else {
                             if ($mask_element_rs[$i]['varname'] == 's_item_type') {
                                 $value = $item_instance_r['s_item_type'];
                             } else {
                                 $value = fetch_attribute_val($item_instance_r['item_id'], $item_instance_r['instance_no'], strtoupper($mask_element_rs[$i]['varname']));
                             }
                         }
                     }
                     // the attribute is defined, so now lets do the comparison.
                     if (!empty($value)) {
                         if (is_not_empty_array($mask_element_rs[$i]['cases'])) {
                             for ($j = 0; $j < count($mask_element_rs[$i]['cases']); $j++) {
                                 // if a match.
                                 if (strcmp($value, $mask_element_rs[$i]['cases'][$j]['case']) === 0) {
                                     $value = $this->_expand_title_mask($item_instance_r, $mask_element_rs[$i]['cases'][$j]['result']['mask'], $mask_element_rs[$i]['cases'][$j]['result']['mask_elements']);
                                     break 2;
                                     // break out of switch
                                 }
                             }
                         }
                         if (is_not_empty_array($mask_element_rs[$i]['default_case'])) {
                             $value = $this->_expand_title_mask($item_instance_r, $mask_element_rs[$i]['default_case']['mask'], $mask_element_rs[$i]['cases']['default_case']['mask_elements']);
                         }
                     } else {
                         $value = NULL;
                     }
                     break;
                 case 'theme_img':
                     if (strlen($mask_element_rs[$i]['value']) > 0) {
                         $value = $mask_element_rs[$i]['value'];
                     } else {
                         if ($mask_element_rs[$i]['value'] === NULL && strlen($vtitle = $this->_expand_title_mask(array('s_item_type' => $item_instance_r['s_item_type']), $mask_element_rs[$i]['title_mask'], $mask_element_rs[$i]['title_mask_elements'])) > 0) {
                             if (!is_array($this->_opendb_title_mask_macro_rs['theme_img'])) {
                                 $this->_opendb_title_mask_macro_rs = array_merge($this->_opendb_title_mask_macro_rs, array('theme_img' => array()));
                             }
                             // this variable will be an array of all theme_img elements encountered
                             if (strlen($this->_opendb_title_mask_macro_rs['theme_img'][$mask_element_rs[$i]['img']]) == 0) {
                                 $this->_opendb_title_mask_macro_rs['theme_img'] = array_merge($this->_opendb_title_mask_macro_rs['theme_img'], array($mask_element_rs[$i]['img'] => $vtitle));
                             }
                             $mask_element_rs[$i]['value'] = theme_image($mask_element_rs[$i]['img'], $vtitle);
                             $value = $mask_element_rs[$i]['value'];
                         } else {
                             // an indicator to not try generic expand_title_mask for $s_item_type, because it does not work.
                             $mask_element_rs[$i]['value'] = '';
                             $vtitle = $this->_expand_title_mask($item_instance_r, $mask_element_rs[$i]['title_mask'], $mask_element_rs[$i]['title_mask_elements']);
                             $value = theme_image($mask_element_rs[$i]['img'], $vtitle);
                         }
                     }
                     break;
                 case 'config_var_key':
                     // config_var_key(name, value)
                     if (is_not_empty_array($config_var_rs) && is_array($config_var_rs[$mask_element_rs[$i]['name']])) {
                         if (is_array($mask_element_rs[$i]['value'])) {
                             $srchvalue = $this->_expand_title_mask($item_instance_r, $mask_element_rs[$i]['value']['mask'], $mask_element_rs[$i]['value']['elements'], $config_var_rs);
                         } else {
                             $srchvalue = $mask_element_rs[$i]['value'];
                         }
                         $tmpvalue = array_search2($srchvalue, $config_var_rs[$mask_element_rs[$i]['name']]);
                         if ($tmpvalue !== false) {
                             $value = $tmpvalue;
                         } else {
                             $value = '';
                         }
                     } else {
                         $value = '';
                     }
                     break;
                 case 'config_var_value':
                     // config_var_value(name, keyid)
                     if (is_not_empty_array($config_var_rs) && is_array($config_var_rs[$mask_element_rs[$i]['name']])) {
                         if (is_array($mask_element_rs[$i]['key'])) {
                             $srchkey = $this->_expand_title_mask($item_instance_r, $mask_element_rs[$i]['key']['mask'], $mask_element_rs[$i]['key']['elements'], $config_var_rs);
                         } else {
                             $srchkey = $mask_element_rs[$i]['key'];
                         }
                         if (isset($config_var_rs[$mask_element_rs[$i]['name']][$srchkey])) {
                             $value = $config_var_rs[$mask_element_rs[$i]['name']][$srchkey];
                         } else {
                             $value = '';
                         }
                     } else {
                         $value = '';
                     }
                     break;
                 default:
                     // no valid function specified, so set to empty.
                     $value = '';
             }
         } else {
             $value = $this->_get_mask_variable_value($mask_element_rs[$i], $item_instance_r);
         }
         // now do the replacement.
         $mask = str_replace('{' . $i . '}', $value, $mask);
     }
     //for($i=0; $i<count($mask_element_rs); $i++)
     // now return expanded subject.
     return $mask;
 }
Esempio n. 2
0
function handle_item_attributes($op, $item_r, $HTTP_VARS, &$errors)
{
    // for these operations, no instance_no context is possible
    // item instance attributes will be handled in a separate call to this function, as a updateinstance op
    if ($op == 'insert' || $op == 'update') {
        $item_r['instance_no'] = NULL;
    }
    $attr_results = fetch_item_attribute_type_rs($item_r['s_item_type'], is_numeric($item_r['instance_no']) ? 'instance_attribute_ind' : 'item_attribute_ind', FALSE);
    if ($attr_results) {
        $attributes_updated = 0;
        while ($item_attribute_type_r = db_fetch_assoc($attr_results)) {
            // For all operations the {DURATION,TITLE,STATUSTYPE,STATUSCMNT,ITEM_ID} cannot be
            // updated because they exist at item/item_instance level.
            if ($item_attribute_type_r['s_field_type'] != 'DURATION' && $item_attribute_type_r['s_field_type'] != 'TITLE' && $item_attribute_type_r['s_field_type'] != 'STATUSTYPE' && $item_attribute_type_r['s_field_type'] != 'STATUSCMNT' && $item_attribute_type_r['s_field_type'] != 'ITEM_ID') {
                $fieldname = get_field_name($item_attribute_type_r['s_attribute_type'], $item_attribute_type_r['order_no']);
                // save it in case we are in refresh mode.
                $orig_fieldname = $fieldname;
                if (!is_array($HTTP_VARS[$fieldname])) {
                    if (preg_match("/new([0-9]+)/", $HTTP_VARS[$fieldname], $matches) && isset($HTTP_VARS[$fieldname . '_' . $matches[0]])) {
                        $fieldname = $fieldname . '_' . $matches[0];
                    } else {
                        if ($HTTP_VARS[$fieldname] == 'old') {
                            // make sure this is a refresh value and not just a field with the value 'old'
                            if (isset($HTTP_VARS[$fieldname . '_new0'])) {
                                $fieldname = $fieldname . '_old';
                            }
                        }
                    }
                }
                if (is_multivalue_attribute_type($item_attribute_type_r['s_attribute_type'])) {
                    $value_r = NULL;
                    if (is_array($HTTP_VARS[$fieldname])) {
                        $value_r = $HTTP_VARS[$fieldname];
                    } else {
                        if (isset($HTTP_VARS[$fieldname])) {
                            $value_r[] = $HTTP_VARS[$fieldname];
                        }
                    }
                    if (is_item_attribute_set($item_r['item_id'], $item_r['instance_no'], $item_attribute_type_r['s_attribute_type'], $item_attribute_type_r['order_no'])) {
                        if (update_item_attributes($item_r['item_id'], $item_r['instance_no'], $item_r['s_item_type'], $item_attribute_type_r['s_attribute_type'], $item_attribute_type_r['order_no'], $value_r)) {
                            $attributes_updated++;
                        }
                    } else {
                        if (is_not_empty_array($value_r)) {
                            if (insert_item_attributes($item_r['item_id'], $item_r['instance_no'], $item_r['s_item_type'], $item_attribute_type_r['s_attribute_type'], $item_attribute_type_r['order_no'], $value_r)) {
                                $attributes_updated++;
                            }
                        }
                    }
                } else {
                    $file_r = NULL;
                    if (is_array($_FILES) && is_array($_FILES[$fieldname . '_upload']) && is_uploaded_file($_FILES[$fieldname . '_upload']['tmp_name'])) {
                        $value = basename($_FILES[$fieldname . '_upload']['name']);
                        $file_r = $_FILES[$fieldname . '_upload'];
                    } else {
                        // normal field
                        $value = $HTTP_VARS[$fieldname];
                    }
                    // If attribute value found - an existing attribute, so do an update.
                    if (is_item_attribute_set($item_r['item_id'], $item_r['instance_no'], $item_attribute_type_r['s_attribute_type'], $item_attribute_type_r['order_no'])) {
                        if (update_item_attributes($item_r['item_id'], $item_r['instance_no'], $item_r['s_item_type'], $item_attribute_type_r['s_attribute_type'], $item_attribute_type_r['order_no'], $value, $file_r)) {
                            $attributes_updated++;
                        }
                    } else {
                        if (strlen($value) > 0) {
                            if (insert_item_attributes($item_r['item_id'], $item_r['instance_no'], $item_r['s_item_type'], $item_attribute_type_r['s_attribute_type'], $item_attribute_type_r['order_no'], $value, $file_r)) {
                                $attributes_updated++;
                            }
                        }
                    }
                }
            }
        }
        //while
        db_free_result($attr_results);
        // Indicate how many attributes updated.
        return $attributes_updated;
    } else {
        return FALSE;
    }
}