diff --git a/addressbook/inc/class.addressbook_ui.inc.php b/addressbook/inc/class.addressbook_ui.inc.php index cfdae71b8c..655a6d3347 100644 --- a/addressbook/inc/class.addressbook_ui.inc.php +++ b/addressbook/inc/class.addressbook_ui.inc.php @@ -3086,6 +3086,20 @@ window.egw_LAB.wait(function() { return $this->tmpl->exec('addressbook.addressbook_ui.search',$content,$sel_options,$readonlys,array(),2); } + /** + * Check if there's a photo for given contact id. This is used for avatar widget + * to set or unset delete button. If there's no uploaded photo it responses true. + * + * @param type $contact_id + */ + function ajax_noPhotoExists ($contact_id) + { + $response = Api\Json\Response::get(); + $response->data((!($contact = $this->read($contact_id)) || + empty($contact['jpegphoto']) && !(($contact['files'] & Api\Contacts::FILES_BIT_PHOTO) && + ($size = filesize($url=Api\Link::vfs_path('addressbook', $contact_id, Api\Contacts::FILES_PHOTO)))))); + } + /** * Ajax method to update edited avatar photo via avatar widget * diff --git a/api/js/etemplate/et2_widget_image.js b/api/js/etemplate/et2_widget_image.js index 9d59bf802d..a52811d62f 100644 --- a/api/js/etemplate/et2_widget_image.js +++ b/api/js/etemplate/et2_widget_image.js @@ -429,8 +429,9 @@ var et2_avatar = (function(){ "use strict"; return et2_image.extend( /** * Build Editable Mask Layer (EML) in order to show edit/delete actions * on top of profile picture. + * @param {boolean} disable delete button in initialization */ - _buildEditableLayer: function () + _buildEditableLayer: function (_noDelete) { var self = this; // editable mask layer (eml) @@ -457,7 +458,11 @@ var et2_avatar = (function(){ "use strict"; return et2_image.extend( var canvas = jQuery('#_cropper_image').cropper('getCroppedCanvas'); self.image.attr('src', canvas.toDataURL("image/jpeg", 1.0)); egw.json('addressbook.addressbook_ui.ajax_update_photo', [self.options.contact_id, canvas.toDataURL('image/jpeg',1.0)], function(res){ - if (res) egw.refresh('Avatar updated.', egw.app_name()); + if (res) + { + del.show(); + egw.refresh('Avatar updated.', egw.app_name()); + } }).sendRequest(); } }, @@ -489,6 +494,7 @@ var et2_avatar = (function(){ "use strict"; return et2_image.extend( if (res) { self.image.attr('src',''); + del.hide(); egw.refresh('Avatar Deleted.', egw.app_name()); } }).sendRequest(); @@ -496,6 +502,7 @@ var et2_avatar = (function(){ "use strict"; return et2_image.extend( }, egw.lang('Delete this photo?'), 'Delete', null, et2_dialog.BUTTONS_YES_NO); }) .appendTo(eml); + if (_noDelete) del.hide(); // invisible the mask eml.css('opacity','0'); @@ -514,9 +521,18 @@ var et2_avatar = (function(){ "use strict"; return et2_image.extend( doLoadingFinished: function () { this._super.apply(this,arguments); + var self = this; if (this.options.editable) { - this._buildEditableLayer(); + egw(window).json( + 'addressbook.addressbook_ui.ajax_noPhotoExists', + [this.options.contact_id], + function(noPhotoExists) + { + if (noPhotoExists) self.image.attr('src',''); + self._buildEditableLayer(noPhotoExists); + } + ).sendRequest(true); } if (this.options.crop) {