alecpl
2010-06-02 7d43f895325dd6ddd3e1962584206c67b2bd8e6a
- Fix duplicated contacts when copying with group selected (#1486766)


1 files modified
46 ■■■■ changed files
program/steps/addressbook/copy.inc 46 ●●●● patch | view | raw | blame | history
program/steps/addressbook/copy.inc
@@ -33,10 +33,9 @@
  $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);
    $ids = array();
    foreach ($arr_cids as $cid) {
      $plugin = $RCMAIL->plugins->exec_hook('create_contact', array(
        'record' => $CONTACTS->get_record($cid, true),
@@ -45,9 +44,41 @@
      ));
      $a_record = $plugin['record'];
      if (!$plugin['abort'])
        if ($TARGET->insert($a_record, true))
          $success++;
      if (!$plugin['abort']) {
        // check if contact exists, if so, we'll need it's ID
        $result = $TARGET->search('email', $a_record['email'], true, true);
        // insert contact record
        if (!$result->count) {
          if ($insert_id = $TARGET->insert($a_record, false)) {
            $ids[] = $insert_id;
            $success++;
          }
        }
        else {
          $record = $result->first();
          $ids[] = $record['ID'];
        }
      }
    }
    // assign to group
    if ($target_group && $TARGET->groups && !empty($ids)) {
      $plugin = $RCMAIL->plugins->exec_hook('group_addmembers', array(
        'group_id' => $target_group, 'ids' => $ids, 'source' => $target));
      if (!$plugin['abort']) {
        $TARGET->reset();
        $TARGET->set_group($target_group);
        if (($maxnum = $RCMAIL->config->get('max_group_members', 0)) && ($TARGET->count()->count + count($plugin['ids']) > $maxnum)) {
          $OUTPUT->show_message('maxgroupmembersreached', 'warning', array('max' => $maxnum));
          $OUTPUT->send();
        }
        if (($cnt = $TARGET->add_to_group($target_group, $plugin['ids'])) && $cnt > $success)
          $success = $cnt;
      }
    }
  }
@@ -55,9 +86,6 @@
    $OUTPUT->show_message('copyerror', 'error');
  else
    $OUTPUT->show_message('copysuccess', 'notice', array('nr' => $success));
  // close connection to second address directory
  $TARGET->close();
}
// send response