/** * Creates the custom field group array with group info and fields values and attributes * * @param array $entries Entry array must have keys for entry id and criteriaid */ function getFieldsArray($elements, $type = 'listing') { $fields = array(); $field_pairs = array(); $element_ids = array(); $rows = array(); $this->criteria_ids = array(); // Alejandro = for discussion functionality //build entry_ids and criteria_ids array switch ($type) { case 'listing': foreach ($elements as $key => $element) { if (isset($element['Criteria'])) { $element_ids[] = $element[inflector::camelize($type)]['listing_id']; if ($element['Criteria']['criteria_id'] != '') { $this->criteria_ids[] = $element['Criteria']['criteria_id']; } } } break; case 'review': foreach ($elements as $element) { if (isset($element['Criteria'])) { $element_ids[] = $element[inflector::camelize($type)]['review_id']; if ($element['Criteria']['criteria_id'] != '') { $this->criteria_ids[] = $element['Criteria']['criteria_id']; } } } break; } $this->group_ids = $this->_criteria2Groups($this->criteria_ids, $type); $criteria_ids = implode(',', $this->criteria_ids); $element_ids = implode(',', array_unique($element_ids)); if (empty($this->group_ids)) { return; } $group_ids = implode(',', $this->group_ids); $field_type = $type == 'listing' ? 'content' : $type; // Get field attributes and field values $query = "SELECT Field.fieldid AS `Field.field_id`, Field.groupid AS `Field.group_id`, Field.name AS `Field.name`, Field.title AS `Field.title`," . "\n Field.showtitle AS `Field.showTitle`, Field.description AS `Field.description`, Field.required AS `Field.required`," . "\n Field.type AS `Field.type`, Field.location AS `Field.location`, Field.options AS `Field.params`," . "\n Field.contentview AS `Field.contentView`, Field.listview AS `Field.listView`, Field.compareview AS `Field.compareView`, Field.listsort AS `Field.listSort`," . "\n Field.search AS `Field.search`, Field.access AS `Field.access`, Field.access_view AS `Field.accessView`," . "\n Field.published As `Field.published`," . "\n `Group`.groupid AS `Group.group_id`, `Group`.title AS `Group.title`, `Group`.name AS `Group.name`, `Group`.showtitle AS `Group.showTitle`" . "\n FROM #__jreviews_fields AS Field" . "\n INNER JOIN #__jreviews_groups AS `Group` ON (`Group`.groupid = Field.groupid AND " . "\n `Group`.groupid IN ({$group_ids}) AND `Group`.type = '{$field_type}' )" . "\n WHERE Field.location = '{$field_type}' AND Field.published = 1" . "\n ORDER BY Group.ordering, Field.ordering"; $this->_db->setQuery($query); $rows = $this->_db->loadObjectList('Field.name'); if (!$rows || empty($rows)) { return; } # Extract list of field names from array $fieldNames = array(); $fieldNamesByType = array(); $fieldRows = array(); $optionFields = array('selectmultiple', 'checkboxes', 'select', 'radiobuttons'); foreach ($rows as $key => $row) { $fieldNames[] = $row->{'Field.name'}; $fieldIds[$row->{'Field.name'}] = $row->{'Field.field_id'}; $fieldRows[$key] = (array) $row; if (in_array($row->{'Field.type'}, $optionFields)) { $query = "SELECT * FROM #__jreviews_fieldoptions" . "\n WHERE fieldid = " . $row->{'Field.field_id'} . "\n ORDER BY ordering ASC ,optionid ASC"; $this->_db->setQuery($query); $this->fieldOptions[$row->{'Field.field_id'}] = $this->_db->loadObjectList('value'); } } # Get field values from current element ids switch ($type) { case 'listing': # PaidListings integration if (Configure::read('ListingEdit') && Configure::read('PaidListings.enabled')) { // Load the paid_listing_fields table instead of the jos_content table so users can see all their // fields when editing a listing Configure::write('ListingEdit', false); $fieldValues = PaidListingFieldModel::edit($element_ids); if ($fieldValues) { break; } } $query = "SELECT Listing.contentid AS element_id," . implode(',', $fieldNames) . "\n FROM #__jreviews_content AS Listing" . "\n WHERE Listing.contentid IN (" . $element_ids . ")"; $this->_db->setQuery($query); $fieldValues = $this->_db->loadObjectList('element_id'); break; case 'review': $query = "SELECT Review.reviewid AS element_id," . implode(',', $fieldNames) . "\n FROM #__jreviews_review_fields AS Review" . "\n WHERE Review.reviewid IN (" . $element_ids . ")"; $this->_db->setQuery($query); $fieldValues = $this->_db->loadObjectList('element_id'); break; } # Now for each option field add array of selected value,text,images $elementFields = array(); if (!empty($fieldValues)) { foreach ($fieldValues as $fieldValue) { $fieldValue = (array) $fieldValue; foreach ($fieldValue as $key => $value) { if ($key != 'element_id' && $value != '' && isset($rows[$key])) { !in_array($rows[$key]->{'Field.type'}, array('textarea', 'code')) and $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); if ($rows[$key]->{'Field.type'} != 'date' || $rows[$key]->{'Field.type'} == 'date' && $value != NULL_DATE) { $elementFields[$fieldValue['element_id']]['field_id'] = $fieldRows[$key]['Field.field_id']; if (!in_array($rows[$key]->{'Field.type'}, $optionFields)) { $elementFields[$fieldValue['element_id']][$key]['Field.text'][] = $value; $elementFields[$fieldValue['element_id']][$key]['Field.value'][] = $value; $elementFields[$fieldValue['element_id']][$key]['Field.image'][] = ''; } elseif (in_array($rows[$key]->{'Field.type'}, $optionFields)) { $fieldOptions = $this->fieldOptions[$rows[$key]->{'Field.field_id'}]; $selOptions = explode('*', $value); foreach ($selOptions as $selOption) { if (isset($fieldOptions[$selOption])) { $elementFields[$fieldValue['element_id']][$key]['Field.value'][] = $fieldOptions[$selOption]->value; $elementFields[$fieldValue['element_id']][$key]['Field.text'][] = $fieldOptions[$selOption]->text; $elementFields[$fieldValue['element_id']][$key]['Field.image'][] = $fieldOptions[$selOption]->image; } } } } } } } } // Reformat array so array keys match element ids foreach ($elementFields as $key => $elementField) { $element_id = $key; $field_id = $elementField['field_id']; unset($elementField['field_id']); $field_name = key($elementField); foreach ($elementField as $field_name => $field_options) { //FieldGroups array $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Group']['group_id'] = $fieldRows[$field_name]['Field.group_id']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Group']['title'] = $fieldRows[$field_name]['Group.title']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Group']['name'] = $fieldRows[$field_name]['Group.name']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Group']['show_title'] = $fieldRows[$field_name]['Group.showTitle']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['id'] = $field_id; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['group_id'] = $fieldRows[$field_name]['Field.group_id']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['name'] = $fieldRows[$field_name]['Field.name']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['type'] = $fieldRows[$field_name]['Field.type']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['title'] = $fieldRows[$field_name]['Field.title']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['description'] = $fieldRows[$field_name]['Field.description']; // Field values $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['value'] = $field_options['Field.value']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['text'] = $field_options['Field.text']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['image'] = $field_options['Field.image']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['show_title'] = $fieldRows[$field_name]['Field.showTitle']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['location'] = $fieldRows[$field_name]['Field.location']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['contentview'] = $fieldRows[$field_name]['Field.contentView']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['listview'] = $fieldRows[$field_name]['Field.listView']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['compareview'] = $fieldRows[$field_name]['Field.compareView']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['listsort'] = $fieldRows[$field_name]['Field.listSort']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['search'] = $fieldRows[$field_name]['Field.search']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['access'] = $fieldRows[$field_name]['Field.access']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['access_view'] = $fieldRows[$field_name]['Field.accessView']; //FieldPairs associative array with field name as key and field value as value $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['group_id'] = $fieldRows[$field_name]['Field.group_id']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['group_show_title'] = $fieldRows[$field_name]['Group.showTitle']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['group_title'] = $fieldRows[$field_name]['Group.title']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['group_name'] = $fieldRows[$field_name]['Group.name']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['name'] = $fieldRows[$field_name]['Field.name']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['title'] = $fieldRows[$field_name]['Field.title']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['value'] = $field_options['Field.value']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['text'] = $field_options['Field.text']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['image'] = $field_options['Field.image']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['type'] = $fieldRows[$field_name]['Field.type']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['show_title'] = $fieldRows[$field_name]['Field.showTitle']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['location'] = $fieldRows[$field_name]['Field.location']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['contentview'] = $fieldRows[$field_name]['Field.contentView']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['listview'] = $fieldRows[$field_name]['Field.listView']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['compareview'] = $fieldRows[$field_name]['Field.compareView']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['listsort'] = $fieldRows[$field_name]['Field.listSort']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['search'] = $fieldRows[$field_name]['Field.search']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['access'] = $fieldRows[$field_name]['Field.access']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['access_view'] = $fieldRows[$field_name]['Field.accessView']; $properties = stringToArray($fieldRows[$field_name]['Field.params']); $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties'] = array_merge($fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties'], $properties); $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties'] = array_merge($field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties'], $properties); //$params = explode("\n",$fieldRows[$field_name]['Field.params']); } } $this->custom_fields = $fields; $this->field_pairs = $field_pairs; }
/** * Returns a json object of field options used to dynamicaly show and populate dependent fields * */ function _loadFieldData($json = true, $_data = array()) { !empty($_data) and $this->data = $_data; $fields = $field_options = $selected_values = $group_ids = array(); $selected_values_autocomplete = array(); $dependent_fields = $dependent_groups = $control_fields = $fields = $responses = array(); $location = strtolower(Sanitize::getString($this->data, 'fieldLocation', 'content')); $location == 'listing' and $location = 'content'; $recursive = Sanitize::getBool($this->data, 'recursive'); $field_names = Sanitize::getVar($this->data, 'fields'); $control_field = $field_names = is_array($field_names) ? array_filter($field_names) : array($field_names); $page_setup = Sanitize::getInt($this->data, 'page_setup', false); $control_value = Sanitize::getVar($this->data, 'value'); $entry_id = Sanitize::getInt($this->data, 'entry_id'); $referrer = Sanitize::getString($this->data, 'referrer'); $edit = (bool) $entry_id || is_array($control_value); // In adv. search module we make it work like edit for previously searched values which are passed as an array in $control_value # Access check # Need to pass token to validate the listing id and check user access. # Filter passed field names to fix those with double underscores which are checkboxes and radiobuttons foreach ($field_names as $key => $name) { if (substr_count($name, '_') > 1) { $tmp = explode('_', $name); array_pop($tmp); $field_names[$key] = implode('_', $tmp); } } $field_names = array_unique($field_names); /** * We are in edit mode. Find selected values */ if ($page_setup && $entry_id > 0) { # PaidListings integration if ($location == 'content' && Configure::read('PaidListings.enabled') && PaidPlanCategoryModel::isInPaidCategoryByListingId($entry_id)) { // Load the paid_listing_fields table instead of the jos_content table so users can see all their // fields when editing a listing Configure::write('ListingEdit', false); $curr_field_values = PaidListingFieldModel::edit($entry_id); if ($curr_field_values && !empty($curr_field_values)) { $curr_field_values = (array) array_shift($curr_field_values); $curr_field_values['contentid'] = $curr_field_values['element_id']; unset($curr_field_values['element_id'], $curr_field_values['email']); } } if (empty($curr_field_values)) { $query = $location == 'content' ? "SELECT * FROM #__jreviews_content WHERE contentid = {$entry_id}" : "SELECT * FROM #__jreviews_review_fields WHERE reviewid = {$entry_id}"; $this->_db->setQuery($query); $curr_field_values = array_shift($this->_db->loadAssocList()); } if (!empty($curr_field_values)) { foreach ($curr_field_values as $key => $val) { if (substr($key, 0, 3) == 'jr_') { $selected_values[$key] = $val != '' ? is_array($val) ? $val : array($val) : array(); } } } } elseif (is_array($control_value)) { $selected_values = $control_value; $control_value = ''; } /**************************************************************************************** * Control field option selected, so we find all dependent fields and groups * Need to look in FieldOptions, Fields and FieldGroups ****************************************************************************************/ if (!$page_setup) { # Find dependent FieldOptions $query = "\r\n SELECT \r\n DISTINCT Field.name\r\n FROM \r\n #__jreviews_fieldoptions AS FieldOption\r\n LEFT JOIN\r\n #__jreviews_fields AS Field ON Field.fieldid = FieldOption.fieldid AND (\r\n Field.published = 1 AND Field.location = " . $this->quote($location) . "\r\n )\r\n LEFT JOIN\r\n #__jreviews_groups AS FieldGroup ON Field.groupid = FieldGroup.groupid\r\n WHERE\r\n Field.published = 1 AND Field.location = " . $this->quote($location) . "\r\n AND FieldOption.control_field = " . $this->quote($control_field) . " AND FieldOption.control_value LIKE " . $this->quoteLike('*' . $control_value . '*') . "\r\n ORDER BY \r\n FieldGroup.ordering, Field.ordering \r\n "; $this->_db->setQuery($query); $field_names = $this->_db->loadResultArray(); # Find dependent Fields $query = "\r\n SELECT \r\n DISTINCT Field.name\r\n FROM \r\n #__jreviews_fields AS Field\r\n LEFT JOIN\r\n #__jreviews_groups AS FieldGroup ON Field.groupid = FieldGroup.groupid\r\n WHERE\r\n Field.published = 1 AND Field.location = " . $this->quote($location) . "\r\n AND Field.control_field = " . $this->quote($control_field) . " AND Field.control_value LIKE " . $this->quoteLike('*' . $control_value . '*') . "\r\n ORDER BY \r\n FieldGroup.ordering, Field.ordering \r\n "; $this->_db->setQuery($query); $field_names = is_array($field_names) ? array_merge($field_names, $this->_db->loadResultArray()) : $this->_db->loadResultArray(); # Find depedent Field Groups $query = "\r\n SELECT DISTINCT\r\n FieldGroup.groupid\r\n FROM \r\n #__jreviews_groups AS FieldGroup\r\n LEFT JOIN\r\n #__jreviews_fields AS Field ON Field.groupid = FieldGroup.groupid\r\n WHERE\r\n Field.published = 1 AND Field.location = " . $this->quote($location) . " \r\n AND FieldGroup.type = " . $this->quote($location) . "\r\n AND FieldGroup.control_field = " . $this->quote($control_field) . "\r\n AND FieldGroup.control_value LIKE " . $this->quoteLike('*' . $control_value . '*') . "\r\n ORDER BY\r\n FieldGroup.ordering\r\n "; $this->_db->setQuery($query); $group_ids = $this->_db->loadResultArray(); !empty($field_names) and $field_names = array_unique($field_names); if (empty($field_names) && empty($group_ids)) { return json_encode(compact('control_field', 'dependent_fields', 'dependent_groups', 'data')); } } # Get info for all fields $query = "\r\n SELECT \r\n Field.fieldid, Field.groupid, Field.title, Field.name, Field.type, Field.options, Field.control_field, Field.control_value, FieldGroup.name AS group_name\r\n FROM \r\n #__jreviews_fields AS Field \r\n LEFT JOIN\r\n #__jreviews_groups AS FieldGroup ON Field.groupid = FieldGroup.groupid\r\n WHERE \r\n Field.published = 1 AND Field.location = " . $this->quote($location) . "\r\n AND (\r\n " . (!empty($field_names) ? "Field.name IN (" . $this->quote($field_names) . ")" : '') . "\r\n " . (!empty($field_names) && !empty($group_ids) ? " OR " : '') . "\r\n " . (!empty($group_ids) ? "Field.groupid IN (" . $this->quote($group_ids) . ")" : '') . "\r\n )\r\n ORDER BY \r\n FieldGroup.ordering, Field.ordering\r\n "; $this->_db->setQuery($query); $curr_form_fields = $this->_db->loadAssocList('name'); if (empty($curr_form_fields)) { return json_encode(compact('control_field', 'dependent_fields', 'dependent_groups', 'data')); } foreach ($curr_form_fields as $key => $curr_form_field) { $curr_form_fields[$key]['options'] = stringToArray($curr_form_field['options']); } /**************************************************************************************** * Check if fields have any dependents to avoid unnecessary ajax requests * Three tables need to be checked: fieldoptions, fields, and fieldgroups ****************************************************************************************/ # FieldOptions $query = "\r\n SELECT DISTINCT \r\n Field.name AS dependent_field, FieldOption.control_field\r\n FROM \r\n #__jreviews_fieldoptions AS FieldOption\r\n LEFT JOIN\r\n #__jreviews_fields AS Field ON Field.fieldid = FieldOption.fieldid\r\n WHERE\r\n Field.published = 1 AND Field.location = " . $this->quote($location) . "\r\n AND FieldOption.control_field IN ( " . $this->quote($page_setup ? array_keys($curr_form_fields) : $control_field) . ")\r\n " . (!$page_setup ? "AND FieldOption.control_value LIKE " . $this->quoteLike('*' . $control_value . '*') : '') . "\r\n ORDER BY Field.ordering\r\n "; $this->_db->setQuery($query); $controlling_and_dependent_fields = $this->_db->loadAssocList(); # Fields $query = "\r\n SELECT DISTINCT\r\n Field.name AS dependent_field, Field.control_field\r\n FROM \r\n #__jreviews_fields AS Field\r\n WHERE\r\n Field.published = 1 AND Field.location = " . $this->quote($location) . "\r\n AND Field.control_field IN ( " . $this->quote($page_setup ? array_keys($curr_form_fields) : $control_field) . ")\r\n " . (!$page_setup ? "AND Field.control_value LIKE " . $this->quoteLike('*' . $control_value . '*') : '') . "\r\n ORDER BY Field.ordering\r\n "; $this->_db->setQuery($query); $controlling_and_dependent_fields = is_array($controlling_and_dependent_fields) ? array_merge($controlling_and_dependent_fields, $this->_db->loadAssocList()) : $this->_db->loadAssocList(); # Groups $query = "\r\n SELECT DISTINCT\r\n FieldGroup.name AS dependent_group, FieldGroup.control_field\r\n FROM \r\n #__jreviews_groups AS FieldGroup\r\n LEFT JOIN\r\n #__jreviews_fields AS Field ON Field.groupid = FieldGroup.groupid\r\n WHERE\r\n Field.published = 1 AND Field.location = " . $this->quote($location) . " \r\n AND FieldGroup.type = " . $this->quote($location) . "\r\n AND FieldGroup.control_field IN ( " . $this->quote($page_setup ? array_keys($curr_form_fields) : $control_field) . ")\r\n " . (!$page_setup ? "AND FieldGroup.control_value LIKE " . $this->quoteLike('*' . $control_value . '*') : '') . "\r\n ORDER BY\r\n FieldGroup.ordering\r\n "; $this->_db->setQuery($query); $controlling_and_dependent_fields = is_array($controlling_and_dependent_fields) ? array_merge($controlling_and_dependent_fields, $this->_db->loadAssocList()) : $this->_db->loadAssocList(); #Extract controlling and dependent fields foreach ($controlling_and_dependent_fields as $row) { isset($row['dependent_field']) and $dependent_fields[$row['dependent_field']] = $row['dependent_field']; if (isset($row['dependent_group'])) { $group_name = str_replace(' ', '', $row['dependent_group']); $dependent_groups[$group_name] = $group_name; } $control_fields[$row['control_field']] = $row['control_field']; } $ids_to_names = $ids_to_names_autocomplete = $ids_to_names_noautocomplete = array(); $control_fields_array = array(); foreach ($curr_form_fields as $curr_form_field) { $ordering = Sanitize::getVar($curr_form_field['options'], 'option_ordering', null); $fields[$curr_form_field['name']]['name'] = $curr_form_field['name']; $fields[$curr_form_field['name']]['type'] = $curr_form_field['type']; $fields[$curr_form_field['name']]['group'] = $curr_form_field['group_name']; $fields[$curr_form_field['name']]['autocomplete'] = Sanitize::getVar($curr_form_field['options'], in_array($referrer, array('adv_search', 'adv_search_module')) ? 'autocomplete.search' : 'autocomplete', 0); $fields[$curr_form_field['name']]['autocompletetype'] = Sanitize::getVar($curr_form_field['options'], 'autocomplete.option_type', 'link'); $fields[$curr_form_field['name']]['autocompletepos'] = Sanitize::getVar($curr_form_field['options'], 'autocomplete.option_pos', 'after'); $fields[$curr_form_field['name']]['title'] = $curr_form_field['title']; $entry_id and $fields[$curr_form_field['name']]['selected'] = array(); !is_null($ordering) and $fields[$curr_form_field['name']]['order_by'] = !$ordering ? 'ordering' : 'text'; // Add selected value for text fields if (isset($selected_values[$curr_form_field['name']])) { switch ($fields[$curr_form_field['name']]['type']) { case 'date': if (isset($selected_values[$curr_form_field['name']][0])) { if ($selected_values[$curr_form_field['name']][0] == NULL_DATE) { $fields[$curr_form_field['name']]['selected'] = array(); } else { $fields[$curr_form_field['name']]['selected'] = array(str_replace(" 00:00:00", "", $selected_values[$curr_form_field['name']][0])); } } break; case 'relatedlisting': if (isset($selected_values[$curr_form_field['name']][0]) && $selected_values[$curr_form_field['name']][0] > 0) { $fields[$curr_form_field['name']]['selected'] = $selected_values[$curr_form_field['name']]; } break; case 'radiobuttons': case 'select': case 'checkboxes': case 'selectmultiple': if (!empty($selected_values[$curr_form_field['name']])) { $selected_values[$curr_form_field['name']] = explode('*', ltrim(rtrim($selected_values[$curr_form_field['name']][0], '*'), '*')); $fields[$curr_form_field['name']]['selected'] = $selected_values[$curr_form_field['name']]; } break; default: $fields[$curr_form_field['name']]['selected'] = $selected_values[$curr_form_field['name']]; break; } } // Add control related vars // If field is text type, then it has no control and we check the controlBy values if ($fields[$curr_form_field['name']]['type'] == 'text') { $fields[$curr_form_field['name']]['control'] = false; $fields[$curr_form_field['name']]['controlled'] = $curr_form_field['control_field'] != '' && $curr_form_field['control_value']; } else { $fields[$curr_form_field['name']]['control'] = $recursive ? true : in_array($curr_form_field['name'], $control_fields); $fields[$curr_form_field['name']]['controlled'] = in_array($curr_form_field['name'], $dependent_fields); } if (in_array($curr_form_field['groupid'], $group_ids)) { $fields[$curr_form_field['name']]['controlgroup'] = true; } // Create an array of field ids to field names used below to save on additional queries. // The initial field option values are loaded for the fields in this array if (!$page_setup || !$fields[$curr_form_field['name']]['autocomplete'] || !empty($fields[$curr_form_field['name']]['selected'])) { if (in_array($fields[$curr_form_field['name']]['type'], array('select', 'selectmultiple'))) { $ids_to_names[$curr_form_field['fieldid']] = $curr_form_field['name']; } if (!empty($fields[$curr_form_field['name']]['selected']) && $fields[$curr_form_field['name']]['autocomplete'] && in_array($fields[$curr_form_field['name']]['type'], array('select', 'selectmultiple'))) { $ids_to_names_autocomplete[$curr_form_field['fieldid']] = $curr_form_field['name']; $selected_values_autocomplete = array_merge($selected_values_autocomplete, $selected_values[$curr_form_field['name']]); } elseif (!$fields[$curr_form_field['name']]['autocomplete'] && in_array($fields[$curr_form_field['name']]['type'], array('select', 'selectmultiple'))) { $ids_to_names_noautocomplete[$curr_form_field['fieldid']] = $curr_form_field['name']; } } $control_fields_array[] = $curr_form_field['name']; } //prx($ids_to_names); //prx($ids_to_names_autocomplete); //prx($ids_to_names_noautocomplete); //prx('------------------BEGIN-------------------'); //prx($recursive); //prx($curr_form_fields); //prx($fields); //prx($control_fields); //prx('------------------END-------------------'); /**************************************************************************************** * Build the fields array for control and controlled fields ****************************************************************************************/ # For FieldOption-FieldOption relationships get field options ordered by a-z ASC to start building the fields array. if (!empty($ids_to_names)) { if ($edit) { if (!empty($ids_to_names_autocomplete)) { $query = "\r\n SELECT \r\n Field.name, Field.fieldid, FieldOption.optionid, FieldOption.text, FieldOption.value, FieldOption.image, FieldOption.ordering\r\n FROM \r\n #__jreviews_fieldoptions AS FieldOption\r\n LEFT JOIN\r\n #__jreviews_fields AS Field ON Field.fieldid = FieldOption.fieldid\r\n WHERE\r\n Field.published = 1 AND Field.location = " . $this->quote($location) . " \r\n AND " . ($page_setup ? " FieldOption.fieldid IN (" . $this->quote(array_keys($ids_to_names_autocomplete)) . ") " : '1 = 1') . " \r\n " . ($page_setup ? " AND FieldOption.control_field = ''" : " AND FieldOption.control_field = " . $this->quote($control_field) . " AND FieldOption.control_value LIKE " . $this->quoteLike('*' . $control_value . '*')) . " \r\n " . (!empty($selected_values_autocomplete) ? "AND FieldOption.value IN ( " . $this->quote($selected_values_autocomplete) . ")" : '') . "\r\n ORDER BY \r\n FieldOption.fieldid, FieldOption.text\r\n "; $this->_db->setQuery($query); $field_options_ac = $this->_db->loadAssocList(); } if (!empty($ids_to_names_noautocomplete)) { $query = "\r\n SELECT \r\n Field.name, Field.fieldid, FieldOption.optionid, FieldOption.text, FieldOption.value, FieldOption.image, FieldOption.ordering\r\n FROM \r\n #__jreviews_fieldoptions AS FieldOption\r\n LEFT JOIN\r\n #__jreviews_fields AS Field ON Field.fieldid = FieldOption.fieldid\r\n WHERE\r\n Field.published = 1 AND Field.location = " . $this->quote($location) . " \r\n AND " . ($page_setup ? " FieldOption.fieldid IN (" . $this->quote(array_keys($ids_to_names_noautocomplete)) . ") " : '1 = 1') . " \r\n " . ($page_setup ? " AND FieldOption.control_field = ''" : " AND FieldOption.control_field = " . $this->quote($control_field) . " AND FieldOption.control_value LIKE " . $this->quoteLike('*' . $control_value . '*')) . " \r\n ORDER BY \r\n FieldOption.fieldid, FieldOption.text\r\n "; $this->_db->setQuery($query); $field_options_noac = $this->_db->loadAssocList(); } empty($field_options_ac) and $field_options_ac = array(); empty($field_options_noac) and $field_options_noac = array(); $field_options = array_merge($field_options_ac, $field_options_noac); } else { $query = "\r\n SELECT \r\n Field.name, Field.fieldid, FieldOption.optionid, FieldOption.text, FieldOption.value, FieldOption.image, FieldOption.ordering\r\n FROM \r\n #__jreviews_fieldoptions AS FieldOption\r\n LEFT JOIN\r\n #__jreviews_fields AS Field ON Field.fieldid = FieldOption.fieldid\r\n WHERE\r\n Field.published = 1 AND Field.location = " . $this->quote($location) . " \r\n AND " . ($page_setup ? " FieldOption.fieldid IN (" . $this->quote(array_keys($ids_to_names)) . ") " : '1 = 1') . " \r\n " . ($page_setup ? " AND FieldOption.control_field = ''" : " AND FieldOption.control_field = " . $this->quote($control_field) . " AND FieldOption.control_value LIKE " . $this->quoteLike('*' . $control_value . '*')) . " \r\n ORDER BY \r\n FieldOption.fieldid, FieldOption.text\r\n "; $this->_db->setQuery($query); $field_options = $this->_db->loadAssocList(); } } # For FieldOption-Field relationships get field options ordered by a-z ASC to start building the fields array. if (!$page_setup && !empty($ids_to_names)) { $query = "\r\n SELECT \r\n Field.name, Field.fieldid, FieldOption.optionid, FieldOption.text, FieldOption.value, FieldOption.image, FieldOption.ordering\r\n FROM \r\n #__jreviews_fieldoptions AS FieldOption\r\n LEFT JOIN\r\n #__jreviews_fields AS Field ON Field.fieldid = FieldOption.fieldid\r\n WHERE\r\n Field.published = 1 AND Field.location = " . $this->quote($location) . " \r\n AND " . ($page_setup ? " FieldOption.fieldid IN (" . $this->quote(array_keys($ids_to_names)) . ") " : '1 = 1') . " \r\n " . ($page_setup ? " AND Field.control_field = ''" : " AND Field.control_field = " . $this->quote($control_field) . " AND Field.control_value LIKE " . $this->quoteLike('*' . $control_value . '*')) . " \r\n ORDER BY \r\n FieldOption.fieldid, FieldOption.text\r\n "; $this->_db->setQuery($query); $field_options = array_merge($field_options, $this->_db->loadAssocList()); } foreach ($field_options as $field_option) { $field_id = $field_option['fieldid']; $field_name = $field_option['name']; unset($field_option['fieldid'], $field_option['name']); if (isset($ids_to_names[$field_id])) { $fields[$ids_to_names[$field_id]]['options'][] = $field_option; isset($selected_values[$field_name]) and $fields[$ids_to_names[$field_id]]['selected'] = $selected_values[$field_name]; } } if ($page_setup) { $control_field = array_values($control_fields_array); $dependent_fields = array(); } else { $control_field = $control_field; $dependent_fields = array_values($dependent_fields); } # Edit mode: for each control field that has a selected value find dependent field options foreach ($selected_values as $key => $val) { if (!empty($val) && $val != '' && in_array($key, $field_names)) { foreach ($val as $selected) { $res = $this->_loadFieldData(false, array('recursive' => true, 'fields' => $key, 'value' => array_shift($val), 'fieldLocation' => $location)); if (is_array($res)) { $responses[$res['control_field'][0]][$res['control_value']] = $res; foreach ($res['fields'] as $res_fields) { if (isset($selected_values[$res_fields['name']]) && !empty($res_fields['options']) && empty($fields[$res_fields['name']]['options'])) { $fields[$res_fields['name']] = $res_fields; $fields[$res_fields['name']]['selected'] = $selected_values[$res_fields['name']]; } } } elseif ($fields[$key]['type'] != 'text') { $responses[$key][$selected] = array('location' => $location, 'control_field' => array($key), 'control_value' => $selected, 'dependent_groups' => array(), 'dependent_fields' => array(), 'fields' => array()); } } } } /** DEBUG **/ //if($json) {prx(compact('page_setup','control_field','control_value','dependent_fields','dependent_groups','fields','responses'));} //if($json && !$page_setup) {prx(compact('page_setup','control_field','control_value','dependent_fields','dependent_groups','fields','responses'));} $dependent_groups = array_values($dependent_groups); $location = $location == 'content' ? 'Listing' : 'Review'; return $json ? json_encode(compact('page_setup', 'edit', 'location', 'control_field', 'control_value', 'dependent_groups', 'dependent_fields', 'fields', 'responses')) : compact('location', 'control_field', 'control_value', 'dependent_groups', 'dependent_fields', 'fields'); }
/** * Creates the custom field group array with group info and fields values and attributes * * @param array $entries Entry array must have keys for entry id and criteriaid */ function getFieldsArray($elements, $type = 'listing') { $fields = array(); $field_pairs = array(); $element_ids = array(); $rows = array(); $this->criteria_ids = array(); // Alejandro = for discussion functionality //build entry_ids and criteria_ids array switch ($type) { case 'listing': foreach ($elements as $key => $element) { if (isset($element['Criteria'])) { $element_ids[] = $element[inflector::camelize($type)]['listing_id']; if ($element['Criteria']['criteria_id'] != '') { $this->criteria_ids[] = $element['Criteria']['criteria_id']; } } } break; case 'review': foreach ($elements as $element) { if (isset($element['Criteria'])) { $element_ids[] = $element[inflector::camelize($type)]['review_id']; if ($element['Criteria']['criteria_id'] != '') { $this->criteria_ids[] = $element['Criteria']['criteria_id']; } } } break; } $this->group_ids = $this->_criteria2Groups($this->criteria_ids, $type); $criteria_ids = implode(',', $this->criteria_ids); $element_ids = implode(',', array_unique($element_ids)); if (empty($this->group_ids)) { return; } $group_ids = implode(',', $this->group_ids); $field_type = $type == 'listing' ? 'content' : $type; // Get field attributes and field values $query = "SELECT Field.fieldid AS `Field.field_id`, Field.groupid AS `Field.group_id`, Field.name AS `Field.name`, Field.title AS `Field.title`," . "\n Field.showtitle AS `Field.showTitle`, Field.description AS `Field.description`, Field.required AS `Field.required`," . "\n Field.type AS `Field.type`, Field.location AS `Field.location`, Field.options AS `Field.params`," . "\n Field.contentview AS `Field.contentView`, Field.listview AS `Field.listView`, Field.compareview AS `Field.compareView`, Field.listsort AS `Field.listSort`," . "\n Field.search AS `Field.search`, Field.access AS `Field.access`, Field.access_view AS `Field.accessView`," . "\n Field.published As `Field.published`," . "\n `Group`.groupid AS `Group.group_id`, `Group`.title AS `Group.title`, `Group`.name AS `Group.name`, `Group`.showtitle AS `Group.showTitle`" . "\n FROM #__jreviews_fields AS Field" . "\n INNER JOIN #__jreviews_groups AS `Group` ON (`Group`.groupid = Field.groupid AND " . "\n `Group`.groupid IN ({$group_ids}) AND `Group`.type = '{$field_type}' )" . "\n WHERE Field.location = '{$field_type}' AND Field.published = 1" . "\n ORDER BY Group.ordering, Field.ordering"; $this->_db->setQuery($query); $rows = $this->_db->loadObjectList('Field.name'); if (!$rows || empty($rows)) { return; } # Extract list of field names from array $fieldNames = $optionFieldNames = $nonInputFieldNames = $fieldNamesByType = $fieldRows = array(); $optionFields = array('selectmultiple', 'checkboxes', 'select', 'radiobuttons'); $nonInputFields = array('banner'); foreach ($rows as $key => $row) { // Exclude non-input fields, like banner, from forms if (!in_array($row->{'Field.type'}, $nonInputFields)) { $fieldNames[] = $row->{'Field.name'}; } else { $row->{'Field.search'} = 0; $nonInputFieldNames[] = $row->{'Field.name'}; } $fieldIds[$row->{'Field.name'}] = $row->{'Field.field_id'}; $fieldRows[$key] = (array) $row; if (in_array($row->{'Field.type'}, $optionFields)) { $optionFieldNames[$row->{'Field.name'}] = $row->{'Field.field_id'}; // Used to find the option text for each option value } } # Get field values from current element ids switch ($type) { case 'listing': # PaidListings integration if (Configure::read('ListingEdit') && Configure::read('PaidListings.enabled') && is_int($element_ids)) { // Load the paid_listing_fields table instead of the jos_content table so users can see all their // fields when editing a listing Configure::write('ListingEdit', false); $fieldValues = PaidListingFieldModel::edit($element_ids); if ($fieldValues) { break; } } $query = "SELECT Listing.contentid AS element_id," . implode(',', $fieldNames) . "\n FROM #__jreviews_content AS Listing" . "\n WHERE Listing.contentid IN (" . $element_ids . ")"; $this->_db->setQuery($query); $fieldValues = $this->_db->loadObjectList('element_id'); break; case 'review': $query = "SELECT Review.reviewid AS element_id," . implode(',', $fieldNames) . "\n FROM #__jreviews_review_fields AS Review" . "\n WHERE Review.reviewid IN (" . $element_ids . ")"; $this->_db->setQuery($query); $fieldValues = $this->_db->loadObjectList('element_id'); break; } //prx($optionFieldNames); //prx($fieldValues); # Now for each option field add array of selected value,text,images $elementFields = array(); $relatedListingIds = array(); if (!empty($fieldValues)) { foreach ($fieldValues as $fieldValue) { $fieldValue = array_filter((array) $fieldValue); $fieldOptionValuesTemp = array_intersect_key($fieldValue, $optionFieldNames); foreach ($fieldOptionValuesTemp as $fname => $optionval) { $values = !is_array($optionval) ? explode('*', $optionval) : $optionval; foreach ($values as $optionval) { if ($optionval != '') { $fieldOptionValuesToSearch[] = $optionval; $fieldOptionFieldIdsToSearch[$optionFieldNames[$fname]] = $optionFieldNames[$fname]; } } } } if (!empty($fieldOptionValuesToSearch)) { $query = "\n SELECT \n * \n FROM \n #__jreviews_fieldoptions\n WHERE \n fieldid IN ( " . $this->Quote($fieldOptionFieldIdsToSearch) . ")\n AND\n value IN ( " . $this->Quote($fieldOptionValuesToSearch) . ")\n ORDER \n BY ordering ASC ,optionid ASC\n "; $this->_db->setQuery($query); $SelectedFieldOptionsArray = $this->_db->loadObjectList('optionid'); # Reformat array, group by field id $SelelectedFieldOptionsByValue = array(); foreach ($SelectedFieldOptionsArray as $option) { $SelelectedFieldOptionsByValue[$option->fieldid][$option->value] = (array) $option; } } //prx($nonInputFieldNames); $fnameArray = array_keys($rows); foreach ($fieldValues as $fieldValue) { $fieldValue = (array) $fieldValue; $fieldvalue = $this->sortArrayByArray($fieldValue, $fnameArray); foreach ($fnameArray as $key) { $value = ''; if (isset($fieldValue[$key])) { $value = $fieldValue[$key]; } elseif (in_array($key, $nonInputFieldNames)) { $value = 'banner'; } if ($key != 'element_id' && $value != '' && isset($rows[$key])) { $properties = stringToArray($rows[$key]->{'Field.params'}); // Process related listing fields. Need to get listing info to build the url if ($rows[$key]->{'Field.type'} == 'relatedlisting') { if ($value == 0) { continue; } $relatedListingIds[] = $value; } // Strip html from fields except those where it is allowed if (!is_array($value) && (!in_array($rows[$key]->{'Field.type'}, array('text', 'textarea', 'code')) || in_array($rows[$key]->{'Field.type'}, array('text', 'textarea')) && Sanitize::getBool($properties, 'allow_html') == false)) { $value = htmlspecialchars($value, ENT_QUOTES, 'UTF-8'); } if ($rows[$key]->{'Field.type'} != 'date' || $rows[$key]->{'Field.type'} == 'date' && $value != NULL_DATE) { $elementFields[$fieldValue['element_id']]['field_id'] = $fieldRows[$key]['Field.field_id']; if (!in_array($rows[$key]->{'Field.type'}, $optionFields)) { $elementFields[$fieldValue['element_id']][$key]['Field.text'][] = $value; $elementFields[$fieldValue['element_id']][$key]['Field.value'][] = $value; $elementFields[$fieldValue['element_id']][$key]['Field.image'][] = ''; } elseif (in_array($rows[$key]->{'Field.type'}, $optionFields)) { $fieldOptions = Sanitize::getVar($SelelectedFieldOptionsByValue, $rows[$key]->{'Field.field_id'}); $selOptions = !is_array($value) ? explode('*', $value) : $value; foreach ($selOptions as $selOption) { if ($selOption != '' && isset($fieldOptions[$selOption])) { $elementFields[$fieldValue['element_id']][$key]['Field.value'][] = $fieldOptions[$selOption]['value']; $elementFields[$fieldValue['element_id']][$key]['Field.text'][] = $fieldOptions[$selOption]['text']; $elementFields[$fieldValue['element_id']][$key]['Field.image'][] = $fieldOptions[$selOption]['image']; } } } } } } } } $relatedListings = $this->getRelatedListings($relatedListingIds); // Reformat array so array keys match element ids foreach ($elementFields as $key => $elementField) { $element_id = $key; $field_id = $elementField['field_id']; unset($elementField['field_id']); $field_name = key($elementField); foreach ($elementField as $field_name => $field_options) { //FieldGroups array $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Group']['group_id'] = $fieldRows[$field_name]['Field.group_id']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Group']['title'] = $fieldRows[$field_name]['Group.title']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Group']['name'] = $fieldRows[$field_name]['Group.name']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Group']['show_title'] = $fieldRows[$field_name]['Group.showTitle']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['id'] = $field_id; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['group_id'] = $fieldRows[$field_name]['Field.group_id']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['name'] = $fieldRows[$field_name]['Field.name']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['type'] = $fieldRows[$field_name]['Field.type']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['title'] = $fieldRows[$field_name]['Field.title']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['description'] = $fieldRows[$field_name]['Field.description']; // Field values // prx($field_options);exit; if ($fieldRows[$field_name]['Field.type'] == 'relatedlisting') { $value = isset($relatedListings[$field_options['Field.value'][0]]) ? array($relatedListings[$field_options['Field.value'][0]]['value']) : ''; $real_value = $field_options['Field.value']; $text = isset($relatedListings[$field_options['Field.text'][0]]) ? array($relatedListings[$field_options['Field.value'][0]]['text']) : ''; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['value'] = $value; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['text'] = $text; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['real_value'] = $field_options['Field.text']; } else { $value = $field_options['Field.value']; $text = $field_options['Field.text']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['value'] = $value; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['text'] = $text; } $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['image'] = $field_options['Field.image']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['show_title'] = $fieldRows[$field_name]['Field.showTitle']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['location'] = $fieldRows[$field_name]['Field.location']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['contentview'] = $fieldRows[$field_name]['Field.contentView']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['listview'] = $fieldRows[$field_name]['Field.listView']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['compareview'] = $fieldRows[$field_name]['Field.compareView']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['listsort'] = $fieldRows[$field_name]['Field.listSort']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['search'] = $fieldRows[$field_name]['Field.search']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['access'] = $fieldRows[$field_name]['Field.access']; $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties']['access_view'] = $fieldRows[$field_name]['Field.accessView']; //FieldPairs associative array with field name as key and field value as value $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['field_id'] = $element_id; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['group_id'] = $fieldRows[$field_name]['Field.group_id']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['group_show_title'] = $fieldRows[$field_name]['Group.showTitle']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['group_title'] = $fieldRows[$field_name]['Group.title']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['group_name'] = $fieldRows[$field_name]['Group.name']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['name'] = $fieldRows[$field_name]['Field.name']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['title'] = $fieldRows[$field_name]['Field.title']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['value'] = $value; isset($real_value) and $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['real_value'] = $real_value; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['text'] = $text; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['image'] = $field_options['Field.image']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['type'] = $fieldRows[$field_name]['Field.type']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['description'] = $fieldRows[$field_name]['Field.description']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['show_title'] = $fieldRows[$field_name]['Field.showTitle']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['location'] = $fieldRows[$field_name]['Field.location']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['contentview'] = $fieldRows[$field_name]['Field.contentView']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['listview'] = $fieldRows[$field_name]['Field.listView']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['compareview'] = $fieldRows[$field_name]['Field.compareView']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['listsort'] = $fieldRows[$field_name]['Field.listSort']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['search'] = $fieldRows[$field_name]['Field.search']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['access'] = $fieldRows[$field_name]['Field.access']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['access_view'] = $fieldRows[$field_name]['Field.accessView']; $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties']['access_view'] = $fieldRows[$field_name]['Field.accessView']; $properties = stringToArray($fieldRows[$field_name]['Field.params']); $fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties'] = array_merge($fields[$element_id][$fieldRows[$field_name]['Group.name']]['Fields'][$fieldRows[$field_name]['Field.name']]['properties'], $properties); $field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties'] = array_merge($field_pairs[$element_id][$fieldRows[$field_name]['Field.name']]['properties'], $properties); //$params = explode("\n",$fieldRows[$field_name]['Field.params']); } } $this->custom_fields = $fields; $this->field_pairs = $field_pairs; }