You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

175 lines
5.7 KiB

<?php
// (c) Copyright by authors of the Tiki Wiki CMS Groupware Project
//
// All Rights Reserved. See copyright.txt for details and a complete list of authors.
// Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See license.txt for details.
// $Id$
require_once('tiki-setup.php');
$access->check_feature('feature_invite');
$access->check_permission('tiki_p_invite');
require_once('lib/webmail/tikimaillib.php');
@ini_set('max_execution_time', 0);
$prefs['feature_wiki_protect_email'] = 'n'; //not to alter the email
/* csv format: lastname,firstname,mail */
/**
* @param $bloc
* @return array
*/
function parsemails_csv($bloc)
{
$results = [];
$lines = preg_split('/[\n\r]+/', $bloc);
foreach ($lines as $line) {
$l = explode(',', $line);
$r = [];
$r['lastname'] = trim($l[0]);
$r['firstname'] = trim($l[1]);
$r['email'] = trim($l[2]);
if (strpos($r['email'], '@') !== false) {
$results[] = $r;
}
}
return $results;
}
/* everything format */
/**
* @param $bloc
* @return array
*/
function parsemails_all($bloc)
{
$bloc = str_replace("\r\n", "\n", $bloc);
$bloc = str_replace("\n\r", "\n", $bloc);
$bloc = str_replace("\r", "\n", $bloc);
$mails = preg_split('/[^a-zA-Z0-9@._-]/', $bloc);
$results = [];
foreach ($mails as $m) {
$m = trim($m);
if (strpos($m, '@') === false) {
continue;
}
if (strpos($m, '.') === false) {
continue;
}
$r = [];
$r['lastname'] = '';
$r['firstname'] = '';
$r['email'] = $m;
$results[] = $r;
}
return $results;
}
$previous = [];
$res = $tikilib->query("SELECT * FROM `tiki_invite` ORDER BY `ts` DESC");
while (is_array($row = $res->fetchRow())) {
$row['datetime'] = strftime('%c', $row['ts']);
$previous[$row['id']] = $row;
}
$smarty->assign('previous', $previous);
if (isset($_REQUEST['loadprevious']) && ! empty($_REQUEST['loadprevious']) && isset($previous[(int)$_REQUEST['loadprevious']])) {
$prev = $previous[(int)$_REQUEST['loadprevious']];
$res = $tikilib->query("SELECT * FROM `tiki_invited` WHERE id_invite=?", [(int)$_REQUEST['loadprevious']]);
$prev_invited = "";
while (is_array($row = $res->fetchRow())) {
$prev_invited .= $row['lastname'] . ',' . $row['firstname'] . ',' . $row['email'] . "\n";
}
$_REQUEST['emailslist'] = $prev_invited;
$_REQUEST['emailslist_format'] = 'csv';
$_REQUEST['emailsubject'] = $prev['emailsubject'];
$_REQUEST['emailcontent'] = $prev['emailcontent'];
$_REQUEST['wikicontent'] = $prev['wikicontent'];
$_REQUEST['wikipageafter'] = $prev['wikipageafter'];
$_REQUEST['invitegroups'] = explode(',', $prev['groups']);
}
$user_details = $userlib->get_user_details($user);
$allgroups = $userlib->get_groups(0, -1, 'groupName_desc', '', '', 'n');
$invitegroups = [];
foreach ($allgroups['data'] as $agroup) {
$invitegroups[$agroup['groupName']] = $agroup['groupDesc'];
}
$smarty->assign("invitegroups", $invitegroups);
$smarty->assign("usergroups", $user_details['groups']);
if (isset($_REQUEST['send'])) {
$_text = $_REQUEST["emailcontent"];
$_text = str_replace("\r\n", "\n", $_text);
$_text = str_replace("\n\r", "\n", $_text);
$_text = str_replace("\r", "\n", $_text);
$mails = $_REQUEST["emailslist"];
switch ($_REQUEST['emailslist_format']) {
case 'all':
$emails = parsemails_all($mails);
break;
case 'csv':
$emails = parsemails_csv($mails);
break;
default:
$emails = [];
}
$igroups = $_REQUEST['invitegroups'];
if (! empty($_REQUEST['confirm'])) {
$tikilib->query(
"INSERT INTO `tiki_invite` (inviter, `groups`, ts, emailsubject,emailcontent,wikicontent,wikipageafter) VALUES (?,?,?,?,?,?,?)",
[
$user,
count($igroups) ? implode(',', $igroups) : null,
$tikilib->now,
$_REQUEST['emailsubject'],
$_REQUEST['emailcontent'],
$_REQUEST['wikicontent'],
empty($_REQUEST['wikipageafter']) ? null : $_REQUEST['wikipageafter'],
]
);
$res = $tikilib->query(
"SELECT MAX(id) AS `id` FROM `tiki_invite` WHERE `inviter`=? AND `ts`=?",
[$user, $tikilib->now]
);
$row = $res->fetchRow();
$id = $row['id'];
foreach ($emails as $m) {
$tikilib->query(
"INSERT INTO `tiki_invited` (id_invite, email, firstname, lastname, used) VALUES (?,?,?,?,?)",
[$id, $m['email'], $m['firstname'], $m['lastname'], "no"]
);
}
$_SERVER['SCRIPT_URI'] = empty($_SERVER['SCRIPT_URI']) ? 'http://' . $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'] : $_SERVER['SCRIPT_URI'];
foreach ($emails as $m) {
$mail = new TikiMail();
$mail->setFrom($prefs['sender_email']);
$mail->setSubject($_REQUEST["emailsubject"]);
$url = str_replace('tiki-invite.php', 'tiki-invited.php', $_SERVER['SCRIPT_URI'])
. '?invite=' . $id . '&email=' . urlencode($m['email']);
$text = $_text;
$text = str_replace('{link}', $url, $text);
$text = str_replace('{email}', $m['email'], $text);
$text = str_replace('{firstname}', $m['firstname'], $text);
$text = str_replace('{lastname}', $m['lastname'], $text);
$mail->setText($text);
$mail->send([$m['email']]);
}
$smarty->assign('sentresult', true);
}
$smarty->assign('emails', $emails);
}
$smarty->assign('mid', 'tiki-invite.tpl');
$smarty->display("tiki.tpl");