/** 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; }
function is_empty_array($array) { return is_empty_or_not_array($array); }
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; } }
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); } } }