$var) { $newvars[$name]['id'] = $var; if (!empty($type[$name])) { switch ($type[$name]) { case 'INDI': $record = WT_Individual::getInstance($var); if ($record && $record->canShowName()) { $newvars[$name]['gedcom'] = $record->privatizeGedcom(WT_USER_ACCESS_LEVEL); } else { $action = 'setup'; } break; case 'FAM': $record = WT_Family::getInstance($var); if ($record && $record->canShowName()) { $newvars[$name]['gedcom'] = $record->privatizeGedcom(WT_USER_ACCESS_LEVEL); } else { $action = 'setup'; } break; case 'SOUR': $record = WT_Source::getInstance($var); if ($record && $record->canShowName()) { $newvars[$name]['gedcom'] = $record->privatizeGedcom(WT_USER_ACCESS_LEVEL); } else { $action = 'setup'; } break; default: break; } } } $vars = $newvars; unset($newvars); foreach ($varnames as $name) { if (!isset($vars[$name])) { $vars[$name]['id'] = ''; } } $reports = array(); foreach (WT_Module::getActiveReports() as $rep) { foreach ($rep->getReportMenus() as $menu) { if (preg_match('/report=(' . preg_quote(WT_MODULES_DIR, '/') . '[a-z0-9_]+\/[a-z0-9_]+\.xml)/', $menu->link, $match)) { $reports[$match[1]] = $menu->label; } } } if (!empty($report)) { if (!array_key_exists($report, $reports)) { $action = 'choose'; } } //-- choose a report to run switch ($action) { case 'choose': $controller ->setPageTitle(WT_I18N::translate('Choose a report to run')) ->pageHeader(); echo '
', WT_I18N::translate('Choose a report to run'), '
', WT_I18N::translate('Report'), '
'; break; case 'setup': require_once WT_ROOT . 'includes/reportheader.php'; $report_array = array(); // Start the sax parser $xml_parser = xml_parser_create(); // Make sure everything is case sensitive xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); // Set the main element handler functions xml_set_element_handler($xml_parser, 'startElement', 'endElement'); // Set the character data handler xml_set_character_data_handler($xml_parser, 'characterData'); // Open the file if (!($fp = fopen($report, 'r'))) { die('could not open XML input'); } while (($data = fread($fp, 4096))) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf($data . ' XML error: %s at line %d', xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); $controller ->setPageTitle($report_array['title']) ->pageHeader() ->addExternalJavascript(WT_STATIC_URL . 'js/autocomplete.js') ->addInlineJavascript('autocomplete();'); init_calendar_popup(); echo '
'; if (!isset($report_array['inputs'])) { $report_array['inputs'] = array(); } foreach ($report_array['inputs'] as $input) { echo ''; } echo '
', WT_I18N::translate('Enter report values'), '
', WT_I18N::translate('Report'), '', $report_array['title'], '
', $report_array['description'], '
'; echo ''; echo WT_I18N::translate($input['value']), ''; if (!isset($input['type'])) { $input['type'] = 'text'; } if (!isset($input['default'])) { $input['default'] = ''; } if (!isset($input['lookup'])) { $input['lookup'] = ''; } if ($input['type'] == 'text') { echo 'getSignificantIndividual()->getXref(); } break; case 'FAM': echo ' data-autocomplete-type="FAM"'; if (!empty($famid)) { $input['default'] = $famid; } else { $input['default'] = $controller->getSignificantFamily()->getXref(); } break; case 'SOUR': echo ' data-autocomplete-type="SOUR"'; if (!empty($sid)) { $input['default'] = $sid; } break; case 'DATE': if (isset($input['default'])) { $input['default'] = strtoupper($input['default']); } break; } echo ' type="text" name="vars[', WT_Filter::escapeHtml($input['name']), ']" id="', WT_Filter::escapeHtml($input['name']), '" value="', WT_Filter::escapeHtml($input['default']), '" style="direction: ltr;">'; } if ($input['type'] == 'checkbox') { echo ''; } if ($input['type'] == 'select') { echo ''; } if (isset($input['lookup'])) { echo ''; if ($input['lookup'] == 'INDI') { echo print_findindi_link('pid'); } elseif ($input['lookup'] == 'PLAC') { echo print_findplace_link($input['name']); } elseif ($input['lookup'] == 'FAM') { echo print_findfamily_link('famid'); } elseif ($input['lookup'] == 'SOUR') { echo print_findsource_link($input['name']); } elseif ($input['lookup'] == 'DATE') { echo ' '; echo ''; } } echo '

