示例#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;
 }
示例#2
0
文件: utils.php 项目: horrabin/opendb
function is_empty_array($array)
{
    return is_empty_or_not_array($array);
}
示例#3
0
function validate_item_input_field($item_attribute_type_r, $value, &$errors)
{
    // cater for multivalue fields here!
    if (!is_array($value) && strlen(trim($value)) > 0) {
        $tmpval = trim($value);
        unset($value);
        $value[] = $tmpval;
    }
    if ($item_attribute_type_r['compulsory_ind'] == 'Y') {
        // at this point, $value will always be an array because of the block above.
        if (is_empty_or_not_array($value)) {
            $error = array('error' => get_opendb_lang_var('prompt_must_be_specified', 'prompt', $item_attribute_type_r['prompt']), 'detail' => '');
            if (is_array($errors)) {
                $errors[] = $error;
            } else {
                $errors = $error;
            }
            return FALSE;
        }
    }
    if (is_not_empty_array($value) && $item_attribute_type_r['lookup_attribute_ind'] != 'Y') {
        switch ($item_attribute_type_r['input_type']) {
            case 'hidden':
            case 'readonly':
            case 'textarea':
            case 'htmlarea':
            case 'text':
            case 'password':
            case 'simple_checkbox':
            case 'checkbox':
            case 'check_boxes':
                // deprecated
            // deprecated
            case 'vertical_check_boxes':
                // deprecated
            // deprecated
            case 'horizontal_check_boxes':
                // deprecated
            // deprecated
            case 'radio_group':
                // deprecated
            // deprecated
            case 'vertical_radio_group':
                // deprecated
            // deprecated
            case 'horizontal_radio_group':
                // deprecated
            // deprecated
            case 'radio_grid':
            case 'value_radio_grid':
            case 'checkbox_grid':
            case 'single_select':
            case 'multi_select':
            case 'value_select':
                return TRUE;
                break;
            case 'url':
                // will be an array of content groups
                if (strlen($item_attribute_type_r['input_type_arg3']) > 0) {
                    $content_group_r = prc_args($item_attribute_type_r['input_type_arg3']);
                    $extensions_r = fetch_file_type_extensions_r($content_group_r);
                    // it might just be a list of extensions
                    if (!is_not_empty_array($extensions_r)) {
                        $extensions_r = $content_group_r;
                    }
                    for ($i = 0; $i < count($value); $i++) {
                        if (!in_array(strtolower(get_file_ext($value[$i])), $extensions_r)) {
                            $error = array('error' => get_opendb_lang_var('url_is_not_valid', array('prompt' => $item_attribute_type_r['prompt'], 'extensions' => implode(', ', $extensions_r))), 'detail' => '');
                            if (is_array($errors)) {
                                $errors[] = $error;
                            } else {
                                $errors = $error;
                            }
                            return FALSE;
                        }
                    }
                }
                //else
                return TRUE;
            case 'email':
                for ($i = 0; $i < count($value); $i++) {
                    if (!is_valid_email_addr($value[$i]) && ($item_attribute_type_r['compulsory_ind'] == 'Y' && strlen(trim($value[$i])) > 0)) {
                        $error = array('error' => get_opendb_lang_var('email_is_not_valid', 'prompt', $item_attribute_type_r['prompt']), 'detail' => '');
                        if (is_array($errors)) {
                            $errors[] = $error;
                        } else {
                            $errors = $error;
                        }
                        return FALSE;
                    }
                }
                //else
                return TRUE;
            case 'datetime':
                for ($i = 0; $i < count($value); $i++) {
                    if ($item_attribute_type_r['compulsory_ind'] == 'Y' || strlen(trim($value[$i])) > 0) {
                        $timestamp = get_timestamp_for_datetime($value[$i], $item_attribute_type_r['input_type_arg1']);
                        if ($timestamp === FALSE) {
                            //else perhaps it is a timestamp value already.
                            $timestamp = get_timestamp_for_datetime($value[$i], 'YYYYMMDDHH24MISS');
                            if ($timestamp === FALSE) {
                                $error = array('error' => get_opendb_lang_var('datetime_is_not_valid', array('prompt' => $item_attribute_type_r['prompt'], 'format_mask' => $item_attribute_type_r['input_type_arg1'])), 'detail' => '');
                                if (is_array($errors)) {
                                    $errors[] = $error;
                                } else {
                                    $errors = $error;
                                }
                                return FALSE;
                            }
                        }
                    }
                }
                //else
                return TRUE;
            case 'filtered':
                $legalChars = expand_chars_exp($item_attribute_type_r['input_type_arg3']);
                for ($i = 0; $i < count($value); $i++) {
                    $value[$i] = trim($value[$i]);
                    for ($j = 0; $j < strlen($value[$i]); $j++) {
                        if (strstr($legalChars, substr($value[$i], $j, 1)) === FALSE) {
                            $error = array('error' => get_opendb_lang_var('prompt_must_be_format', array('prompt' => $item_attribute_type_r['prompt'], 'format' => '[' . $item_attribute_type_r['input_type_arg3'] . ']')), 'detail' => '');
                            if (is_array($errors)) {
                                $errors[] = $error;
                            } else {
                                $errors = $error;
                            }
                            return FALSE;
                        }
                    }
                }
                return TRUE;
            case 'number':
                for ($i = 0; $i < count($value); $i++) {
                    if (!is_numeric($value[$i]) && ($item_attribute_type_r['compulsory_ind'] == 'Y' && strlen(trim($value[$i])) > 0)) {
                        $error = array('error' => get_opendb_lang_var('prompt_must_be_format', array('prompt' => $item_attribute_type_r['prompt'], 'format' => '[0-9]')), 'detail' => '');
                        if (is_array($errors)) {
                            $errors[] = $error;
                        } else {
                            $errors = $error;
                        }
                        return FALSE;
                    }
                }
                return TRUE;
            default:
                return TRUE;
                break;
        }
    } else {
        return TRUE;
    }
}
示例#4
0
function get_item_form_row($op, $item_r, $item_attribute_type_r, $old_value, $new_value)
{
    if ($item_attribute_type_r['s_field_type'] == 'TITLE') {
        $fieldname = 'title';
    } else {
        $fieldname = get_field_name($item_attribute_type_r['s_attribute_type'], $item_attribute_type_r['order_no']);
    }
    $is_multi_value = is_multivalue_attribute_type($item_attribute_type_r['s_attribute_type']);
    $refresh_field = FALSE;
    // Hidden cannot be involved in a refresh operation directly, but refreshed hidden fields, will still be updated.
    if (strcasecmp($item_attribute_type_r['input_type'], 'hidden') !== 0 && $old_value !== FALSE && (is_not_empty_array($new_value) || !is_array($new_value) && strlen($new_value) > 0) && is_value_refreshed($item_attribute_type_r['s_attribute_type'], $new_value, $old_value) && (is_not_empty_array($old_value) || !is_array($old_value) && strlen($old_value) > 0)) {
        $refresh_field = TRUE;
        $new_value = get_array_for_value($new_value);
    }
    if ($refresh_field && count($new_value) > 0 || is_array($new_value) && !$is_multi_value) {
        // -------------
        // REFRESH FIELD
        // -------------
        // If we are doing a complete refresh block, and display_type is set to
        // hidden, overwrite to display it.
        if ($item_attribute_type_r['display_type'] == 'hidden') {
            $item_attribute_type_r['display_type'] = 'display(%value%)';
            $item_attribute_type_r['display_type_arg1'] = '%value%';
        }
        $field .= "<ul class=\"tabMenu\" id=\"{$fieldname}-tab-menu\">";
        if (!$is_multi_value) {
            $new_value = deduplicate_array($new_value, $old_value);
            $count = count($new_value) - 1;
        } else {
            $count = 0;
        }
        $key = array_keys($new_value);
        for ($i = 0; $i <= $count; $i++) {
            is_numeric($key[$i]) ? $label_description = "" : ($label_description = " : {$key[$i]}");
            $field .= "<li id=\"menu-{$fieldname}_new{$i}\"" . ($i == 0 ? " class=\"first activeTab\"" : "") . ">\n\t\t\t\t\t<label for=\"menu-{$fieldname}_new{$i}-cbox\">" . $item_attribute_type_r['prompt'] . "{$label_description}</label>" . "<input type=\"radio\" class=\"radio\" name=\"" . $fieldname . "\" id=\"menu-{$fieldname}_new{$i}-cbox\" value=\"new{$i}\" onclick=\"return activateTab('{$fieldname}_new{$i}', '{$fieldname}-tab-menu', '{$fieldname}-tab-content');\"" . ($i == 0 ? " CHECKED" : "") . "></li>";
        }
        if ($refresh_field) {
            $field .= "<li id=\"menu-{$fieldname}_old\" >\n\t\t\t\t<label for=\"menu-{$fieldname}_old-cbox\">" . get_opendb_lang_var('old_prompt', 'prompt', $item_attribute_type_r['prompt']) . "</label>" . "<input type=\"radio\" class=\"radio\" id=\"menu-{$fieldname}_old-cbox\" name=\"" . $fieldname . "\" value=\"old\" onclick=\"return activateTab('{$fieldname}_old', '{$fieldname}-tab-menu', '{$fieldname}-tab-content');\"></li>";
        }
        $field .= "</ul>";
        $field .= "<div class=\"tabContentContainer\" id=\"{$fieldname}-tab-content\">";
        for ($i = 0; $i <= $count; $i++) {
            if ($is_multi_value) {
                $value = $new_value;
            } else {
                $value = $new_value[$key[$i]];
            }
            $field .= "<div class=\"tabContent" . ($i > 0 ? "Hidden" : "") . "\" id=\"{$fieldname}_new{$i}\">" . get_item_input_field($fieldname . "_new{$i}", $item_attribute_type_r, $item_r, $value, FALSE) . "</div>";
        }
        if ($refresh_field) {
            $field .= "<div class=\"tabContentHidden\" id=\"{$fieldname}_old\">" . get_item_input_field($fieldname . "_old", $item_attribute_type_r, $item_r, $old_value, FALSE) . "</div>";
        }
        $field .= "</div>";
        $prompt_mask = NULL;
        if ($refresh_field) {
            $prompt_mask = theme_image('rs.gif', get_opendb_lang_var('refreshed')) . "%prompt%";
        }
        return format_item_data_field($item_attribute_type_r, $field, $prompt_mask, NULL);
        // field mask
    } else {
        // not a choose attribute
        if (is_multivalue_attribute_type($item_attribute_type_r['s_attribute_type'])) {
            // if new_value is empty!
            if (is_empty_or_not_array($new_value)) {
                if ($old_value !== FALSE) {
                    $value = $old_value;
                } else {
                    $value = NULL;
                }
            } else {
                $value =& $new_value;
            }
            return get_item_input_field($fieldname, $item_attribute_type_r, $item_r, $value);
        } else {
            $value = ifempty($new_value, $old_value === FALSE ? NULL : $old_value);
            // If this is an edit operation - the value must be NOT NULL
            // for some widgets to work properly.
            if ($op != 'new' && $op != 'site' && $value === NULL) {
                $value = '';
            }
            return get_item_input_field($fieldname, $item_attribute_type_r, $item_r, $value);
        }
    }
}