diff options
| author | thomascube <thomas@roundcube.net> | 2010-06-01 18:11:57 +0000 | 
|---|---|---|
| committer | thomascube <thomas@roundcube.net> | 2010-06-01 18:11:57 +0000 | 
| commit | ca38db5744bc8c46c4a23d1ba68c6c4c9b5b4a07 (patch) | |
| tree | 1f6d38db2dc1ffd33232e19396bc4bf51f013cc9 /program | |
| parent | bb502908b24da460826f46591513748e372935fc (diff) | |
Allow to drag into groups of another address source
Diffstat (limited to 'program')
| -rw-r--r-- | program/js/app.js | 63 | ||||
| -rw-r--r-- | program/steps/addressbook/copy.inc | 14 | 
2 files changed, 60 insertions, 17 deletions
| diff --git a/program/js/app.js b/program/js/app.js index bbaa79df5..fc9ef77e0 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -1243,7 +1243,11 @@ function rcube_webmail()        var boffset = bw.ie ? -document.documentElement.scrollTop : this.initialBodyScrollTop;        var moffset = this.initialListScrollTop-this.gui_objects.folderlist.parentNode.scrollTop;        var toffset = -moffset-boffset; -      var li, div, pos, mouse; +      var li, div, pos, mouse, check, oldclass, +        layerclass = 'draglayernormal'; +       +      if (this.contact_list && this.contact_list.draglayer) +        oldclass = this.contact_list.draglayer.attr('class');        mouse = rcube_event.get_mouse_pos(e);        pos = this.env.folderlist_coords; @@ -1256,6 +1260,8 @@ function rcube_webmail()            this.env.folder_coords[this.env.last_folder_target].on = 0;            this.env.last_folder_target = null;          } +        if (layerclass != oldclass && this.contact_list && this.contact_list.draglayer) +          this.contact_list.draglayer.attr('class', layerclass);          return;        } @@ -1263,7 +1269,7 @@ function rcube_webmail()        for (var k in this.env.folder_coords) {          pos = this.env.folder_coords[k];          if (mouse.x >= pos.x1 && mouse.x < pos.x2 && mouse.y >= pos.y1 && mouse.y < pos.y2){ -         if (this.check_droptarget(k)) { +         if ((check = this.check_droptarget(k))) {              li = this.get_folder_li(k);              div = $(li.getElementsByTagName('div')[0]); @@ -1286,6 +1292,7 @@ function rcube_webmail()              $(li).addClass('droptarget');              this.env.folder_coords[k].on = 1;              this.env.last_folder_target = k; +            layerclass = 'draglayer' + (check > 1 ? 'copy' : 'normal');            } else { // Clear target, otherwise drag end will trigger move into last valid droptarget              this.env.last_folder_target = null;            } @@ -1295,6 +1302,9 @@ function rcube_webmail()            this.env.folder_coords[k].on = 0;          }        } +       +      if (layerclass != oldclass && this.contact_list && this.contact_list.draglayer) +        this.contact_list.draglayer.attr('class', layerclass);      }    }; @@ -1509,16 +1519,27 @@ function rcube_webmail()    this.check_droptarget = function(id)    { +    var allow = false, copy = false; +          if (this.task == 'mail') -      return (this.env.mailboxes[id] && this.env.mailboxes[id].id != this.env.mailbox && !this.env.mailboxes[id].virtual); -    else if (this.task == 'addressbook') -      return (id != this.env.source && this.env.contactfolders[id] && !this.env.contactfolders[id].readonly && -        !(!this.env.source && this.env.contactfolders[id].group) && -        !(this.env.contactfolders[id].type == 'group' && this.env.contactfolders[this.env.source].readonly) && -        !(this.env.contactfolders[id].type == 'group' && this.env.contactfolders[id].source != this.env.source) && -        !(this.env.contactfolders[id].type == 'group' && this.env.contactfolders[id].id == this.env.group)); +      allow = (this.env.mailboxes[id] && this.env.mailboxes[id].id != this.env.mailbox && !this.env.mailboxes[id].virtual);      else if (this.task == 'settings') -      return (id != this.env.folder); +      allow = (id != this.env.folder); +    else if (this.task == 'addressbook') { +      if (id != this.env.source && this.env.contactfolders[id]) { +        if (this.env.contactfolders[id].type == 'group') { +          var target_abook = this.env.contactfolders[id].source; +          allow = this.env.contactfolders[id].id != this.env.group && !this.env.contactfolders[target_abook].readonly; +          copy = target_abook != this.env.source; +        } +        else { +          allow = !this.env.contactfolders[id].readonly; +          copy = true; +        } +      } +    } +     +    return allow ? (copy ? 2 : 1) : 0;    }; @@ -3633,10 +3654,24 @@ function rcube_webmail()      if (!cid)        cid = this.contact_list.get_selection().join(','); -    if (to.type == 'group') -      this.http_post('group-addmembers', '_cid='+urlencode(cid)+'&_source='+urlencode(this.env.source)+'&_gid='+urlencode(to.id)); -    else if (to.id != this.env.source && cid && this.env.address_sources[to.id] && !this.env.address_sources[to.id].readonly) -      this.http_post('copy', '_cid='+urlencode(cid)+'&_source='+urlencode(this.env.source)+'&_to='+urlencode(to.id)+(this.env.group ? '&_gid='+urlencode(this.env.group) : '')); +    if (to.type == 'group' && to.source == this.env.source) { +      this.http_post('group-addmembers', '_cid='+urlencode(cid) +        + '&_source='+urlencode(this.env.source) +        + '&_gid='+urlencode(to.id)); +    } +    else if (to.type == 'group' && !this.env.address_sources[to.source].readonly) { +      this.http_post('copy', '_cid='+urlencode(cid) +        + '&_source='+urlencode(this.env.source) +        + '&_to='+urlencode(to.source) +        + '&_togid='+urlencode(to.id) +        + (this.env.group ? '&_gid='+urlencode(this.env.group) : '')); +    } +    else if (to.id != this.env.source && cid && this.env.address_sources[to.id] && !this.env.address_sources[to.id].readonly) { +      this.http_post('copy', '_cid='+urlencode(cid) +        + '&_source='+urlencode(this.env.source) +        + '&_to='+urlencode(to.id) +        + (this.env.group ? '&_gid='+urlencode(this.env.group) : '')); +    }    }; diff --git a/program/steps/addressbook/copy.inc b/program/steps/addressbook/copy.inc index c8076c40e..2d3a91a6f 100644 --- a/program/steps/addressbook/copy.inc +++ b/program/steps/addressbook/copy.inc @@ -25,6 +25,7 @@ if (!$OUTPUT->ajax_call)  $cid = get_input_value('_cid', RCUBE_INPUT_POST);  $target = get_input_value('_to', RCUBE_INPUT_POST); +$target_group = get_input_value('_togid', RCUBE_INPUT_POST);  if ($cid && preg_match('/^[a-z0-9\-_=]+(,[a-z0-9\-_=]+)*$/i', $cid) && strlen($target) && $target !== $source)  { @@ -32,12 +33,19 @@ if ($cid && preg_match('/^[a-z0-9\-_=]+(,[a-z0-9\-_=]+)*$/i', $cid) && strlen($t    $TARGET = $RCMAIL->get_address_book($target);    if ($TARGET && $TARGET->ready && !$TARGET->readonly) { +    if ($target_group && $TARGET->groups) +      $TARGET->set_group($target_group); +          $arr_cids = explode(',', $cid);      foreach ($arr_cids as $cid) { -      $plugin = $RCMAIL->plugins->exec_hook('create_contact', array('record' => $CONTACTS->get_record($cid, true), 'source' => $target)); -    $a_record = $plugin['record']; +      $plugin = $RCMAIL->plugins->exec_hook('create_contact', array( +        'record' => $CONTACTS->get_record($cid, true), +        'source' => $target, +        'group' => $target_group, +      )); +      $a_record = $plugin['record']; -    if (!$plugin['abort']) +      if (!$plugin['abort'])          if ($TARGET->insert($a_record, true))            $success++;      } | 
