invitation 3

This commit is contained in:
Yuri Kuznetsov
2014-03-27 15:42:05 +02:00
parent 36149bff38
commit 2a0ce60f21
2 changed files with 104 additions and 6 deletions

View File

@@ -0,0 +1,97 @@
<?php
/************************************************************************
* This file is part of EspoCRM.
*
* EspoCRM - Open Source CRM application.
* Copyright (C) 2014 Yuri Kuznetsov, Taras Machyshyn, Oleksiy Avramenko
* Website: http://www.espocrm.com
*
* EspoCRM is free software: you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation, either version 3 of the License, or
* (at your option) any later version.
*
* EspoCRM is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with EspoCRM. If not, see http://www.gnu.org/licenses/.
************************************************************************/
namespace Espo\Modules\Crm\EntryPoints;
use \Espo\Core\Utils\Util;
use \Espo\Core\Exceptions\NotFound;
use \Espo\Core\Exceptions\Forbidden;
use \Espo\Core\Exceptions\BadRequest;
use \Espo\Core\Exceptions\Error;
class EventConfirmation extends \Espo\Core\EntryPoints\Base
{
public static $authRequired = false;
public function run()
{
$uid = $_GET['uid'];
$action = $_GET['action'];
if (empty($uid) || empty($action)) {
throw new BadRequest();
}
if (!in_array($action, array('accept', 'decline'))) {
throw new BadRequest();
}
$uniqueId = $this->getEntityManager()->getRepository('UniqueId')->where(array('name' => $uid))->findOne();
if (!$uniqueId) {
//throw new NotFound();
echo "Link is not available";
return;
}
$data = json_decode($uniqueId->get('data'));
$eventType = $data->eventType;
$eventId = $data->eventId;
$inviteeType = $data->inviteeType;
$inviteeId = $data->inviteeId;
$link = $data->link;
if (!empty($eventType) && !empty($eventId) && !empty($inviteeType) && !empty($inviteeId) && !empty($link)) {
$event = $this->getEntityManager()->getEntity($eventType, $eventId);
$invitee = $this->getEntityManager()->getEntity($inviteeType, $inviteeId);
if ($event && $invitee) {
$relDefs = $event->getRelations();
$tableName = Util::toUnderscore($relDefs[$link]['relationName']);
$status = 'None';
if ($action == 'accept') {
$status = 'Accepted';
} else if ($action == 'decline') {
$status = 'Declined';
}
$pdo = $this->getEntityManager()->getPDO();
$sql = "
UPDATE `{$tableName}` SET status = '{$status}'
WHERE ".strtolower($eventType)."_id = '{$eventId}' AND ".strtolower($inviteeType)."_id = '{$inviteeId}'
";
$sth = $pdo->prepare($sql);
$sth->execute();
$this->getEntityManager()->getRepository('UniqueId')->remove($uniqueId);
echo $status;
return;
}
}
throw new Error();
}
}

View File

@@ -62,13 +62,13 @@ class Meeting extends \Espo\Services\Record
}
if ($uid) {
$siteUrl = rtrim($this->getConfig()->get('siteUrl'), '/');
$contents = str_replace('{acceptLink}', $siteUrl . '?entryPoint=acceptEvent&uid=' . $uid->id, $contents);
$contents = str_replace('{declineLink}', $siteUrl . '?entryPoint=declineEvent&uid=' . $uid->id, $contents);
$contents = str_replace('{acceptLink}', $siteUrl . '?entryPoint=eventConfirmation&action=accept&uid=' . $uid->get('name'), $contents);
$contents = str_replace('{declineLink}', $siteUrl . '?entryPoint=eventConfirmation&action=decline&uid=' . $uid->get('name'), $contents);
}
return $contents;
}
protected function sendInvitation(Entity $entity, Entity $invitee)
protected function sendInvitation(Entity $entity, Entity $invitee, $link)
{
$uid = $this->getEntityManager()->getEntity('UniqueId');
@@ -77,6 +77,7 @@ class Meeting extends \Espo\Services\Record
'eventId' => $entity->id,
'inviteeId' => $invitee->id,
'inviteeType' => $invitee->getEntityName(),
'link' => $link
)));
$this->getEntityManager()->saveEntity($uid);
@@ -111,17 +112,17 @@ class Meeting extends \Espo\Services\Record
{
$users = $entity->get('users');
foreach ($users as $user) {
$this->sendInvitation($entity, $user);
$this->sendInvitation($entity, $user, 'users');
}
$contacts = $entity->get('contacts');
foreach ($contacts as $contact) {
$this->sendInvitation($entity, $contact);
$this->sendInvitation($entity, $contact, 'contacts');
}
$leads = $entity->get('leads');
foreach ($leads as $lead) {
$this->sendInvitation($entity, $lead);
$this->sendInvitation($entity, $lead, 'leads');
}
return true;