/**
  * Generates box output
  *
  * @param	array	$params
  */
 public function generate_output($params = array())
 {
     if (is_array($params) and !empty($params['module_params'])) {
         $module_params = $params['module_params'];
         unset($params['module_params']);
         if (is_array($module_params)) {
             $params = array_merge($module_params, $params);
         }
     }
     if (!is_array($params) or empty($params['data_provider'])) {
         return;
     }
     if ($this->data_providers === false) {
         $config = vivvo_lite_site::get_instance()->get_configuration()->get_configuration_property_list('vivvo_chart');
         if (!empty($config['data_providers'])) {
             $this->data_providers = array();
             foreach ($config['data_providers'] as $name => $definition) {
                 $this->data_providers[$name] = unserialize($definition);
             }
         }
     }
     if (empty($this->data_providers[$params['data_provider']])) {
         return;
     }
     if (empty($params['template_string']) and empty($params['template'])) {
         $params['template_string'] = '<vte:value select="{CHART_HTML}"/>';
     }
     $this->set_template($params);
     $chart_params = array();
     $chart_appearance = array();
     foreach ($params as $name => $value) {
         if (!in_array($name, array('module', 'data_provider', 'template', 'template_string'))) {
             if (substr($name, 0, 6) == 'chart_') {
                 $chart_appearance[substr($name, 6)] = $value;
             } else {
                 $chart_params[$name] = $value;
             }
         }
     }
     $provider = vivvo_chart::load_data_provider($this->data_providers[$params['data_provider']]);
     if ($provider === false) {
         return;
     }
     $chart_html = vivvo_chart::get_html($this->data_providers[$params['data_provider']], $provider->filter_box_params($chart_params), $chart_appearance);
     $this->_template->assign('CHART_HTML', $chart_html);
 }