Index: nodereference_url/nodereference_url.module
===================================================================
--- nodereference_url/nodereference_url.module	(revision 42)
+++ nodereference_url/nodereference_url.module	(working copy)
@@ -46,18 +46,32 @@
 function node_reference_url_checknid($viewname, $args = NULL, $nid) {
   $view = views_get_view($viewname);
   if (is_object($view)) {
-	$view->add_item('default', 'filter', 'node', 'nid', array('value'=>array('value'=>$nid),'operator' => '='));
+        $view->add_item('default', 'filter', 'node', 'nid', array('value'=>array('value'=>$nid),'operator' => '='));
     if (is_array($args)) {
       $view->set_arguments($args);
     }
-		
+
     $view->init_display();
-		$view->is_cacheable = FALSE;
+                $view->is_cacheable = FALSE;
     $view->pre_execute();
     $view->execute();
-		return !empty($view->result);
+                return !empty($view->result);
   }
 }
+function nodereference_url_check_valid_reference($field, $target_type, $node) {
+      if ($field['widget']['type'] == 'nodereference_url'
+          && !empty($field['widget']['node_link']['enabled'])
+          && !empty($field['referenceable_types'][$node->type])
+             && user_access('create ' . $target_type . ' content')) {
+             if ($field['advanced_view']) {
+                 if ($field['advanced_view_args']){
+                     $view_args = array_map('trim', explode(',', $field['advanced_view_args']));
+                 } else $view_args = array();
+                 if (!node_reference_url_checknid($field['advanced_view'],$view_args,$node->nid)) return false;
+             }
+          return true;
+      }
+}
 /**
  * Implementation of hook_link().
  */
@@ -68,23 +82,13 @@
     $fields = content_fields(NULL, $object->type);
     foreach ($fields as $field_name => $field) {
       foreach(_nodereference_url_field_instances($field_name) as $target_type => $instance) {
-        if ($instance['widget']['type'] == 'nodereference_url' && !empty($instance['widget']['node_link']['enabled'])) {
-          if (!empty($field['referenceable_types'][$object->type]) && user_access('create ' . $target_type . ' content')) {
-						if ($instance['advanced_view']) {
-						 	if ($instance['advanced_view_args']){
-						 	 	$view_args = array_map('trim', explode(',', $instance['advanced_view_args']));
-							} else $view_args = array();
-							if (!node_reference_url_checknid($instance['advanced_view'],$view_args,$object->nid)) continue;
-						}
-						
-						
+        if (nodereference_url_check_valid_reference($instance, $target_type, $object)) {
             $links[$target_type .'_'. $field_name] = array(
               'title' => $instance['widget']['node_link']['title'],
               'href' => 'node/add/'. str_replace('_', '-', $instance['type_name']) .'/'. $object->nid,
             );
             if (!empty($instance['widget']['node_link']['hover_title'])) {
               $links[$target_type .'_'. $field_name]['attributes']['title'] = $instance['widget']['node_link']['hover_title'];
-            }
           }
         }
       }
@@ -216,7 +220,7 @@
   }
 
   // Check that the NID is a valid reference.
-  
+
   $node=$form['#node'];
   $nfield =$field['field_name'];
   $node_val = $node->$nfield;
@@ -247,14 +251,14 @@
     }
     // Fallback to autocomplete.
     elseif ($field['widget']['fallback'] == 'autocomplete') {
-			$element = array(
-        	'#type' => 'nodereference_autocomplete',
-        	'#default_value' => isset($items[$delta]) ? $items[$delta] : NULL,
-        	'#value_callback' => 'nodereference_autocomplete_value',
-					'#element_validate'=> array('nodereference_url_autocomplete_validate')
-      	);
-			
-		}
+                        $element = array(
+                '#type' => 'nodereference_autocomplete',
+                '#default_value' => isset($items[$delta]) ? $items[$delta] : NULL,
+                '#value_callback' => 'nodereference_autocomplete_value',
+                                        '#element_validate'=> array('nodereference_url_autocomplete_validate')
+              );
+
+                }
     // Fallback to an empty field.
     else {
       $referenced_nid = '';
@@ -274,7 +278,7 @@
 }
 
 function nodereference_url_autocomplete_validate($element, &$form_state) {
-	$form_state['values'][$element['#field_name']] = array($form_state['values'][$element['#field_name']] );
+        $form_state['values'][$element['#field_name']] = array($form_state['values'][$element['#field_name']] );
 
 }
 /**
@@ -335,3 +339,10 @@
 function theme_nodereference_url($element) {
   return theme('form_element', $element, $element['#display_title']);
 }
+
+function nodereference_url_views_api() {
+  return array(
+    'api' => 2,
+           'path' => drupal_get_path('module', 'nodereference_url'),
+  );
+}
Index: nodereference_url/nodereference_url.views.inc
===================================================================
--- nodereference_url/nodereference_url.views.inc	(revision 0)
+++ nodereference_url/nodereference_url.views.inc	(revision 0)
@@ -0,0 +1,32 @@
+<?php
+/*
+* implementation of hook_views_data
+*/
+function nodereference_url_views_data() {
+ foreach (content_fields() as $field) {
+    if ($field['widget']['type'] != 'nodereference_url') continue;
+$data['node'][$field['field_name'].'_nodereference_url_link'] = array(
+  'field' => array(
+        'title' => t($field['widget']['label'].' create link'),
+        'handler' => 'nodereference_url_link',
+        'help'=>t('Node reference url create link'),
+        'content_field_name' => $field['field_name'],
+  ),
+);
+}
+        return $data;
+}
+
+
+function nodereference_url_views_handlers() {
+  return array(
+    'info' => array(
+      'path' => drupal_get_path('module', 'nodereference_url'),
+    ),
+    'handlers' => array(
+                'nodereference_url_link' => array(
+                'parent' => 'views_handler_field_node_link',
+      ),
+          ),
+  );
+}
\ No newline at end of file

