Initial xentral_oss_20.3.c9ffacf
This commit is contained in:
@@ -0,0 +1,28 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Modules\Calendar;
|
||||
|
||||
use Xentral\Core\DependencyInjection\ContainerInterface;
|
||||
|
||||
final class Bootstrap
|
||||
{
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public static function registerServices()
|
||||
{
|
||||
return [
|
||||
'CalendarService' => 'onInitCalendarService'
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param ContainerInterface $container
|
||||
*
|
||||
* @return CalendarService
|
||||
*/
|
||||
public static function onInitCalendarService(ContainerInterface $container)
|
||||
{
|
||||
return new CalendarService($container->get('Database'));
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,296 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Xentral\Modules\Calendar;
|
||||
|
||||
use Exception;
|
||||
use Xentral\Components\Database\Database;
|
||||
use Xentral\Modules\Calendar\Data\CalendarEvent;
|
||||
use Xentral\Modules\Calendar\Data\CalendarEventUser;
|
||||
use Xentral\Modules\Calendar\Exception\CalendarEventDeleteException;
|
||||
use Xentral\Modules\Calendar\Exception\CalendarEventSaveException;
|
||||
use Xentral\Modules\GoogleCalendar\Exception\GoogleCalendarException;
|
||||
|
||||
final class CalendarService
|
||||
{
|
||||
/** @var Database $db */
|
||||
private $db;
|
||||
|
||||
/**
|
||||
* @param Database $database
|
||||
*/
|
||||
public function __construct(Database $database)
|
||||
{
|
||||
$this->db = $database;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $eventId
|
||||
*
|
||||
* @return CalendarEvent|null
|
||||
*/
|
||||
public function tryGetEvent(int $eventId): ?CalendarEvent
|
||||
{
|
||||
$event = $this->tryGetEventWithoutUsers($eventId);
|
||||
if ($event !== null) {
|
||||
$users = $this->tryGetEventUsers($eventId);
|
||||
foreach ($users as $user) {
|
||||
$event->addAttendee($user);
|
||||
}
|
||||
}
|
||||
|
||||
return $event;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $eventId
|
||||
*
|
||||
* @return CalendarEvent|null
|
||||
*/
|
||||
public function tryGetEventWithoutUsers(int $eventId): ?CalendarEvent
|
||||
{
|
||||
if($eventId < 1) {
|
||||
return null;
|
||||
}
|
||||
$sql = 'SELECT e.id, e.kalender as `calendar_id`, e.bezeichnung as `title`, e.beschreibung as `description`,
|
||||
e.von as `start`, e.bis as `end`, e.allDay as `all_day`, e.color, e.public,
|
||||
e.ort as `location`, e.typ as `type`, e.angelegtvon as `creator_id`,
|
||||
e.adresseintern as `organizer_id`, e.adresse as `attendee_id`
|
||||
FROM kalender_event AS e
|
||||
WHERE e.id = :idValue';
|
||||
$values = ['idValue' => $eventId];
|
||||
$result = $this->db->fetchRow($sql, $values);
|
||||
if (!empty($result)) {
|
||||
return CalendarEvent::fromDbState($result);
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $eventId
|
||||
*
|
||||
* @return CalendarEventUser[]
|
||||
*/
|
||||
public function tryGetEventUsers(int $eventId): array
|
||||
{
|
||||
$sql = 'SELECT ku.id, ku.event as `event_id`, ku.userid as `user_id`, ku.gruppe as `group_id`,
|
||||
u.adresse as `address_id`, a.email as `email`
|
||||
FROM `kalender_user` AS ku
|
||||
LEFT JOIN `user` AS u ON ku.userid = u.id
|
||||
LEFT JOIN `adresse` AS a ON u.adresse = a.id
|
||||
WHERE ku.event = :eventId';
|
||||
$values = ['eventId' => $eventId];
|
||||
$rows = $this->db->fetchAll($sql, $values);
|
||||
|
||||
if (empty($rows)) {
|
||||
return [];
|
||||
}
|
||||
|
||||
$users = [];
|
||||
foreach ($rows as $row) {
|
||||
$users[] = CalendarEventUser::fromDbState($row);
|
||||
}
|
||||
|
||||
return $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CalendarEvent $event
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
public function saveEvent(CalendarEvent $event): int
|
||||
{
|
||||
if ($event->getId() > 0 && $this->eventExists($event->getId())) {
|
||||
return $this->updateEvent($event);
|
||||
}
|
||||
|
||||
return $this->insertEvent($event);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $eventId
|
||||
*
|
||||
* @throws CalendarEventDeleteException
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function deleteEvent(int $eventId): void
|
||||
{
|
||||
$this->db->beginTransaction();
|
||||
try {
|
||||
$sql = 'DELETE FROM `kalender_event` WHERE id = :eventId';
|
||||
$values = ['eventId' => $eventId];
|
||||
$this->db->perform($sql, $values);
|
||||
$deleteUser = 'DELETE FROM `kalender_user` WHERE event = :eventId';
|
||||
$this->db->perform($deleteUser, $values);
|
||||
} catch (Exception $e) {
|
||||
$this->db->rollBack();
|
||||
throw new CalendarEventDeleteException($e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
$this->db->commit();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $eventId
|
||||
* @param int $userId
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
public function removeUserFromEvent(int $eventId, int $userId): void
|
||||
{
|
||||
$sql = 'DELETE FROM `kalender_user` WHERE event = :eventId AND userid = :userId';
|
||||
$values = ['eventId' => $eventId, 'userId' => $userId];
|
||||
$this->db->perform($sql, $values);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $eventId
|
||||
*
|
||||
* @return bool
|
||||
*/
|
||||
public function eventExists(int $eventId): bool
|
||||
{
|
||||
if ($eventId < 1) {
|
||||
return false;
|
||||
}
|
||||
|
||||
$sql = 'SELECT e.id FROM `kalender_event` AS e WHERE e.id = :idValue';
|
||||
$values = ['idValue' => (int)$eventId];
|
||||
$result = $this->db->fetchRow($sql, $values);
|
||||
|
||||
return (isset($result['id']) && $result['id'] === $eventId);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CalendarEvent $event
|
||||
*
|
||||
* @throws CalendarEventSaveException
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
private function insertEvent(CalendarEvent $event): int
|
||||
{
|
||||
$this->db->beginTransaction();
|
||||
try {
|
||||
$insertEvent = 'INSERT INTO kalender_event
|
||||
(kalender, bezeichnung, beschreibung, von, bis, allDay, color,
|
||||
public, ort, typ, angelegtvon, adresseintern, adresse)
|
||||
VALUES
|
||||
(:calendar_id, :title, :description, :start, :end, :all_day, :color,
|
||||
:public, :location,:type, :creator_id, :organizer_id, :attendee_id)';
|
||||
$values = $this->getBindValuesFromEvent($event);
|
||||
$this->db->perform($insertEvent, $values);
|
||||
$newId = $this->db->lastInsertId();
|
||||
$users = $event->getAllUsers();
|
||||
$this->insertEventUsers($users, $newId);
|
||||
} catch (Exception $e) {
|
||||
$this->db->rollBack();
|
||||
throw new CalendarEventSaveException($e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
|
||||
$this->db->commit();
|
||||
|
||||
return $newId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CalendarEvent $event
|
||||
*
|
||||
* @throws CalendarEventSaveException
|
||||
*
|
||||
* @return int
|
||||
*/
|
||||
private function updateEvent(CalendarEvent $event): int
|
||||
{
|
||||
$this->db->beginTransaction();
|
||||
|
||||
try {
|
||||
$sql = 'UPDATE kalender_event SET
|
||||
kalender = :calendar_id,
|
||||
bezeichnung = :title,
|
||||
beschreibung = :description,
|
||||
von = :start,
|
||||
bis = :end,
|
||||
allDay = :all_day,
|
||||
color = :color,
|
||||
public = :public,
|
||||
ort = :location,
|
||||
angelegtvon = :creator_id,
|
||||
adresseintern = :organizer_id,
|
||||
adresse = :attendee_id,
|
||||
typ = :type
|
||||
WHERE id = :id';
|
||||
$values = $this->getBindValuesFromEvent($event);
|
||||
$this->db->perform($sql, $values);
|
||||
$this->deleteEventUsers($event->getId());
|
||||
$users = $event->getAllUsers();
|
||||
$this->insertEventUsers($users, $event->getId());
|
||||
} catch (Exception $e) {
|
||||
$this->db->rollBack();
|
||||
throw new CalendarEventSaveException($e->getMessage(), $e->getCode(), $e);
|
||||
}
|
||||
|
||||
$this->db->commit();
|
||||
|
||||
return $event->getId();
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $users
|
||||
* @param $eventId
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function insertEventUsers($users, $eventId): void
|
||||
{
|
||||
if (!is_array($users) || count($users) < 1) {
|
||||
return;
|
||||
}
|
||||
$insert = $this->db->insert();
|
||||
$insert->into('kalender_user');
|
||||
foreach ($users as $user) {
|
||||
$insert->addRow()
|
||||
->cols([
|
||||
'event' => $eventId,
|
||||
'userid' => $user->getUserId(),
|
||||
'gruppe' => $user->getGroupId(),
|
||||
]);
|
||||
}
|
||||
|
||||
$insertSql = $insert->getStatement();
|
||||
$values = $insert->getBindValues();
|
||||
$this->db->perform($insertSql, $values);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param $eventId
|
||||
*
|
||||
* @return void
|
||||
*/
|
||||
private function deleteEventUsers($eventId): void
|
||||
{
|
||||
$sql = 'DELETE FROM kalender_user WHERE event = :eventId';
|
||||
$this->db->perform($sql, ['eventId' => $eventId]);
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CalendarEvent $event
|
||||
*
|
||||
* @return array
|
||||
*/
|
||||
private function getBindValuesFromEvent(CalendarEvent $event): array
|
||||
{
|
||||
$values = $event->toArray();
|
||||
if (empty($values['start'])) {
|
||||
$values['start'] = null;
|
||||
}
|
||||
if (empty($values['end'])) {
|
||||
$values['end'] = null;
|
||||
}
|
||||
|
||||
return $values;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,476 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Xentral\Modules\Calendar\Data;
|
||||
|
||||
use DateTime;
|
||||
use DateTimeInterface;
|
||||
use Exception;
|
||||
use Xentral\Modules\Calendar\Exception\InvalidArgumentException;
|
||||
|
||||
final class CalendarEvent
|
||||
{
|
||||
/** @var int $id */
|
||||
private $id;
|
||||
|
||||
/** @var int $calendarId */
|
||||
private $calendarId;
|
||||
|
||||
/** @var string $title */
|
||||
private $title;
|
||||
|
||||
/** @var string $description */
|
||||
private $description;
|
||||
|
||||
/** @var DateTimeInterface $start */
|
||||
private $start;
|
||||
|
||||
/** @var DateTimeInterface $end */
|
||||
private $end;
|
||||
|
||||
/** @var bool $allDay */
|
||||
private $allDay;
|
||||
|
||||
/** @var string $color */
|
||||
private $color;
|
||||
|
||||
/** @var bool $public */
|
||||
private $public;
|
||||
|
||||
/** @var string $location */
|
||||
private $location;
|
||||
|
||||
/** @var CalendarEventUser $creator */
|
||||
private $creator;
|
||||
|
||||
/** @var CalendarEventUser $organizer */
|
||||
private $organizer;
|
||||
|
||||
/** @var string $type */
|
||||
private $type;
|
||||
|
||||
/** @var CalendarEventUser[] $attendees */
|
||||
private $attendees;
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
* @param int $calendarId
|
||||
* @param string $title
|
||||
* @param string $description
|
||||
* @param DateTimeInterface $start
|
||||
* @param DateTimeInterface $end
|
||||
* @param bool $allDay
|
||||
* @param string $color
|
||||
* @param bool $public
|
||||
* @param string $location
|
||||
* @param CalendarEventUser $creator
|
||||
* @param CalendarEventUser $organizer
|
||||
* @param string $type
|
||||
* @param CalendarEventUser[] $attendees
|
||||
*/
|
||||
public function __construct(
|
||||
int $id,
|
||||
int $calendarId = 0,
|
||||
string $title = '',
|
||||
string $description = '',
|
||||
DateTimeInterface $start = null,
|
||||
DateTimeInterface $end = null,
|
||||
bool $allDay = false,
|
||||
string $color = '',
|
||||
bool $public = false,
|
||||
string $location = '',
|
||||
CalendarEventUser $creator = null,
|
||||
CalendarEventUser $organizer = null,
|
||||
string $type = '',
|
||||
array $attendees = []
|
||||
) {
|
||||
$this->id = $id;
|
||||
$this->calendarId = $calendarId;
|
||||
$this->title = $title;
|
||||
$this->description = $description;
|
||||
$this->start = $start;
|
||||
$this->end = $end;
|
||||
$this->allDay = $allDay;
|
||||
$this->color = $color;
|
||||
$this->public = $public;
|
||||
$this->location = $location;
|
||||
$this->creator = $creator;
|
||||
$this->organizer = $organizer;
|
||||
$this->type = $type;
|
||||
$this->attendees = $attendees;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $dataSet
|
||||
*
|
||||
* @return CalendarEvent
|
||||
*/
|
||||
public static function fromDbState(array $dataSet): CalendarEvent
|
||||
{
|
||||
if (!isset($dataSet['id'], $dataSet['calendar_id'], $dataSet['title'])) {
|
||||
throw new InvalidArgumentException('Invalid or incomplete event data.');
|
||||
}
|
||||
$instance = new self((int)$dataSet['id'], (int)$dataSet['calendar_id'], $dataSet['title']);
|
||||
|
||||
if (isset($dataSet['description'])) {
|
||||
$instance->description = $dataSet['description'];
|
||||
}
|
||||
if (isset($dataSet['start'])) {
|
||||
$instance->start = DateTime::createFromFormat('Y-m-d H:i:s', $dataSet['start']);
|
||||
}
|
||||
if (isset($dataSet['end'])) {
|
||||
$instance->end = DateTime::createFromFormat('Y-m-d H:i:s', $dataSet['end']);
|
||||
}
|
||||
if (isset($dataSet['all_day'])) {
|
||||
$instance->allDay = $dataSet['all_day'] === 1;
|
||||
}
|
||||
if (isset($dataSet['color'])) {
|
||||
$instance->color = $dataSet['color'];
|
||||
}
|
||||
if (isset($dataSet['public'])) {
|
||||
$instance->public = $dataSet['public'] === 1;
|
||||
}
|
||||
if (isset($dataSet['location'])) {
|
||||
$instance->location = $dataSet['location'];
|
||||
}
|
||||
if (isset($dataSet['type'])) {
|
||||
$instance->type = $dataSet['type'];
|
||||
}
|
||||
if (isset($dataSet['creator_id'])) {
|
||||
$creator = new CalendarEventUser(0, $dataSet['id'], 0, 0, $dataSet['creator_id']);
|
||||
$instance->setCreator($creator);
|
||||
}
|
||||
if (isset($dataSet['organizer_id'])) {
|
||||
$organizer = new CalendarEventUser(0, $dataSet['id'], 0, 0, $dataSet['organizer_id']);
|
||||
$instance->setOrganizer($organizer);
|
||||
}
|
||||
if (isset($dataSet['attendee_id']) && $dataSet['attendee_id'] > 0) {
|
||||
$attendee = new CalendarEventUser(0, $dataSet['id'], 0, 0, $dataSet['attendee_id']);
|
||||
$instance->addAttendee($attendee);
|
||||
}
|
||||
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
if ($this->start === null) {
|
||||
$start = '';
|
||||
} else {
|
||||
$start = $this->start->format('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
if ($this->end === null) {
|
||||
$end = '';
|
||||
} else {
|
||||
$end = $this->end->format('Y-m-d H:i:s');
|
||||
}
|
||||
|
||||
$mainAttendee = 0;
|
||||
if ($this->getPrimaryAttendee() !== null) {
|
||||
$mainAttendee = $this->getPrimaryAttendee()->getAddressId();
|
||||
}
|
||||
$creatorAddress = 0;
|
||||
if ($this->getCreator() !== null) {
|
||||
$creatorAddress = $this->getCreator()->getAddressId();
|
||||
}
|
||||
$organizerAddress = 0;
|
||||
if ($this->getOrganizer() !== null) {
|
||||
$organizerAddress = $this->getOrganizer()->getAddressId();
|
||||
}
|
||||
|
||||
return [
|
||||
'id' => $this->getId(),
|
||||
'calendar_id' => $this->getCalendarId(),
|
||||
'title' => $this->getTitle(),
|
||||
'description' => $this->getDescription(),
|
||||
'start' => $start,
|
||||
'end' => $end,
|
||||
'all_day' => (int)$this->isAllDay(),
|
||||
'color' => $this->getColor(),
|
||||
'public' => (int)$this->isPublic(),
|
||||
'location' => $this->getLocation(),
|
||||
'creator_id' => $creatorAddress,
|
||||
'organizer_id' => $organizerAddress,
|
||||
'type' => $this->getType(),
|
||||
'attendee_id' => $mainAttendee,
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CalendarEventUser $creator
|
||||
*/
|
||||
public function setCreator(CalendarEventUser $creator): void
|
||||
{
|
||||
$this->creator = $creator;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CalendarEventUser $organizer
|
||||
*/
|
||||
public function setOrganizer(CalendarEventUser $organizer): void
|
||||
{
|
||||
$this->organizer = $organizer;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param CalendarEventUser $attendee
|
||||
*/
|
||||
public function addAttendee(CalendarEventUser $attendee): void
|
||||
{
|
||||
$this->attendees[] = $attendee;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return CalendarEventUser|null
|
||||
*/
|
||||
public function getPrimaryAttendee(): ?CalendarEventUser
|
||||
{
|
||||
if ($this->attendees === null || empty($this->attendees[0])) {
|
||||
return null;
|
||||
}
|
||||
|
||||
$nonUsers = [];
|
||||
foreach ($this->attendees as $attendee) {
|
||||
if ($attendee->getUserId() === 0) {
|
||||
$nonUsers[] = $attendee;
|
||||
}
|
||||
}
|
||||
if (count($nonUsers) === 0) {
|
||||
return null;
|
||||
}
|
||||
|
||||
return $nonUsers[0];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return CalendarEventUser[]
|
||||
*/
|
||||
public function getAllUsers(): array
|
||||
{
|
||||
$ids = [];
|
||||
$users = [];
|
||||
$attendees = $this->attendees;
|
||||
|
||||
if ($this->creator !== null) {
|
||||
$attendees[] = $this->creator;
|
||||
}
|
||||
if ($this->organizer !== null) {
|
||||
$attendees[] = $this->organizer;
|
||||
}
|
||||
foreach ($attendees as $attendee) {
|
||||
if ($attendee->getAddressId() > 0 && !in_array($attendee->getAddressId(), $ids, true)) {
|
||||
$ids[] = $attendee->getAddressId();
|
||||
$users[] = $attendee;
|
||||
}
|
||||
}
|
||||
|
||||
return $users;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
*/
|
||||
public function setId($id): void
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getCalendarId(): int
|
||||
{
|
||||
return $this->calendarId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $calendarId
|
||||
*/
|
||||
public function setCalendarId(int $calendarId):void
|
||||
{
|
||||
$this->calendarId = $calendarId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getTitle(): string
|
||||
{
|
||||
return $this->title;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $title
|
||||
*/
|
||||
public function setTitle($title): void
|
||||
{
|
||||
$this->title = $title;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getDescription(): string
|
||||
{
|
||||
return $this->description;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $description
|
||||
*/
|
||||
public function setDescription(string $description): void
|
||||
{
|
||||
$this->description = $description;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return DateTimeInterface
|
||||
*/
|
||||
public function getStart(): DateTimeInterface
|
||||
{
|
||||
return $this->start;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param DateTimeInterface $start
|
||||
*/
|
||||
public function setStart(DateTimeInterface $start): void
|
||||
{
|
||||
try {
|
||||
$this->start = new DateTime();
|
||||
$this->start->setTimestamp($start->getTimestamp());
|
||||
} catch (Exception $e) {
|
||||
$this->start = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return DateTimeInterface
|
||||
*/
|
||||
public function getEnd(): DateTimeInterface
|
||||
{
|
||||
return $this->end;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param DateTimeInterface $end
|
||||
*/
|
||||
public function setEnd(DateTimeInterface $end): void
|
||||
{
|
||||
try {
|
||||
$this->end = new DateTime();
|
||||
$this->end->setTimestamp($end->getTimestamp());
|
||||
} catch (Exception $e) {
|
||||
$this->end = null;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isAllDay(): bool
|
||||
{
|
||||
return $this->allDay;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $allDay
|
||||
*/
|
||||
public function setAllDay(bool $allDay): void
|
||||
{
|
||||
$this->allDay = $allDay;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getColor(): string
|
||||
{
|
||||
return $this->color;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $color
|
||||
*/
|
||||
public function setColor(string $color): void
|
||||
{
|
||||
$this->color = $color;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return bool
|
||||
*/
|
||||
public function isPublic(): bool
|
||||
{
|
||||
return $this->public;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param bool $public
|
||||
*/
|
||||
public function setPublic(bool $public): void
|
||||
{
|
||||
$this->public = $public;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getLocation(): string
|
||||
{
|
||||
return $this->location;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $location
|
||||
*/
|
||||
public function setLocation(string $location): void
|
||||
{
|
||||
$this->location = $location;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getType(): string
|
||||
{
|
||||
return $this->type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $type
|
||||
*/
|
||||
public function setType(string $type): void
|
||||
{
|
||||
$this->type = $type;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return CalendarEventUser|null
|
||||
*/
|
||||
public function getCreator(): ?CalendarEventUser
|
||||
{
|
||||
return $this->creator;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return CalendarEventUser|null
|
||||
*/
|
||||
public function getOrganizer(): ?CalendarEventUser
|
||||
{
|
||||
return $this->organizer;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,188 @@
|
||||
<?php
|
||||
|
||||
declare(strict_types=1);
|
||||
|
||||
namespace Xentral\Modules\Calendar\Data;
|
||||
|
||||
use Xentral\Modules\Calendar\Exception\InvalidArgumentException;
|
||||
|
||||
final class CalendarEventUser
|
||||
{
|
||||
/** @var int $id */
|
||||
private $id;
|
||||
|
||||
/** @var int $eventId */
|
||||
private $eventId;
|
||||
|
||||
/** @var int $userId */
|
||||
private $userId;
|
||||
|
||||
/** @var int $groupId */
|
||||
private $groupId;
|
||||
|
||||
/** @var string $email */
|
||||
private $email;
|
||||
|
||||
/** @var int $addressId */
|
||||
private $addressId;
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
* @param int $eventId
|
||||
* @param int $userId
|
||||
* @param int $groupId
|
||||
* @param int $addressId
|
||||
* @param string $email
|
||||
*/
|
||||
public function __construct(
|
||||
int $id = 0,
|
||||
int $eventId = 0,
|
||||
int $userId = 0,
|
||||
int $groupId = 0,
|
||||
int $addressId = 0,
|
||||
string $email = ''
|
||||
) {
|
||||
$this->id = $id;
|
||||
$this->eventId = $eventId;
|
||||
$this->userId = $userId;
|
||||
$this->groupId = $groupId;
|
||||
$this->addressId = $addressId;
|
||||
$this->email = $email;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param array $data
|
||||
*
|
||||
* @throws InvalidArgumentException
|
||||
*
|
||||
* @return CalendarEventUser
|
||||
*/
|
||||
public static function fromDbState(array $data): CalendarEventUser
|
||||
{
|
||||
if (!isset($data['id'], $data['event_id'], $data['user_id'], $data['group_id'])) {
|
||||
throw new InvalidArgumentException('Invalid or incomplete dataset.');
|
||||
}
|
||||
$instance = new self();
|
||||
$instance->setId((int)$data['id']);
|
||||
$instance->setEventId((int)$data['event_id']);
|
||||
$instance->setUserId((int)$data['user_id']);
|
||||
$instance->setGroupId((int)$data['group_id']);
|
||||
if (array_key_exists('address_id', $data)) {
|
||||
$instance->setAddressId((int)$data['address_id']);
|
||||
}
|
||||
if (isset($data['email']) && $data['email'] !== '') {
|
||||
$instance->setEmail($data['email']);
|
||||
}
|
||||
|
||||
return $instance;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return array
|
||||
*/
|
||||
public function toArray(): array
|
||||
{
|
||||
return [
|
||||
'id' => $this->getId(),
|
||||
'event_id' => $this->getEventId(),
|
||||
'user_id' => $this->getUserId(),
|
||||
'group_id' => $this->getGroupId(),
|
||||
];
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getId(): int
|
||||
{
|
||||
return $this->id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $id
|
||||
*/
|
||||
public function setId(int $id): void
|
||||
{
|
||||
$this->id = $id;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getEventId(): int
|
||||
{
|
||||
return $this->eventId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $eventId
|
||||
*/
|
||||
public function setEventId(int $eventId): void
|
||||
{
|
||||
$this->eventId = $eventId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getUserId(): int
|
||||
{
|
||||
return $this->userId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $userId
|
||||
*/
|
||||
public function setUserId(int $userId): void
|
||||
{
|
||||
$this->userId = $userId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getGroupId(): int
|
||||
{
|
||||
return $this->groupId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $groupId
|
||||
*/
|
||||
public function setGroupId(int $groupId): void
|
||||
{
|
||||
$this->groupId = $groupId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return int
|
||||
*/
|
||||
public function getAddressId(): int
|
||||
{
|
||||
return $this->addressId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param int $addressId
|
||||
*/
|
||||
public function setAddressId(int $addressId): void
|
||||
{
|
||||
$this->addressId = $addressId;
|
||||
}
|
||||
|
||||
/**
|
||||
* @return string
|
||||
*/
|
||||
public function getEmail(): string
|
||||
{
|
||||
return $this->email;
|
||||
}
|
||||
|
||||
/**
|
||||
* @param string $email
|
||||
*/
|
||||
public function setEmail(string $email): void
|
||||
{
|
||||
$this->email = $email;
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Modules\Calendar\Exception;
|
||||
|
||||
use InvalidArgumentException as SplInvalidArgumentException;
|
||||
|
||||
class CalendarEventDeleteException extends SplInvalidArgumentException implements CalendarExceptionInterface
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Modules\Calendar\Exception;
|
||||
|
||||
use InvalidArgumentException as SplInvalidArgumentException;
|
||||
|
||||
class CalendarEventOwnershipException extends SplInvalidArgumentException implements CalendarExceptionInterface
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Modules\Calendar\Exception;
|
||||
|
||||
use InvalidArgumentException as SplInvalidArgumentException;
|
||||
|
||||
class CalendarEventSaveException extends SplInvalidArgumentException implements CalendarExceptionInterface
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Modules\Calendar\Exception;
|
||||
|
||||
use Xentral\Core\Exception\ModuleExceptionInterface;
|
||||
|
||||
interface CalendarExceptionInterface extends ModuleExceptionInterface
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
<?php
|
||||
|
||||
namespace Xentral\Modules\Calendar\Exception;
|
||||
|
||||
use InvalidArgumentException as SplInvalidArgumentException;
|
||||
|
||||
class InvalidArgumentException extends SplInvalidArgumentException implements CalendarExceptionInterface
|
||||
{
|
||||
}
|
||||
@@ -0,0 +1,247 @@
|
||||
$(document).ready(function() {
|
||||
|
||||
|
||||
var $calendar = $('#calendar');
|
||||
var id = 10;
|
||||
if($calendar.weekCalendar !== undefined)
|
||||
{
|
||||
$calendar.weekCalendar({
|
||||
displayOddEven:false,
|
||||
timeslotsPerHour : 4,
|
||||
allowCalEventOverlap : true,
|
||||
overlapEventsSeparate: true,
|
||||
firstDayOfWeek : 1,
|
||||
businessHours :{start: 8, end: 18, limitDisplay: false },
|
||||
daysToShow : 8,
|
||||
title: function(daysToShow) {
|
||||
return daysToShow == 1 ? '%date%' : '%start% - %end%';
|
||||
},
|
||||
height : function($calendar) {
|
||||
return $(window).height() - $("h1").outerHeight() - 1;
|
||||
},
|
||||
eventRender : function(calEvent, $event) {
|
||||
if (calEvent.end.getTime() < new Date().getTime()) {
|
||||
$event.css("backgroundColor", "#aaa");
|
||||
$event.find(".wc-time").css({
|
||||
"backgroundColor" : "#999",
|
||||
"border" : "1px solid #888"
|
||||
});
|
||||
}
|
||||
},
|
||||
draggable : function(calEvent, $event) {
|
||||
return calEvent.readOnly != true;
|
||||
},
|
||||
resizable : function(calEvent, $event) {
|
||||
return calEvent.readOnly != false;
|
||||
},
|
||||
eventNew : function(calEvent, $event) {
|
||||
var $dialogContent = $("#event_edit_container");
|
||||
resetForm($dialogContent);
|
||||
var startField = $dialogContent.find("select[name='start']").val(calEvent.start);
|
||||
var endField = $dialogContent.find("select[name='end']").val(calEvent.end);
|
||||
var titleField = $dialogContent.find("input[name='title']");
|
||||
var bodyField = $dialogContent.find("textarea[name='body']");
|
||||
var publicField = $dialogContent.find("input[name='public']");
|
||||
|
||||
$dialogContent.dialog({
|
||||
modal: true,
|
||||
title: "Neuer Termin",
|
||||
close: function() {
|
||||
$dialogContent.dialog("destroy");
|
||||
$dialogContent.hide();
|
||||
$('#calendar').weekCalendar("removeUnsavedEvents");
|
||||
},
|
||||
buttons: {
|
||||
speichern : function() {
|
||||
id++;
|
||||
calEvent.id = id;
|
||||
calEvent.start = new Date(startField.val());
|
||||
calEvent.end = new Date(endField.val());
|
||||
calEvent.title = titleField.val();
|
||||
calEvent.body = bodyField.val();
|
||||
|
||||
if(publicField.prop("checked"))
|
||||
calEvent.publicEvent='1';
|
||||
else
|
||||
calEvent.publicEvent='0';
|
||||
|
||||
publicField.prop("checked", false);
|
||||
$calendar.weekCalendar("removeUnsavedEvents");
|
||||
$calendar.weekCalendar("updateEvent", calEvent);
|
||||
$dialogContent.dialog("close");
|
||||
$calendar.weekCalendar("refresh");
|
||||
},
|
||||
abbrechen : function() {
|
||||
$dialogContent.dialog("close");
|
||||
}
|
||||
}
|
||||
}).show();
|
||||
|
||||
$dialogContent.find(".date_holder").text($calendar.weekCalendar("formatDate", calEvent.start));
|
||||
setupStartAndEndTimeFields(startField, endField, calEvent, $calendar.weekCalendar("getTimeslotTimes", calEvent.start));
|
||||
|
||||
},
|
||||
eventDrop : function(calEvent, $event) {
|
||||
$calendar.weekCalendar("updateEvent", calEvent);
|
||||
$calendar.weekCalendar("refresh");
|
||||
},
|
||||
|
||||
eventResize : function(calEvent, $event) {
|
||||
$calendar.weekCalendar("updateEvent", calEvent);
|
||||
$calendar.weekCalendar("refresh");
|
||||
},
|
||||
eventClick : function(calEvent, $event) {
|
||||
|
||||
if (calEvent.readOnly) {
|
||||
return;
|
||||
}
|
||||
|
||||
var $dialogContent = $("#event_edit_container");
|
||||
resetForm($dialogContent);
|
||||
var startField = $dialogContent.find("select[name='start']").val(calEvent.start);
|
||||
var endField = $dialogContent.find("select[name='end']").val(calEvent.end);
|
||||
var titleField = $dialogContent.find("input[name='title']").val(calEvent.title);
|
||||
var bodyField = $dialogContent.find("textarea[name='body']").val(calEvent.body);
|
||||
if(calEvent.publicEvent=='1') publicChecked = true; else publicChecked = false;
|
||||
var publicField = $dialogContent.find("input[name='public']").prop('checked', publicChecked);
|
||||
$dialogContent.dialog({
|
||||
modal: true,
|
||||
title: "Edit - " + calEvent.title,
|
||||
close: function() {
|
||||
$dialogContent.dialog("destroy");
|
||||
$dialogContent.hide();
|
||||
$('#calendar').weekCalendar("removeUnsavedEvents");
|
||||
},
|
||||
buttons: {
|
||||
save : function() {
|
||||
|
||||
calEvent.start = new Date(startField.val());
|
||||
calEvent.end = new Date(endField.val());
|
||||
calEvent.title = titleField.val();
|
||||
calEvent.body = bodyField.val();
|
||||
if(publicField.attr("checked"))
|
||||
calEvent.publicEvent='1';
|
||||
else
|
||||
calEvent.publicEvent='0';
|
||||
|
||||
$calendar.weekCalendar("updateEvent", calEvent);
|
||||
$dialogContent.dialog("close");
|
||||
$calendar.weekCalendar("refresh");
|
||||
},
|
||||
"delete" : function() {
|
||||
$calendar.weekCalendar("removeEvent", calEvent.id);
|
||||
$dialogContent.dialog("close");
|
||||
$calendar.weekCalendar("refresh");
|
||||
},
|
||||
cancel : function() {
|
||||
$dialogContent.dialog("close");
|
||||
}
|
||||
}
|
||||
}).show();
|
||||
|
||||
var startField = $dialogContent.find("select[name='start']").val(calEvent.start);
|
||||
var endField = $dialogContent.find("select[name='end']").val(calEvent.end);
|
||||
$dialogContent.find(".date_holder").text($calendar.weekCalendar("formatDate", calEvent.start));
|
||||
setupStartAndEndTimeFields(startField, endField, calEvent, $calendar.weekCalendar("getTimeslotTimes", calEvent.start));
|
||||
$(window).resize().resize(); //fixes a bug in modal overlay size ??
|
||||
|
||||
},
|
||||
eventMouseover : function(calEvent, $event) {
|
||||
},
|
||||
eventMouseout : function(calEvent, $event) {
|
||||
},
|
||||
noEvents : function() {
|
||||
|
||||
},
|
||||
data : "./index.php?module=kalender&action=data"
|
||||
});
|
||||
}
|
||||
|
||||
function resetForm($dialogContent) {
|
||||
$dialogContent.find("input").val("");
|
||||
$dialogContent.find("textarea").val("");
|
||||
}
|
||||
|
||||
|
||||
/*
|
||||
* Sets up the start and end time fields in the calendar event
|
||||
* form for editing based on the calendar event being edited
|
||||
*/
|
||||
function setupStartAndEndTimeFields($startTimeField, $endTimeField, calEvent, timeslotTimes) {
|
||||
|
||||
$startTimeField.empty();
|
||||
$endTimeField.empty();
|
||||
|
||||
for (var i = 0; i < timeslotTimes.length; i++) {
|
||||
var startTime = timeslotTimes[i].start;
|
||||
var endTime = timeslotTimes[i].end;
|
||||
var startSelected = "";
|
||||
if (startTime.getTime() === calEvent.start.getTime()) {
|
||||
startSelected = "selected=\"selected\"";
|
||||
}
|
||||
var endSelected = "";
|
||||
if (endTime.getTime() === calEvent.end.getTime()) {
|
||||
endSelected = "selected=\"selected\"";
|
||||
}
|
||||
$startTimeField.append("<option value=\"" + startTime + "\" " + startSelected + ">" + timeslotTimes[i].startFormatted + "</option>");
|
||||
$endTimeField.append("<option value=\"" + endTime + "\" " + endSelected + ">" + timeslotTimes[i].endFormatted + "</option>");
|
||||
|
||||
$timestampsOfOptions.start[timeslotTimes[i].startFormatted] = startTime.getTime();
|
||||
$timestampsOfOptions.end[timeslotTimes[i].endFormatted] = endTime.getTime();
|
||||
|
||||
}
|
||||
$endTimeOptions = $endTimeField.find("option");
|
||||
$startTimeField.trigger("change");
|
||||
}
|
||||
|
||||
var $endTimeField = $("select[name='end']");
|
||||
var $endTimeOptions = $endTimeField.find("option");
|
||||
var $timestampsOfOptions = {start:[],end:[]};
|
||||
|
||||
//reduces the end time options to be only after the start time options.
|
||||
$("select[name='start']").change(function() {
|
||||
var startTime = $timestampsOfOptions.start[$(this).find(":selected").text()];
|
||||
var currentEndTime = $endTimeField.find("option:selected").val();
|
||||
$endTimeField.html(
|
||||
$endTimeOptions.filter(function() {
|
||||
return startTime < $timestampsOfOptions.end[$(this).text()];
|
||||
})
|
||||
);
|
||||
|
||||
var endTimeSelected = false;
|
||||
$endTimeField.find("option").each(function() {
|
||||
if ($(this).val() === currentEndTime) {
|
||||
$(this).prop("selected", "selected");
|
||||
endTimeSelected = true;
|
||||
return false;
|
||||
}
|
||||
});
|
||||
|
||||
if (!endTimeSelected) {
|
||||
//automatically select an end date 2 slots away.
|
||||
$endTimeField.find("option:eq(1)").prop("selected", "selected");
|
||||
}
|
||||
|
||||
});
|
||||
|
||||
|
||||
var $about = $("#about");
|
||||
|
||||
$("#about_button").click(function() {
|
||||
$about.dialog({
|
||||
title: "About this calendar demo",
|
||||
width: 600,
|
||||
close: function() {
|
||||
$about.dialog("destroy");
|
||||
$about.hide();
|
||||
},
|
||||
buttons: {
|
||||
close : function() {
|
||||
$about.dialog("close");
|
||||
}
|
||||
}
|
||||
}).show();
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
@@ -0,0 +1,190 @@
|
||||
$(document).ready(function () {
|
||||
$('#editbezeichnung').focus();
|
||||
|
||||
$("#editKalendergruppen").dialog({
|
||||
modal: true,
|
||||
bgiframe: true,
|
||||
closeOnEscape: false,
|
||||
minWidth: 800,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
ABBRECHEN: function () {
|
||||
$(this).dialog('close');
|
||||
},
|
||||
SPEICHERN: function () {
|
||||
kalendergruppenEditSave();
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#editKalendergruppen").dialog({
|
||||
close: function (event, ui) {
|
||||
KalenderGruppeReset();
|
||||
}
|
||||
});
|
||||
|
||||
// Kalendergruppen-Filter einmal auslösen
|
||||
$('#filterlid').trigger('change');
|
||||
|
||||
// Kalendergruppe bearbeiten
|
||||
$(document).on('click', '.calendar-group-edit', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
var groupID = $(this).data('calendar-group');
|
||||
KalenderGruppenEdit(groupID);
|
||||
});
|
||||
|
||||
// Kalendergruppe löschen
|
||||
$(document).on('click', '.calendar-group-delete', function (e) {
|
||||
e.preventDefault();
|
||||
|
||||
var groupID = $(this).data('calendar-group');
|
||||
KalenderGruppenDelete(groupID);
|
||||
});
|
||||
|
||||
// Kalendergruppe anlgen
|
||||
$(document).on('click', '.calendar-group-create', function (e) {
|
||||
e.preventDefault();
|
||||
KalenderGruppenEdit(0);
|
||||
});
|
||||
|
||||
// Kalendergruppen-Mitgliedschaft ändern
|
||||
$(document).on('click', '#kalender_gruppen_mitglieder input[type=checkbox]', function () {
|
||||
var groupID = $(this).data('calendar-group');
|
||||
grchange(groupID);
|
||||
});
|
||||
});
|
||||
|
||||
function grchange(lid) {
|
||||
$.ajax({
|
||||
url: "index.php?module=kalender&action=gruppenzuordnung&cmd=change",
|
||||
type: 'POST',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
lid: lid,
|
||||
kalendergruppe: $('#editid').val(),
|
||||
wert: $('#kg_' + lid).prop('checked') ? 1 : 0
|
||||
}
|
||||
}
|
||||
).done(function (data) {
|
||||
var oTableL = $('#kalender_gruppen_mitglieder').DataTable();
|
||||
oTableL.ajax.reload();
|
||||
}).fail(function (jqXHR, textStatus) {
|
||||
});
|
||||
}
|
||||
|
||||
|
||||
function KalenderGruppeReset() {
|
||||
$('#editKalendergruppen').find('#editid').val('');
|
||||
$('#editKalendergruppen').find('#editbezeichnung').val('');
|
||||
$('#editKalendergruppen').find('#editfarbe').val('#0b8092');
|
||||
$('#editfarbe').trigger('change');
|
||||
$('#editKalendergruppen').find('#editausblenden').prop("checked", false);
|
||||
}
|
||||
|
||||
|
||||
function kalendergruppenEditSave() {
|
||||
|
||||
$.ajax({
|
||||
url: 'index.php?module=kalender&action=gruppensave',
|
||||
data: {
|
||||
//Alle Felder die fürs editieren vorhanden sind
|
||||
editid: $('#editid').val(),
|
||||
editbezeichnung: $('#editbezeichnung').val(),
|
||||
editfarbe: $('#editfarbe').val(),
|
||||
editausblenden: $('#editausblenden').prop("checked") ? 1 : 0,
|
||||
},
|
||||
method: 'post',
|
||||
dataType: 'json',
|
||||
beforeSend: function () {
|
||||
App.loading.open();
|
||||
},
|
||||
success: function (data) {
|
||||
App.loading.close();
|
||||
if (data.status == 1) {
|
||||
updateLiveTable();
|
||||
$("#editKalendergruppen").dialog('close');
|
||||
KalenderGruppeReset();
|
||||
} else if (data.status == 2) {
|
||||
$('#editKalendergruppen').find('#editid').val(data.id);
|
||||
oMoreData1kalender_gruppen_mitglieder = data.id;
|
||||
document.getElementById("kalender_gruppen_mitglieder_reihe").style.display = "";
|
||||
updateLiveTable();
|
||||
updateLiveTable('#kalender_gruppen_mitglieder');
|
||||
} else {
|
||||
alert(data.statusText);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
}
|
||||
|
||||
function KalenderGruppenEdit(id) {
|
||||
if (id > 0) {
|
||||
oMoreData1kalender_gruppen_mitglieder = id;
|
||||
document.getElementById("kalender_gruppen_mitglieder_reihe").style.display = "";
|
||||
updateLiveTable('#kalender_gruppen_mitglieder');
|
||||
$.ajax({
|
||||
url: 'index.php?module=kalender&action=gruppenedit&cmd=get',
|
||||
data: {
|
||||
editid: id
|
||||
},
|
||||
method: 'post',
|
||||
dataType: 'json',
|
||||
beforeSend: function () {
|
||||
App.loading.open();
|
||||
},
|
||||
success: function (data) {
|
||||
$('#editKalendergruppen').find('#editid').val(data.id);
|
||||
$('#editKalendergruppen').find('#editbezeichnung').val(data.bezeichnung);
|
||||
$('#editKalendergruppen').find('#editfarbe').val(data.farbe);
|
||||
$('#editfarbe').trigger('change');
|
||||
$('#editKalendergruppen').find('#editausblenden').prop("checked", data.ausblenden == 1 ? true : false);
|
||||
App.loading.close();
|
||||
$("#editKalendergruppen").dialog('open');
|
||||
}
|
||||
});
|
||||
} else {
|
||||
document.getElementById("kalender_gruppen_mitglieder_reihe").style.display = "none";
|
||||
KalenderGruppeReset();
|
||||
$("#editKalendergruppen").dialog('open');
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
function updateLiveTable(i) {
|
||||
if (typeof i == 'undefined' || i == '') {
|
||||
var oTableL = $('#kalender_gruppenlist').DataTable();
|
||||
} else {
|
||||
var oTableL = $(i).DataTable();
|
||||
}
|
||||
oTableL.ajax.reload();
|
||||
}
|
||||
|
||||
function KalenderGruppenDelete(id) {
|
||||
|
||||
var conf = confirm('Wirklich löschen?');
|
||||
if (conf) {
|
||||
$.ajax({
|
||||
url: 'index.php?module=kalender&action=gruppendelete',
|
||||
data: {
|
||||
editid: id
|
||||
},
|
||||
method: 'post',
|
||||
dataType: 'json',
|
||||
beforeSend: function () {
|
||||
App.loading.open();
|
||||
},
|
||||
success: function (data) {
|
||||
if (data.status == 1) {
|
||||
updateLiveTable();
|
||||
} else {
|
||||
alert(data.statusText);
|
||||
}
|
||||
App.loading.close();
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
@@ -0,0 +1,717 @@
|
||||
$(document).ready(function () {
|
||||
var date = new Date();
|
||||
var d = date.getDate();
|
||||
var m = date.getMonth();
|
||||
var y = date.getFullYear();
|
||||
var clickedEvent;
|
||||
|
||||
var dayNamesShort = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'];
|
||||
var dayNames = ['Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag'];
|
||||
var monthNames = ['Januar', 'Februar', 'März', 'April', 'Mai',
|
||||
'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];
|
||||
var monthNamesShort = ['Januar', 'Februar', 'März', 'April', 'Mai',
|
||||
'Juni', 'Juli', 'August', 'September', 'Oktober', 'November', 'Dezember'];
|
||||
var today = 'Heute';
|
||||
var month = 'Monat';
|
||||
var week = 'Woche';
|
||||
var day = 'Tag';
|
||||
|
||||
if ($('#calendar').length === 0) {
|
||||
return;
|
||||
}
|
||||
|
||||
$("input#ansprechpartner").autocomplete({
|
||||
source: "index.php?module=ajax&action=filter&filtername=ansprechpartneradresse&adresse="+0,
|
||||
});
|
||||
|
||||
$("input#adresse").autocomplete({
|
||||
source: "index.php?module=ajax&action=filter&filtername=adresse",
|
||||
select: function( event, ui ) {
|
||||
if(ui.item){
|
||||
$("input#ansprechpartner").autocomplete({
|
||||
source: "index.php?module=ajax&action=filter&filtername=ansprechpartneradresse&adresse="+ui.item.value,
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
var $calendarattributes = $('#calendarattributes');
|
||||
|
||||
if ($calendarattributes.length !== 0) {
|
||||
try{
|
||||
var calendarattributes = JSON.parse($calendarattributes.html());
|
||||
|
||||
dayNamesShort = calendarattributes.dayNames;
|
||||
dayNames = calendarattributes.dayNames;
|
||||
|
||||
monthNames = calendarattributes.monthNames;
|
||||
monthNamesShort = calendarattributes.monthNames;
|
||||
|
||||
today = calendarattributes.today;
|
||||
month = calendarattributes.month;
|
||||
week = calendarattributes.week;
|
||||
day = calendarattributes.day;
|
||||
|
||||
}catch(e){
|
||||
//Nichts tun; Fallback wird verwendet
|
||||
}
|
||||
}
|
||||
|
||||
$('#calendar').fullCalendar({
|
||||
theme: true,
|
||||
header: {
|
||||
left: 'tasks',
|
||||
center: 'prev,title,next',
|
||||
right: 'today,month,agendaWeek,agendaDay'
|
||||
},
|
||||
allDayText: 'Ganztägig',
|
||||
firstDay: 1,
|
||||
dayNamesShort: dayNamesShort,
|
||||
dayNames: dayNames,
|
||||
monthNames: monthNames,
|
||||
monthNamesShort: monthNamesShort,
|
||||
timeFormat: 'H:mm',
|
||||
buttonText: {
|
||||
prev: "<span class='fc-text-arrow'>‹</span>",
|
||||
next: "<span class='fc-text-arrow'>›</span>",
|
||||
prevYear: "<span class='fc-text-arrow'>«</span>",
|
||||
nextYear: "<span class='fc-text-arrow'>»</span>",
|
||||
today: today,
|
||||
month: month,
|
||||
week: week,
|
||||
day: day
|
||||
},
|
||||
axisFormat: 'HH:mm',
|
||||
columnFormat: {
|
||||
month: 'ddd',
|
||||
week: 'ddd d.M',
|
||||
day: 'dddd d.M'
|
||||
},
|
||||
weekNumbers: true,
|
||||
weekNumberTitle: 'W',
|
||||
selectable: true,
|
||||
loading: function (isLoading, view) {
|
||||
//var myView = $.cookie('currentView');
|
||||
//var myViewDate = $.cookie('currentViewDate');
|
||||
|
||||
var myView = Nocie.Get('currentView');
|
||||
var myViewDate = Nocie.Get('currentViewDate');
|
||||
|
||||
// In Monatsansicht zum aktuellen Tag scrollen
|
||||
// (isLoading ist false wenn der AJAX-Request da ist)
|
||||
if (isLoading === false && view.name === 'month') {
|
||||
var autoscroll = parseInt($('#calendar').data('autoscroll'));
|
||||
if (autoscroll === 1) {
|
||||
setTimeout(function () { // Timeout
|
||||
$('.fc-today').attr('id', 'scrollTo'); // Set an ID for the current day..
|
||||
$('html, body').animate({
|
||||
scrollTop: $('#scrollTo').offset().top - 104 // Scroll to this ID
|
||||
}, 1000);
|
||||
}, 200);
|
||||
}
|
||||
}
|
||||
|
||||
if (isLoading && myView != null) {
|
||||
$('#calendar').fullCalendar('changeView', myView);
|
||||
if (myViewDate != null) {
|
||||
var mydate = Date.parse(myViewDate);
|
||||
var year = $.format.date(mydate, 'yyyy');
|
||||
var month = $.format.date(mydate, 'M') - 1;
|
||||
var day = (myView === 'month') ? 15 : $.format.date(mydate, 'd');
|
||||
$('#calendar').fullCalendar('gotoDate', year, month, day);
|
||||
|
||||
Nocie.Remove('currentViewDate');
|
||||
Nocie.Remove('currentView');
|
||||
}
|
||||
}
|
||||
},
|
||||
select: function (start, end, allDay) {
|
||||
var myView = $('#calendar').fullCalendar('getView');
|
||||
|
||||
Nocie.Set('currentViewDate', myView.start);
|
||||
Nocie.Set('currentView', myView.name);
|
||||
|
||||
// Neuen Event anlegen
|
||||
$("#TerminDialog").SetFormData(-1, start, end, allDay);
|
||||
$("#TerminDialog").dialog("open");
|
||||
AllDay($('#allday'));
|
||||
},
|
||||
|
||||
|
||||
eventDrop: function (event, dayDelta, minuteDelta, allDay, revertFunc)
|
||||
// eventDrop: function(event, element)
|
||||
{
|
||||
var task = '';
|
||||
|
||||
if (event.task != undefined)
|
||||
task = '&task=' + event.task;
|
||||
if (event.id > -1) {
|
||||
$.get('./index.php?module=kalender&action=update&id=' + event.id + '&start=' + $.fullCalendar.formatDate(event.start, 'yyyy-MM-dd HH:mm:ss')
|
||||
+ '&end=' + $.fullCalendar.formatDate(event.end, 'yyyy-MM-dd HH:mm:ss') + '&allDay=' + event.allDay + task,
|
||||
function () {
|
||||
$('#calendar').fullCalendar('updateEvent', event);
|
||||
});
|
||||
} else {
|
||||
alert("Eintrag kann nicht verschoben werden");
|
||||
revertFunc();
|
||||
}
|
||||
},
|
||||
eventResize: function (event, dayDelta, minuteDelta, revertFunc, jsEvent, ui, view) {
|
||||
//eventResize: function(event, element) {
|
||||
if (event.id > -1) {
|
||||
$.get('./index.php?module=kalender&action=update&id=' + event.id + '&start=' + $.fullCalendar.formatDate(event.start, 'yyyy-MM-dd HH:mm:ss')
|
||||
+ '&end=' + $.fullCalendar.formatDate(event.end, 'yyyy-MM-dd HH:mm:ss'),
|
||||
function () {
|
||||
$('#calendar').fullCalendar('updateEvent', event);
|
||||
});
|
||||
} else {
|
||||
alert("Eintrag kann nicht verlängert werden");
|
||||
revertFunc();
|
||||
}
|
||||
},
|
||||
|
||||
eventClick: function (calEvent, jsEvent, view) {
|
||||
clickedEvent = calEvent;
|
||||
|
||||
var myView = $('#calendar').fullCalendar('getView');
|
||||
//$.cookie("currentView",myView.name);
|
||||
//$.cookie("currentViewDate", myView.visStart);
|
||||
|
||||
Nocie.Set('currentView', myView.name);
|
||||
Nocie.Set('currentViewDate', calEvent.start);
|
||||
|
||||
if ($("#TerminDialog").SetFormData(calEvent.id, calEvent.start, calEvent.end, calEvent.allDay, calEvent.task)) {
|
||||
console.log('open soon');
|
||||
$("#TerminDialog").dialog("open");
|
||||
AllDay($('#allday'));
|
||||
}
|
||||
},
|
||||
editable: true,
|
||||
events: "./index.php?module=kalender&action=data"
|
||||
});
|
||||
|
||||
$(document).on('click', '#allday', function (e) {
|
||||
AllDay(this);
|
||||
});
|
||||
|
||||
$.fn.SetFormData = function (id, start, end, allDay, task) {
|
||||
if (id == -2) {
|
||||
AufgabenEdit(task);
|
||||
//window.open('index.php?module=aufgaben&action=edit&id=' + task + '&back=kalender#tabs-3', '_blank');
|
||||
return false;
|
||||
}
|
||||
else if (id == -3) {
|
||||
// mindesthaltbarkeit
|
||||
//alert("Eintrag kann nicht editiert werden");
|
||||
window.open('index.php?module=artikel&action=mindesthaltbarkeitsdatum&id=' + task, '_blank');
|
||||
return false;
|
||||
}
|
||||
else if (id == -4) {
|
||||
// geburstag
|
||||
window.open('index.php?module=adresse&action=brief&id=' + task, '_blank');
|
||||
return false;
|
||||
}
|
||||
else if (id == -5) {
|
||||
// Projekt //heute mal wieder rein 4.08.18 BS
|
||||
window.open('index.php?module=projekt&action=dashboard&id=' + task, '_blank');
|
||||
return false;
|
||||
}
|
||||
else if (id == -6) {
|
||||
// Serviceauftrag
|
||||
window.open('index.php?module=serviceauftrag&action=edit&id=' + task, '_blank');
|
||||
return false;
|
||||
}
|
||||
else if (id == -7) {
|
||||
// Urlaub Mitarbeiterzeiterfassung
|
||||
return false;
|
||||
}
|
||||
else if (id > -1) {
|
||||
var formdata = null;
|
||||
// Edit
|
||||
$.ajax({
|
||||
url: './index.php?module=kalender&action=eventdata&id=' + id,
|
||||
success: function (data) {
|
||||
EditMode(data);
|
||||
},
|
||||
error: function (request, statusCode, error) {
|
||||
$("#submitError").html("Keine Event-Daten gefunden");
|
||||
}
|
||||
});
|
||||
} else {
|
||||
// Neuen Event anlegen
|
||||
|
||||
console.log('new');
|
||||
|
||||
// Zuletzt angeklickten Event vergessen
|
||||
clickedEvent = null;
|
||||
|
||||
var defaultColor = $('#calendar').data('default-color');
|
||||
if (typeof defaultColor === 'undefined' || defaultColor === '') {
|
||||
defaultColor = '#0B8092';
|
||||
}
|
||||
|
||||
// New
|
||||
$("#mode").val("new");
|
||||
$("#datum").val($.format.date(start, "dd.MM.yyyy"));
|
||||
$("#datum_bis").val($.format.date(end, "dd.MM.yyyy"));
|
||||
$('#googleStatus').html('');
|
||||
|
||||
// Buttons
|
||||
$(":button:contains('Kopieren')").prop("disabled", true).addClass('ui-state-disabled');
|
||||
$(":button:contains('Löschen')").prop("disabled", true).addClass('ui-state-disabled');
|
||||
$(":button:has('Einladung')").prop("disabled", true).addClass('ui-state-disabled');
|
||||
|
||||
$("input[name=public]").prop('checked', 'checked');
|
||||
$("input[name=erinnerung]").prop('checked', 'checked');
|
||||
$("input[name=allday]").prop('checked', 'checked');
|
||||
$("#personen option").prop('selected', false);
|
||||
$("#gruppenkalender option").prop('selected', false);
|
||||
$("#color").val(defaultColor).change();
|
||||
|
||||
// Ganztags
|
||||
if (allDay) {
|
||||
$("#allday").attr('checked', true);
|
||||
$("#von").attr('disabled', true);
|
||||
$("#bis").attr('disabled', true);
|
||||
} else {
|
||||
$("#allday").attr('checked', false);
|
||||
$("#von").attr('disabled', false);
|
||||
$("#bis").attr('disabled', false);
|
||||
}
|
||||
|
||||
// Von & Bis
|
||||
$("#von").val($.format.date(start, "HH:mm"));
|
||||
$("#bis").val($.format.date(end, "HH:mm"));
|
||||
|
||||
// Haken bei Ganztags entfernen, wenn Uhrzeit eingetragen wird
|
||||
$("#von,#bis").on('keyup', function () {
|
||||
var $allday = $('#allday');
|
||||
if ($allday.prop('checked')) {
|
||||
$allday.prop('checked', false);
|
||||
}
|
||||
});
|
||||
}
|
||||
return true;
|
||||
};
|
||||
|
||||
var EditMode = function (data) {
|
||||
$("#mode").val("edit");
|
||||
$("#eventid").val(data.id);
|
||||
$("#titel").val(data.titel);
|
||||
$("#ort").val(data.ort);
|
||||
$("#adresse").val(data.adresse);
|
||||
$("#ansprechpartner").val(data.ansprechpartner);
|
||||
$("#adresseintern").val(data.adresseintern);
|
||||
$("#projekt").val(data.projekt);
|
||||
$("#beschreibung").val(data.beschreibung);
|
||||
$("#datum").val($.format.date(data.von, "dd.MM.yyyy"));
|
||||
$("#datum_bis").val($.format.date(data.bis, "dd.MM.yyyy"));
|
||||
|
||||
// Buttons
|
||||
$(":button:contains('Kopieren')").prop("disabled", false).removeClass('ui-state-disabled');
|
||||
$(":button:contains('Löschen')").prop("disabled", false).removeClass('ui-state-disabled');
|
||||
$(":button:has('Einladung')").prop("disabled", false).removeClass('ui-state-disabled');
|
||||
|
||||
$('#googleStatus').html('');
|
||||
if(data.googleEventLink !== '' && data.googleEventEdit === false) {
|
||||
$('#googleStatus').append('<i>Dieser Google Termin kann nur vom Besitzer bearbeitet werden.</i></br>');
|
||||
$(":button:contains('Löschen')").prop("disabled", true).addClass('ui-state-disabled');
|
||||
$(":button:contains('Speichern')").prop("disabled", true).addClass('ui-state-disabled');
|
||||
$(":button:contains('Einladung')").prop("disabled", true).addClass('ui-state-disabled');
|
||||
$(":button:contains('Kopieren')").prop("disabled", true).addClass('ui-state-disabled');
|
||||
}
|
||||
// Cannot edit an Event if it's a Google Event of another user
|
||||
if(data.googleEventLink !== '') {
|
||||
$('#googleStatus').append('In <a href="'+data.googleEventLink+'" target="_blank">Google Kalender öffnen<a>');
|
||||
}
|
||||
|
||||
// Ganztags
|
||||
if (data.allDay) {
|
||||
$("#allday").prop('checked', true);
|
||||
$("#von").prop('disabled', true);
|
||||
$("#bis").prop('disabled', true);
|
||||
} else {
|
||||
$("#allday").prop('checked', false);
|
||||
$("#von").prop('disabled', false);
|
||||
$("#bis").prop('disabled', false);
|
||||
}
|
||||
|
||||
// Öffentlich
|
||||
if (data.public)
|
||||
$("#public").prop('checked', true);
|
||||
else
|
||||
$("#public").prop('checked', false);
|
||||
|
||||
// Erinnerung
|
||||
if (data.erinnerung)
|
||||
$("#erinnerung").prop('checked', true);
|
||||
else
|
||||
$("#erinnerung").prop('checked', false);
|
||||
|
||||
|
||||
// Von & Bis
|
||||
$("#von").val($.format.date(data.von, "HH:mm"));
|
||||
$("#bis").val($.format.date(data.bis, "HH:mm"));
|
||||
|
||||
// Color
|
||||
//$("#colors option[value='"+data.color+"']").prop('selected','selected');
|
||||
//if($("#colors option[value='"+data.color+"']").prop('selected')=='selected')
|
||||
// $("#colors").css("background-color", data.color);
|
||||
$("#color").val(data.color);
|
||||
$("#color").change();
|
||||
|
||||
// Personen
|
||||
$('#personen option').removeAttr('selected');
|
||||
if (data.personen != null && data.personen !== undefined) {
|
||||
jQuery.each(data.personen, function (k, v) {
|
||||
$("#personen option[value='" + v.userid + "']").prop('selected', 'selected');
|
||||
});
|
||||
}
|
||||
|
||||
// Gruppenkalender
|
||||
$('#gruppenkalender option').removeAttr('selected');
|
||||
if (data.gruppenkalender != null && data.gruppenkalender !== undefined) {
|
||||
jQuery.each(data.gruppenkalender, function (k, v) {
|
||||
$("#gruppenkalender option[value='" + v.kalendergruppe + "']").prop('selected', 'selected');
|
||||
});
|
||||
}
|
||||
|
||||
$("input#ansprechpartner").autocomplete({
|
||||
source: "index.php?module=ajax&action=filter&filtername=ansprechpartneradresse&adresse="+data.adressid,
|
||||
});
|
||||
|
||||
};
|
||||
|
||||
// Standard-Verhalten der Multiple-Selectbox ändern:
|
||||
// - Beim Klick auf einen Eintrag wird nur der angeklickte Eintrag ausgewählt; bzw. abgewählt (wenn vorher aktiv).
|
||||
// - Das Halten der Strg-Taste zum Entfernen einer Auswahl ist dadurch nicht mehr notwendig.
|
||||
$('#personen option, #gruppenkalender option').on('mousedown', function (e) {
|
||||
e.preventDefault();
|
||||
$(e.target).prop('selected', function (i, value) {
|
||||
return !value;
|
||||
});
|
||||
});
|
||||
|
||||
$('#TerminForm').submit(function (e) {
|
||||
var mode = $('#mode').val();
|
||||
e.preventDefault();
|
||||
|
||||
var formData = $(this).serialize();
|
||||
$.ajax({
|
||||
url: 'index.php?module=kalender&action=list&ajax=true',
|
||||
method: 'post',
|
||||
data: formData,
|
||||
dataType: 'json',
|
||||
success: function (eventData) {
|
||||
|
||||
// Event wurde gelöscht > Event aus Kalender entfernen
|
||||
if (mode === 'delete' && typeof eventData.deletedEventId !== 'undefined') {
|
||||
$('#calendar').fullCalendar('removeEvents', eventData.deletedEventId);
|
||||
$('#TerminDialog').dialog('close');
|
||||
return;
|
||||
}
|
||||
|
||||
// Termin wurde kopiert
|
||||
if (mode === 'copy' && clickedEvent !== null) {
|
||||
$('#calendar').fullCalendar('refetchEvents');
|
||||
$('#TerminDialog').dialog('close');
|
||||
return;
|
||||
}
|
||||
|
||||
// Neuer Termin wurde angelegt
|
||||
if (mode === 'new' && clickedEvent === null) {
|
||||
$('#calendar').fullCalendar('refetchEvents');
|
||||
$('#TerminDialog').dialog('close');
|
||||
return;
|
||||
}
|
||||
|
||||
// Termin wurde bearbeitet > Originalen Event aktualisieren
|
||||
if (mode === 'edit' && clickedEvent !== null) {
|
||||
clickedEvent = updateExistingEvent(clickedEvent, eventData);
|
||||
$('#calendar').fullCalendar('updateEvent', clickedEvent);
|
||||
}
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
$("#TerminDialog").dialog({
|
||||
autoOpen: false,
|
||||
height: 600,
|
||||
width: 1000,
|
||||
modal: true,
|
||||
buttons: {
|
||||
"Speichern": function () {
|
||||
var errMsg = '';
|
||||
|
||||
if ($("#datum").val() == "") errMsg = "Geben Sie bitte ein gültiges Datum ein (dd.mm.jjjj)"
|
||||
if ($("#titel").val() == "") errMsg = "Geben Sie bitte einen Titel ein";
|
||||
|
||||
if (errMsg != "")
|
||||
$("#submitError").html(errMsg);
|
||||
else {
|
||||
$('#TerminForm').submit();
|
||||
$(this).dialog("close");
|
||||
}
|
||||
},
|
||||
"Kopieren": function () {
|
||||
$("#mode").val("copy");
|
||||
$('#TerminForm').submit();
|
||||
},
|
||||
"Löschen": function () {
|
||||
if (confirm("Soll der Termin wirklich gelöscht werden?")) {
|
||||
$("#mode").val("delete");
|
||||
$('#TerminForm').submit();
|
||||
}
|
||||
},
|
||||
"Einladung": function () {
|
||||
var errMsg = '';
|
||||
|
||||
if ($("#datum").val() == "") errMsg = "Geben Sie bitte ein gültiges Datum ein (dd.mm.jjjj)"
|
||||
if ($("#titel").val() == "") errMsg = "Geben Sie bitte einen Titel ein";
|
||||
|
||||
if (errMsg != "")
|
||||
$("#submitError").html(errMsg);
|
||||
else {
|
||||
$('#noRedirect').val('1');
|
||||
// $('#TerminForm').submit();
|
||||
$.ajax({
|
||||
url: 'index.php?module=kalender&action=list',
|
||||
method: 'post',
|
||||
data: $('#TerminForm').serialize(),
|
||||
dataType: 'json',
|
||||
success: function (datatermin) {
|
||||
$("#einladungeventid").val(datatermin.eventid);
|
||||
$("#TerminDialog").dialog("close");
|
||||
$("#TerminDialogEinladung").dialog("open");
|
||||
// betreff und text holen und ansprechpartner list
|
||||
$.ajax({
|
||||
url: 'index.php?module=kalender&action=eventdata&cmd=getEinladung&id=' + $("#einladungeventid").val(),
|
||||
method: 'post',
|
||||
dataType: 'json',
|
||||
success: function (data) {
|
||||
if (data.status == 1) {
|
||||
$('#noRedirect').val('0');
|
||||
$('#TerminDialogEinladung').find('#einladungbetreff').val(data.betreff);
|
||||
$('#TerminDialogEinladung').find('#einladungtext').val(data.text);
|
||||
$('#TerminDialogEinladung').find('#einladungcc').val(data.einladungcc);
|
||||
} else {
|
||||
alert(data.statusText);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
}
|
||||
});
|
||||
}
|
||||
},
|
||||
// "Einladung": function () {
|
||||
// var errMsg = '';
|
||||
// if ($("#datum").val() == "") errMsg = "Geben Sie bitte ein gültiges Datum ein (dd.mm.jjjj)"
|
||||
// if ($("#titel").val() == "") errMsg = "Geben Sie bitte einen Titel ein";
|
||||
//
|
||||
// if (errMsg != "")
|
||||
// $("#submitError").html(errMsg);
|
||||
// else {
|
||||
// $("#TerminDialogEinladung").dialog("open");
|
||||
// // betreff und text holen und ansprechpartner list
|
||||
//
|
||||
// $.ajax({
|
||||
// url: 'index.php?module=kalender&action=einladung&cmd=get&id=' + $("#eventid").val(),
|
||||
// method: 'post',
|
||||
// dataType: 'json',
|
||||
// success: function (data) {
|
||||
// if (data.status == 1) {
|
||||
// $('#TerminDialogEinladung').find('#einladungbetreff').val(data.betreff);
|
||||
// $('#TerminDialogEinladung').find('#einladungtext').val(data.text);
|
||||
// $('#TerminDialogEinladung').find('#einladungcc').val(data.einladungcc);
|
||||
// } else {
|
||||
// alert(data.statusText);
|
||||
// }
|
||||
// }
|
||||
// });
|
||||
//
|
||||
// }
|
||||
//
|
||||
// },
|
||||
|
||||
"Abbrechen": function () {
|
||||
$(this).dialog("close");
|
||||
}
|
||||
},
|
||||
close: function () {
|
||||
$("#submitError").html("");
|
||||
$("#titel").val("");
|
||||
$("#ort").val("");
|
||||
$("#adresse").val("");
|
||||
$("#ansprechpartner").val("");
|
||||
$("#adresseintern").val("");
|
||||
$("#projekt").val("");
|
||||
$("#beschreibung").val("");
|
||||
$("#datum").val("");
|
||||
$("#datum_bis").val("");
|
||||
$("#von").val("");
|
||||
$("#bis").val("");
|
||||
$("#public").attr('checked', false);
|
||||
$("#erinnerung").attr('checked', false);
|
||||
//$("#colors option[value='']").attr('selected','selected');
|
||||
//$("#colors").css('background-color','#FFFFFF');
|
||||
$("#color").val("");
|
||||
$("#color").change();
|
||||
//$('#personen option').removeAttr('selected');
|
||||
$("#eventid").val("");
|
||||
$("#mode").val("");
|
||||
|
||||
$("input#ansprechpartner").autocomplete({
|
||||
source: "index.php?module=ajax&action=filter&filtername=ansprechpartneradresse&adresse="+0,
|
||||
});
|
||||
}
|
||||
});
|
||||
|
||||
$("#TerminDialogEinladung").dialog({
|
||||
modal: true,
|
||||
bgiframe: true,
|
||||
closeOnEscape: false,
|
||||
minWidth: 900,
|
||||
minHeight: 350,
|
||||
autoOpen: false,
|
||||
buttons: {
|
||||
ABBRECHEN: function () {
|
||||
$(this).dialog('close');
|
||||
},
|
||||
"Einladung SENDEN": function () {
|
||||
|
||||
$.ajax({
|
||||
url: 'index.php?module=kalender&action=eventdata&cmd=sendEinladung&id=' + $("#eventid").val(),
|
||||
data: {
|
||||
//Alle Felder die fürs editieren vorhanden sind
|
||||
id: $('#einladungeventid').val(),
|
||||
betreff: $('#einladungbetreff').val(),
|
||||
text: $('#einladungtext').val(),
|
||||
emailcc: $('#einladungcc').val()
|
||||
},
|
||||
method: 'post',
|
||||
dataType: 'json',
|
||||
beforeSend: function () {
|
||||
App.loading.open();
|
||||
},
|
||||
success: function (data) {
|
||||
App.loading.close();
|
||||
if (data.status == 1) {
|
||||
/* $('#editKontorahmen').find('#editid').val('');
|
||||
$('#editKontorahmen').find('#editkonto').val('');
|
||||
$('#editKontorahmen').find('#editbeschriftung').val('');
|
||||
$('#editKontorahmen').find('#editart').val('');
|
||||
$('#editKontorahmen').find('#editbemerkung').val('');
|
||||
$('#editKontorahmen').find('#editnichtsichtbar').val('');
|
||||
|
||||
*/
|
||||
// alert(data.statusText);
|
||||
$("#TerminDialogEinladung").dialog('close');
|
||||
} else {
|
||||
alert(data.statusText);
|
||||
$('#calendar').fullCalendar('refetchEvents');
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
//alert($("#einladungeventid").val());
|
||||
/*
|
||||
$.ajax({
|
||||
url: 'index.php?module=kalender&action=einladung&id='+$("#eventid").val(),
|
||||
data: {
|
||||
//Alle Felder die fürs editieren vorhanden sind
|
||||
//id: $('#editid').val(),
|
||||
id: $('#').val(),
|
||||
betreff: $('#einladungbetreff').val(),
|
||||
text: $('#einladungtext').val(),
|
||||
betreff: $('#einladungcc').val()
|
||||
},
|
||||
success: function(data) {
|
||||
},
|
||||
error: function (request, statusCode, error) {
|
||||
});
|
||||
*/
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
$("#TerminDialogEinladung").dialog({
|
||||
close: function (event, ui) {
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
function AllDay(el) {
|
||||
if (el.checked) {
|
||||
$("#von").attr('disabled', true);
|
||||
$("#bis").attr('disabled', true);
|
||||
} else {
|
||||
$("#von").attr('disabled', false);
|
||||
$("#bis").attr('disabled', false);
|
||||
}
|
||||
}
|
||||
|
||||
function getDialogButton(jqUIdialog, button_names) {
|
||||
if (typeof button_names == 'string')
|
||||
button_names = [button_names];
|
||||
var buttons = jqUIdialog.parent().find('.ui-dialog-buttonpane button');
|
||||
for (var i = 0; i < buttons.length; i++) {
|
||||
var jButton = $(buttons[i]);
|
||||
for (var j = 0; j < button_names.length; j++)
|
||||
if (jButton.text() == button_names[j])
|
||||
return jButton;
|
||||
}
|
||||
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Aktualisiert ein vorhandenes Event-Objekt
|
||||
*
|
||||
* @param {Event} event https://fullcalendar.io/docs/v1/event-object
|
||||
* @param {Array} data
|
||||
*
|
||||
* @return {Event}
|
||||
*/
|
||||
var updateExistingEvent = function(event, data) {
|
||||
event.title = data.title;
|
||||
event.beschreibung = data.beschreibung;
|
||||
event.color = data.color;
|
||||
event.farbe = data.color;
|
||||
event.projekt = data.projekt;
|
||||
event.adresse = data.adresse;
|
||||
event.ansprechpartner = data.ansprechpartner;
|
||||
event.adresseintern = data.adresseintern;
|
||||
event.allDay = (data.allDay === '1');
|
||||
event.public = (data.public === '1');
|
||||
event.erinnerung = (data.erinnerung === '1');
|
||||
event.start = new Date(data.start);
|
||||
event.end = new Date(data.end);
|
||||
|
||||
return event;
|
||||
};
|
||||
|
||||
/**
|
||||
* Erzeugt ein neues Event-Objekt
|
||||
*
|
||||
* @param {Array} data
|
||||
*
|
||||
* @return {Event} https://fullcalendar.io/docs/v1/event-object
|
||||
*/
|
||||
var createNewEvent = function (data) {
|
||||
return {
|
||||
id: data.id,
|
||||
title: data.title,
|
||||
color: data.color,
|
||||
projekt: data.projekt,
|
||||
adresse: data.adresse,
|
||||
ansprechpartner: data.ansprechpartner,
|
||||
adresseintern: data.adresseintern,
|
||||
allDay: (data.allDay === '1'),
|
||||
public: (data.public === '1'),
|
||||
erinnerung: (data.erinnerung === '1'),
|
||||
start: new Date(data.start),
|
||||
end: new Date(data.end)
|
||||
};
|
||||
};
|
||||
Reference in New Issue
Block a user