From b3f324dd2e2ef7721efb851534444df08b448f00 Mon Sep 17 00:00:00 2001 From: Bart Van Der Meerssche Date: Fri, 18 Mar 2011 20:45:38 +0000 Subject: [PATCH] [drupal] add csv export function for sensor list --- server/drupal/modules/logger/logger.module | 72 ++++++++++++++++++---- 1 file changed, 59 insertions(+), 13 deletions(-) diff --git a/server/drupal/modules/logger/logger.module b/server/drupal/modules/logger/logger.module index bbc6c46..68b41c1 100644 --- a/server/drupal/modules/logger/logger.module +++ b/server/drupal/modules/logger/logger.module @@ -803,8 +803,7 @@ function _logger_fluksonians_form() { $subscription = db_fetch_object($subscriptions); } else { - $row[] = l('[+]', 'logger/add/'. $fluksonian->uid, array('attributes' => array('title' => "subscribe to ". $fluksonian->name ."'s stream"), 'query' => $destination, 'ali -as' => TRUE)) .' '. l($fluksonian->name, 'user/'. $fluksonian->uid, array('alias' => FALSE)); + $row[] = l('[+]', 'logger/add/'. $fluksonian->uid, array('attributes' => array('title' => "subscribe to ". $fluksonian->name ."'s stream"), 'query' => $destination, 'alias' => TRUE)) .' '. l($fluksonian->name, 'user/'. $fluksonian->uid, array('alias' => FALSE)); } $i++; } @@ -826,18 +825,23 @@ as' => TRUE)) .' '. l($fluksonian->name, 'user/'. $fluksonian->uid, array('alias return $form; } +function _unix_to_userlocaltime($unix) { + global $user; + $unix_local = gmdate('r', $unix + $user->timezone); + return substr($unix_local, 0, strlen($unix_local) - 6); +} + +function _unix_to_userlocaldate($unix) { + global $user; + $unix_local = gmdate('Ymd', $unix + $user->timezone); + return $unix_local; +} + /** * Generates the sensors block form. */ function _logger_sensors_form() { - function unix_to_userlocaltime($unix) { - global $user; - $unix_local = gmdate('r', $unix + $user->timezone); - return substr($unix_local, 0, strlen($unix_local) - 6); - } - global $user; - $destination = drupal_get_destination(); if (strrpos(' ' . $_GET['q'] . '/electricity', 'logger/electricity')) { $type = 'electricity'; @@ -850,6 +854,8 @@ function _logger_sensors_form() { FROM {logger_meters} WHERE uid = %d and type = '%s'", $user->uid, $type); + $path = _logger_sensors_list_save($type); + $i = 0; $rows = array(); $row = array(); @@ -858,7 +864,7 @@ function _logger_sensors_form() { while ($sensor = db_fetch_object($sensors)) { $row['function'] = $sensor->function; $row['sensor'] = $sensor->meter; - $row['access'] = '
' . unix_to_userlocaltime($sensor->access) . '
'; + $row['access'] = '
' . _unix_to_userlocaltime($sensor->access) . '
'; $row['counter'] = '
' . $sensor->value . '
'; $rows[$sensor->meter] = $row; @@ -878,10 +884,14 @@ function _logger_sensors_form() { 'counter' => t('Counter'), ); + $description = 'Select the sensors you wish to add to the chart. '; + $description .= l('Click here', $path, array('attributes' => array('alias' => TRUE))); + $description .= ' to export the table in csv format.'; + $form['sensors'] = array( '#type' => 'fieldset', '#title' => t('Sensors'), - '#description' => t('Select the sensors you wish to add to the chart.'), + '#description' => $description, '#collapsible' => TRUE, '#collapsed' => TRUE, ); @@ -900,7 +910,7 @@ function _logger_sensors_form() { '#value' => t('Update'), ); - $form['#submit'][] = '_logger_sensors_submit'; + $form['#submit'][] = '_logger_sensors_list_submit'; return $form; } @@ -910,7 +920,7 @@ function _logger_sensors_list_validate($element, &$form_state) { form_error($element, t('A maximum of five sensors can be plotted on a single chart.')); } -function _logger_sensors_submit($form, &$form_state) { +function _logger_sensors_list_submit($form, &$form_state) { foreach ($form_state['values']['list'] as $sensor => $chart) { if ($chart) db_query("UPDATE {logger_meters} SET chart = %d WHERE meter = '%s'", 1, $sensor); @@ -919,6 +929,41 @@ function _logger_sensors_submit($form, &$form_state) { } } +function _logger_sensors_list_save($type) { + global $user; + + $sensors = db_query("SELECT meter, access, function, value, chart + FROM {logger_meters} + WHERE uid = %d and type = '%s'", $user->uid, $type); + + $i = 0; + $rows = array(); + $row = array(); + + $rows[] = 'function;sensor;access;counter'; + + while ($sensor = db_fetch_object($sensors)) { + $row[] = $sensor->function; + $row[] = $sensor->meter; + $row[] = _unix_to_userlocaltime($sensor->access); + $row[] = $sensor->value; + + $rows[] = implode($row, ';'); + $row = array(); + $i++; + } + + $output = implode($rows, PHP_EOL); + $name = implode(array(_unix_to_userlocaldate(time()), $type, md5(uniqid())), '-'); + $path = drupal_get_path('module', 'logger') . '/graphs/list/' . $name . '.csv'; + + $fd = fopen($path, 'w'); + fwrite($fd, $output); + fclose($fd); + + return $path; +} + /** * Implementation of hook_form_alter(). */ @@ -953,4 +998,5 @@ function logger_cron() { exec('rm sites/all/modules/logger/graphs/month/*'); exec('rm sites/all/modules/logger/graphs/year/*'); exec('rm sites/all/modules/logger/graphs/night/*'); + exec('rm sites/all/modules/logger/graphs/list/*'); }