/** * */ public function htmlFormElementForAttributeSearch($po_request, $pm_element_code_or_id, $pa_options = null) { if (!is_array($pa_options)) { $pa_options = array(); } if (!($t_element = $this->_getElementInstance($pm_element_code_or_id))) { return false; } $vb_is_sub_element = (bool) $t_element->get('parent_id'); $t_parent = $vb_is_sub_element ? $this->_getElementInstance($t_element->get('parent_id')) : null; while ($vb_is_sub_element && $t_parent->get('datatype') == 0 && $t_parent->get('parent_id') > 0) { $t_parent = $this->_getElementInstance($t_parent->get('parent_id')); } $vs_element_code = $t_element->get('element_code'); // get all elements of this element set $va_element_set = $vb_is_sub_element ? $t_parent->getElementsInSet() : $t_element->getElementsInSet(); if ($vb_is_sub_element) { foreach ($va_element_set as $vn_i => $va_element) { if ($va_element['element_code'] !== $vs_element_code) { unset($va_element_set[$vn_i]); } } } $t_attr = new ca_attributes(); $t_attr->purify($this->purify()); $va_element_codes = array(); $va_elements_by_container = array(); if (sizeof($va_element_set) > 1) { $vs_format = isset($pa_options['multivalueFormat']) ? $pa_options['multivalueFormat'] : null; } else { $vs_format = isset($pa_options['format']) ? $pa_options['format'] : null; } $pa_options['format'] = $vs_format; foreach ($va_element_set as $va_element) { $va_override_options = array(); if ($va_element['datatype'] == 0) { // containers are not active form elements continue; } $va_label = $this->getAttributeLabelAndDescription($va_element['element_id']); $vs_subelement_code = $this->tableName() . '.' . ($vb_is_sub_element ? $t_parent->get('element_code') . '.' : '') . ($vs_element_code !== $va_element['element_code'] ? "{$vs_element_code}." : "") . $va_element['element_code']; $vs_value = isset($pa_options['values']) && isset($pa_options['values'][$vs_subelement_code]) ? $pa_options['values'][$vs_subelement_code] : ''; $va_element_opts = array_merge(array('label' => $va_label['name'], 'description' => $va_label['description'], 't_subject' => $this, 'request' => $po_request, 'class' => $pa_options['class'], 'nullOption' => '-', 'value' => $vs_value, 'forSearch' => true, 'render' => isset($va_element['settings']['render']) && $va_element['settings']['render'] == 'lookup' ? $va_element['settings']['render'] : isset($pa_options['render']) ? $pa_options['render'] : 'select'), array_merge($pa_options, $va_override_options)); if (caGetOption('forSimpleForm', $pa_options, false)) { unset($va_element_opts['nullOption']); } // We don't want to pass the entire set of values to ca_attributes::attributeHtmlFormElement() since it'll treat it as a simple list // of values for an individual element and the 'values' array is actually set to values for *all* elements in the form unset($va_element_opts['values']); $va_element_opts['values'] = ''; // ... replace name of form element $vs_fld_name = $vs_subelement_code; //str_replace('.', '_', $vs_subelement_code); if (caGetOption('asArrayElement', $pa_options, false)) { $vs_fld_name .= "[]"; } if ($vs_force_value = caGetOption('force', $pa_options, false)) { $vs_form_element = caHTMLHiddenInput($vs_fld_name, array('value' => $vs_force_value)); } else { $vs_form_element = ca_attributes::attributeHtmlFormElement($va_element, $va_element_opts); // // prep element for use as search element // // ... replace value $vs_form_element = str_replace('{{' . $va_element['element_id'] . '}}', $vs_value, $vs_form_element); // escape any special characters in jQuery selectors $vs_form_element = str_replace("jQuery('#{fieldNamePrefix}" . $va_element['element_id'] . "_{n}')", "jQuery('#" . str_replace(array("[", "]", "."), array("\\\\[", "\\\\]", "\\\\."), $vs_fld_name) . "')", $vs_form_element); $vs_form_element = str_replace('{fieldNamePrefix}' . $va_element['element_id'] . '_{n}', $vs_fld_name, $vs_form_element); $vs_form_element = str_replace('{n}', '', $vs_form_element); $vs_form_element = str_replace('{' . $va_element['element_id'] . '}', '', $vs_form_element); } $va_elements_by_container[$va_element['parent_id'] ? $va_element['parent_id'] : $va_element['element_id']][] = $vs_form_element; // If the elements datatype returns true from renderDataType, then force render the element if (Attribute::renderDataType($va_element)) { return array_pop($va_elements_by_container[$va_element['element_id']]); } $va_element_ids[] = $va_element['element_id']; } $vs_view_path = isset($pa_options['viewPath']) && $pa_options['viewPath'] ? $pa_options['viewPath'] : $po_request->getViewsDirectoryPath(); $o_view = new View($po_request, "{$vs_view_path}/bundles/"); $o_view->setVar('request', $po_request); $o_view->setVar('elements', $va_elements_by_container); $o_view->setVar('element_ids', $va_element_ids); $o_view->setVar('element_set_label', $this->getAttributeLabel($t_element->get('element_id'))); return $o_view->render(caGetOption('view', $pa_options, 'ca_search_form_attributes.php')); }
/** * */ public function htmlFormElementForAttributeSearch($po_request, $pm_element_code_or_id, $pa_options = null) { if (!is_array($pa_options)) { $pa_options = array(); } if (!($t_element = $this->_getElementInstance($pm_element_code_or_id))) { return false; } if ($t_element->get('parent_id')) { $this->postError(1930, _t('Element is not the root of the element set'), 'BaseModelWithAttributes->htmlFormElementForAttributeSearch()'); return false; } // get all elements of this element set $va_element_set = $t_element->getElementsInSet(); $t_attr = new ca_attributes(); $t_attr->purify($this->purify()); $va_element_codes = array(); $va_elements_by_container = array(); if (sizeof($va_element_set) > 1) { $vs_format = isset($pa_options['multivalueFormat']) ? $pa_options['multivalueFormat'] : null; } else { $vs_format = isset($pa_options['format']) ? $pa_options['format'] : null; } $pa_options['format'] = $vs_format; if (sizeof($va_element_set) > 1 && isset($pa_options['width']) && $pa_options['width'] > 0) { if (($pa_options['width'] = ceil($pa_options['width'] / sizeof($va_element_set))) < 20) { $pa_options['width'] = 20; } } foreach ($va_element_set as $va_element) { $va_override_options = array(); if ($va_element['datatype'] == 0) { // containers are not active form elements continue; } $va_label = $this->getAttributeLabelAndDescription($va_element['element_id']); $vs_element = $this->tableName() . '.' . $va_element['element_code']; $vs_value = isset($pa_options['values']) && isset($pa_options['values'][$vs_element]) ? $pa_options['values'][$vs_element] : ''; $va_element_opts = array_merge(array('label' => $va_label['name'], 'description' => $va_label['description'], 't_subject' => $this, 'request' => $po_request, 'nullOption' => '-', 'value' => $vs_value, 'forSearch' => true), array_merge($pa_options, $va_override_options)); // We don't want to pass the entire set of values to ca_attributes::attributeHtmlFormElement() since it'll treat it as a simple list // of values for an individual element and the 'values' array is actually set to values for *all* elements in the form unset($va_element_opts['values']); $vs_form_element = ca_attributes::attributeHtmlFormElement($va_element, $va_element_opts); // // prep element for use as search element // // ... replace value $vs_form_element = str_replace('{{' . $va_element['element_id'] . '}}', $vs_value, $vs_form_element); // ... replace name of form element $vs_form_element = str_replace('{fieldNamePrefix}' . $va_element['element_id'] . '_{n}', str_replace('.', '_', $this->tableName() . '.' . $va_element['element_code']), $vs_form_element); $va_elements_by_container[$va_element['parent_id'] ? $va_element['parent_id'] : $va_element['element_id']][] = $vs_form_element; //if the elements datatype returns true from renderDataType, then force render the element if (Attribute::renderDataType($va_element)) { return array_pop($va_elements_by_container[$va_element['element_id']]); } $va_element_ids[] = $va_element['element_id']; } $vs_view_path = isset($pa_options['viewPath']) && $pa_options['viewPath'] ? $pa_options['viewPath'] : $po_request->getViewsDirectoryPath(); $o_view = new View($po_request, "{$vs_view_path}/bundles/"); $o_view->setVar('request', $po_request); $o_view->setVar('elements', $va_elements_by_container); $o_view->setVar('element_ids', $va_element_ids); $o_view->setVar('element_set_label', $this->getAttributeLabel($t_element->get('element_id'))); return $o_view->render('ca_search_form_attributes.php'); }