Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9d7e24b6 authored by AVINASH GUSAIN's avatar AVINASH GUSAIN Committed by Arnau Vàzquez
Browse files

invitation loading issue fix

parent 1b714ff6
Loading
Loading
Loading
Loading
+152 −151
Original line number Diff line number Diff line
@@ -24,6 +24,26 @@ class InvitationMiddleware extends Middleware
	private $request;
	/** @var IManager */
	private $calendarManager;
	private const translations = [
		"tentative" => [
			"meeting_title" => "Invitation Tentatively Accepted: %s",
			"meeting_body" =>
				"%s has tentatively accepted your invitation to %s on %s",
			"meeting_head" => "Tentatively Accepted",
		],
		"accept" => [
			"meeting_title" => "Invitation Tentatively Accepted: %s",
			"meeting_body" =>
				"%s has tentatively accepted your invitation to %s on %s",
			"meeting_head" => "Accepted",
		],
		"decline" => [
			"meeting_title" => "Invitation Tentatively Accepted: %s",
			"meeting_body" =>
				"%s has tentatively accepted your invitation to %s on %s",
			"meeting_head" => "Declined",
		],
	];

	public function __construct(
		IRequest $request,
@@ -48,7 +68,31 @@ class InvitationMiddleware extends Middleware
		$this->iusermanager = $iusermanager;
		$this->languageFactory = $languageFactory;
	}

	private function getMailAttributes(
		string $methodName,
		array $translationData
	) {
		$meetingTitle = $this->l10n->t(
			self::translations[$methodName]["meeting_title"],
			$translationData["summary"]
		);
		$meetingBody = $this->l10n->t(
			self::translations[$methodName]["meeting_body"],
			[
				$translationData["attendee_name"],
				$translationData["summary"],
				$translationData["event_date"],
			]
		);
		$meetingHead = $this->l10n->t(
			self::translations[$methodName]["meeting_head"]
		);
		return [
			"meeting_title" => $meetingTitle,
			"meeting_body" => $meetingBody,
			"meeting_head" => $meetingHead,
		];
	}
	public function afterController(
		$controller,
		$methodName,
@@ -63,153 +107,109 @@ class InvitationMiddleware extends Middleware
				$response->getTemplateName() == "schedule-response-success")
		) {
			$token = $this->request->getParam("token");
			$query = $this->db->getQueryBuilder();
			$query
				->select("*")
			$queryCalendarInvitations = $this->db->getQueryBuilder();
			$queryCalendarInvitations
				->select("id", "uid", "attendee", "organizer")
				->from("calendar_invitations")
				->where(
					$query
					$queryCalendarInvitations
						->expr()
						->eq("token", $query->createNamedParameter($token))
						->eq(
							"token",
							$queryCalendarInvitations->createNamedParameter(
								$token
							)
						)
				);
			$stmt = $query->execute();
			$stmt = $queryCalendarInvitations->execute();
			$row = $stmt->fetch(\PDO::FETCH_ASSOC);

			$uid = $row["uid"];
			$sender = substr($row["attendee"], 7);
			$recipient = substr($row["organizer"], 7);

			$query2 = $this->db->getQueryBuilder();
			$query2
				->select("*")
				->from("calendarobjects")
				->where(
					$query
			$userdata = $this->iusermanager->getByEmail($recipient);
			if (count($userdata) > 0) {
				$username = $userdata[0]->getUID();
				$principaluri = "principals/users/" . $username;
				$queryCalendarObjects = $this->db->getQueryBuilder();
				$queryCalendarObjects
					->select("co.id", "co.calendardata")
					->from("calendarobjects", "co")
					->innerJoin(
						"co",
						"calendars",
						"c",
						$queryCalendarObjects
							->expr()
						->eq("uid", $query2->createNamedParameter($uid))
				);
			$stmt2 = $query2->execute();
			$row2 = $stmt2->fetch(\PDO::FETCH_ASSOC);
			$calendarobjectid = $row2["id"];

			$query3 = $this->db->getQueryBuilder();
			$query3
				->select("*")
				->from("calendarobjects_props")
							->eq("co.calendarid", "c.id")
					)
					->where(
					$query3
						$queryCalendarObjects
							->expr()
							->eq(
								"c.principaluri",
								$queryCalendarObjects->createNamedParameter(
									$principaluri
								)
							)
					)
					->andWhere(
						$queryCalendarObjects
							->expr()
							->eq(
							"objectid",
							$query3->createNamedParameter($calendarobjectid)
								"co.uid",
								$queryCalendarObjects->createNamedParameter(
									$uid
								)
							)
					);
			$stmt3 = $query3->execute();
			$row3 = $stmt3->fetchAll(\PDO::FETCH_ASSOC);
			foreach ($row3 as $calendarobj1) {
				if (
					$calendarobj1["parameter"] == "CN" &&
					$calendarobj1["name"] == "ATTENDEE"
				) {
					$attendeename = $calendarobj1["value"];
				}
				if (
					$calendarobj1["parameter"] == "CN" &&
					$calendarobj1["name"] == "ORGANIZER"
				) {
					$organizername = $calendarobj1["value"];
				}
			}

				$stmt2 = $queryCalendarObjects->execute();
				if ($row2 = $stmt2->fetch(\PDO::FETCH_ASSOC)) {
					$vObject = Reader::read($row2["calendardata"]);
					$SUMMARY = $vObject->VEVENT->SUMMARY;
					$datestart = (string) $vObject->VEVENT->DTSTART;
					$attendeeName = empty($vObject->VEVENT->ATTENDEE["CN"])
						? $sender
						: $vObject->VEVENT->ATTENDEE["CN"];
					$organizername = empty($vObject->VEVENT->ORGANIZER["CN"])
						? $recipient
						: $vObject->VEVENT->ORGANIZER["CN"];
					if (str_contains($datestart, "T")) {
						$eventdate = date("F d, Y h:i", strtotime($datestart));
					} else {
						$eventdate = date("F d, Y", strtotime($datestart));
					}

			if ($attendeename == "") {
				$attendeename = $sender;
			}

			if ($organizername == "") {
				$organizername = $recipient;
			}

			$userdata = $this->iusermanager->getByEmail($recipient);
			$username = $userdata[0]->getUID();
			$userlang = $this->languageFactory->getUserLanguage($userdata[0]);

			if ($methodName === "tentative") {
				$meetingTitle = $this->l10n->t("Invitation Tentatively Accepted: %s",	[$SUMMARY]	);

				$data = [
					"attendee_name" => (string) $sender ?: $defaultVal,
					"invitee_name" => (string) $recipient ?: $defaultVal,
					"meeting_title" => (string) $meetingTitle ?: $defaultVal,
				];
				$method = "reply";
				$emailTemplate = $this->mailer->createEMailTemplate(
					"dav.calendarInvite." . $method,
					$data
				);
				$emailTemplate->setSubject($this->l10n->t("Invitation Tentatively Accepted: %s",[$SUMMARY]));
				$emailTemplate->addHeader();
				$emailTemplate->addHeading(
					$this->l10n->t("Tentatively Accepted")
				);
				$mailbodytext = $this->l10n->t(
					"%s has tentatively accepted your invitation to %s on %s",
					[$attendeename, $SUMMARY, $eventdate]
				);
			}

			if ($methodName === "accept") {
		    $meetingTitle = $this->l10n->t("Invitation Accepted: %s",	[$SUMMARY]);
				$data = [
					"attendee_name" => (string) $sender ?: $defaultVal,
					"invitee_name" => (string) $recipient ?: $defaultVal,
					"meeting_title" => (string) $meetingTitle ?: $defaultVal,
					$translationData = [
						"summary" => $SUMMARY,
						"attendee_name" => $attendeeName,
						"event_date" => $eventdate,
					];
				$method = "reply";
				$emailTemplate = $this->mailer->createEMailTemplate(
					$recipient,
					$data
				);
				$emailTemplate->setSubject($this->l10n->t("Invitation Accepted: %s",	[$SUMMARY]));
				$emailTemplate->addHeader();
				$emailTemplate->addHeading($this->l10n->t("Accepted"));
				$mailbodytext = $this->l10n->t(
					"%s has accepted your invitation to %s on %s",
					[$attendeename, $SUMMARY, $eventdate]
					$translations = $this->getMailAttributes(
						$methodName,
						$translationData
					);
			}

			if ($methodName === "decline") {
        $meetingTitle = $this->l10n->t("Invitation Declined: %s",	[$SUMMARY]);
					$data = [
						"attendee_name" => (string) $sender ?: $defaultVal,
						"invitee_name" => (string) $recipient ?: $defaultVal,
					"meeting_title" => (string) $meetingTitle ?: $defaultVal,
						"meeting_title" =>
							(string) $translations["meeting_title"] ?:
							$defaultVal,
					];
					$method = "reply";
					$emailTemplate = $this->mailer->createEMailTemplate(
						"dav.calendarInvite." . $method,
						$data
					);
				$emailTemplate->setSubject($this->l10n->t("Invitation Declined: %s",	[$SUMMARY]));
				$emailTemplate->addHeader();
				$emailTemplate->addHeading($this->l10n->t("Declined"));
				$mailbodytext = $this->l10n->t(
					"%s has declined your invitation to %s on %s",
					[$attendeename, $SUMMARY, $eventdate]
					$emailTemplate->setSubject(
						$this->l10n->t($translations["meeting_title"], [
							$SUMMARY,
						])
					);
			}

					$emailTemplate->addHeader();
					$emailTemplate->addHeading($translations["meeting_head"]);
					$emailTemplate->addBodyText(
				htmlspecialchars($mailbodytext),
						htmlspecialchars($translations["meeting_body"]),
						$mailbodytext
					);
					$emailTemplate->addFooter();
@@ -224,7 +224,8 @@ class InvitationMiddleware extends Middleware
						$this->logger->logException($e);
					}
				}

			}
		}
		return $response;
	}
}