function processRecordGroup(&$wrapper, $element, $group, $ds, &$Parent, &$entryManager, &$fieldPool, &$param_pool, $param_output_only = false) { $xGroup = new XMLElement($element, NULL, $group['attr']); $key = 'ds-' . $ds->dsParamROOTELEMENT; if (is_array($group['records']) && !empty($group['records'])) { foreach ($group['records'] as $entry) { $data = $entry->getData(); $fields = array(); $xEntry = new XMLElement('entry'); $xEntry->setAttribute('id', $entry->get('id')); $associated_entry_counts = $entry->fetchAllAssociatedEntryCounts(); if (is_array($associated_entry_counts) && !empty($associated_entry_counts)) { foreach ($associated_entry_counts as $section_id => $count) { $section_handle = $Parent->Database->fetchVar('handle', 0, "SELECT `handle` FROM `tbl_sections` WHERE `id` = '{$section_id}' LIMIT 1"); $xEntry->setAttribute($section_handle, '' . $count . ''); } } if (isset($ds->dsParamPARAMOUTPUT)) { if ($ds->dsParamPARAMOUTPUT == 'system:id') { $param_pool[$key][] = $entry->get('id'); } elseif ($ds->dsParamPARAMOUTPUT == 'system:date') { $param_pool[$key][] = DateTimeObj::get('c', strtotime($entry->creationDate)); } elseif ($ds->dsParamPARAMOUTPUT == 'system:author') { $param_pool[$key][] = $entry->get('author_id'); } } foreach ($data as $field_id => $values) { if (!isset($fieldPool[$field_id]) || !is_object($fieldPool[$field_id])) { $fieldPool[$field_id] =& $entryManager->fieldManager->fetch($field_id); } if (isset($ds->dsParamPARAMOUTPUT) && $ds->dsParamPARAMOUTPUT == $fieldPool[$field_id]->get('element_name')) { $param_pool[$key][] = $fieldPool[$field_id]->getParameterPoolValue($values); } if (!$param_output_only) { foreach ($ds->dsParamINCLUDEDELEMENTS as $handle) { list($handle, $mode) = preg_split('/\\s*:\\s*/', $handle, 2); if ($fieldPool[$field_id]->get('element_name') == $handle) { $fieldPool[$field_id]->appendFormattedElement($xEntry, $values, $ds->dsParamHTMLENCODE ? true : false, $mode); } } } } if (!$param_output_only) { $xGroup->appendChild($xEntry); } } } if (is_array($group['groups']) && !empty($group['groups'])) { foreach ($group['groups'] as $element => $group) { foreach ($group as $g) { processRecordGroup($xGroup, $element, $g, $ds, $Parent, $entryManager, $fieldPool, $param_pool, $param_output_only); } } } if (!$param_output_only) { $wrapper->appendChild($xGroup); } return; }
function processRecordGroup(&$wrapper, $element, $group, $ds, &$entryManager, &$fieldPool, &$param_pool, $param_output_only = false) { $associated_sections = NULL; $xGroup = new XMLElement($element, NULL, $group['attr']); $key = 'ds-' . $ds->dsParamROOTELEMENT; if (!($section = $entryManager->sectionManager->fetch($ds->getSource()))) { $about = $ds->about(); throw new Exception(__('The section associated with the data source <code>%s</code> could not be found.', array($about['name']))); } if (!isset($ds->dsParamASSOCIATEDENTRYCOUNTS) || $ds->dsParamASSOCIATEDENTRYCOUNTS == 'yes') { $associated_sections = $section->fetchAssociatedSections(); } if (is_array($group['records']) && !empty($group['records'])) { foreach ($group['records'] as $entry) { $data = $entry->getData(); $fields = array(); $xEntry = new XMLElement('entry'); $xEntry->setAttribute('id', $entry->get('id')); if (is_array($associated_sections)) { $associated_entry_counts = $entry->fetchAllAssociatedEntryCounts($associated_sections); if (is_array($associated_entry_counts) && !empty($associated_entry_counts)) { foreach ($associated_entry_counts as $section_id => $count) { foreach ($associated_sections as $section) { if ($section['id'] == $section_id) { $xEntry->setAttribute($section['handle'], (string) $count); } } } } } if (isset($ds->dsParamPARAMOUTPUT)) { if ($ds->dsParamPARAMOUTPUT == 'system:id') { $param_pool[$key][] = $entry->get('id'); } elseif ($ds->dsParamPARAMOUTPUT == 'system:date') { $param_pool[$key][] = DateTimeObj::get('c', $entry->creationDate); } elseif ($ds->dsParamPARAMOUTPUT == 'system:author') { $param_pool[$key][] = $entry->get('author_id'); } } foreach ($data as $field_id => $values) { if (!isset($fieldPool[$field_id]) || !is_object($fieldPool[$field_id])) { $fieldPool[$field_id] =& $entryManager->fieldManager->fetch($field_id); } if (isset($ds->dsParamPARAMOUTPUT) && $ds->dsParamPARAMOUTPUT == $fieldPool[$field_id]->get('element_name')) { if (!isset($param_pool[$key]) || !is_array($param_pool[$key])) { $param_pool[$key] = array(); } $param_pool_values = $fieldPool[$field_id]->getParameterPoolValue($values); if (is_array($param_pool_values)) { $param_pool[$key] = array_merge($param_pool_values, $param_pool[$key]); } else { $param_pool[$key][] = $param_pool_values; } } if (!$param_output_only) { if (is_array($ds->dsParamINCLUDEDELEMENTS)) { foreach ($ds->dsParamINCLUDEDELEMENTS as $handle) { list($handle, $mode) = preg_split('/\\s*:\\s*/', $handle, 2); if ($fieldPool[$field_id]->get('element_name') == $handle) { $fieldPool[$field_id]->appendFormattedElement($xEntry, $values, $ds->dsParamHTMLENCODE ? true : false, $mode, $entry->get('id')); } } } } } if (!$param_output_only) { if (is_array($ds->dsParamINCLUDEDELEMENTS) && in_array('system:date', $ds->dsParamINCLUDEDELEMENTS)) { $xEntry->appendChild(General::createXMLDateObject(DateTimeObj::get('U', $entry->creationDate), 'system-date')); } $xGroup->appendChild($xEntry); } } } if (is_array($group['groups']) && !empty($group['groups'])) { foreach ($group['groups'] as $element => $group) { foreach ($group as $g) { processRecordGroup($xGroup, $element, $g, $ds, $entryManager, $fieldPool, $param_pool, $param_output_only); } } } if (!$param_output_only) { $wrapper->appendChild($xGroup); } return; }