/** * Resend invitation emails */ public function resendInvitationEmail(User_Model_User $user, $recipient, $inviting_message, $invitation_code) { $success = 1; $error_message = 'No error happenned'; $settings = Engine_Api::_()->getApi('settings', 'core'); // Get the already invited contacts $invites_table = Engine_Api::_()->getDbTable('invites', 'invite'); $existing_members = $this->getUserByEmail($recipient); // Preprocess recipient email address $recipient = trim($recipient); // Omit recipients who is a current member if (!$this->validateEmail($recipient) || array_key_exists($recipient, $existing_members)) { $success = 0; $error_message = 'Invalid email or already registered email'; $result_message['success'] = $success; $result_message['error_message'] = $error_message; return $result_message; } // Genreate invitation URL $inviteUrl = $link = Zend_Controller_Front::getInstance()->getRouter()->assemble(array('user_id' => $user->getIdentity()), 'contactimporter_ref'); if ($invitation_code) { $inviteUrl = Zend_Controller_Front::getInstance()->getRouter()->assemble(array('module' => 'invite', 'controller' => 'signup'), 'default', true) . '?' . http_build_query(array('code' => $invitation_code, 'email' => $recipient)); } // insert the invitation into database $db = Engine_Db_Table::getDefaultAdapter(); $db->beginTransaction(); try { $mail_settings = array('host' => $_SERVER['HTTP_HOST'], 'date' => time(), 'sender_email' => $user->email, 'sender_title' => $user->getTitle(), 'sender_link' => $user->getHref(), 'sender_photo' => $user->getPhotoUrl('thumb.icon'), 'displayname' => $user->getTitle(), 'email' => $recipient, 'message' => $inviting_message, 'object_link' => $inviteUrl); if ($invitation_code) { $mail_settings['code'] = $invitation_code; } // send email $mailType = $settings->getSetting('user.signup.inviteonly'); if ($mailType == 2) { $mail_settings['code'] = $invitation_code; Engine_Api::_()->getApi('mail', 'contactimporter')->sendSystem($recipient, 'invite_code', $mail_settings); } else { $mail_settings['code'] = $invitation_code; Engine_Api::_()->getApi('mail', 'contactimporter')->sendSystem($recipient, 'invite', $mail_settings); } $db->commit(); } catch (Zend_Mail_Transport_Exception $e) { $db->rollBack(); $success = 0; $error_message = 'Fail to create records in database.'; $result_message['success'] = 0; $result_message['error_message'] = $error_message; return $result_message; } $success = 1; $error_message = ''; $result_message['success'] = $success; $result_message['error_message'] = $error_message; return $result_message; }
public function sendInvites(User_Model_User $user, $recipients, $message) { $settings = Engine_Api::_()->getApi('settings', 'core'); // Check recipients if (is_string($recipients)) { $recipients = preg_split("/[\\s,]+/", $recipients); } if (is_array($recipients)) { $recipients = array_map('strtolower', array_unique(array_filter(array_map('trim', $recipients)))); } if (!is_array($recipients) || empty($recipients)) { return 0; } // Only allow a certain number for now $max = $settings->getSetting('invite.max', 10); if (count($recipients) > $max) { $recipients = array_slice($recipients, 0, $max); } // Check message $message = trim($message); // Get tables $userTable = Engine_Api::_()->getItemTable('user'); $inviteTable = $this; $inviteOnlySetting = $settings->getSetting('user.signup.inviteonly', 0); // Get ones that are already members $alreadyMembers = $userTable->fetchAll(array('email IN(?)' => $recipients)); $alreadyMemberEmails = array(); foreach ($alreadyMembers as $alreadyMember) { if (in_array(strtolower($alreadyMember->email), $recipients)) { $alreadyMemberEmails[] = strtolower($alreadyMember->email); } } // Remove the ones that are already members $recipients = array_diff($recipients, $alreadyMemberEmails); $emailsSent = 0; // Send them invites foreach ($recipients as $recipient) { // start inserting database entry // generate unique invite code and confirm it truly is unique do { $inviteCode = substr(md5(rand(0, 999) . $recipient), 10, 7); } while (null !== $inviteTable->fetchRow(array('code = ?' => $inviteCode))); $row = $inviteTable->createRow(); $row->user_id = $user->getIdentity(); $row->recipient = $recipient; $row->code = $inviteCode; $row->timestamp = new Zend_Db_Expr('NOW()'); $row->message = $message; $row->save(); try { $inviteUrl = (_ENGINE_SSL ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . Zend_Controller_Front::getInstance()->getRouter()->assemble(array('module' => 'invite', 'controller' => 'signup'), 'default', true) . '?' . http_build_query(array('code' => $inviteCode, 'email' => $recipient)); $message = str_replace('%invite_url%', $inviteUrl, $message); // Send mail $mailType = $inviteOnlySetting == 2 ? 'invite_code' : 'invite'; $mailParams = array('host' => $_SERVER['HTTP_HOST'], 'email' => $recipient, 'date' => time(), 'sender_email' => $user->email, 'sender_title' => $user->getTitle(), 'sender_link' => $user->getHref(), 'sender_photo' => $user->getPhotoUrl('thumb.icon'), 'message' => $message, 'object_link' => $inviteUrl, 'code' => $inviteCode); Engine_Api::_()->getApi('mail', 'core')->sendSystem($recipient, $mailType, $mailParams); } catch (Exception $e) { // Silence if (APPLICATION_ENV == 'development') { throw $e; } continue; } $emailsSent++; } $user->invites_used += $emailsSent; $user->save(); // @todo Send requests to users that are already members? return $emailsSent; }
public function sendInvites_CSV(User_Model_User $user, $recipients, $message, $group_id) { $settings = Engine_Api::_()->getApi('settings', 'core'); // Check recipients if (is_string($recipients)) { $recipients = preg_split("/[\\s,]+/", $recipients); } if (is_array($recipients)) { $recipients = array_map('strtolower', array_unique(array_filter(array_map('trim', $recipients)))); } if (!is_array($recipients) || empty($recipients)) { return 0; } // Check message $message = trim($message); // Get tables $userTable = Engine_Api::_()->getItemTable('user'); $group = Engine_Api::_()->getItem('group', $group_id); $inviteTable = $this; $inviteOnlySetting = $settings->getSetting('user.signup.inviteonly', 0); // Get ones that are already members $alreadyMembers = $userTable->fetchAll(array('email IN(?)' => $recipients)); $alreadyMemberEmails = array(); $alreadyMemberIds = array(); $alreadyUserEmails = array(); $alreadyUserIds = array(); foreach ($alreadyMembers as $alreadyMember) { if (in_array(strtolower($alreadyMember->email), $recipients)) { //get members of group if ($group->membership()->isMember($alreadyMember, 1)) { $alreadyMemberEmails[] = strtolower($alreadyMember->email); $alreadyMemberIds[] = $alreadyMember->user_id; } else { //get users are not member of group $alreadyUserEmails[] = strtolower($alreadyMember->email); $alreadyUserIds[] = $alreadyMember->user_id; } } } $alreadyMemberIds = array_unique($alreadyMemberIds); // Remove the ones that are already members $recipients = array_diff($recipients, $alreadyMemberEmails); $emailsSent = 0; // Send them invites foreach ($recipients as $recipient) { // start inserting database entry // generate unique invite code and confirm it truly is unique do { $inviteCode = substr(md5(rand(0, 999) . $recipient), 10, 7); } while (null !== $inviteTable->fetchRow(array('code = ?' => $inviteCode))); if (in_array($recipient, $alreadyUserEmails)) { try { //create membership $userInvite = $userTable->fetchAll(array('email IN(?)' => $recipient)); if (count($userInvite) == 1) { if ($group->membership()->isMember($userInvite[0], null)) { $group->membership()->setReinvite($userInvite[0]); } else { $group->membership()->addMember($userInvite[0])->setResourceApproved($userInvite[0]); } } $inviteUrl = (_ENGINE_SSL ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . Zend_Controller_Front::getInstance()->getRouter()->assemble(array('module' => 'advgroup', 'controller' => 'profile', 'action' => 'index'), 'default', true) . '?' . http_build_query(array('code' => $inviteCode, 'id' => $group_id)); $inviteUrl = "<a href ='" . $inviteUrl . "' target='_blank'>{$inviteUrl}</a>"; $message = str_replace('%invite_url%', $inviteUrl, $message); // Send mail $mailType = $inviteOnlySetting == 2 ? 'notify_advgroup_invite_nonmembers' : 'notify_advgroup_invite_nonmembers'; $mailParams = array('host' => $_SERVER['HTTP_HOST'], 'email' => $recipient, 'date' => time(), 'sender_email' => $user->email, 'sender_title' => $user->getTitle(), 'sender_link' => $user->getHref(), 'sender_photo' => $user->getPhotoUrl('thumb.icon'), 'message' => $message, 'object_link' => $inviteUrl, 'group_title' => $group->getTitle(), 'code' => $inviteCode); Engine_Api::_()->getApi('mail', 'core')->sendSystem($recipient, $mailType, $mailParams); $receiver = $userTable->fetchRow($userTable->select()->where('email = ?', $recipient)); $notifyApi = Engine_Api::_()->getDbtable('notifications', 'activity'); $notifyApi->addNotification($receiver, $user, $group, 'advgroup_invite'); } catch (Exception $e) { // Silence if (APPLICATION_ENV == 'development') { throw $e; } continue; } } else { $row = $inviteTable->createRow(); $row->user_id = $user->getIdentity(); $row->recipient = $recipient; $row->code = $inviteCode; $row->timestamp = new Zend_Db_Expr('NOW()'); $row->message = $message; $row->group_id = $group_id; $row->save(); if ($inviteOnlySetting == 2) { $SEinviteTable = Engine_Api::_()->getDbTable('invites', 'invite'); $SErow = $SEinviteTable->createRow(); $SErow->user_id = $user->getIdentity(); $SErow->recipient = $recipient; $SErow->code = $inviteCode; $SErow->timestamp = new Zend_Db_Expr('NOW()'); $SErow->message = $message; $SErow->group_id = $group_id; $SErow->save(); } try { $inviteUrl = (_ENGINE_SSL ? 'https://' : 'http://') . $_SERVER['HTTP_HOST'] . Zend_Controller_Front::getInstance()->getRouter()->assemble(array('module' => 'advgroup', 'controller' => 'signup', 'action' => 'signup'), 'default', true) . '?' . http_build_query(array('code' => $inviteCode, 'email' => $recipient, 'group_id' => $group_id)); $inviteUrl = "<a href ='" . $inviteUrl . "' target='_blank'>{$inviteUrl}</a>"; $message = str_replace('%invite_url%', $inviteUrl, $message); // Send mail $mailType = $inviteOnlySetting == 2 ? 'notify_advgroup_invite_nonmembers' : 'notify_advgroup_invite_nonmembers'; $mailParams = array('host' => $_SERVER['HTTP_HOST'], 'email' => $recipient, 'date' => time(), 'sender_email' => $user->email, 'sender_title' => $user->getTitle(), 'sender_link' => $user->getHref(), 'sender_photo' => $user->getPhotoUrl('thumb.icon'), 'message' => $message, 'object_link' => $inviteUrl, 'group_title' => $group->getTitle(), 'code' => $inviteCode); Engine_Api::_()->getApi('mail', 'core')->sendSystem($recipient, $mailType, $mailParams); } catch (Exception $e) { // Silence if (APPLICATION_ENV == 'development') { throw $e; } continue; } } $emailsSent++; } $user->invites_used += $emailsSent; $user->save(); $ret = array(); $ret['emailsSent'] = $emailsSent; $ret['alreadyMemberIds'] = $alreadyMemberIds; return $ret; }