function forena_save_report in Forena Reports 7.3
Same name and namespace in other branches
- 8 forena.common.inc \forena_save_report()
- 6.2 forena.admin.inc \forena_save_report()
- 6 forena.admin.inc \forena_save_report()
- 7.5 forena.common.inc \forena_save_report()
- 7 forena.admin.inc \forena_save_report()
- 7.2 forena.admin.inc \forena_save_report()
- 7.4 forena.common.inc \forena_save_report()
Save the report file to disk
Parameters
string $name File name to save report to:
unknown_type $data:
12 calls to forena_save_report()
- forena_add_param_form_submit in ./
forena.admin.inc - forena_add_report_form_submit in ./
forena.admin.inc - forena_admin_params_form_submit in ./
forena.admin.inc - forena_create_trans_form_submit in ./
forena.admin.inc - forena_data_block_add in ./
forena.admin.inc - submit handler for forena_data_block_form. This adds the datablock to an existing report.
File
- ./
forena.common.inc, line 308 - Common functions used throughout the project but loaded in this file to keep the module file lean.
Code
function forena_save_report($report_name, $report, $save_file = FALSE, $altered = 0) {
static $save_count = 0;
if ($report && !is_object($report)) {
try {
$report = new SimpleXMLElement($report);
} catch (Exception $e) {
FrxReportGenerator::instance()->app
->error(t('Could not save %s because XML was malformed', array(
'%s' => $report_name,
)), "<p>Invalid XML</p><pre>XML:" . htmlspecialchars($report) . "\n" . $e
->getMessage() . "</pre>");
return;
}
}
if (!_forena_verify_directory($report_name)) {
drupal_set_message(t('Error creating directory. Check Permissions'), 'error');
return 0;
}
$report_path = forena_report_path();
$r = new FrxReport($report);
$data['title'] = $r->title;
$data['category'] = $r->category;
$data['options'] = $r->options;
$data['descriptor'] = $r->descriptor;
$data['name'] = $report_name;
$data['altered'] = $altered;
$r_xml = $report
->asXML();
$name = $data['name'];
$filepath = $report_path . '/' . $report_name . '.frx';
// If we need to save this to the file system
if ($save_file) {
if (!file_exists($filepath) || is_writeable($filepath)) {
// Serialize the report for saving
file_put_contents($filepath, $r_xml);
}
else {
Frx::error(t('Insufficient privileges to write file.'));
}
}
// Get the security caches from the reports
if ($report) {
$cache = forena_load_cache($report);
}
else {
$cache = '';
}
$rpt_cache = '';
if ($cache) {
$rpt_cache = serialize($cache);
}
// Set default interpretations of data
$data['enabled'] = isset($data['enabled']) && $data['enabled'] ? 1 : 0;
if (isset($data['options']['hidden']) && (string) $data['options']['hidden']) {
$data['hidden'] = $data['options']['hidden'] && $data['options']['hidden'] != 'N' && $data['options']['hidden'] != '0' ? 1 : 0;
if (!$data['category']) {
$data['category'] = 'All';
}
}
else {
// Set hidden based on category
$data['hidden'] = $data['category'] ? 0 : 1;
}
// Save language info
$lang = 'en';
if (module_exists('locale')) {
@(list($tlang, $tname) = explode('/', $name, 2));
if (array_key_exists($tlang, language_list())) {
$lang = $tlang;
$name = $tname;
}
}
// Save to the Database
if (file_exists($filepath)) {
$modified = filemtime($filepath);
$result = db_query("SELECT report_name FROM {forena_reports} WHERE report_name=:report_name AND language=:language", array(
':report_name' => $name,
'language' => $lang,
));
$path = isset($cache['menu']) ? @$cache['menu']['path'] : '';
if ($rpt = $result
->fetchObject()) {
db_update('forena_reports')
->condition('report_name', $name)
->condition('language', $lang)
->fields(array(
'title' => $data['title'],
'descriptor' => $data['descriptor'],
'category' => $data['category'],
'hidden' => $data['hidden'],
'cache' => $rpt_cache,
'altered' => $data['altered'],
'modified' => $modified,
'path' => $path,
))
->execute();
}
else {
db_insert('forena_reports')
->fields(array(
'report_name' => $name,
'language' => $lang,
'title' => $data['title'],
'descriptor' => $data['descriptor'],
'category' => $data['category'],
'hidden' => $data['hidden'],
'cache' => $rpt_cache,
'altered' => $data['altered'],
'modified' => $modified,
'path' => $path,
))
->execute();
}
$save_count++;
}
$r = NULL;
$result = NULL;
$r_xml = NULL;
$report = NULL;
$data = NULL;
$rpt = NULL;
$cache = NULL;
$rpt_cache = NULL;
// Destroy object to clear memory leaks.
if ($r) {
$r
->__destruct();
unset($r);
}
return $save_count;
}