modify('-7 day'); $form['period'] = array( '#type' => 'select', '#title' => t('Period'), '#default_value' => 'week', '#required' => TRUE, '#options' => array( 'day' => t('Last day'), 'week' => t('Last week'), 'month' => t('Last month'), 'year' => t('Last year'), 'custom' => t('Custom') ) ); $form['start'] = array( '#type' => 'date', '#title' => t('Custom start'), '#default_value' => array('year' => $start_date->format('Y'), 'month' => $start_date->format('n'), 'day' => $start_date->format('j')), '#required' => FALSE, ); $form['end'] = array( '#type' => 'date', '#title' => t('Custom end'), '#required' => FALSE, ); // use type 'button' instead of regular 'submit'. From FAPI: // "Format an action button. When the button is pressed, the form will be submitted to Drupal, where it is validated and rebuilt. The submit handler is not invoked." // http://api.drupal.org/api/file/developer/topics/forms_api_reference.html/5#button $form['submit'] = array( '#type' => 'button', '#value' => t('Update Statistics') ); return $form; } /** * Special theme function for our wizard form. * @param $form the form elements to template * @return the string of the themed form */ function theme_origo_statistics_form($form) { $output = ''; $output .= '
'; $output .= drupal_render($form['period']); $output .= ''; $output .= drupal_render($form['start']); $output .= ''; $output .= drupal_render($form['end']); $output .= '
'; $output .= drupal_render($form); // read the values for the statistics $project = variable_get('origo_project_name', ''); $now = time(); switch ($form['period']['#value']) { case 'day': $start = $now - 86400; $end = $now; break; case 'week': $start = $now - 604800; $end = $now; break; case 'month': $start = $now - 2592000; $end = $now; break; case 'year': $start = $now - 31536000; $end = $now; break; case 'custom': $start = _convert_to_unix_timestamp($form['start']['#value']); $end = _convert_to_unix_timestamp($form['end']['#value']); break; } // render the statistics $output .= '



'; $output .= _add_statistic_image($project, $start, $end); return $output; } /** * Convert a form date array into a unix timestamp. * @param $date the form date array * @return unix timestamp */ function _convert_to_unix_timestamp($date) { return mktime(0, 0, 0, $date['month'], $date['day'], $date['year']); } /** * Generate the statistic image links. * @param $project project * @param $start start time * @param $end end time * @return the string with the html code for the image */ function _add_statistic_image($project, $start, $end) { $valid_templates = variable_get('origo_statistics_templates', array()); foreach ($valid_templates as $template) { $output .= ''."\n"; } return $output; } /** * Image call. */ function origo_statistics_picture_page() { // fixed config $rrd_tool = variable_get('origo_statistics_rrdtool', '/usr/bin/rrdtool'); $rrd_data_path = variable_get('origo_statistics_rrd_path', ''); $template_path = drupal_get_path('module', 'origo_statistics') ."/templates/"; $valid_templates = variable_get('origo_statistics_templates', array()); // parameters $project = $_GET["p"]; if (!preg_match("/^[-\w]{1,50}$/", $project)) { die("Invalid project specified"); } $project_watermark = ''; $base = base_path(); if (!strcmp($base, '/')) { // The base path is '/', therefore we work with subdomains: display this $project_watermark = 'http://'. drupal_strtolower($project) .'.'. variable_get('origo_web_domain', ''); } else { // The base path is something like '/projects/origo', thus we work with proper subdirectory - projects // In this case, we display only the project and oriact name $project_watermark = $project .' - powered by oriact.com'; } $start = intval($_GET["s"]); $end = intval($_GET["e"]); $template = $_GET["t"]; if (!in_array($template, $valid_templates, TRUE)) { die("Invalid template specified"); } else { $graph_template = file_get_contents($template_path . $template .".template"); } // build command $project_rrd_path = $rrd_data_path . $project ."/"; $search = array("%PROJECT%", "%RRD%", "%START%", "%END%", "%PROJECTWATERMARK%"); $replace = array($project, $project_rrd_path, $start, $end, $project_watermark); $graph = str_replace($search, $replace, $graph_template); $command = $rrd_tool ." graph - ". $graph; //echo str_replace ("\\", "", $command); // header header("Content-type: image/png"); // execute command passthru($command); }