Beispiel #1
0
 /**
  * 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;
                 }
             }
         }
     }
 }
Beispiel #3
0
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";
        }
    }
}
Beispiel #4
0
 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();
     }
 }
Beispiel #5
0
    } 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">
Beispiel #7
0
 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' => '')));
 }
Beispiel #8
0
/**
 * @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;
            }
        }
    }
}
Beispiel #9
0
 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);
     }
 }
Beispiel #10
0
    $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) {
Beispiel #11
0
                // 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;
                    }
                }
            }
        }
    }
Beispiel #14
0
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;
    }
}
Beispiel #15
0
 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>
Beispiel #17
0
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
}
Beispiel #18
0
      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>
Beispiel #19
0
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;
}
Beispiel #20
0
 $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