From 26513936f87411ef9ab672508b2c446426ff8fcd Mon Sep 17 00:00:00 2001
From: Marco Villegas <marvil07@gmail.com>
Date: Fri, 4 Jun 2010 18:57:09 -0500
Subject: [PATCH] views field widget for vud_node

---
 .../views_handler_field_vote_up_down_widget.inc    |   62 ++++++++++++++++++++
 vud_node/views/vud_node.views.inc                  |   40 +++++++++++++
 vud_node/vud_node.module                           |   11 ++++
 3 files changed, 113 insertions(+), 0 deletions(-)
 create mode 100644 vud_node/views/views_handler_field_vote_up_down_widget.inc
 create mode 100644 vud_node/views/vud_node.views.inc

diff --git vud_node/views/views_handler_field_vote_up_down_widget.inc vud_node/views/views_handler_field_vote_up_down_widget.inc
new file mode 100644
index 0000000..fc1e6f0
--- /dev/null
+++ vud_node/views/views_handler_field_vote_up_down_widget.inc
@@ -0,0 +1,62 @@
+<?php
+// $Id: 
+
+/**
+ * A handler to provide the vote up down widget field.
+ *
+ * @ingroup views_handler_field
+ */
+class views_handler_field_vote_up_down_widget extends views_handler_field {
+  function query() {
+    // do nothing -- to override the parent query.
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+    return $options;
+  }
+
+  function options_form(&$form, &$form_state) {
+    parent::options_form($form, $form_state);
+
+    // Remove the checkbox
+    unset($form['alter']['alter_text']);
+    unset($form['alter']['text']['#dependency']);
+    unset($form['alter']['text']['#process']);
+  }
+
+  function render($values) {
+    $content = '';
+    if (($can_edit = user_access('use vote up/down on nodes')) || 
+         user_access('view vote up/down count on nodes')) {
+      $node->nid = $values->nid;
+      $node->type = db_result(db_query("SELECT type FROM {node} WHERE nid = '%d'", $node->nid));
+      $node_type = in_array($node->type, variable_get('vud_node_types', array()), TRUE);
+      $tag = variable_get('vud_tag', 'vote');
+      $widget = variable_get('vud_node_widget', 'plain');
+
+      if ($node_type) {
+        $content = theme('vud_widget', $node->nid, 'node', $tag, $widget, !$can_edit);
+
+        //Not sure about this. To enable delete the next line
+        /* 
+        $widget_message = t('Sorry, there was problem on the vote.');
+        if (!$can_edit) {
+          $widget_message = t('You are not allowed to vote.');
+        }
+        else if (!$vote_on_teaser) {
+          $widget_message = t('Please go to full version of this content to vote.');
+        }
+        drupal_add_js(
+          array(
+            'vud_node' => array('widget_message' => $widget_message),
+          ),
+          'setting'
+        );
+        // */
+      }
+    } 
+    
+    return $content;
+  }
+}
diff --git vud_node/views/vud_node.views.inc vud_node/views/vud_node.views.inc
new file mode 100644
index 0000000..9e771c9
--- /dev/null
+++ vud_node/views/vud_node.views.inc
@@ -0,0 +1,40 @@
+<?php
+// $Id:
+
+/**
+ * @file
+ * Provide views integration with vote_up_down.module.
+ */
+
+/**
+ * Implementation of hook_views_data()
+ */
+function vud_views_data() {
+  $data['vote_up_down']['table']['group'] = t('Vote up down');
+  $data['vote_up_down']['table']['join'] = array(
+    '#global' => array(),
+  );
+
+  $data['vote_up_down']['widget'] = array(
+    'title' => t('Vote Up Down Widget'),
+    'help' => t('Provide a widget for voting up/down.'),
+    'field' => array(
+      'handler' => 'views_handler_field_vote_up_down_widget',
+    ),
+  );
+
+  return $data;
+}
+
+/**
+ * Implementation of hook_views_handlers().
+ */
+function vud_views_handlers() {
+  return array(
+    'handlers' => array(
+      'views_handler_field_vote_up_down_widget' => array(
+        'parent' => 'views_handler_field',
+      ),
+    ),
+  );
+}
diff --git vud_node/vud_node.module vud_node/vud_node.module
index 0dc4f78..d65f074 100644
--- vud_node/vud_node.module
+++ vud_node/vud_node.module
@@ -293,3 +293,14 @@ function vud_node_link($type, $object, $teaser = FALSE) {
   }
   return $links;
 }
+
+
+/**
+ * Function for integrating with views 2
+ */
+function vud_node_views_api() {
+  return array(
+    'api' => 2,
+    'path' => drupal_get_path('module', 'vud_node') . '/views',
+  );
+}
-- 
1.7.1