Property changes on: nodereference_url/nodereference_url.views.inc
___________________________________________________________________
Name: svn:executable
   + *

Index: nodereference_url/nodereference_url_link.inc
===================================================================
--- nodereference_url/nodereference_url_link.inc	(revision 0)
+++ nodereference_url/nodereference_url_link.inc	(revision 0)
@@ -0,0 +1,31 @@
+<?php
+// $Id: content_handler_field.inc,v 1.1.2.15 2009/03/30 22:54:16 yched Exp $
+
+/**
+ *
+ */
+class nodereference_url_link extends views_handler_field_node_link {
+  function construct() {
+    parent::construct();
+    $this->additional_fields['type'] = 'type';
+     $this->additional_fields['vid'] = 'vid';
+  }
+  function render($values) {
+    // ensure user has access to edit this node.
+    $nid = $values->{$this->aliases['nid']};
+     $type = $values->{$this->aliases['type']};
+     $node = (object)array('type'=>$type,'nid'=>$nid);
+     $field_info = content_fields($this->definition['content_field_name']);
+     $links = array();
+     foreach(_nodereference_url_field_instances($this->definition['content_field_name']) as $target_type => $instance) {
+     $attr=array();
+        if (nodereference_url_check_valid_reference($instance, $target_type, $node)) {
+            if (!empty($instance['widget']['node_link']['hover_title'])) {
+              $attr['attributes']['title'] = $instance['widget']['node_link']['hover_title'];
+            }
+            $links[$target_type .'_'. $field_name] = l( t($instance['widget']['node_link']['title']), 'node/add/'. str_replace('_', '-', $instance['type_name']) .'/'. $nid,$attr);
+        }
+     }
+     return implode(" ", $links);
+  }
+}

Property changes on: nodereference_url/nodereference_url_link.inc
___________________________________________________________________
Name: svn:executable
   + *

