qa-app-emails.php 4.57 KB
Newer Older
Gideon Greenspan committed
1 2 3 4 5 6 7
<?php

/*
	Question2Answer (c) Gideon Greenspan

	http://www.question2answer.org/

Scott Vivian committed
8

Gideon Greenspan committed
9 10 11 12 13 14 15 16 17
	File: qa-include/qa-app-emails.php
	Version: See define()s at top of qa-include/qa-base.php
	Description: Wrapper functions for sending email notifications to users


	This program is free software; you can redistribute it and/or
	modify it under the terms of the GNU General Public License
	as published by the Free Software Foundation; either version 2
	of the License, or (at your option) any later version.
Scott Vivian committed
18

Gideon Greenspan committed
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	More about this license: http://www.question2answer.org/license.php
*/

	if (!defined('QA_VERSION')) { // don't allow this page to be requested directly from browser
		header('Location: ../');
		exit;
	}

	require_once QA_INCLUDE_DIR.'qa-app-options.php';


	function qa_suspend_notifications($suspend=true)
/*
	Suspend the sending of all email notifications via qa_send_notification(...) if $suspend is true, otherwise
	reinstate it. A counter is kept to allow multiple calls.
*/
	{
		global $qa_notifications_suspended;
Scott Vivian committed
42

Gideon Greenspan committed
43 44
		$qa_notifications_suspended+=($suspend ? 1 : -1);
	}
Scott Vivian committed
45 46


Gideon Greenspan committed
47 48 49 50 51 52 53
	function qa_send_notification($userid, $email, $handle, $subject, $body, $subs)
/*
	Send email to person with $userid and/or $email and/or $handle (null/invalid values are ignored or retrieved from
	user database as appropriate). Email uses $subject and $body, after substituting each key in $subs with its
	corresponding value, plus applying some standard substitutions such as ^site_title, ^handle and ^email.
*/
	{
Gideon Greenspan committed
54
		if (qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__, $args); }
Scott Vivian committed
55

Gideon Greenspan committed
56
		global $qa_notifications_suspended;
Scott Vivian committed
57

Gideon Greenspan committed
58 59
		if ($qa_notifications_suspended>0)
			return false;
Scott Vivian committed
60

Gideon Greenspan committed
61 62
		require_once QA_INCLUDE_DIR.'qa-db-selects.php';
		require_once QA_INCLUDE_DIR.'qa-util-string.php';
Scott Vivian committed
63

Gideon Greenspan committed
64 65 66
		if (isset($userid)) {
			$needemail=!qa_email_validate(@$email); // take from user if invalid, e.g. @ used in practice
			$needhandle=empty($handle);
Scott Vivian committed
67

Gideon Greenspan committed
68 69 70 71 72 73
			if ($needemail || $needhandle) {
				if (QA_FINAL_EXTERNAL_USERS) {
					if ($needhandle) {
						$handles=qa_get_public_from_userids(array($userid));
						$handle=@$handles[$userid];
					}
Scott Vivian committed
74

Gideon Greenspan committed
75 76
					if ($needemail)
						$email=qa_get_user_email($userid);
Scott Vivian committed
77

Gideon Greenspan committed
78 79 80 81
				} else {
					$useraccount=qa_db_select_with_pending(
						qa_db_user_account_selectspec($userid, true)
					);
Scott Vivian committed
82

Gideon Greenspan committed
83 84
					if ($needhandle)
						$handle=@$useraccount['handle'];
Scott Vivian committed
85

Gideon Greenspan committed
86 87 88 89 90
					if ($needemail)
						$email=@$useraccount['email'];
				}
			}
		}
Scott Vivian committed
91

Gideon Greenspan committed
92 93 94 95 96 97
		if (isset($email) && qa_email_validate($email)) {
			$subs['^site_title']=qa_opt('site_title');
			$subs['^handle']=$handle;
			$subs['^email']=$email;
			$subs['^open']="\n";
			$subs['^close']="\n";
Scott Vivian committed
98

Gideon Greenspan committed
99 100 101 102 103 104 105 106 107
			return qa_send_email(array(
				'fromemail' => qa_opt('from_email'),
				'fromname' => qa_opt('site_title'),
				'toemail' => $email,
				'toname' => $handle,
				'subject' => strtr($subject, $subs),
				'body' => (empty($handle) ? '' : qa_lang_sub('emails/to_handle_prefix', $handle)).strtr($body, $subs),
				'html' => false,
			));
Scott Vivian committed
108

Gideon Greenspan committed
109 110 111
		} else
			return false;
	}
Scott Vivian committed
112

Gideon Greenspan committed
113 114 115 116 117 118 119

	function qa_send_email($params)
/*
	Send the email based on the $params array - the following keys are required (some can be empty): fromemail,
	fromname, toemail, toname, subject, body, html
*/
	{
Gideon Greenspan committed
120
		if (qa_to_override(__FUNCTION__)) { $args=func_get_args(); return qa_call_override(__FUNCTION__, $args); }
Scott Vivian committed
121

Gideon Greenspan committed
122
	//	@error_log(print_r($params, true));
Scott Vivian committed
123

Gideon Greenspan committed
124
		require_once QA_INCLUDE_DIR.'qa-class.phpmailer.php';
Scott Vivian committed
125

Gideon Greenspan committed
126 127
		$mailer=new PHPMailer();
		$mailer->CharSet='utf-8';
Scott Vivian committed
128

Gideon Greenspan committed
129 130 131 132 133 134 135 136 137
		$mailer->From=$params['fromemail'];
		$mailer->Sender=$params['fromemail'];
		$mailer->FromName=$params['fromname'];
		$mailer->AddAddress($params['toemail'], $params['toname']);
		$mailer->Subject=$params['subject'];
		$mailer->Body=$params['body'];

		if ($params['html'])
			$mailer->IsHTML(true);
Scott Vivian committed
138

Gideon Greenspan committed
139 140 141 142
		if (qa_opt('smtp_active')) {
			$mailer->IsSMTP();
			$mailer->Host=qa_opt('smtp_address');
			$mailer->Port=qa_opt('smtp_port');
Scott Vivian committed
143

Gideon Greenspan committed
144 145
			if (qa_opt('smtp_secure'))
				$mailer->SMTPSecure=qa_opt('smtp_secure');
Scott Vivian committed
146

Gideon Greenspan committed
147 148 149 150 151 152
			if (qa_opt('smtp_authenticate')) {
				$mailer->SMTPAuth=true;
				$mailer->Username=qa_opt('smtp_username');
				$mailer->Password=qa_opt('smtp_password');
			}
		}
Scott Vivian committed
153

Gideon Greenspan committed
154 155 156 157 158 159 160
		return $mailer->Send();
	}


/*
	Omit PHP closing tag to help avoid accidental output
*/