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.
 
 
 
 
 
 

142 lines
5.5 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$
function wikiplugin_invite_info()
{
return [
'name' => tra('Invite'),
'documentation' => 'PluginInvite',
'description' => tra('Invite a user to join your groups'),
'prefs' => [ 'wikiplugin_invite', 'feature_invite' ],
'body' => tra('Confirmation message after posting form'),
'iconname' => 'share',
'introduced' => 4,
'params' => [
'including' => [
'required' => false,
'name' => tra('Including Group'),
'description' => tra('Will list only the groups that include this group'),
'since' => '4.0',
'filter' => 'groupname',
],
'defaultgroup' => [
'required' => false,
'name' => tra('Default Group'),
'description' => tra('Dropdown list will show this group by default'),
'since' => '4.0',
'filter' => 'groupname',
],
'itemId' => [
'required' => false,
'name' => tra('Item ID'),
'description' => tra('Dropdown list will show the group related to this item ID (in group selector or
creator field) by default'),
'since' => '4.0',
'filter' => 'text',
'profile_reference' => 'tracker_item',
],
]
];
}
function wikiplugin_invite($data, $params)
{
global $prefs, $user, $tiki_p_invite_to_my_groups;
$userlib = TikiLib::lib('user');
$tikilib = TikiLib::lib('tiki');
$smarty = TikiLib::lib('smarty');
if ($tiki_p_invite_to_my_groups != 'y') {
return;
}
$userGroups = $userlib->get_user_groups_inclusion($user);
if (! empty($params['including'])) {
$groups = $userlib->get_including_groups($params['including']);
foreach ($userGroups as $gr => $inc) {
if (! in_array($gr, $groups)) {
unset($userGroups[$gr]);
}
}
}
$errors = [];
if (isset($_REQUEST['invite'])) {
if (empty($_REQUEST['email'])) {
$errors[] = tra('The following mandatory fields are missing') . ' ' . tra('Email address');
}
if (! validate_email($_REQUEST['email'])) {
$errors[] = tra('Invalid Email') . ' ' . $_REQUEST['email'];
}
if (! empty($_REQUEST['groups'])) {
foreach ($_REQUEST['groups'] as $group) {
if (empty($userGroups[$group])) {
$errors[] = tra('Incorrect param') . ' ' . $group;
}
}
}
if (empty($errors)) {
$email = $_REQUEST['email'];
if (! ($invite = $userlib->get_user_by_email($email))) {
$new_user = true;
$password = 'toto';//$tikilib->genPass();
$codedPassword = md5($password);
if ($prefs['login_autogenerate'] == 'y') {
$uname = '';
} else {
$uname = $email;
}
$uname = $userlib->add_user($uname, $password, $email, $password, true, null);
$smarty->assign('codedPassword', $codedPassword);
$invite = $email;
} else {
$new_user = false;
}
$smarty->assign_by_ref('new_user', $new_user);
$smarty->assign_by_ref('invite', $invite);
if (! empty($_REQUEST['groups'])) {
foreach ($_REQUEST['groups'] as $group) {
$userlib->assign_user_to_group($uname, $group);
$invitedGroups[] = $userlib->get_group_info($group);
}
}
include_once('lib/webmail/tikimaillib.php');
$mail = new TikiMail();
$machine = parse_url($_SERVER['REQUEST_URI']);
$machine = $tikilib->httpPrefix(true) . dirname($machine['path']);
$smarty->assign_by_ref('machine', $machine);
$subject = sprintf($smarty->fetch('mail/mail_invite_subject.tpl'), $_SERVER['SERVER_NAME']);
$mail->setSubject($subject);
if (! empty($_REQUEST['message'])) {
$smarty->assign('message', $_REQUEST['message']);
}
$smarty->assign_by_ref('groups', $invitedGroups);
$txt = $smarty->fetch('mail/mail_invite.tpl');
$mail->setText($txt);
$mail->send([$email]);
return $data;
} else {
Feedback::error(['mes' => $errors]);
$smarty->assign_by_ref('email', $_REQUEST['email']);
if (! empty($_REQUEST['groups'])) {
$smarty->assign_by_ref('groups', $_REQUEST['groups']);
}
if (! empty($_REQUEST['message'])) {
$smarty->assign_by_ref('message', $_REQUEST['message']);
}
}
}
if (! empty($_REQUEST['itemId'])) {
$params['itemId'] = $_REQUEST['itemId'];
}
if (! empty($params['itemId'])) {
$item = Tracker_Item::fromId($params['itemId']);
$params['defaultgroup'] = $item->getOwnerGroup();
}
$smarty->assign_by_ref('params', $params);
$smarty->assign_by_ref('userGroups', $userGroups);
return '~np~' . $smarty->fetch('wiki-plugins/wikiplugin_invite.tpl') . '~/np~';
}