* Api - Check if email address is known before offering 'Add as contact' button

This commit is contained in:
nathangray 2018-02-08 13:19:26 -07:00
parent 9c3882b4e8
commit c67560049c
2 changed files with 69 additions and 36 deletions

View File

@ -354,49 +354,69 @@ var et2_url_ro = (function(){ "use strict"; return et2_valueWidget.extend([et2_I
if(!egw.app('addressbook')) return; if(!egw.app('addressbook')) return;
// Bind onmouseenter event on <a> tag in order to add contact plus // Bind onmouseenter event on <a> tag in order to add contact plus
this.span.on ({ this.span.on ('mouseenter', jQuery.proxy(function (event) {
mouseenter: function (event) event.stopImmediatePropagation();
if(typeof et2_url_ro.email_cache[this.value] === 'undefined')
{ {
event.stopImmediatePropagation(); // Ask server if we know this email
var self = this; this.egw().jsonq('EGroupware\\Api\\Etemplate\\Widget\\Url::ajax_contact',
jQuery(this).tooltip({ this.value, this._add_contact_tooltip, this
items: 'a.et2_email', );
position: {my:"right top", at:"left top", collision:"flipfit"},
tooltipClass: "et2_email_popup",
content: function()
{
// Here we could do all sorts of things
var extra = {
'presets[email]': jQuery(this).attr('title') ? jQuery(this).attr('title') : jQuery(this).text()
};
return jQuery('<a href="#" class= "et2_url_email_contactPlus" title="'+egw.lang('Add a new contact')+'"><img src="'
+egw.image("new") +'"/></a>')
.on('click', function() {
egw.open('','addressbook','add',extra);
});
},
close: function( event, ui )
{
ui.tooltip.hover(
function () {
jQuery(this).stop(true).fadeTo(400, 1);
//.fadeIn("slow"); // doesn't work because of stop()
},
function () {
jQuery(this).fadeOut("400", function(){ jQuery(this).remove();});
}
);
}
})
.tooltip("open");
} }
}); else
{
this._add_contact_tooltip(et2_url_ro.email_cache[this.value]);
}
},this));
} }
break; break;
} }
}, },
/**
* Add a button to add the email address as a contact
*
* @param {boolean} email_exists True, or else nothing happens
*/
_add_contact_tooltip: function(email_exists)
{
et2_url_ro.email_cache[this.value] = email_exists;
if(email_exists) return;
this.span.tooltip({
items: 'a.et2_email',
position: {my:"right top", at:"left top", collision:"flipfit"},
tooltipClass: "et2_email_popup",
content: function()
{
// Here we could do all sorts of things
var extra = {
'presets[email]': jQuery(this).attr('title') ? jQuery(this).attr('title') : jQuery(this).text()
};
return jQuery('<a href="#" class= "et2_url_email_contactPlus" title="'+egw.lang('Add a new contact')+'"><img src="'
+egw.image("new") +'"/></a>')
.on('click', function() {
egw.open('','addressbook','add',extra);
});
},
close: function( event, ui )
{
ui.tooltip.hover(
function () {
jQuery(this).stop(true).fadeTo(400, 1);
//.fadeIn("slow"); // doesn't work because of stop()
},
function () {
jQuery(this).fadeOut("400", function(){ jQuery(this).remove();});
}
);
}
})
.tooltip("open");
},
/** /**
* Code for implementing et2_IDetachedDOM * Code for implementing et2_IDetachedDOM
* *
@ -429,4 +449,5 @@ var et2_url_ro = (function(){ "use strict"; return et2_valueWidget.extend([et2_I
this.span.attr('title',_values.statustext ? _values.statustext : this.options.statustext); this.span.attr('title',_values.statustext ? _values.statustext : this.options.statustext);
} }
});}).call(this); });}).call(this);
et2_url_ro.email_cache = [];
et2_register_widget(et2_url_ro, ["url_ro", "url-email_ro", "url-phone_ro"]); et2_register_widget(et2_url_ro, ["url_ro", "url-email_ro", "url-phone_ro"]);

View File

@ -128,4 +128,16 @@ class Url extends Etemplate\Widget
//error_log(__METHOD__."() $form_name: ".array2string($value_in).' --> '.array2string($value)); //error_log(__METHOD__."() $form_name: ".array2string($value_in).' --> '.array2string($value));
} }
} }
/**
* Handle ajax searches for existing contact based on email
*
* @return boolean email exists or not
*/
public static function ajax_contact($email)
{
$result = $GLOBALS['egw']->contacts->search($email);
\EGroupware\Api\Json\Response::data($result ? true : false);
}
} }