示例#1
0
 private function _findUnknownRecipients($params)
 {
     $unknown = array();
     if (GO::modules()->addressbook && !GO::config()->get_setting('email_skip_unknown_recipients', GO::user()->id)) {
         $recipients = new \GO\Base\Mail\EmailRecipients($params['to']);
         $recipients->addString($params['cc']);
         $recipients->addString($params['bcc']);
         foreach ($recipients->getAddresses() as $email => $personal) {
             $contacts = \GO\Addressbook\Model\Contact::model()->findByEmail($email, GO\Base\Db\FindParams::newInstance()->ignoreAcl());
             foreach ($contacts as $contact) {
                 if ($contact->checkPermissionLevel(Acl::READ_PERMISSION) || $contact->goUser && $contact->goUser->checkPermissionLevel(Acl::READ_PERMISSION)) {
                     continue 2;
                 }
             }
             $company = \GO\Addressbook\Model\Company::model()->findSingleByAttribute('email', $email);
             if ($company) {
                 continue;
             }
             $recipient = \GO\Base\Util\String::split_name($personal);
             if ($recipient['first_name'] == '' && $recipient['last_name'] == '') {
                 $recipient['first_name'] = $email;
             }
             $recipient['email'] = $email;
             $recipient['name'] = (string) \GO\Base\Mail\EmailRecipients::createSingle($email, $personal);
             $unknown[] = $recipient;
         }
     }
     return $unknown;
 }
示例#2
0
 /**
  * Add contacts to an addresslist.
  * @param type $params MUST contain addresslistId AND (EITHER senderNames and
  * senderEmails OR contactIds)
  * @return $response If there are email addresses that are not found in any
  * addressbook, the corresponding senders are registered in 
  * $response['unknownSenders'], and  $response['success'] becomes false, so
  * that the user can decide what to do with the unknown senders.
  */
 public function actionAddContactsToAddresslist($params)
 {
     $addresslistModel = \GO\Addressbook\Model\Addresslist::model()->findByPk($params['addresslistId']);
     $response = array('success' => true);
     $nAddedContacts = 0;
     if (!empty($params['contactIds'])) {
         // Only contact ids are sent from the client
         $contactIds = json_decode($params['contactIds']);
         foreach ($contactIds as $contactId) {
             $addresslistModel->addManyMany('contacts', $contactId);
         }
     } else {
         // email addresses and names are sent from the client
         $senderEmails = json_decode($params['senderEmails']);
         $senderNames = json_decode($params['senderNames']);
         $senders = array();
         // format: $senders[$senderEmail] = array('first_name'=>'Jack','middle_name'=>'','last_name'=>'Johnson');
         $unknownSenders = array();
         // format: $unknownSenders[$senderEmail] = array('first_name'=>'Jack','middle_name'=>'','last_name'=>'Johnson');
         // Create array of senders
         foreach ($senderEmails as $key => $senderEmail) {
             if (empty($senders[$senderEmail])) {
                 $senders[$senderEmail] = $senderNames[$key];
             }
         }
         foreach ($senders as $senderEmail => $senderNameArr) {
             $contactNameArr = \GO\Base\Util\String::split_name($senderNameArr);
             $contactStmt = \GO\Addressbook\Model\Contact::model()->find(\GO\Base\Db\FindParams::newInstance()->criteria(\GO\Base\Db\FindCriteria::newInstance()->addCondition('email', $senderEmail, '=', 't', false)->addCondition('email2', $senderEmail, '=', 't', false)->addCondition('email3', $senderEmail, '=', 't', false)));
             //->findSingleByAttribute('email', $senderEmail);
             if (empty($contactStmt) && empty($unknownSenders[$senderEmail])) {
                 // Keep track of contacts not found in database.
                 $unknownSenders[] = array('email' => $senderEmail, 'name' => $senderNameArr, 'first_name' => $contactNameArr['first_name'], 'middle_name' => $contactNameArr['middle_name'], 'last_name' => $contactNameArr['last_name']);
             } else {
                 // add contact to addresslist, but ensure only one email per addresslist
                 $emailAlreadyInAddresslist = false;
                 $linkableContactModel = false;
                 while ($contactModel = $contactStmt->fetch()) {
                     if ($addresslistModel->hasManyMany('contacts', $contactModel->id)) {
                         $emailAlreadyInAddresslist = true;
                     } else {
                         $linkableContactModel = $contactModel;
                     }
                 }
                 if (!empty($linkableContactModel) && !$emailAlreadyInAddresslist) {
                     $linkableContactModel->first_name = $contactNameArr['first_name'];
                     $linkableContactModel->middle_name = $contactNameArr['middle_name'];
                     $linkableContactModel->last_name = $contactNameArr['last_name'];
                     $linkableContactModel->save();
                     $addresslistModel->addManyMany('contacts', $linkableContactModel->id);
                     $nAddedContacts++;
                 }
             }
         }
         $response['addedSenders'] = $nAddedContacts;
         if (count($unknownSenders)) {
             $response['success'] = false;
             $response['unknownSenders'] = json_encode($unknownSenders);
             $response['addresslistId'] = $addresslistModel->id;
         }
     }
     return $response;
 }