Index: openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl,v
diff -u -r1.59 -r1.60
--- openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl	5 Apr 2007 11:37:22 -0000	1.59
+++ openacs-4/packages/contacts/tcl/contacts-callback-procs.tcl	18 Jun 2007 03:20:45 -0000	1.60
@@ -103,6 +103,15 @@
 } {
 }
 
+ad_proc -public -callback contact::employee_new {
+    {-package_id:required}
+    {-person_id:required}
+    {-organization_id:required}
+} {
+    This callback will be executed once an employee has been created. This means we have a person in the system (employee)
+    as well as an organization (where the person is an employee of).
+} -
+
 ad_proc -public -callback contact::person_add {
     {-package_id:required}
     {-person_id:required}
@@ -266,9 +275,9 @@
 } {
 
     set object_type [contact::type -party_id $party_id]
-    set element_list [list email url]
+    set element_list [list]
     if { [lsearch [list person user] $object_type] >= 0 } {
-	lappend element_list first_names last_name
+	lappend element_list first_names last_name email
     } elseif {$object_type == "organization" } {
 	lappend element_list name legal_name reg_number notes
     }
@@ -288,11 +297,7 @@
 			    acs_user::update -user_id $party_id -username $username
 			}
 		    }
-		    party::update -party_id $party_id -email $value -url [db_string get_url {select url from parties where party_id = :party_id} -default {}]
 		}
-		url {
-		    party::update -party_id $party_id -email [db_string get_email {select email from parties where party_id = :party_id} -default {}] -url $value
-		}
 		default {
 		    set $element $value
 		}
Index: openacs-4/packages/contacts/www/contact-add.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/www/contact-add.tcl,v
diff -u -r1.54 -r1.55
--- openacs-4/packages/contacts/www/contact-add.tcl	19 Dec 2006 10:54:34 -0000	1.54
+++ openacs-4/packages/contacts/www/contact-add.tcl	18 Jun 2007 03:20:45 -0000	1.55
@@ -11,6 +11,7 @@
     {rel_type ""}
     {role_two ""}
     {object_id_two ""}
+    {return_url ""}
 } -validate {
     valid_type -requires {object_type} {
 	if { [lsearch [list organization person employee] $object_type] < 0 } {
@@ -168,13 +169,15 @@
 set context [list $title]
 
 if {$object_type eq "employee"} {
+
+    # An employee adding is adding both organization and person in one go
     callback contact::contact_form -package_id $package_id -form party_ae -object_type "organization" -group_ids $group_ids -rel_type $rel_type
     callback contact::contact_form -package_id $package_id -form party_ae -object_type "person" -group_ids $group_ids -rel_type $rel_type
 } else {
     callback contact::contact_form -package_id $package_id -form party_ae -object_type $object_type -group_ids $group_ids -rel_type $rel_type
 }
 
-ad_form -extend -name party_ae \
+ad_form -extend -name party_ae -export {return_url}\
     -on_request {
 	
 	if { $object_type eq "person" }	{
@@ -321,6 +324,9 @@
 		    }
 		}
 		
+		if {$orig_object_type eq "employee"} {
+		    set email ""
+		}
 		callback contact::special_attributes::ad_form_save -party_id $organization_party_id -form "party_ae"
 		callback contact::organization_new -package_id $package_id -contact_id $organization_party_id -name $name
 	    }
@@ -352,6 +358,7 @@
 
 	# For employees we need to correctly save the relationship
 	if {$orig_object_type eq "employee"} {
+	    callback contact::employee_new -person_id $person_party_id -organization_id $organization_party_id -package_id $package_id
 	    set rel_type "contact_rels_employment"
 	    set party_id $person_party_id
 	    set object_id_two $organization_party_id
@@ -429,10 +436,16 @@
 	if {$orig_object_type eq "employee"} {
 	    callback contact::contact_form_after_submit -party_id $organization_party_id -package_id $package_id -object_type organization -form "party_ae"
 	}
-	if {[empty_string_p $object_id_two]} {
-	    ad_returnredirect [contact::url -party_id $party_id]
+
+	# If we passed a return_url go there
+	if {$return_url ne ""} {
+	    ad_returnredirect "$return_url"
 	} else {
-	    ad_returnredirect "${package_url}/$object_id_two"
+	    if {[empty_string_p $object_id_two]} {
+		ad_returnredirect [contact::url -party_id $party_id]
+	    } else {
+		ad_returnredirect "${package_url}/$object_id_two"
+	    }
 	}
 	ad_script_abort
     }
Index: openacs-4/packages/contacts/www/index.tcl
===================================================================
RCS file: /usr/local/cvsroot/openacs-4/packages/contacts/www/index.tcl,v
diff -u -r1.25 -r1.26
--- openacs-4/packages/contacts/www/index.tcl	19 Dec 2006 11:02:05 -0000	1.25
+++ openacs-4/packages/contacts/www/index.tcl	18 Jun 2007 03:20:45 -0000	1.26
@@ -17,6 +17,7 @@
     {aggregate_extend_id:multiple ""}
     {extend_values:optional ""}
     {extended_columns:optional ""}
+    {return_url ""}
 }
 
 if { [exists_and_not_null add_person] } {
@@ -119,7 +120,7 @@
     }
 }
 
-ad_form -name "search" -method "GET" -export {orderby page_size format extended_columns} -form $form_elements \
+ad_form -name "search" -method "GET" -export {orderby page_size format extended_columns return_url} -form $form_elements \
     -on_request {
     } -edit_request {
     } -on_refresh {