getRealName();
}
//-- requires a string to add into the searchlog-file
function AddToSearchLog($log_message, $geds) {
global $WT_REQUEST;
foreach (WT_Tree::getAll() as $tree) {
WT_DB::prepare(
"INSERT INTO `##log` (log_type, log_message, ip_address, user_id, gedcom_id) VALUES ('search', ?, ?, ?, ?)"
)->execute(array(
(count(WT_Tree::getAll())==count($geds) ? 'Global search: ' : 'Gedcom search: ').$log_message,
$WT_REQUEST->getClientIp(),
WT_USER_ID ? WT_USER_ID : null,
$tree->tree_id
));
}
}
// Store a new message in the database
function addMessage($message) {
global $WT_TREE, $WT_REQUEST;
$success = true;
$sender = User::findByIdentifier($message['from']);
$recipient = User::findByIdentifier($message['to']);
// Sender may not be a webtrees user
if ($sender) {
$sender_email = $sender->getEmail();
$sender_real_name = $sender->getRealName();
} else {
$sender_email = $message['from'];
$sender_real_name = $message['from_name'];
}
// Send a copy of the copy message back to the sender.
if ($message['method']!='messaging') {
// Switch to the sender’s language.
if ($sender) {
WT_I18N::init($sender->getPreference('language'));
}
$copy_email = $message['body'];
if (!empty($message['url'])) {
$copy_email .=
WT_Mail::EOL . WT_Mail::EOL . '--------------------------------------' . WT_Mail::EOL .
WT_I18N::translate('This message was sent while viewing the following URL: ') . $message['url'] . WT_Mail::EOL;
}
$copy_email .= WT_Mail::auditFooter();
if ($sender) {
// Message from a logged-in user
$copy_email = WT_I18N::translate('You sent the following message to a webtrees user:') . ' ' . $recipient->getRealName() . WT_Mail::EOL . WT_Mail::EOL . $copy_email;
} else {
// Message from a visitor
$copy_email = WT_I18N::translate('You sent the following message to a webtrees administrator:') . WT_Mail::EOL . WT_Mail::EOL . WT_Mail::EOL . $copy_email;
}
$success = $success && WT_Mail::send(
// From:
$WT_TREE,
// To:
$sender_email,
$sender_real_name,
// Reply-To:
WT_Site::getPreference('SMTP_FROM_NAME'),
$WT_TREE->getPreference('title'),
// Message
WT_I18N::translate('webtrees message') . ' - ' . $message['subject'],
$copy_email
);
}
// Switch to the recipient’s language.
WT_I18N::init($recipient->getPreference('language'));
if (isset($message['from_name'])) {
$message['body'] =
WT_I18N::translate('Your name:') . ' ' . $message['from_name'] . WT_Mail::EOL .
WT_I18N::translate('Email address:') . ' ' . $message['from_email'] . WT_Mail::EOL . WT_Mail::EOL .
$message['body'];
}
// Add another footer - unless we are an admin
if (!Auth::isAdmin()) {
if (!empty($message['url'])) {
$message['body'] .=
WT_Mail::EOL . WT_Mail::EOL .
'--------------------------------------' . WT_Mail::EOL .
WT_I18N::translate('This message was sent while viewing the following URL: ') . $message['url'] . WT_Mail::EOL;
}
$message['body'] .= WT_Mail::auditFooter();
}
if (empty($message['created'])) {
$message['created'] = gmdate ("D, d M Y H:i:s T");
}
if ($message['method']!='messaging3' && $message['method']!='mailto' && $message['method']!='none') {
WT_DB::prepare("INSERT INTO `##message` (sender, ip_address, user_id, subject, body) VALUES (? ,? ,? ,? ,?)")
->execute(array(
$message['from'],
$WT_REQUEST->getClientIp(),
$recipient->getUserId(),
$message['subject'],
str_replace('
', '', $message['body']) // Remove the
that we added for the external email. TODO: create different messages
));
}
if ($message['method']!='messaging') {
if ($sender) {
$original_email = WT_I18N::translate('The following message has been sent to your webtrees user account from ');
$original_email .= $sender->getRealName();
} else {
$original_email = WT_I18N::translate('The following message has been sent to your webtrees user account from ');
if (!empty($message['from_name'])) {
$original_email .= $message['from_name'];
} else {
$original_email .= $message['from'];
}
}
$original_email .= WT_Mail::EOL . WT_Mail::EOL . $message['body'];
$success = $success && WT_Mail::send(
// From:
$WT_TREE,
// To:
$recipient->getEmail(),
$recipient->getRealName(),
// Reply-To:
$sender_email,
$sender_real_name,
// Message
WT_I18N::translate('webtrees message') . ' - ' . $message['subject'],
$original_email
);
}
WT_I18N::init(WT_LOCALE); // restore language settings if needed
return $success;
}
//-- deletes a message in the database
function deleteMessage($message_id) {
WT_DB::prepare("DELETE FROM `##message` WHERE message_id=?")->execute(array($message_id));
}
//-- Return an array of a users messages
function getUserMessages($user_id) {
return
WT_DB::prepare("SELECT message_id, sender, subject, body, UNIX_TIMESTAMP(created) AS created FROM `##message` WHERE user_id=? ORDER BY message_id DESC")
->execute(array($user_id))
->fetchAll();
}
/**
* Adds a news item to the database
*
* This function adds a news item represented by the $news array to the database.
* If the $news array has an ['id'] field then the function assumes that it is
* as update of an older news item.
*
* @param array $news a news item array
*/
function addNews($news) {
if (array_key_exists('id', $news)) {
WT_DB::prepare("UPDATE `##news` SET subject=?, body=?, updated=FROM_UNIXTIME(?) WHERE news_id=?")
->execute(array($news['title'], $news['text'], $news['date'], $news['id']));
} else {
WT_DB::prepare("INSERT INTO `##news` (user_id, gedcom_id, subject, body) VALUES (NULLIF(?, ''), NULLIF(?, '') ,? ,?)")
->execute(array($news['user_id'], $news['gedcom_id'], $news['title'], $news['text']));
}
}
/**
* Deletes a news item from the database
*
* @param int $news_id the id number of the news item to delete
*
* @return bool
*/
function deleteNews($news_id) {
return (bool)WT_DB::prepare("DELETE FROM `##news` WHERE news_id=?")->execute(array($news_id));
}
// Gets the news items for the given user or gedcom
function getUserNews($user_id) {
$rows=
WT_DB::prepare("SELECT SQL_CACHE news_id, user_id, gedcom_id, UNIX_TIMESTAMP(updated) AS updated, subject, body FROM `##news` WHERE user_id=? ORDER BY updated DESC")
->execute(array($user_id))
->fetchAll();
$news=array();
foreach ($rows as $row) {
$news[$row->news_id]=array(
'id'=>$row->news_id,
'user_id'=>$row->user_id,
'gedcom_id'=>$row->gedcom_id,
'date'=>$row->updated,
'title'=>$row->subject,
'text'=>$row->body,
);
}
return $news;
}
function getGedcomNews($gedcom_id) {
$rows=
WT_DB::prepare("SELECT SQL_CACHE news_id, user_id, gedcom_id, UNIX_TIMESTAMP(updated) AS updated, subject, body FROM `##news` WHERE gedcom_id=? ORDER BY updated DESC")
->execute(array($gedcom_id))
->fetchAll();
$news=array();
foreach ($rows as $row) {
$news[$row->news_id]=array(
'id'=>$row->news_id,
'user_id'=>$row->user_id,
'gedcom_id'=>$row->gedcom_id,
'date'=>$row->updated,
'title'=>$row->subject,
'text'=>$row->body,
);
}
return $news;
}
/**
* Gets the news item for the given news id
*
* @param int $news_id the id of the news entry to get
*
* @return array|null
*/
function getNewsItem($news_id) {
$row=
WT_DB::prepare("SELECT SQL_CACHE news_id, user_id, gedcom_id, UNIX_TIMESTAMP(updated) AS updated, subject, body FROM `##news` WHERE news_id=?")
->execute(array($news_id))
->fetchOneRow();
if ($row) {
return array(
'id'=>$row->news_id,
'user_id'=>$row->user_id,
'gedcom_id'=>$row->gedcom_id,
'date'=>$row->updated,
'title'=>$row->subject,
'text'=>$row->body,
);
} else {
return null;
}
}