Initial xentral_oss_20.3.c9ffacf

This commit is contained in:
Alex
2021-05-21 08:49:41 +02:00
parent 5406e4a551
commit 34e5ac43d9
18884 changed files with 2109867 additions and 0 deletions
+28
View File
@@ -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
{
}
+247
View File
@@ -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&auml;gig',
firstDay: 1,
dayNamesShort: dayNamesShort,
dayNames: dayNames,
monthNames: monthNames,
monthNamesShort: monthNamesShort,
timeFormat: 'H:mm',
buttonText: {
prev: "<span class='fc-text-arrow'>&lsaquo;</span>",
next: "<span class='fc-text-arrow'>&rsaquo;</span>",
prevYear: "<span class='fc-text-arrow'>&laquo;</span>",
nextYear: "<span class='fc-text-arrow'>&raquo;</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&uuml;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&uuml;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&uuml;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)
};
};