alecpl
2010-07-30 e6ce0062f2331b8756cc91944ceaea8d7cbffd18
program/steps/addressbook/copy.inc
@@ -19,26 +19,75 @@
*/
// only process ajax requests
if (!$OUTPUT->ajax_call)
  return;
$cid = get_input_value('_cid', RCUBE_INPUT_POST);
$target = get_input_value('_to', RCUBE_INPUT_POST);
if ($cid && preg_match('/^[a-z0-9\-_=]+(,[a-z0-9\-_=]+)*$/i', $cid) && strlen($target) && $target != $source)
$target_group = get_input_value('_togid', RCUBE_INPUT_POST);
if ($cid && preg_match('/^[a-zA-Z0-9\+\/=_-]+(,[a-zA-Z0-9\+\/=_-]+)*$/', $cid) && strlen($target) && $target !== $source)
{
  $success = false;
  $success = 0;
  $TARGET = $RCMAIL->get_address_book($target);
  if ($TARGET && $TARGET->ready && !$TARGET->readonly)
    $success = $TARGET->insert($CONTACTS->search($CONTACTS->primary_key, $cid), true);
  if ($TARGET && $TARGET->ready && !$TARGET->readonly) {
    $arr_cids = explode(',', $cid);
    $ids = array();
  if (empty($success))
    foreach ($arr_cids as $cid) {
      $plugin = $RCMAIL->plugins->exec_hook('contact_create', array(
        'record' => $CONTACTS->get_record($cid, true),
        'source' => $target,
        'group' => $target_group,
      ));
      $a_record = $plugin['record'];
      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;
      }
    }
  }
  if ($success == 0)
    $OUTPUT->show_message('copyerror', 'error');
  else
    $OUTPUT->show_message('copysuccess', 'notice', array('nr' => count($success)));
  // close connection to second address directory
  $TARGET->close();
    $OUTPUT->show_message('copysuccess', 'notice', array('nr' => $success));
}
// send response
$OUTPUT->send();
?>