/** * Generate a password reset token and email a link to the user. * * @return string Standard JSON envelope */ public function passwordRequest() { if (!isset($_POST['email'])) { return $this->error('No email address provided.', false); } $email = $_POST['email']; if ($email == $this->config->user->email) { $token = md5(rand(10000, 100000)); $tokenUrl = sprintf('%s://%s/manage/password/reset/%s', $this->utility->getProtocol(false), $_SERVER['HTTP_HOST'], $token); $this->user->setAttribute('passwordToken', $token); $templateObj = getTemplate(); $template = sprintf('%s/email/password-reset.php', $this->config->paths->templates); $body = $this->template->get($template, array('tokenUrl' => $tokenUrl)); $emailer = new Emailer(); $emailer->setRecipients(array($this->config->user->email)); $emailer->setSubject('Trovebox password reset request'); $emailer->setBody($body); $result = $emailer->send(); if ($result > 0) { return $this->success('An email was sent to reset the password.', true); } else { $this->logger->info('Unable to send email. Confirm that your email settings are correct and the email addresses are valid.'); return $this->error('We were unable to send a password reset email.', false); } } return $this->error('The email address provided does not match the registered email for this site.', false); }
static function perform() { $db = new Database(); $rows = $db->executeQuery("SELECT * FROM MailQueue WHERE sent = 0"); if (is_array($rows) && count($rows) > 0) { foreach ($rows as $data) { $result = Emailer::send([$data['senderEmail'] => $data['senderName']], [$data['receiverEmail']], $data['subject'], $data['body']); if ($result) { $params = ['id' => $data['id'], 'sent' => 1, 'now' => date('Y-m-d H:i:s')]; $r = $db->executeUpdate("UPDATE MailQueue SET sentAt=:now, sent=:sent WHERE id = :id", $params); if ($r) { print "[{$data['subject']}] Email sent to: " . $data['receiverEmail'] . PHP_EOL; } else { print "[{$data['subject']}] Failed to send email for: " . $data['receiverEmail'] . PHP_EOL; } } } } }
function send_reminder($person) { global $ini; $toEmail = $person['email']; if (!empty($ini['OVERRIDE_RECIPIENT'])) { $toEmail = $ini['OVERRIDE_RECIPIENT']; } if (!strlen($person['email'])) { if (!empty($ini['VERBOSE'])) { echo $person['first_name'] . ' ' . $person['last_name'] . " has no email address - skipping \n"; } return; } $content = replace_keywords($ini['EMAIL_BODY'], $person); $html = nl2br($content); $message = Emailer::newMessage()->setSubject(replace_keywords($ini['SUBJECT'], $person))->setFrom(array($ini['FROM_ADDRESS'] => $ini['FROM_NAME']))->setTo(array($toEmail => $person['first_name'] . ' ' . $person['last_name']))->setBody($content)->addPart($html, 'text/html'); if (!empty($person['cc'])) { $cc_names = explode(';', $person['cc_name']); foreach (explode(';', $person['cc']) as $i => $cc) { if (!empty($ini['OVERRIDE_RECIPIENT'])) { $message->addCC($ini['OVERRIDE_RECIPIENT'], $cc_names[$i]); } else { $message->addCC($cc, $cc_names[$i]); } } } $res = Emailer::send($message); if (!$res) { echo "Failed to send to {$toEmail} \n"; } else { if (!empty($ini['VERBOSE'])) { echo "Sent reminder to " . $person['first_name'] . ' ' . $person['last_name']; if (!empty($person['cc'])) { echo " CC to " . $person['cc']; } echo "\n"; } } }
public function sendReminder(array $data, \DateTime $date, $occasion) { $recipients = $this->db->get('recipients'); $emailer = new Emailer(); $subject = ucfirst($data['occasion']) . ' Reminder'; $templateName = $occasion === 'week' ? 'weekBeforeReminder' : 'todayReminder'; $gmTemplateName = $occasion === 'week' ? 'gmWeekReminder' : 'gmTodayReminder'; $data['date'] = $data['hebrew'] ? new HebrewDate($date) : $date->format('M d, Y'); $data['hebrew'] = $data['hebrew'] ? 'hebrew' : 'english'; try { $emailer->prepare($templateName, $data); foreach ($recipients as $recipient) { $emailer->send($recipient['email'], $subject); } } catch (Exception $e) { echo $e->getMessage(); } try { $this->gm->prepareMessage($gmTemplateName)->sendMessage($data); } catch (Exception $e) { echo $e->getMessage(); } }
} elseif ($_POST['username'] != '') { $method = 'username'; $value = $_POST['username']; } $client = $ISL->recoverPassword($method, $value); if (is_array($client)) { $e = new Emailer(); $e->setMainFile('forms/email_forgotpass.tpl'); $e->setFrom($SYSTEM['email']['from']); $e->setFromName($SYSTEM['email']['fromName']); $e->setSubject($lang['eml_subj_forgotpass']); $e->set('client', $client); $e->fetchMessage(); $e->setRecipient($client['email']); $e->setPriority('High'); $e->send(); unset($e); } else { trigger_error($lang['no_client_found'], E_USER_WARNING); die; } $tpl->set('tbody', 'forgotpass_sent.tpl'); $tpl->set('message', sprintf($lang['password_sent'], 'index.php')); } else { $tpl->set('tbody', 'forgotpass.tpl'); } $tpl->set('toptext', $lang['password_recovery']); $tpl->set('bottomtext', ' '); $tpl->set('page_title', $lang['recover_password']); $tpl->display(); exit;
$mail->bodyAdd("The Fast Food Jobs Team"); $mail->bodyAdd(""); $mail->bodyAdd("Tel: 0845 644 8252"); $mail->bodyAdd("*****@*****.**"); $mail->send(); $adminMail = new Emailer(); $adminMail->setTo($configuration["adminEmail"]); $adminMail->setFrom($configuration["fromEmail"]); $adminMail->setSubject("New Sign up"); $adminMail->bodyAdd("Dear admin,"); $adminMail->bodyAdd("Just to let you know that new member"); $adminMail->bodyAdd("Name: " . $first_name . " " . $last_name); $adminMail->bodyAdd("Emai: {$email}"); $adminMail->bodyAdd("Role: {$role}"); $adminMail->bodyAdd("has just joined Fast Foods."); $adminMail->send(); header("Location: register_thankyou.php"); exit; } } $errorText = "<ul>" . $errorText . "</ul>"; } require "top.php"; ?> <form action="register.php" method="POST"> <input type=hidden name="status" value="<?php echo $status; ?> "> <input type=hidden name="register" value="1">
function edit() { $id = WebApp::post('id') === NULL ? '' : intval(WebApp::post('id')); $this->parent->parent->debug($id); if (!is_int($id)) { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to edit user.<br />Error: <code>User ID must be an integer</code>', B_T_FAIL); } if ($id == $this->parent->parent->user->getUserID() && !$this->parent->inGroup(1)) { $this->parent->parent->logEvent($this::name_space, 'Attempted to edit themself'); return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to edit user.<br />Error: <code>You cannot edit yourself</code>', B_T_FAIL); } $f_name = WebApp::post('f_name') === NULL ? '' : WebApp::post('f_name'); $s_name = WebApp::post('s_name') === NULL ? '' : WebApp::post('s_name'); $username = WebApp::post('username') === NULL ? '' : WebApp::post('username'); $email = WebApp::post('email') === NULL ? '' : WebApp::post('email'); $n_pwd = WebApp::post('n_pwd') === NULL ? '' : WebApp::post('n_pwd'); $n_pwd_c = WebApp::post('c_pwd') === NULL ? '' : WebApp::post('c_pwd'); $chgPwd = WebApp::post('chgPwd') === NULL ? '' : WebApp::post('chgPwd'); $enabled = WebApp::post('enabled') === NULL ? false : WebApp::post('enabled'); $p_group = WebApp::post('p_group') === NULL ? 3 : WebApp::post('p_group'); $s_groups = WebApp::post('s_group') === NULL ? array() : strgetcsv(WebApp::post('s_group')); if ($f_name == '') { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to add user.<br />Error: <code>First Name must not be blank</code>', B_T_FAIL); } if ($s_name == '') { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to add user.<br />Error: <code>Surname must not be blank</code>', B_T_FAIL); } if ($username == '') { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to add user.<br />Error: <code>Username must not be blank</code>', B_T_FAIL); } if ($email == '') { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to add user.<br />Error: <code>Email must not be blank</code>', B_T_FAIL); } if ($chgPwd == '') { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to add user.<br />Error: <code>Change Password must not be blank</code>', B_T_FAIL); } if ($enabled == '') { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to add user.<br />Error: <code>Enabled must not be blank</code>', B_T_FAIL); } if ($p_group == '') { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to add user.<br />Error: <code>Primary Group must not be blank</code>', B_T_FAIL); } if ($this->parent->inGroup(2, false) && $p_group == 1) { $this->parent->parent->logEvent($this::name_space, 'Tried to make "' . $username . '" a Super Admin'); return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to edit user.<br />Error: <code>You cannot escalate privileges</code>', B_T_FAIL); } if ($this->parent->parent->user->getUserID() == $id && $enabled == false) { $this->parent->parent->logEvent($this::name_space, 'Tried to disable themself'); return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to edit user.<br />Error: <code>You cannot disable yourself</code>', B_T_FAIL); } if ($n_pwd != $n_pwd_c) { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed to edit user.<br />Error: <code>New passwords must match, or both be empty</code>', B_T_FAIL); } $clear_sgroup = $this->mySQL_w->prepare("DELETE FROM `core_sgroup` WHERE `user`=?"); $update_sgroup = $this->mySQL_w->prepare("INSERT INTO `core_sgroup` (`user`, `group`) VALUES (?, ?)"); if ($clear_sgroup === false) { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed edit user!<br />Error: <code>Clear query failed</code>', B_T_FAIL); } if ($update_sgroup === false) { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed edit user!<br />Error: <code>Update sgroup query failed</code>', B_T_FAIL); } if ($n_pwd != '') { $userCtrl = $this->parent->parent->user; $hash = $userCtrl->ranHash(); $new_pwd = $userCtrl->pwd_hash($n_pwd, $hash) . ':' . $hash; $update = $this->mySQL_w->prepare("UPDATE `core_users` SET `f_name`=?,`s_name`=?,`email`=?,`en`=?,`chgPwd`=?,`p_group`=?,`pass`=?, `pwd_reset`=`pwd_reset`+1 WHERE `id`=? AND `username`=?"); if ($update === false) { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed edit user!<br />Error: <code>Update query failed</code>', B_T_FAIL); } $update->bind_param('sssiiisis', $f_name, $s_name, $email, $enabled, $chgPwd, $p_group, $new_pwd, $id, $username); } else { $update = $this->mySQL_w->prepare("UPDATE `core_users` SET `f_name`=?,`s_name`=?,`email`=?,`en`=?,`chgPwd`=?,`p_group`=? WHERE `id`=? AND `username`=?"); if ($update === false) { return new ActionResult($this, '/admin/user/user_edit', 0, 'Failed edit user!<br />Error: <code>Update query failed</code>', B_T_FAIL); } $update->bind_param('sssiiiis', $f_name, $s_name, $email, $enabled, $chgPwd, $p_group, $id, $username); } $clear_sgroup->bind_param('i', $id); $update_sgroup->bind_param('ii', $id, $sgroup); $clear_sgroup->execute(); if (count($s_groups) != 0) { foreach ($s_groups as $sgroup) { $this->parent->parent->debug($sgroup); $update_sgroup->bind_param('ii', $id, $sgroup); $update_sgroup->execute(); } } if ($n_pwd != '') { $mail = new Emailer(); $mail->Subject = 'Password Changed'; $mail->msgHTML(UserEmail::adminPasswordChange($f_name)['html']); $mail->AltBody = UserEmail::adminPasswordChange($f_name)['text']; $mail->addAddress($email, $f_name . ' ' . $s_name); $mail->send(); } $update->execute(); $update->store_result(); $this->parent->parent->logEvent($this::name_space, 'Edited user "' . $username . '"'); return new ActionResult($this, '/admin/user/user_view', 1, 'User was edited.', B_T_SUCCESS, array('form' => array('n_pwd' => '', 'c_pwd' => ''))); }
/** * @param App $a * @param object $b */ function dav_cron(&$a, &$b) { dav_include_files(); $r = q("SELECT * FROM %s%snotifications WHERE `notified` = 0 AND `alert_date` <= NOW()", CALDAV_SQL_DB, CALDAV_SQL_PREFIX); if (is_array($r)) { foreach ($r as $not) { q("UPDATE %s%snotifications SET `notified` = 1 WHERE `id` = %d", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, $not["id"]); $event = q("SELECT * FROM %s%sjqcalendar WHERE `calendarobject_id` = %d", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, $not["calendarobject_id"]); $calendar = q("SELECT * FROM %s%scalendars WHERE `id` = %d", CALDAV_SQL_DB, CALDAV_SQL_PREFIX, $not["calendar_id"]); $users = array(); if (count($calendar) != 1 || count($event) == 0) { continue; } switch ($calendar[0]["namespace"]) { case CALDAV_NAMESPACE_PRIVATE: $user = q("SELECT * FROM user WHERE `uid` = %d AND `blocked` = 0", $calendar[0]["namespace_id"]); if (count($user) != 1) { continue; } $users[] = $user[0]; break; } switch ($not["action"]) { case "email": case "display": // @TODO implement "Display" foreach ($users as $user) { $find = array("%to%", "%event%", "%url%"); $repl = array($user["username"], $event[0]["Summary"], $a->get_baseurl() . "/dav/wdcal/" . $calendar[0]["id"] . "/" . $not["calendarobject_id"] . "/"); $text_text = str_replace($find, $repl, "Hi %to%!\n\nThe event \"%event%\" is about to begin:\n%url%"); $text_html = str_replace($find, $repl, "Hi %to%!<br>\n<br>\nThe event \"%event%\" is about to begin:<br>\n<a href='" . "%url%" . "'>%url%</a>"); $params = array('fromName' => FRIENDICA_PLATFORM, 'fromEmail' => t('noreply') . '@' . $a->get_hostname(), 'replyTo' => t('noreply') . '@' . $a->get_hostname(), 'toEmail' => $user["email"], 'messageSubject' => t("Notification: " . $event[0]["Summary"]), 'htmlVersion' => $text_html, 'textVersion' => $text_text, 'additionalMailHeader' => ""); require_once 'include/Emailer.php'; Emailer::send($params); } break; } } } }
public function send() { if (!$this->accessAdminPage(0)) { return new ActionResult($this, '/admin/email', 0, 'You are not allowed to send emails!', B_T_FAIL); } $check = $this->checknames(); if ($check->status == 0) { return $check; } else { Session::del('status_msg', $check->id); } $to = WebApp::post('to'); $subject = WebApp::post('subject'); $message = WebApp::post('message'); $mail = new Emailer(); $mail->setFrom($this->parent->parent->user->getUsername() . '@biggleswadesc.org', $this->parent->parent->user->getFullName()); $mail->Subject = $subject; $mail->msgHTML($message); $mail->AltBody = 'To view the message, please use an HTML compatible email viewer!'; $to = strgetcsv(WebApp::post('to')); // Fetches emails from usernames $user_query = $this->mySQL_r->prepare("SELECT CONCAT(`f_name`, ' ', `s_name`), `email` FROM `core_users` WHERE `username`=?"); // Fetches names and emails from p_group names $p_group_query = $this->mySQL_r->prepare("SELECT CONCAT(`f_name`, ' ', `s_name`),`email` FROM `core_users`\nINNER JOIN `core_groups` ON `p_group`=`GID` AND `core_groups`.`name`=? AND `type`='p'"); // Fetches names and emails from s_group names through link table (core_sgroup) $s_group_query = $this->mySQL_r->prepare("SELECT CONCAT(`f_name`, ' ', `s_name`),`email` FROM `core_users`\nINNER JOIN `core_groups` ON `core_groups`.`name`=? AND `type`='s'\nINNER JOIN `core_sgroup` ON `core_sgroup`.`user`=`core_users`.`id` AND `core_groups`.`GID`=`core_sgroup`.`group`"); $email_addresses = array(); foreach ($to as $name) { $name = trim($name); if (filter_var($name, FILTER_VALIDATE_EMAIL)) { $email_addresses[$name] = $name; } else { // Check if name is user $user_query->bind_param('s', $name); $user_query->bind_result($fullName, $email); $user_query->execute(); $user_query->store_result(); if ($user_query->num_rows == 1) { $this->parent->parent->debug($this::name_space . ': Address is for user'); // deal with user $user_query->fetch(); $email_addresses[$email] = $fullName; $user_query->free_result(); $user_query->reset(); } else { // Check if name is pgroup $user_query->free_result(); $p_group_query->bind_param('s', $name); $p_group_query->bind_result($fullName, $email); $p_group_query->execute(); $p_group_query->store_result(); if ($p_group_query->num_rows != 0) { while ($p_group_query->fetch()) { $email_addresses[$email] = $fullName; } $p_group_query->free_result(); $p_group_query->reset(); } else { $p_group_query->free_result(); $p_group_query->reset(); // Check sgroup $s_group_query->bind_param('s', $name); $s_group_query->bind_result($fullName, $email); $s_group_query->execute(); $s_group_query->store_result(); if ($s_group_query->num_rows != 0) { // Deal with sgroup while ($s_group_query->fetch()) { $email_addresses[$email] = $fullName; } } $s_group_query->free_result(); $s_group_query->reset(); } } } } $failed = array(); foreach ($email_addresses as $email => $name) { $mail->addAddress($email, $name); if (!$mail->send()) { $failed[] = $email; $this->parent->parent->debug($this::name_space . ': Did not send mail to ' . $email); $this->parent->parent->debug('Reason: ' . $mail->ErrorInfo); } else { $this->parent->parent->debug($this::name_space . ': Sent mail to ' . $email); } $mail->clearAddresses(); } if (count($failed) == 0) { return new ActionResult($this, '/admin/email', 1, 'Email was successfully sent!', B_T_SUCCESS); } else { return new ActionResult($this, '/admin/email', 0, 'Email was sent to except:<code>' . implode(', ', $failed) . '</code>', B_T_WARNING); } }
$e = new Emailer(); $e->setMainFile('forms/email_invoice.tpl'); $e->setFrom($SYSTEM['email']['from']); $e->setFromName($SYSTEM['email']['fromName']); $e->setSubject($lang['eml_subj_invoice']); $e->set('SYSTEM', $SYSTEM); $e->set('invoice', $invoice); $e->set('client', $client); $e->set('admin', $admin); $ispayed = strtolower($invoice['curr_status']) == 'fully paid' ? true : false; $e->set('ispayed', $ispayed); $e->fetchMessage(); $e->appendMessage('<img src="' . HTTP_ROOT . 'isop.php?sid=' . $emailSendID . '" width="1" height="1">'); $e->setRecipient($client['email']); $e->setPriority('High'); $result = $e->send(); unset($e); $result = $result ? 'Successful' : 'Failed'; if ($invoice['curr_status'] == 'unsent') { $ISL->UpdateInvoiceStatus($invoiceID, 'pending'); } logItem($_SESSION['ses_client_id'], $invoiceID, 1, 5, $client['email'] . ": " . $result); if (!$passed) { echo "Mail to " . $client['email'] . ".<br>Status: " . $result; } } else { if (!$passed) { echo "No invoice ID provided."; } } if (!$passed) {
// save $survey_pod->save($survey_args); $posted_answers = $_POST; // release the session key $myJSONRPCClient->release_session_key($sessionKey); $durations = ['TM' => 5, 'OM' => 10, 'OP' => 20]; $details = ['role' => $current_user->roles[0], 'company_or_agency' => get_user_meta($current_user->ID, 'company_or_agency', true), 'company' => $relation_pod->display('company'), 'agency' => $relation_pod->display('agency'), 'brand' => $relation_pod->display('brand'), 'country' => $relation_pod->display('country'), 'duration' => isset($durations[$current_user->roles[0]]) ? $durations[$current_user->roles[0]] : 20, 'expiration' => "11th September"]; $details['source_company'] = $details['company_or_agency'] == 'company' ? $details['company'] : $details['agency']; $details['target_company'] = $details['company_or_agency'] == 'company' ? $details['agency'] : $details['company']; // send notification Email $email = new Emailer(); $email->headers[] = 'Cc: Jasper Kums <*****@*****.**>' . "\r\n"; $status_response = ['status' => 'OK', 'message' => json_encode($success_status)]; try { $email->compose(['template' => 'surveycompleted', 'pre_header' => '', 'title' => 'Thank you for your input', 'name' => $current_user->display_name, 'date' => date_i18n('j M Y'), 'details' => $details]); $result = $email->send(['subject' => 'Thank you for your input ' . $current_user->display_name . ' ' . time(), 'to' => $current_user->user_email]); $survey_title = 'Survey submission - ' . $survey_post['ID'] . ' - ' . html_entity_decode(get_the_title((int) $survey_post['ID'])); mail('*****@*****.**', $survey_title, json_encode($_POST)); } catch (Exception $e) { // Something went wrong sending the e-mail, return error and error message header('Content-Type: application/json'); print_r(json_encode(['error' => 'error', 'message' => $e->getMessage()])); } } // response output header("Content-Type: application/json"); echo json_encode($status_response); exit; } } });
function sendEmail($send = true) { $emailer = new Emailer(); $message = $this->getString(); $emailer->setMessage($message); $emailer->setSubject($this->subject); $emailer->setSender("*****@*****.**"); $emailer->addRecipients($this->recipient); $emailer->addRecipients($this->bccrecipients, 1, "bcc"); $emailer->addRecipients($this->ccrecipients, 1, "cc"); if ($send) { $emailer->send(); } else { $emailString = $emailer->getString(); print $emailString; } }
private function handleAccountRequest() { $person = $this->_findCandidateMember($_REQUEST['email']); require_once 'include/emailer.class.php'; $failureEmail = MEMBER_REGO_FAILURE_EMAIL; if (is_array($person)) { // Send them an email $hash = generate_random_string(32); $SQL = 'UPDATE _person SET resethash=' . $GLOBALS['db']->quote($hash) . ', resetexpires = NOW() + INTERVAL 24 HOUR WHERE id = ' . (int) $person['id']; $res = $GLOBALS['db']->exec($SQL); check_db_result($res); $url = BASE_URL . '/members/?email=' . rawurlencode($person['email']) . '&verify=' . rawurlencode($hash); $body = "Hi %s,\n\t\t\t\t\t\t\t\nTo activate your %s account, please %s\n\nIf you didn't request an account, you can just ignore this email"; $text = sprintf($body, $person['first_name'], SYSTEM_NAME, 'go to ' . $url); $html = sprintf(nl2br($body), $person['first_name'], SYSTEM_NAME, '<a href="' . $url . '">click here</a>.'); $message = Emailer::newMessage()->setSubject(MEMBER_REGO_EMAIL_SUBJECT)->setFrom(array(MEMBER_REGO_EMAIL_FROM_ADDRESS => MEMBER_REGO_EMAIL_FROM_NAME))->setTo(array($person['email'] => $person['first_name'] . ' ' . $person['last_name']))->setBody($body)->addPart($html, 'text/html'); $res = Emailer::send($message); if (TRUE == $res) { require_once 'templates/account_request_received.template.php'; exit; } else { $this->_error = 'Could not send to the specified address. Your email server may be experiencing problems.'; return; } } else { if (!Emailer::validateAddress($_REQUEST['email'])) { $this->_error = 'You have entered an invalid email address. Please check the address and try again.'; } else { if ($person == -1 && !empty($failureEmail)) { // This email address is in use by two or more persons from *different families*. // Therefore this address cannot be used for member access. $message = Emailer::newMessage()->setSubject("Member Account request from multi-family email")->setFrom(array(MEMBER_REGO_EMAIL_FROM_ADDRESS => SYSTEM_NAME . ' Jethro System'))->setTo(MEMBER_REGO_FAILURE_EMAIL)->setBody("Hi, \n\nThis is an automated message from the Jethro system at " . BASE_URL . ".\n\n" . "Somebody has used the form at " . BASE_URL . "/members to request member-access to this Jethro system. \n\n" . "The email address they specified was " . $_REQUEST['email'] . " but this address belongs to SEVERAL persons from DIFFERENT families. It therefore can't be used for member access.\n\n" . "Please look up this email address in Jethro and contact the relevant persons to help them solve this problem.\n\n"); $res = Emailer::send($message); // Show the user the generic "thanks" page - because we do not want // to tell strangers whether an email is or isn't known. require_once 'templates/account_request_received.template.php'; exit; } else { if (!empty($failureEmail)) { // This email address doesn't match any person record. // Send the administrator an email $message = Emailer::newMessage()->setSubject("Member Account request from unknown email")->setFrom(array(MEMBER_REGO_EMAIL_FROM_ADDRESS => SYSTEM_NAME . ' Jethro System'))->setTo(MEMBER_REGO_FAILURE_EMAIL)->setBody("Hi, \n\nThis is an automated message from the Jethro system at " . BASE_URL . ".\n\n" . "Somebody has used the form at " . BASE_URL . "/members to request member-access to this Jethro system. \n\n" . "The email address they specified was " . $_REQUEST['email'] . " but there is no current person record in the Jethro system with that address. (There could be an archived record).\n\n" . "If you believe this person is a church member, please add their email address to their person record and then ask them to try registering again.\n\n"); $res = Emailer::send($message); // Show the user the generic "thanks" page - because we do not want // to tell strangers whether an email is or isn't known. require_once 'templates/account_request_received.template.php'; exit; } } } } }
function send_email($config) { $mailClient = new Emailer($config['options']); //var_dump($content); die; if (mb_strlen($config['content'], 'utf-8') < 1) { return 1; } //prepare email object $mailClient->clear(); //$mailClient->to(array('*****@*****.**')); $mailClient->to($config['to']); if (isset($config['bcc'])) { $mailClient->bcc($config['bcc']); } //$mailClient->to('*****@*****.**'); $mailClient->from($config['from_mail'], $config['from_title']); $mailClient->subject($config['subject']); $mailClient->reply_to('*****@*****.**', 'Pingola.ru'); $mailClient->set_mailtype('html'); $mailClient->message($config['content']); //TODO: remove all html tags and send as plain text $alt_msg = ''; //'This is the alternative message'; $mailClient->set_alt_message($alt_msg); // response if ($mailClient->send()) { return TRUE; } else { var_dump($mailClient->print_debugger()); return FALSE; } }
public function uploadNotify($token) { $shareTokenObj = new ShareToken(); $tokenArr = $shareTokenObj->get($token); if (empty($tokenArr) || $tokenArr['type'] != 'upload') { return $this->forbidden('No permissions with the passed in token', false); } $albumId = $tokenArr['data']; $albumResp = $this->api->invoke(sprintf('/album/%s/view.json', $albumId), EpiRoute::httpGet, array('_GET' => array('token' => $token))); if ($albumResp['code'] !== 200) { return $this->error('Could not get album details', false); } $uploader = $count = null; if (isset($_POST['uploader'])) { $uploader = $_POST['uploader']; } if (isset($_POST['count'])) { $count = $_POST['count']; } $utilityObj = new Utility(); $albumName = $albumResp['result']['name']; $albumUrl = sprintf('%s://%s/photos/album-%s/token-%s/list??sortBy=dateUploaded,desc', $utilityObj->getProtocol(false), $utilityObj->getHost(false), $albumId, $token); $tokenOwner = $tokenArr['actor']; $emailer = new Emailer(); $emailer->setRecipients(array($tokenOwner)); if (!empty($albumName)) { $emailer->setSubject(sprintf('Photos uploaded to %s', $albumName)); } else { $emailer->setSubject('New photos were uploaded for you'); } $markup = $this->theme->get('partials/upload-notify.php', array('albumId' => $albumId, 'albumName' => $albumName, 'albumUrl' => $albumUrl, 'uploader' => $uploader, 'count' => $count)); $emailer->setBody($markup); $res = $emailer->send($markup); return $this->success('Email probably sent', true); }
$errorText .= "<li>The URL link is {$result}"; } if ($errorText == "") { $mail = new Emailer(); $mail->setTo($configuration["adminEmail"]); $mail->setFrom("*****@*****.**"); $mail->setSubject("Classified Advert"); $mail->bodyAdd("NEW CLASSIFIED ADVERT"); $mail->bodyAdd(""); $mail->bodyAdd("User: "******"Heading: {$heading}"); $mail->bodyAdd("Text: {$text}"); $mail->bodyAdd("URL: {$link}"); $mail->bodyAdd(""); $mail->bodyAdd("END"); $mail->send(); header("Location: classified_success.php"); } else { $errorText = "<ul>" . $errorText . "</ul>"; } } require "top.php"; ?> <table width="459" border="0" cellspacing="0" cellpadding="0" > <tr> <td><img src="images/spacer.gif" alt="spacer" width="1" height="5" border="0" /></td> </tr> <tr> <td><div class="roundcont"> <div class="roundtop"> <img class="corner" src="images/bl_01.gif" alt="edge" style=" display: none;" /></div> <h1>Classified Advertisement</h1>
function item_post(&$a) { if (!local_user() && !remote_user() && !x($_REQUEST, 'commenter')) { return; } require_once 'include/security.php'; $uid = local_user(); if (x($_REQUEST, 'dropitems')) { $arr_drop = explode(',', $_REQUEST['dropitems']); drop_items($arr_drop); $json = array('success' => 1); echo json_encode($json); killme(); } call_hooks('post_local_start', $_REQUEST); // logger('postinput ' . file_get_contents('php://input')); logger('postvars ' . print_r($_REQUEST, true), LOGGER_DATA); $api_source = x($_REQUEST, 'api_source') && $_REQUEST['api_source'] ? true : false; $message_id = x($_REQUEST, 'message_id') && $api_source ? strip_tags($_REQUEST['message_id']) : ''; $return_path = x($_REQUEST, 'return') ? $_REQUEST['return'] : ''; $preview = x($_REQUEST, 'preview') ? intval($_REQUEST['preview']) : 0; // Check for doubly-submitted posts, and reject duplicates // Note that we have to ignore previews, otherwise nothing will post // after it's been previewed if (!$preview && x($_REQUEST['post_id_random'])) { if (x($_SESSION['post-random']) && $_SESSION['post-random'] == $_REQUEST['post_id_random']) { logger("item post: duplicate post", LOGGER_DEBUG); item_post_return($a->get_baseurl(), $api_source, $return_path); } else { $_SESSION['post-random'] = $_REQUEST['post_id_random']; } } /** * Is this a reply to something? */ $parent = x($_REQUEST, 'parent') ? intval($_REQUEST['parent']) : 0; $parent_uri = x($_REQUEST, 'parent_uri') ? trim($_REQUEST['parent_uri']) : ''; $parent_item = null; $parent_contact = null; $thr_parent = ''; $parid = 0; $r = false; $objecttype = null; if ($parent || $parent_uri) { $objecttype = ACTIVITY_OBJ_COMMENT; if (!x($_REQUEST, 'type')) { $_REQUEST['type'] = 'net-comment'; } if ($parent) { $r = q("SELECT * FROM `item` WHERE `id` = %d LIMIT 1", intval($parent)); } elseif ($parent_uri && local_user()) { // This is coming from an API source, and we are logged in $r = q("SELECT * FROM `item` WHERE `uri` = '%s' AND `uid` = %d LIMIT 1", dbesc($parent_uri), intval(local_user())); } // if this isn't the real parent of the conversation, find it if ($r !== false && count($r)) { $parid = $r[0]['parent']; $parent_uri = $r[0]['uri']; if ($r[0]['id'] != $r[0]['parent']) { $r = q("SELECT * FROM `item` WHERE `id` = `parent` AND `parent` = %d LIMIT 1", intval($parid)); } } if ($r === false || !count($r)) { notice(t('Unable to locate original post.') . EOL); if (x($_REQUEST, 'return')) { goaway($a->get_baseurl() . "/" . $return_path); } killme(); } $parent_item = $r[0]; $parent = $r[0]['id']; // multi-level threading - preserve the info but re-parent to our single level threading //if(($parid) && ($parid != $parent)) $thr_parent = $parent_uri; if ($parent_item['contact-id'] && $uid) { $r = q("SELECT * FROM `contact` WHERE `id` = %d AND `uid` = %d LIMIT 1", intval($parent_item['contact-id']), intval($uid)); if (count($r)) { $parent_contact = $r[0]; // If the contact id doesn't fit with the contact, then set the contact to null $thrparent = q("SELECT `author-link`, `network` FROM `item` WHERE `uri` = '%s' LIMIT 1", dbesc($thr_parent)); if (count($thrparent) and $thrparent[0]["network"] === NETWORK_OSTATUS and normalise_link($parent_contact["url"]) != normalise_link($thrparent[0]["author-link"])) { $parent_contact = null; require_once "include/Scrape.php"; $probed_contact = probe_url($thrparent[0]["author-link"]); if ($probed_contact["network"] != NETWORK_FEED) { $parent_contact = $probed_contact; $parent_contact["nurl"] = normalise_link($probed_contact["url"]); $parent_contact["thumb"] = $probed_contact["photo"]; $parent_contact["micro"] = $probed_contact["photo"]; } logger('parent contact: ' . print_r($parent_contact, true), LOGGER_DEBUG); } else { logger('no contact found: ' . print_r($thrparent, true), LOGGER_DEBUG); } } } } if ($parent) { logger('mod_item: item_post parent=' . $parent); } $profile_uid = x($_REQUEST, 'profile_uid') ? intval($_REQUEST['profile_uid']) : 0; $post_id = x($_REQUEST, 'post_id') ? intval($_REQUEST['post_id']) : 0; $app = x($_REQUEST, 'source') ? strip_tags($_REQUEST['source']) : ''; $extid = x($_REQUEST, 'extid') ? strip_tags($_REQUEST['extid']) : ''; $allow_moderated = false; // here is where we are going to check for permission to post a moderated comment. // First check that the parent exists and it is a wall item. if (x($_REQUEST, 'commenter') && (!$parent || !$parent_item['wall'])) { notice(t('Permission denied.') . EOL); if (x($_REQUEST, 'return')) { goaway($a->get_baseurl() . "/" . $return_path); } killme(); } // Now check that it is a page_type of PAGE_BLOG, and that valid personal details // have been provided, and run any anti-spam plugins // TODO if (!can_write_wall($a, $profile_uid) && !$allow_moderated) { notice(t('Permission denied.') . EOL); if (x($_REQUEST, 'return')) { goaway($a->get_baseurl() . "/" . $return_path); } killme(); } // is this an edited post? $orig_post = null; if ($post_id) { $i = q("SELECT * FROM `item` WHERE `uid` = %d AND `id` = %d LIMIT 1", intval($profile_uid), intval($post_id)); if (!count($i)) { killme(); } $orig_post = $i[0]; } $user = null; $r = q("SELECT * FROM `user` WHERE `uid` = %d LIMIT 1", intval($profile_uid)); if (count($r)) { $user = $r[0]; } if ($orig_post) { $str_group_allow = $orig_post['allow_gid']; $str_contact_allow = $orig_post['allow_cid']; $str_group_deny = $orig_post['deny_gid']; $str_contact_deny = $orig_post['deny_cid']; $location = $orig_post['location']; $coord = $orig_post['coord']; $verb = $orig_post['verb']; $objecttype = $orig_post['object-type']; $emailcc = $orig_post['emailcc']; $app = $orig_post['app']; $categories = $orig_post['file']; $title = notags(trim($_REQUEST['title'])); $body = escape_tags(trim($_REQUEST['body'])); $private = $orig_post['private']; $pubmail_enable = $orig_post['pubmail']; $network = $orig_post['network']; $guid = $orig_post['guid']; $extid = $orig_post['extid']; } else { // if coming from the API and no privacy settings are set, // use the user default permissions - as they won't have // been supplied via a form. if ($api_source && !array_key_exists('contact_allow', $_REQUEST) && !array_key_exists('group_allow', $_REQUEST) && !array_key_exists('contact_deny', $_REQUEST) && !array_key_exists('group_deny', $_REQUEST)) { $str_group_allow = $user['allow_gid']; $str_contact_allow = $user['allow_cid']; $str_group_deny = $user['deny_gid']; $str_contact_deny = $user['deny_cid']; } else { // use the posted permissions $str_group_allow = perms2str($_REQUEST['group_allow']); $str_contact_allow = perms2str($_REQUEST['contact_allow']); $str_group_deny = perms2str($_REQUEST['group_deny']); $str_contact_deny = perms2str($_REQUEST['contact_deny']); } $title = notags(trim($_REQUEST['title'])); $location = notags(trim($_REQUEST['location'])); $coord = notags(trim($_REQUEST['coord'])); $verb = notags(trim($_REQUEST['verb'])); $emailcc = notags(trim($_REQUEST['emailcc'])); $body = escape_tags(trim($_REQUEST['body'])); $network = notags(trim($_REQUEST['network'])); $guid = get_guid(32); $naked_body = preg_replace('/\\[(.+?)\\]/', '', $body); if (version_compare(PHP_VERSION, '5.3.0', '>=')) { $l = new Text_LanguageDetect(); //$lng = $l->detectConfidence($naked_body); //$postopts = (($lng['language']) ? 'lang=' . $lng['language'] . ';' . $lng['confidence'] : ''); $lng = $l->detect($naked_body, 3); if (sizeof($lng) > 0) { $postopts = ""; foreach ($lng as $language => $score) { if ($postopts == "") { $postopts = "lang="; } else { $postopts .= ":"; } $postopts .= $language . ";" . $score; } } logger('mod_item: detect language' . print_r($lng, true) . $naked_body, LOGGER_DATA); } else { $postopts = ''; } $private = strlen($str_group_allow) || strlen($str_contact_allow) || strlen($str_group_deny) || strlen($str_contact_deny) ? 1 : 0; if ($user['hidewall']) { $private = 2; } // If this is a comment, set the permissions from the parent. if ($parent_item) { $private = 0; // for non native networks use the network of the original post as network of the item if ($parent_item['network'] != NETWORK_DIASPORA and $parent_item['network'] != NETWORK_OSTATUS and $network == "") { $network = $parent_item['network']; } if ($parent_item['private'] || strlen($parent_item['allow_cid']) || strlen($parent_item['allow_gid']) || strlen($parent_item['deny_cid']) || strlen($parent_item['deny_gid'])) { $private = $parent_item['private'] ? $parent_item['private'] : 1; } $str_contact_allow = $parent_item['allow_cid']; $str_group_allow = $parent_item['allow_gid']; $str_contact_deny = $parent_item['deny_cid']; $str_group_deny = $parent_item['deny_gid']; } $pubmail_enable = x($_REQUEST, 'pubmail_enable') && intval($_REQUEST['pubmail_enable']) && !$private ? 1 : 0; // if using the API, we won't see pubmail_enable - figure out if it should be set if ($api_source && $profile_uid && $profile_uid == local_user() && !$private) { $mail_disabled = function_exists('imap_open') && !get_config('system', 'imap_disabled') ? 0 : 1; if (!$mail_disabled) { $r = q("SELECT * FROM `mailacct` WHERE `uid` = %d AND `server` != '' LIMIT 1", intval(local_user())); if (count($r) && intval($r[0]['pubmail'])) { $pubmail_enabled = true; } } } if (!strlen($body)) { if ($preview) { killme(); } info(t('Empty post discarded.') . EOL); if (x($_REQUEST, 'return')) { goaway($a->get_baseurl() . "/" . $return_path); } killme(); } } if (strlen($categories)) { // get the "fileas" tags for this post $filedas = file_tag_file_to_list($categories, 'file'); } // save old and new categories, so we can determine what needs to be deleted from pconfig $categories_old = $categories; $categories = file_tag_list_to_file(trim($_REQUEST['category']), 'category'); $categories_new = $categories; if (strlen($filedas)) { // append the fileas stuff to the new categories list $categories .= file_tag_list_to_file($filedas, 'file'); } // Work around doubled linefeeds in Tinymce 3.5b2 // First figure out if it's a status post that would've been // created using tinymce. Otherwise leave it alone. /* $plaintext = (local_user() ? intval(get_pconfig(local_user(),'system','plaintext')) || !feature_enabled($profile_uid,'richtext') : 0); if((! $parent) && (! $api_source) && (! $plaintext)) { $body = fix_mce_lf($body); }*/ $plaintext = local_user() ? !feature_enabled($profile_uid, 'richtext') : 0; if (!$parent && !$api_source && !$plaintext) { $body = fix_mce_lf($body); } // get contact info for poster $author = null; $self = false; $contact_id = 0; if (local_user() && local_user() == $profile_uid) { $self = true; $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1", intval($_SESSION['uid'])); } elseif (remote_user()) { if (is_array($_SESSION['remote'])) { foreach ($_SESSION['remote'] as $v) { if ($v['uid'] == $profile_uid) { $contact_id = $v['cid']; break; } } } if ($contact_id) { $r = q("SELECT * FROM `contact` WHERE `id` = %d LIMIT 1", intval($contact_id)); } } if (count($r)) { $author = $r[0]; $contact_id = $author['id']; } // get contact info for owner if ($profile_uid == local_user()) { $contact_record = $author; } else { $r = q("SELECT * FROM `contact` WHERE `uid` = %d AND `self` = 1 LIMIT 1", intval($profile_uid)); if (count($r)) { $contact_record = $r[0]; } } $post_type = notags(trim($_REQUEST['type'])); if ($post_type === 'net-comment') { if ($parent_item !== null) { if ($parent_item['wall'] == 1) { $post_type = 'wall-comment'; } else { $post_type = 'remote-comment'; } } } /** * * When a photo was uploaded into the message using the (profile wall) ajax * uploader, The permissions are initially set to disallow anybody but the * owner from seeing it. This is because the permissions may not yet have been * set for the post. If it's private, the photo permissions should be set * appropriately. But we didn't know the final permissions on the post until * now. So now we'll look for links of uploaded messages that are in the * post and set them to the same permissions as the post itself. * */ $match = null; if (!$preview && preg_match_all("/\\[img([\\=0-9x]*?)\\](.*?)\\[\\/img\\]/", $body, $match)) { $images = $match[2]; if (count($images)) { $objecttype = ACTIVITY_OBJ_IMAGE; foreach ($images as $image) { if (!stristr($image, $a->get_baseurl() . '/photo/')) { continue; } $image_uri = substr($image, strrpos($image, '/') + 1); $image_uri = substr($image_uri, 0, strpos($image_uri, '-')); if (!strlen($image_uri)) { continue; } $srch = '<' . intval($contact_id) . '>'; $r = q("SELECT `id` FROM `photo` WHERE `allow_cid` = '%s' AND `allow_gid` = '' AND `deny_cid` = '' AND `deny_gid` = ''\n\t\t\t\t\tAND `resource-id` = '%s' AND `uid` = %d LIMIT 1", dbesc($srch), dbesc($image_uri), intval($profile_uid)); if (!count($r)) { continue; } $r = q("UPDATE `photo` SET `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s'\n\t\t\t\t\tWHERE `resource-id` = '%s' AND `uid` = %d AND `album` = '%s' ", dbesc($str_contact_allow), dbesc($str_group_allow), dbesc($str_contact_deny), dbesc($str_group_deny), dbesc($image_uri), intval($profile_uid), dbesc(t('Wall Photos'))); } } } /** * Next link in any attachment references we find in the post. */ $match = false; if (!$preview && preg_match_all("/\\[attachment\\](.*?)\\[\\/attachment\\]/", $body, $match)) { $attaches = $match[1]; if (count($attaches)) { foreach ($attaches as $attach) { $r = q("SELECT * FROM `attach` WHERE `uid` = %d AND `id` = %d LIMIT 1", intval($profile_uid), intval($attach)); if (count($r)) { $r = q("UPDATE `attach` SET `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s'\n\t\t\t\t\t\tWHERE `uid` = %d AND `id` = %d", dbesc($str_contact_allow), dbesc($str_group_allow), dbesc($str_contact_deny), dbesc($str_group_deny), intval($profile_uid), intval($attach)); } } } } // embedded bookmark in post? set bookmark flag $bookmark = 0; if (preg_match_all("/\\[bookmark\\=([^\\]]*)\\](.*?)\\[\\/bookmark\\]/ism", $body, $match, PREG_SET_ORDER)) { $objecttype = ACTIVITY_OBJ_BOOKMARK; $bookmark = 1; } $body = bb_translate_video($body); /** * Fold multi-line [code] sequences */ $body = preg_replace('/\\[\\/code\\]\\s*\\[code\\]/ism', "\n", $body); $body = scale_external_images($body, false); // Setting the object type if not defined before if (!$objecttype) { $objecttype = ACTIVITY_OBJ_NOTE; // Default value require_once "include/plaintext.php"; $objectdata = get_attached_data($body); if ($post["type"] == "link") { $objecttype = ACTIVITY_OBJ_BOOKMARK; } elseif ($post["type"] == "video") { $objecttype = ACTIVITY_OBJ_VIDEO; } elseif ($post["type"] == "photo") { $objecttype = ACTIVITY_OBJ_IMAGE; } } /** * Look for any tags and linkify them */ $str_tags = ''; $inform = ''; $tags = get_tags($body); /** * add a statusnet style reply tag if the original post was from there * and we are replying, and there isn't one already */ if ($parent_contact && $parent_contact['network'] === NETWORK_OSTATUS && $parent_contact['nick'] && !in_array('@' . $parent_contact['nick'], $tags)) { $body = '@' . $parent_contact['nick'] . ' ' . $body; $tags[] = '@' . $parent_contact['nick']; } $tagged = array(); $private_forum = false; if (count($tags)) { foreach ($tags as $tag) { if (strpos($tag, '#') === 0) { continue; } // If we already tagged 'Robert Johnson', don't try and tag 'Robert'. // Robert Johnson should be first in the $tags array $fullnametagged = false; for ($x = 0; $x < count($tagged); $x++) { if (stristr($tagged[$x], $tag . ' ')) { $fullnametagged = true; break; } } if ($fullnametagged) { continue; } $success = handle_tag($a, $body, $inform, $str_tags, local_user() ? local_user() : $profile_uid, $tag, $network); if ($success['replaced']) { $tagged[] = $tag; } if (is_array($success['contact']) && intval($success['contact']['prv'])) { $private_forum = true; $private_id = $success['contact']['id']; } } } if ($private_forum && !$parent && !$private) { // we tagged a private forum in a top level post and the message was public. // Restrict it. $private = 1; $str_contact_allow = '<' . $private_id . '>'; } $attachments = ''; $match = false; if (preg_match_all('/(\\[attachment\\]([0-9]+)\\[\\/attachment\\])/', $body, $match)) { foreach ($match[2] as $mtch) { $r = q("SELECT `id`,`filename`,`filesize`,`filetype` FROM `attach` WHERE `uid` = %d AND `id` = %d LIMIT 1", intval($profile_uid), intval($mtch)); if (count($r)) { if (strlen($attachments)) { $attachments .= ','; } $attachments .= '[attach]href="' . $a->get_baseurl() . '/attach/' . $r[0]['id'] . '" length="' . $r[0]['filesize'] . '" type="' . $r[0]['filetype'] . '" title="' . ($r[0]['filename'] ? $r[0]['filename'] : '') . '"[/attach]'; } $body = str_replace($match[1], '', $body); } } $wall = 0; if ($post_type === 'wall' || $post_type === 'wall-comment') { $wall = 1; } if (!strlen($verb)) { $verb = ACTIVITY_POST; } if ($network == "") { $network = NETWORK_DFRN; } $gravity = $parent ? 6 : 0; // even if the post arrived via API we are considering that it // originated on this site by default for determining relayability. $origin = x($_REQUEST, 'origin') ? intval($_REQUEST['origin']) : 1; $notify_type = $parent ? 'comment-new' : 'wall-new'; $uri = $message_id ? $message_id : item_new_uri($a->get_hostname(), $profile_uid); // Fallback so that we alway have a thr-parent if (!$thr_parent) { $thr_parent = $uri; } $datarray = array(); $datarray['uid'] = $profile_uid; $datarray['type'] = $post_type; $datarray['wall'] = $wall; $datarray['gravity'] = $gravity; $datarray['network'] = $network; $datarray['contact-id'] = $contact_id; $datarray['owner-name'] = $contact_record['name']; $datarray['owner-link'] = $contact_record['url']; $datarray['owner-avatar'] = $contact_record['thumb']; $datarray['author-name'] = $author['name']; $datarray['author-link'] = $author['url']; $datarray['author-avatar'] = $author['thumb']; $datarray['created'] = datetime_convert(); $datarray['edited'] = datetime_convert(); $datarray['commented'] = datetime_convert(); $datarray['received'] = datetime_convert(); $datarray['changed'] = datetime_convert(); $datarray['extid'] = $extid; $datarray['guid'] = $guid; $datarray['uri'] = $uri; $datarray['title'] = $title; $datarray['body'] = $body; $datarray['app'] = $app; $datarray['location'] = $location; $datarray['coord'] = $coord; $datarray['tag'] = $str_tags; $datarray['file'] = $categories; $datarray['inform'] = $inform; $datarray['verb'] = $verb; $datarray['object-type'] = $objecttype; $datarray['allow_cid'] = $str_contact_allow; $datarray['allow_gid'] = $str_group_allow; $datarray['deny_cid'] = $str_contact_deny; $datarray['deny_gid'] = $str_group_deny; $datarray['private'] = $private; $datarray['pubmail'] = $pubmail_enable; $datarray['attach'] = $attachments; $datarray['bookmark'] = intval($bookmark); $datarray['thr-parent'] = $thr_parent; $datarray['postopts'] = $postopts; $datarray['origin'] = $origin; $datarray['moderated'] = $allow_moderated; /** * These fields are for the convenience of plugins... * 'self' if true indicates the owner is posting on their own wall * If parent is 0 it is a top-level post. */ $datarray['parent'] = $parent; $datarray['self'] = $self; // $datarray['prvnets'] = $user['prvnets']; if ($orig_post) { $datarray['edit'] = true; } // Search for hashtags item_body_set_hashtags($datarray); // preview mode - prepare the body for display and send it via json if ($preview) { require_once 'include/conversation.php'; $o = conversation($a, array(array_merge($contact_record, $datarray)), 'search', false, true); logger('preview: ' . $o); echo json_encode(array('preview' => $o)); killme(); } call_hooks('post_local', $datarray); if (x($datarray, 'cancel')) { logger('mod_item: post cancelled by plugin.'); if ($return_path) { goaway($a->get_baseurl() . "/" . $return_path); } $json = array('cancel' => 1); if (x($_REQUEST, 'jsreload') && strlen($_REQUEST['jsreload'])) { $json['reload'] = $a->get_baseurl() . '/' . $_REQUEST['jsreload']; } echo json_encode($json); killme(); } // Fill the cache field put_item_in_cache($datarray); if ($orig_post) { $r = q("UPDATE `item` SET `title` = '%s', `body` = '%s', `tag` = '%s', `attach` = '%s', `file` = '%s', `rendered-html` = '%s', `rendered-hash` = '%s', `edited` = '%s', `changed` = '%s' WHERE `id` = %d AND `uid` = %d", dbesc($datarray['title']), dbesc($datarray['body']), dbesc($datarray['tag']), dbesc($datarray['attach']), dbesc($datarray['file']), dbesc($datarray['rendered-html']), dbesc($datarray['rendered-hash']), dbesc(datetime_convert()), dbesc(datetime_convert()), intval($post_id), intval($profile_uid)); create_tags_from_item($post_id); create_files_from_item($post_id); update_thread($post_id); // update filetags in pconfig file_tag_update_pconfig($uid, $categories_old, $categories_new, 'category'); proc_run('php', "include/notifier.php", 'edit_post', "{$post_id}"); if (x($_REQUEST, 'return') && strlen($return_path)) { logger('return: ' . $return_path); goaway($a->get_baseurl() . "/" . $return_path); } killme(); } else { $post_id = 0; } $r = q("INSERT INTO `item` (`guid`, `extid`, `uid`,`type`,`wall`,`gravity`, `network`, `contact-id`,`owner-name`,`owner-link`,`owner-avatar`, `author-name`, `author-link`, `author-avatar`,\n\t\t`created`, `edited`, `commented`, `received`, `changed`, `uri`, `thr-parent`, `title`, `body`, `app`, `location`, `coord`, `tag`, `inform`, `verb`, `object-type`, `postopts`,\n\t\t`allow_cid`, `allow_gid`, `deny_cid`, `deny_gid`, `private`, `pubmail`, `attach`, `bookmark`,`origin`, `moderated`, `file`, `rendered-html`, `rendered-hash`)\n\t\tVALUES( '%s', '%s', %d, '%s', %d, %d, '%s', %d, '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', '%s', %d, %d, '%s', %d, %d, %d, '%s', '%s', '%s')", dbesc($datarray['guid']), dbesc($datarray['extid']), intval($datarray['uid']), dbesc($datarray['type']), intval($datarray['wall']), intval($datarray['gravity']), dbesc($datarray['network']), intval($datarray['contact-id']), dbesc($datarray['owner-name']), dbesc($datarray['owner-link']), dbesc($datarray['owner-avatar']), dbesc($datarray['author-name']), dbesc($datarray['author-link']), dbesc($datarray['author-avatar']), dbesc($datarray['created']), dbesc($datarray['edited']), dbesc($datarray['commented']), dbesc($datarray['received']), dbesc($datarray['changed']), dbesc($datarray['uri']), dbesc($datarray['thr-parent']), dbesc($datarray['title']), dbesc($datarray['body']), dbesc($datarray['app']), dbesc($datarray['location']), dbesc($datarray['coord']), dbesc($datarray['tag']), dbesc($datarray['inform']), dbesc($datarray['verb']), dbesc($datarray['object-type']), dbesc($datarray['postopts']), dbesc($datarray['allow_cid']), dbesc($datarray['allow_gid']), dbesc($datarray['deny_cid']), dbesc($datarray['deny_gid']), intval($datarray['private']), intval($datarray['pubmail']), dbesc($datarray['attach']), intval($datarray['bookmark']), intval($datarray['origin']), intval($datarray['moderated']), dbesc($datarray['file']), dbesc($datarray['rendered-html']), dbesc($datarray['rendered-hash'])); $r = q("SELECT `id` FROM `item` WHERE `uri` = '%s' LIMIT 1", dbesc($datarray['uri'])); if (!count($r)) { logger('mod_item: unable to retrieve post that was just stored.'); notice(t('System error. Post not saved.') . EOL); goaway($a->get_baseurl() . "/" . $return_path); // NOTREACHED } $post_id = $r[0]['id']; logger('mod_item: saved item ' . $post_id); $datarray["id"] = $post_id; $datarray["plink"] = $a->get_baseurl() . '/display/' . urlencode($datarray["guid"]); // update filetags in pconfig file_tag_update_pconfig($uid, $categories_old, $categories_new, 'category'); if ($parent) { // This item is the last leaf and gets the comment box, clear any ancestors $r = q("UPDATE `item` SET `last-child` = 0, `changed` = '%s' WHERE `parent` = %d ", dbesc(datetime_convert()), intval($parent)); update_thread($parent, true); // Inherit ACLs from the parent item. $r = q("UPDATE `item` SET `allow_cid` = '%s', `allow_gid` = '%s', `deny_cid` = '%s', `deny_gid` = '%s', `private` = %d\n\t\t\tWHERE `id` = %d", dbesc($parent_item['allow_cid']), dbesc($parent_item['allow_gid']), dbesc($parent_item['deny_cid']), dbesc($parent_item['deny_gid']), intval($parent_item['private']), intval($post_id)); if ($contact_record != $author) { notification(array('type' => NOTIFY_COMMENT, 'notify_flags' => $user['notify-flags'], 'language' => $user['language'], 'to_name' => $user['username'], 'to_email' => $user['email'], 'uid' => $user['uid'], 'item' => $datarray, 'link' => $a->get_baseurl() . '/display/' . urlencode($datarray['guid']), 'source_name' => $datarray['author-name'], 'source_link' => $datarray['author-link'], 'source_photo' => $datarray['author-avatar'], 'verb' => ACTIVITY_POST, 'otype' => 'item', 'parent' => $parent, 'parent_uri' => $parent_item['uri'])); } // Store the comment signature information in case we need to relay to Diaspora store_diaspora_comment_sig($datarray, $author, $self ? $a->user['prvkey'] : false, $parent_item, $post_id); } else { $parent = $post_id; if ($contact_record != $author) { notification(array('type' => NOTIFY_WALL, 'notify_flags' => $user['notify-flags'], 'language' => $user['language'], 'to_name' => $user['username'], 'to_email' => $user['email'], 'uid' => $user['uid'], 'item' => $datarray, 'link' => $a->get_baseurl() . '/display/' . urlencode($datarray['guid']), 'source_name' => $datarray['author-name'], 'source_link' => $datarray['author-link'], 'source_photo' => $datarray['author-avatar'], 'verb' => ACTIVITY_POST, 'otype' => 'item')); } } // fallback so that parent always gets set to non-zero. if (!$parent) { $parent = $post_id; } $r = q("UPDATE `item` SET `parent` = %d, `parent-uri` = '%s', `plink` = '%s', `changed` = '%s', `last-child` = 1, `visible` = 1\n\t\tWHERE `id` = %d", intval($parent), dbesc($parent == $post_id ? $uri : $parent_item['uri']), dbesc($a->get_baseurl() . '/display/' . urlencode($datarray['guid'])), dbesc(datetime_convert()), intval($post_id)); // photo comments turn the corresponding item visible to the profile wall // This way we don't see every picture in your new photo album posted to your wall at once. // They will show up as people comment on them. if (!$parent_item['visible']) { $r = q("UPDATE `item` SET `visible` = 1 WHERE `id` = %d", intval($parent_item['id'])); update_thread($parent_item['id']); } // update the commented timestamp on the parent q("UPDATE `item` set `commented` = '%s', `changed` = '%s' WHERE `id` = %d", dbesc(datetime_convert()), dbesc(datetime_convert()), intval($parent)); if ($post_id != $parent) { update_thread($parent); } call_hooks('post_local_end', $datarray); if (strlen($emailcc) && $profile_uid == local_user()) { $erecips = explode(',', $emailcc); if (count($erecips)) { foreach ($erecips as $recip) { $addr = trim($recip); if (!strlen($addr)) { continue; } $disclaimer = '<hr />' . sprintf(t('This message was sent to you by %s, a member of the Friendica social network.'), $a->user['username']) . '<br />'; $disclaimer .= sprintf(t('You may visit them online at %s'), $a->get_baseurl() . '/profile/' . $a->user['nickname']) . EOL; $disclaimer .= t('Please contact the sender by replying to this post if you do not wish to receive these messages.') . EOL; if (!$datarray['title'] == '') { $subject = email_header_encode($datarray['title'], 'UTF-8'); } else { $subject = email_header_encode('[Friendica]' . ' ' . sprintf(t('%s posted an update.'), $a->user['username']), 'UTF-8'); } $link = '<a href="' . $a->get_baseurl() . '/profile/' . $a->user['nickname'] . '"><img src="' . $author['thumb'] . '" alt="' . $a->user['username'] . '" /></a><br /><br />'; $html = prepare_body($datarray); $message = '<html><body>' . $link . $html . $disclaimer . '</body></html>'; include_once 'include/html2plain.php'; $params = array('fromName' => $a->user['username'], 'fromEmail' => $a->user['email'], 'toEmail' => $addr, 'replyTo' => $a->user['email'], 'messageSubject' => $subject, 'htmlVersion' => $message, 'textVersion' => html2plain($html . $disclaimer)); Emailer::send($params); } } } create_tags_from_item($post_id); create_files_from_item($post_id); if ($post_id == $parent) { add_thread($post_id); } // This is a real juggling act on shared hosting services which kill your processes // e.g. dreamhost. We used to start delivery to our native delivery agents in the background // and then run our plugin delivery from the foreground. We're now doing plugin delivery first, // because as soon as you start loading up a bunch of remote delivey processes, *this* page is // likely to get killed off. If you end up looking at an /item URL and a blank page, // it's very likely the delivery got killed before all your friends could be notified. // Currently the only realistic fixes are to use a reliable server - which precludes shared hosting, // or cut back on plugins which do remote deliveries. proc_run('php', "include/notifier.php", $notify_type, "{$post_id}"); logger('post_complete'); item_post_return($a->get_baseurl(), $api_source, $return_path); // NOTREACHED }
UV Paint & Coatings<br> 509 Marin #125<br> Thousand Oaks, CA 91360 </address> <address>(805) 390-1866</address> <h3>Email</h3> <?php $sendingEmail = (bool) $_POST['email']; $sentEmail = false; if ($sendingEmail) { require_once 'emailer.php'; $emailer = new Emailer(); $emailer->toEmail('*****@*****.**')->fromEmail($_POST['email'])->subject("uv-pc.com message from '" . $_POST['email'] . "'")->message($_POST['message']); $sentEmail = $emailer->send(); if ($sentEmail) { ?> <div class="alert alert-success">You message has been sent. Thank you.</div> <?php // Send CC to the sender $emailer->toEmail($_POST['email'])->message("This is a copy of a message you sent to uv-pc.com - for your records.\n\n" . $_POST['message'])->send(); } else { $errorOut = "<ul><li>" . implode($emailer->getErrors(), "</li><li>") . "</li></ul>"; ?> <div class="alert alert-danger"> We encountered a problem sending your message:<br> <?php echo $errorOut; ?> </div>
function notification($params) { #logger('notification()', LOGGER_DEBUG); $a = get_app(); // from here on everything is in the recipients language push_lang($params['language']); $banner = t('Friendica Notification'); $product = FRIENDICA_PLATFORM; $siteurl = $a->get_baseurl(true); $thanks = t('Thank You,'); $sitename = $a->config['sitename']; $site_admin = sprintf(t('%s Administrator'), $sitename); $nickname = ""; $sender_name = $sitename; $hostname = $a->get_hostname(); if (strpos($hostname, ':')) { $hostname = substr($hostname, 0, strpos($hostname, ':')); } $sender_email = $a->config['sender_email']; if (empty($sender_email)) { $sender_email = t('noreply') . '@' . $hostname; } $user = q("SELECT `nickname` FROM `user` WHERE `uid` = %d", intval($params['uid'])); if ($user) { $nickname = $user[0]["nickname"]; } // with $params['show_in_notification_page'] == false, the notification isn't inserted into // the database, and an email is sent if applicable. // default, if not specified: true $show_in_notification_page = x($params, 'show_in_notification_page') ? $params['show_in_notification_page'] : True; $additional_mail_header = ""; $additional_mail_header .= "Precedence: list\n"; $additional_mail_header .= "X-Friendica-Host: " . $hostname . "\n"; $additional_mail_header .= "X-Friendica-Account: <" . $nickname . "@" . $hostname . ">\n"; $additional_mail_header .= "X-Friendica-Platform: " . FRIENDICA_PLATFORM . "\n"; $additional_mail_header .= "X-Friendica-Version: " . FRIENDICA_VERSION . "\n"; $additional_mail_header .= "List-ID: <notification." . $hostname . ">\n"; $additional_mail_header .= "List-Archive: <" . $a->get_baseurl() . "/notifications/system>\n"; if (array_key_exists('item', $params)) { $title = $params['item']['title']; $body = $params['item']['body']; } else { $title = $body = ''; } // e.g. "your post", "David's photo", etc. $possess_desc = t('%s <!item_type!>'); if ($params['type'] == NOTIFY_MAIL) { $subject = sprintf(t('[Friendica:Notify] New mail received at %s'), $sitename); $preamble = sprintf(t('%1$s sent you a new private message at %2$s.'), $params['source_name'], $sitename); $epreamble = sprintf(t('%1$s sent you %2$s.'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', '[url=$itemlink]' . t('a private message') . '[/url]'); $sitelink = t('Please visit %s to view and/or reply to your private messages.'); $tsitelink = sprintf($sitelink, $siteurl . '/message/' . $params['item']['id']); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '/message/' . $params['item']['id'] . '">' . $sitename . '</a>'); $itemlink = $siteurl . '/message/' . $params['item']['id']; } if ($params['type'] == NOTIFY_COMMENT) { // logger("notification: params = " . print_r($params, true), LOGGER_DEBUG); $parent_id = $params['parent']; $p = q("SELECT `ignored` FROM `thread` WHERE `iid` = %d AND `uid` = %d LIMIT 1", intval($parent_id), intval($params['uid'])); if ($p and count($p) and $p[0]["ignored"]) { logger("Thread " . $parent_id . " will be ignored", LOGGER_DEBUG); return; } // Check to see if there was already a tag notify or comment notify for this post. // If so don't create a second notification $p = null; $p = q("select id from notify where (type = %d or type = %d or type = %d) and link = '%s' and uid = %d limit 1", intval(NOTIFY_TAGSELF), intval(NOTIFY_COMMENT), intval(NOTIFY_SHARE), dbesc($params['link']), intval($params['uid'])); if ($p and count($p)) { pop_lang(); return; } // if it's a post figure out who's post it is. $p = null; if ($params['otype'] === 'item' && $parent_id) { $p = q("select * from item where id = %d and uid = %d limit 1", intval($parent_id), intval($params['uid'])); } $item_post_type = item_post_type($p[0]); //$possess_desc = str_replace('<!item_type!>',$possess_desc); // "a post" $dest_str = sprintf(t('%1$s commented on [url=%2$s]a %3$s[/url]'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', $itemlink, $item_post_type); // "George Bull's post" if ($p) { $dest_str = sprintf(t('%1$s commented on [url=%2$s]%3$s\'s %4$s[/url]'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', $itemlink, $p[0]['author-name'], $item_post_type); } // "your post" if ($p[0]['owner-name'] == $p[0]['author-name'] && $p[0]['wall']) { $dest_str = sprintf(t('%1$s commented on [url=%2$s]your %3$s[/url]'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', $itemlink, $item_post_type); } // Some mail softwares relies on subject field for threading. // So, we cannot have different subjects for notifications of the same thread. // Before this we have the name of the replier on the subject rendering // differents subjects for messages on the same thread. $subject = sprintf(t('[Friendica:Notify] Comment to conversation #%1$d by %2$s'), $parent_id, $params['source_name']); $preamble = sprintf(t('%s commented on an item/conversation you have been following.'), $params['source_name']); $epreamble = $dest_str; $sitelink = t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $itemlink = $params['link']; } if ($params['type'] == NOTIFY_WALL) { $subject = sprintf(t('[Friendica:Notify] %s posted to your profile wall'), $params['source_name']); $preamble = sprintf(t('%1$s posted to your profile wall at %2$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('%1$s posted to [url=%2$s]your wall[/url]'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', $params['link']); $sitelink = t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $itemlink = $params['link']; } if ($params['type'] == NOTIFY_TAGSELF) { $subject = sprintf(t('[Friendica:Notify] %s tagged you'), $params['source_name']); $preamble = sprintf(t('%1$s tagged you at %2$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('%1$s [url=%2$s]tagged you[/url].'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', $params['link']); $sitelink = t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $itemlink = $params['link']; } if ($params['type'] == NOTIFY_SHARE) { $subject = sprintf(t('[Friendica:Notify] %s shared a new post'), $params['source_name']); $preamble = sprintf(t('%1$s shared a new post at %2$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('%1$s [url=%2$s]shared a post[/url].'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', $params['link']); $sitelink = t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $itemlink = $params['link']; } if ($params['type'] == NOTIFY_POKE) { $subject = sprintf(t('[Friendica:Notify] %1$s poked you'), $params['source_name']); $preamble = sprintf(t('%1$s poked you at %2$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('%1$s [url=%2$s]poked you[/url].'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', $params['link']); $subject = str_replace('poked', t($params['activity']), $subject); $preamble = str_replace('poked', t($params['activity']), $preamble); $epreamble = str_replace('poked', t($params['activity']), $epreamble); $sitelink = t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $itemlink = $params['link']; } if ($params['type'] == NOTIFY_TAGSHARE) { $subject = sprintf(t('[Friendica:Notify] %s tagged your post'), $params['source_name']); $preamble = sprintf(t('%1$s tagged your post at %2$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('%1$s tagged [url=%2$s]your post[/url]'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', $itemlink); $sitelink = t('Please visit %s to view and/or reply to the conversation.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $itemlink = $params['link']; } if ($params['type'] == NOTIFY_INTRO) { $subject = sprintf(t('[Friendica:Notify] Introduction received')); $preamble = sprintf(t('You\'ve received an introduction from \'%1$s\' at %2$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('You\'ve received [url=%1$s]an introduction[/url] from %2$s.'), $itemlink, '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]'); $body = sprintf(t('You may visit their profile at %s'), $params['source_link']); $sitelink = t('Please visit %s to approve or reject the introduction.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $itemlink = $params['link']; switch ($params['verb']) { case ACTIVITY_FRIEND: // someone started to share with user (mostly OStatus) $subject = sprintf(t('[Friendica:Notify] A new person is sharing with you')); $preamble = sprintf(t('%1$s is sharing with you at %2$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('%1$s is sharing with you at %2$s'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', $sitename); break; case ACTIVITY_FOLLOW: // someone started to follow the user (mostly OStatus) $subject = sprintf(t('[Friendica:Notify] You have a new follower')); $preamble = sprintf(t('You have a new follower at %2$s : %1$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('You have a new follower at %2$s : %1$s'), '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]', $sitename); break; default: // ACTIVITY_REQ_FRIEND is default activity for notifications break; } } if ($params['type'] == NOTIFY_SUGGEST) { $subject = sprintf(t('[Friendica:Notify] Friend suggestion received')); $preamble = sprintf(t('You\'ve received a friend suggestion from \'%1$s\' at %2$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('You\'ve received [url=%1$s]a friend suggestion[/url] for %2$s from %3$s.'), $itemlink, '[url=' . $params['item']['url'] . ']' . $params['item']['name'] . '[/url]', '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]'); $body = t('Name:') . ' ' . $params['item']['name'] . "\n"; $body .= t('Photo:') . ' ' . $params['item']['photo'] . "\n"; $body .= sprintf(t('You may visit their profile at %s'), $params['item']['url']); $sitelink = t('Please visit %s to approve or reject the suggestion.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $itemlink = $params['link']; } if ($params['type'] == NOTIFY_CONFIRM) { if ($params['verb'] == ACTIVITY_FRIEND) { // mutual connection $subject = sprintf(t('[Friendica:Notify] Connection accepted')); $preamble = sprintf(t('\'%1$s\' has acepted your connection request at %2$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('%2$s has accepted your [url=%1$s]connection request[/url].'), $itemlink, '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]'); $body = t('You are now mutual friends and may exchange status updates, photos, and email without restriction.'); $sitelink = t('Please visit %s if you wish to make any changes to this relationship.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $itemlink = $params['link']; } else { // ACTIVITY_FOLLOW $subject = sprintf(t('[Friendica:Notify] Connection accepted')); $preamble = sprintf(t('\'%1$s\' has acepted your connection request at %2$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('%2$s has accepted your [url=%1$s]connection request[/url].'), $itemlink, '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]'); $body = sprintf(t('\'%1$s\' has chosen to accept you a "fan", which restricts some forms of communication - such as private messaging and some profile interactions. If this is a celebrity or community page, these settings were applied automatically.'), $params['source_name']); $body .= "\n\n"; $body .= sprintf(t('\'%1$s\' may choose to extend this into a two-way or more permissive relationship in the future. '), $params['source_name']); $sitelink = t('Please visit %s if you wish to make any changes to this relationship.'); $tsitelink = sprintf($sitelink, $siteurl); $hsitelink = sprintf($sitelink, '<a href="' . $siteurl . '">' . $sitename . '</a>'); $itemlink = $params['link']; } } if ($params['type'] == NOTIFY_SYSTEM) { switch ($params['event']) { case "SYSTEM_REGISTER_REQUEST": $subject = sprintf(t('[Friendica System:Notify] registration request')); $preamble = sprintf(t('You\'ve received a registration request from \'%1$s\' at %2$s'), $params['source_name'], $sitename); $epreamble = sprintf(t('You\'ve received a [url=%1$s]registration request[/url] from %2$s.'), $itemlink, '[url=' . $params['source_link'] . ']' . $params['source_name'] . '[/url]'); $body = sprintf(t('Full Name: %1$s\\nSite Location: %2$s\\nLogin Name: %3$s (%4$s)'), $params['source_name'], $siteurl, $params['source_mail'], $params['source_nick']); $sitelink = t('Please visit %s to approve or reject the request.'); $tsitelink = sprintf($sitelink, $params['link']); $hsitelink = sprintf($sitelink, '<a href="' . $params['link'] . '">' . $sitename . '</a><br><br>'); $itemlink = $params['link']; break; case "SYSTEM_DB_UPDATE_FAIL": break; } } if ($params['type'] == "SYSTEM_EMAIL") { // not part of the notifications. // it just send a mail to the user. // It will be used by the system to send emails to users (like // password reset, invitations and so) using one look (but without // add a notification to the user, with could be inexistent) $subject = $params['subject']; $preamble = $params['preamble']; $body = $params['body']; $sitelink = ""; $tsitelink = ""; $hsitelink = ""; $itemlink = ""; $show_in_notification_page = false; } $subject .= " (" . $nickname . "@" . $hostname . ")"; $h = array('params' => $params, 'subject' => $subject, 'preamble' => $preamble, 'epreamble' => $epreamble, 'body' => $body, 'sitelink' => $sitelink, 'tsitelink' => $tsitelink, 'hsitelink' => $hsitelink, 'itemlink' => $itemlink); call_hooks('enotify', $h); $subject = $h['subject']; $preamble = $h['preamble']; $epreamble = $h['epreamble']; $body = $h['body']; $sitelink = $h['sitelink']; $tsitelink = $h['tsitelink']; $hsitelink = $h['hsitelink']; $itemlink = $h['itemlink']; if ($show_in_notification_page) { logger("adding notification entry", LOGGER_DEBUG); do { $dups = false; $hash = random_string(); $r = q("SELECT `id` FROM `notify` WHERE `hash` = '%s' LIMIT 1", dbesc($hash)); if (count($r)) { $dups = true; } } while ($dups == true); $datarray = array(); $datarray['hash'] = $hash; $datarray['name'] = $params['source_name']; $datarray['url'] = $params['source_link']; $datarray['photo'] = $params['source_photo']; $datarray['date'] = datetime_convert(); $datarray['uid'] = $params['uid']; $datarray['link'] = $itemlink; $datarray['parent'] = $parent_id; $datarray['type'] = $params['type']; $datarray['verb'] = $params['verb']; $datarray['otype'] = $params['otype']; $datarray['abort'] = false; call_hooks('enotify_store', $datarray); if ($datarray['abort']) { pop_lang(); return False; } // create notification entry in DB $r = q("insert into notify (hash,name,url,photo,date,uid,link,parent,type,verb,otype)\n\t\t\tvalues('%s','%s','%s','%s','%s',%d,'%s',%d,%d,'%s','%s')", dbesc($datarray['hash']), dbesc($datarray['name']), dbesc($datarray['url']), dbesc($datarray['photo']), dbesc($datarray['date']), intval($datarray['uid']), dbesc($datarray['link']), intval($datarray['parent']), intval($datarray['type']), dbesc($datarray['verb']), dbesc($datarray['otype'])); $r = q("select id from notify where hash = '%s' and uid = %d limit 1", dbesc($hash), intval($params['uid'])); if ($r) { $notify_id = $r[0]['id']; } else { pop_lang(); return False; } // we seem to have a lot of duplicate comment notifications due to race conditions, mostly from forums // After we've stored everything, look again to see if there are any duplicates and if so remove them $p = null; $p = q("select id from notify where ( type = %d or type = %d ) and link = '%s' and uid = %d order by id", intval(NOTIFY_TAGSELF), intval(NOTIFY_COMMENT), dbesc($params['link']), intval($params['uid'])); if ($p && count($p) > 1) { for ($d = 1; $d < count($p); $d++) { q("delete from notify where id = %d", intval($p[$d]['id'])); } // only continue on if we stored the first one if ($notify_id != $p[0]['id']) { pop_lang(); return False; } } $itemlink = $a->get_baseurl() . '/notify/view/' . $notify_id; $msg = replace_macros($epreamble, array('$itemlink' => $itemlink)); $r = q("update notify set msg = '%s' where id = %d and uid = %d", dbesc($msg), intval($notify_id), intval($params['uid'])); } // send email notification if notification preferences permit if (intval($params['notify_flags']) & intval($params['type']) || $params['type'] == NOTIFY_SYSTEM || $params['type'] == "SYSTEM_EMAIL") { logger('sending notification email'); if (isset($params['parent']) and intval($params['parent']) != 0) { $id_for_parent = $params['parent'] . "@" . $hostname; // Is this the first email notification for this parent item and user? $r = q("select `id` from `notify-threads` where `master-parent-item` = %d and `receiver-uid` = %d limit 1", intval($params['parent']), intval($params['uid'])); // If so, create the record of it and use a message-id smtp header. if (!$r) { logger("notify_id:" . intval($notify_id) . ", parent: " . intval($params['parent']) . "uid: " . intval($params['uid']), LOGGER_DEBUG); $r = q("insert into `notify-threads` (`notify-id`, `master-parent-item`, `receiver-uid`, `parent-item`)\n\t\t\t\t\tvalues(%d,%d,%d,%d)", intval($notify_id), intval($params['parent']), intval($params['uid']), 0); $additional_mail_header .= "Message-ID: <{$id_for_parent}>\n"; $log_msg = "include/enotify: No previous notification found for this parent:\n" . " parent: {$params['parent']}\n" . " uid : {$params['uid']}\n"; logger($log_msg, LOGGER_DEBUG); } else { // If not, just "follow" the thread. $additional_mail_header .= "References: <{$id_for_parent}>\nIn-Reply-To: <{$id_for_parent}>\n"; logger("There's already a notification for this parent:\n" . print_r($r, true), LOGGER_DEBUG); } } // textversion keeps linebreaks $textversion = strip_tags(str_replace("<br>", "\n", html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r", "\\n"), "\n", $body))), ENT_QUOTES, 'UTF-8'))); $htmlversion = html_entity_decode(bbcode(stripslashes(str_replace(array("\\r\\n", "\\r", "\\n\\n", "\\n"), "<br />\n", $body))), ENT_QUOTES, 'UTF-8'); $datarray = array(); $datarray['banner'] = $banner; $datarray['product'] = $product; $datarray['preamble'] = $preamble; $datarray['sitename'] = $sitename; $datarray['siteurl'] = $siteurl; $datarray['type'] = $params['type']; $datarray['parent'] = $params['parent']; $datarray['source_name'] = $params['source_name']; $datarray['source_link'] = $params['source_link']; $datarray['source_photo'] = $params['source_photo']; $datarray['uid'] = $params['uid']; $datarray['username'] = $params['to_name']; $datarray['hsitelink'] = $hsitelink; $datarray['tsitelink'] = $tsitelink; $datarray['hitemlink'] = '<a href="' . $itemlink . '">' . $itemlink . '</a>'; $datarray['titemlink'] = $itemlink; $datarray['thanks'] = $thanks; $datarray['site_admin'] = $site_admin; $datarray['title'] = stripslashes($title); $datarray['htmlversion'] = $htmlversion; $datarray['textversion'] = $textversion; $datarray['subject'] = $subject; $datarray['headers'] = $additional_mail_header; call_hooks('enotify_mail', $datarray); // check whether sending post content in email notifications is allowed // always true for "SYSTEM_EMAIL" $content_allowed = !get_config('system', 'enotify_no_content') || $params['type'] == "SYSTEM_EMAIL"; // load the template for private message notifications $tpl = get_markup_template('email_notify_html.tpl'); $email_html_body = replace_macros($tpl, array('$banner' => $datarray['banner'], '$product' => $datarray['product'], '$preamble' => str_replace("\n", "<br>\n", $datarray['preamble']), '$sitename' => $datarray['sitename'], '$siteurl' => $datarray['siteurl'], '$source_name' => $datarray['source_name'], '$source_link' => $datarray['source_link'], '$source_photo' => $datarray['source_photo'], '$username' => $datarray['to_name'], '$hsitelink' => $datarray['hsitelink'], '$hitemlink' => $datarray['hitemlink'], '$thanks' => $datarray['thanks'], '$site_admin' => $datarray['site_admin'], '$title' => $datarray['title'], '$htmlversion' => $datarray['htmlversion'], '$content_allowed' => $content_allowed)); // load the template for private message notifications $tpl = get_markup_template('email_notify_text.tpl'); $email_text_body = replace_macros($tpl, array('$banner' => $datarray['banner'], '$product' => $datarray['product'], '$preamble' => $datarray['preamble'], '$sitename' => $datarray['sitename'], '$siteurl' => $datarray['siteurl'], '$source_name' => $datarray['source_name'], '$source_link' => $datarray['source_link'], '$source_photo' => $datarray['source_photo'], '$username' => $datarray['to_name'], '$tsitelink' => $datarray['tsitelink'], '$titemlink' => $datarray['titemlink'], '$thanks' => $datarray['thanks'], '$site_admin' => $datarray['site_admin'], '$title' => $datarray['title'], '$textversion' => $datarray['textversion'], '$content_allowed' => $content_allowed)); // logger('text: ' . $email_text_body); // use the Emailer class to send the message return Emailer::send(array('uid' => $params['uid'], 'fromName' => $sender_name, 'fromEmail' => $sender_email, 'replyTo' => $sender_email, 'toEmail' => $params['to_email'], 'messageSubject' => $datarray['subject'], 'htmlVersion' => $email_html_body, 'textVersion' => $email_text_body, 'additionalMailHeader' => $datarray['headers'])); } return False; }
$relation_pod = pods('relation', $evaluation_pod->field('relation')['ID']); error_log('>>> Expiration ' . json_encode($evaluation_pod->field('expiration'))); $details = ['role' => $user_role, 'company_or_agency' => get_user_meta($user_id, 'company_or_agency', true), 'company' => $relation_pod->display('company'), 'agency' => $relation_pod->display('agency'), 'brand' => $relation_pod->display('brand'), 'country' => $relation_pod->display('country'), 'duration' => $durations[$user_role], 'expiration' => date_i18n('j F', strtotime('+ 2weeks'))]; $details['source_company'] = $details['company_or_agency'] == 'company' ? $details['company'] : $details['agency']; $details['target_company'] = $details['company_or_agency'] == 'company' ? $details['agency'] : $details['company']; if (!($details['company_or_agency'] === 'company' || $details['company_or_agency'] === 'agency')) { throw new Exception('User is neither of type agency or company'); } $invitation_postfix = $details['company_or_agency'] === 'company' ? 'client' : 'agency'; //error_log('got this far'); $email = new Emailer(); $email->headers[] = 'Cc: Jasper Kums <*****@*****.**>' . "\r\n"; try { $email->compose(['template' => $is_reminder ? 'reminder' : ($is_reporting ? 'reporting' : 'invitation' . $invitation_postfix), 'pre_header' => '', 'title' => $is_reminder ? 'Reminder ProCync Survey' : 'Welcome to ProCync', 'name' => $user->display_name, 'date' => date_i18n('j M Y'), 'button_text' => $is_reporting ? 'VIEW REPORTING' : 'START SURVEY', 'button_url' => get_bloginfo('url') . ($is_reporting ? '/reporting/' : '/survey/') . $token, 'details' => $details]); $timestamp = time(); $result = $email->send(['subject' => ($is_reminder ? 'Reminder ProCync Survey, ' : 'Welcome to ProCync, ') . $user->display_name . ' - ' . $timestamp, 'to' => $user->user_email]); if ($result) { // Update post meta, so we know an invitation has already been sent update_post_meta($invitation_id, 'invitation_send', 1); update_post_meta($invitation_id, 'invitation_send_date', $timestamp); // Return success and the timestamp so we can update the row with javascript header('Content-Type: application/json'); print_r(json_encode(['success' => 'success', 'date' => date_i18n('d-M-Y G:i', $timestamp)])); } else { // Something went wrong sending the e-mail, but we don't know what header('Content-Type: application/json'); print_r(json_encode(['error' => 'error', 'message' => 'failed to send e-mail'])); } } catch (Exception $e) { error_log(json_encode($e)); // Something went wrong sending the e-mail, return error and error message