definition['label']) ? $this->definition['label'] : $this->definition['title']; $options['label'] = array('default' => $label, 'translatable' => TRUE); $options['votingapi']['value_type'] = array('default' => NULL); $options['votingapi']['tag'] = array('default' => NULL); if ($this->definition['base'] == 'votingapi_cache') { $options['votingapi']['function'] = array('default' => NULL); } elseif ($this->definition['base'] == 'votingapi_vote') { $options['current_user'] = array('default' => FALSE); } return $options; } /** * Default options form that provides the label widget that all fields * should have. */ function options_form(&$form, &$form_state) { parent::options_form($form, $form_state); $options['value_types'][''] = t('No filtering'); $options['tags'][''] = t('No filtering'); $options['functions'][''] = t('No filtering'); foreach(votingapi_metadata() as $bin => $bin_data) { foreach ($bin_data as $key => $data) { $options[$bin][$key] = $data['name']; } } $form['votingapi'] = array( '#type' => 'fieldset', '#collapsible' => FALSE, '#title' => t('Data filters'), '#description' => t('For each piece of content, many pieces of voting data may be saved. Use these options to specify exactly which types should be available via this relationship. Warning! Leaving any of these filters empty may result in multiple copies of each piece of content being displayed in listings.'), '#tree' => TRUE, ); $form['votingapi']['value_type'] = array( '#title' => t('Value type'), '#type' => 'select', '#options' => $options['value_types'], '#default_value' => $this->options['votingapi']['value_type'], ); $form['votingapi']['tag'] = array( '#title' => t('Vote tag'), '#type' => 'select', '#options' => $options['tags'], '#default_value' => $this->options['votingapi']['tag'], ); if ($this->definition['base'] == 'votingapi_cache') { $form['votingapi']['function'] = array( '#title' => t('Aggregation function'), '#type' => 'select', '#options' => $options['functions'], '#default_value' => $this->options['votingapi']['function'], ); } else { $form['current_user'] = array( '#title' => t('Restrict to current user'), '#type' => 'checkbox', '#return_value' => TRUE, '#default_value' => $this->options['current_user'], ); } } /** * Called to implement a relationship in a query. */ function query() { // Figure out what base table this relationship brings to the party. $table_data = views_fetch_data($this->definition['base']); $def = $this->definition; $def['table'] = $this->definition['base']; $def['field'] = 'entity_id'; $def['left_table'] = $this->table; $def['left_field'] = $this->field; if (!empty($this->options['required'])) { $def['type'] = 'INNER'; } if (!empty($def['join_handler']) && class_exists($def['join_handler'])) { $join = new $def['join_handler']; } else { $join = new views_join(); } // use a short alias for this: $alias = $def['table'] . '_' . $def['left_table']; if (!empty($this->options['votingapi'])) { foreach ($this->options['votingapi'] as $field => $value) { if (!empty($value)) { $def['extra'][] = array( 'field' => $field, 'value' => $value, 'numeric' => FALSE ); $alias .= '_'. str_replace(array(' ','-','.'), '_', $value); } } } if (!empty($this->options['current_user'])) { $def['extra'][] = array( 'field' => 'uid', 'value' => '***CURRENT_USER***', 'numeric' => FALSE ); $alias .= '_curuser'; } $join->definition = $def; $join->construct(); $this->ensure_my_table(); $this->alias = $this->query->add_relationship($alias, $join, $this->definition['base'], $this->relationship); } }