Ejemplo n.º 1
0
 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;
 }