'; break; case 'run': if (strstr($report, 'report_singlepage.xml') !== false) { $DEBUG = false; $pedigree = new ReportPedigree(); exit; } switch ($output) { case 'HTML': header('Content-type: text/html; charset=UTF-8'); $wt_report = new WT_Report_HTML(); $ReportRoot = $wt_report; break; case 'PDF': $wt_report = new WT_Report_PDF(); $ReportRoot = $wt_report; break; } /** * element handlers array * * Converts XML element names into functions * * @global array $elementHandler */ $elementHandler = array(); $elementHandler['AgeAtDeath']['start'] = 'AgeAtDeathSHandler'; $elementHandler['br']['start'] = 'brSHandler'; $elementHandler['Body']['start'] = 'BodySHandler'; $elementHandler['Cell']['end'] = 'CellEHandler'; $elementHandler['Cell']['start'] = 'CellSHandler'; $elementHandler['Description']['end'] = 'DescriptionEHandler'; $elementHandler['Description']['start'] = 'DescriptionSHandler'; $elementHandler['Doc']['end'] = 'DocEHandler'; $elementHandler['Doc']['start'] = 'DocSHandler'; $elementHandler['Report']['end'] = ''; $elementHandler['Report']['start'] = ''; $elementHandler['Facts']['end'] = 'FactsEHandler'; $elementHandler['Facts']['start'] = 'FactsSHandler'; $elementHandler['Footer']['start'] = 'FooterSHandler'; $elementHandler['Footnote']['end'] = 'FootnoteEHandler'; $elementHandler['Footnote']['start'] = 'FootnoteSHandler'; $elementHandler['FootnoteTexts']['start'] = 'FootnoteTextsSHandler'; $elementHandler['Gedcom']['end'] = 'GedcomEHandler'; $elementHandler['Gedcom']['start'] = 'GedcomSHandler'; $elementHandler['GedcomValue']['start'] = 'GedcomValueSHandler'; $elementHandler['Generation']['start'] = 'GenerationSHandler'; $elementHandler['GetPersonName']['start'] = 'GetPersonNameSHandler'; $elementHandler['Header']['start'] = 'HeaderSHandler'; $elementHandler['HighlightedImage']['start'] = 'HighlightedImageSHandler'; $elementHandler['if']['end'] = 'ifEHandler'; $elementHandler['if']['start'] = 'ifSHandler'; $elementHandler['Image']['start'] = 'ImageSHandler'; $elementHandler['Input']['end'] = ''; $elementHandler['Input']['start'] = ''; $elementHandler['Line']['start'] = 'LineSHandler'; $elementHandler['List']['end'] = 'ListEHandler'; $elementHandler['List']['start'] = 'ListSHandler'; $elementHandler['ListTotal']['start'] = 'ListTotalSHandler'; $elementHandler['NewPage']['start'] = 'NewPageSHandler'; $elementHandler['Now']['start'] = 'NowSHandler'; $elementHandler['PageHeader']['end'] = 'PageHeaderEHandler'; $elementHandler['PageHeader']['start'] = 'PageHeaderSHandler'; $elementHandler['PageNum']['start'] = 'PageNumSHandler'; $elementHandler['Relatives']['end'] = 'RelativesEHandler'; $elementHandler['Relatives']['start'] = 'RelativesSHandler'; $elementHandler['RepeatTag']['end'] = 'RepeatTagEHandler'; $elementHandler['RepeatTag']['start'] = 'RepeatTagSHandler'; $elementHandler['SetVar']['start'] = 'SetVarSHandler'; $elementHandler['Style']['start'] = 'StyleSHandler'; $elementHandler['Text']['end'] = 'TextEHandler'; $elementHandler['Text']['start'] = 'TextSHandler'; $elementHandler['TextBox']['end'] = 'TextBoxEHandler'; $elementHandler['TextBox']['start'] = 'TextBoxSHandler'; $elementHandler['Title']['end'] = 'TitleEHandler'; $elementHandler['Title']['start'] = 'TitleSHandler'; $elementHandler['TotalPages']['start'] = 'TotalPagesSHandler'; $elementHandler['var']['start'] = 'varSHandler'; $elementHandler['sp']['start'] = 'spSHandler'; /** * A new object of the currently used element class * * @global object $currentElement */ $currentElement = new WT_Report_Base_Element(); /** * Should character data be printed * * This variable is turned on or off by the element handlers to tell whether the inner character * Data should be printed * * @global boolean $printData */ $printData = false; /** * Title collector. Mark it if it has already been used * * @global boolean $reportTitle */ $reportTitle = false; /** * Description collector. Mark it if it has already been used * * @global boolean $reportDescription */ $reportDescription = false; /** * Print data stack * * As the XML is being processed there will be times when we need to turn on and off the * $printData variable as we encounter entinties in the XML. The stack allows us to * keep track of when to turn $printData on and off. * * @global array $printDataStack */ $printDataStack = array(); /** * @global array $wt_reportStack */ $wt_reportStack = array(); /** * @global array $gedrecStack */ $gedrecStack = array(); /** * @global array $repeatsStack */ $repeatsStack = array(); /** * @global array $parserStack */ $parserStack = array(); /** * @global array $repeats */ $repeats = array(); /** * @global string $gedrec */ $gedrec = ''; /** * @global ???? $repeatBytes */ $repeatBytes = 0; /** * @global resource $parser */ $parser = ''; /** * @global int $processRepeats */ $processRepeats = 0; /** * @global ???? $processIfs */ $processIfs = 0; /** * @global ???? $processGedcoms */ $processGedcoms = 0; /** * Wether or not to print footnote * true = print, false = don't print */ $processFootnote = true; //-- start the sax parser $xml_parser = xml_parser_create(); //-- make sure everything is case sensitive xml_parser_set_option($xml_parser, XML_OPTION_CASE_FOLDING, false); //-- set the main element handler functions xml_set_element_handler($xml_parser, 'startElement', 'endElement'); //-- set the character data handler xml_set_character_data_handler($xml_parser, 'characterData'); if (!($fp = fopen($report, 'r'))) { die('could not open XML input'); } while (($data = fread($fp, 4096))) { if (!xml_parse($xml_parser, $data, feof($fp))) { die(sprintf($data . ' XML error: %s at line %d', xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser))); } } xml_parser_free($xml_parser); } // We cannot add translation comments inside the XML files. // These messages are all used in the reports. We repeat them // here, so we can add comments /* I18N: An option in a list-box */ WT_I18N::translate('sort by date of birth'); /* I18N: An option in a list-box */ WT_I18N::translate('sort by date of marriage'); /* I18N: An option in a list-box */ WT_I18N::translate('sort by date of death');