Kalender Updates
* Vorlagen können nun erstellt und editiert werden. * neue Migration für CalendarTemplates
This commit is contained in:
@@ -565,7 +565,7 @@ endforeach;
|
||||
</div>
|
||||
<div class="d-inline-block ml-2">
|
||||
<div class="dropdown">
|
||||
<button style="padding: 1px 8px;" class="btn btn-info dropdown-toggle"
|
||||
<button style="padding: 1px 8px;" id="preview-button" class="btn btn-info dropdown-toggle"
|
||||
type="button" data-toggle="dropdown" aria-expanded="false">
|
||||
Vorlagen
|
||||
</button>
|
||||
@@ -671,6 +671,7 @@ endforeach;
|
||||
let requestUpdateColorUrl = "<?= self::getUrl("Calendar", "api", ['do' => 'updateCalendarColor']) ?>";
|
||||
let requestDeleteUrl = "<?= self::getUrl("Calendar", "api", ['do' => 'deleteCalendarEvent']) ?>";
|
||||
let requestUpdateEventsUrl = "<?= self::getUrl("api/v1/calendar")?>/calendarStream?user=<?= $encryptedUser ?>";
|
||||
let requestgetpreviewtUrl = "<?= self::getUrl("CalendarTemplate", "api", ['do' => 'getPreview']) ?>";
|
||||
let calendarRights = '<?php echo json_encode($rights); ?>';
|
||||
|
||||
var holiDays = [];
|
||||
|
||||
172
Layout/default/CalendarTemplate/Form.php
Normal file
172
Layout/default/CalendarTemplate/Form.php
Normal file
@@ -0,0 +1,172 @@
|
||||
<?php include(realpath(dirname(__FILE__) . "/../../$mfLayoutPackage") . "/header.php"); ?>
|
||||
<link href="<?= self::getResourcePath() ?>assets/css/select2-cstm.css?<?= date('U') ?>" rel="stylesheet"
|
||||
type="text/css"/>
|
||||
<style>
|
||||
.btn-sm {
|
||||
padding: .1rem .5rem;
|
||||
font-size: .9rem;
|
||||
line-height: 1.5;
|
||||
border-radius: .15rem;
|
||||
}
|
||||
</style>
|
||||
<!-- start page title -->
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="page-title-box">
|
||||
<div class="page-title-right">
|
||||
<ol class="breadcrumb m-0">
|
||||
<li class="breadcrumb-item"><a href="<?= self::getUrl("Dashboard") ?>"><?= MFAPPNAME_SLUG ?></a>
|
||||
</li>
|
||||
<li class="breadcrumb-item"><a
|
||||
href="<?= self::getUrl("CalendarTemplate") ?>">Vorlagen</a></li>
|
||||
<li class="breadcrumb-item active"><?= ($calendartemplates->id) ? "bearbeiten" : "Neu" ?></li>
|
||||
|
||||
</ol>
|
||||
</div>
|
||||
<h4 class="page-title"><?= ($calendartemplates->id) ? "Vorlage bearbeiten" : "Neuer Vorlage" ?></h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end page title -->
|
||||
<div class="row">
|
||||
<div class="col-lg-12">
|
||||
|
||||
<div class="card bg-light">
|
||||
<div class="card-body">
|
||||
<h4 class="header-title mb-2"><?= ($calendartemplates->id) ? "Vorlage bearbeiten" : "Neuer Vorlage" ?></h4>
|
||||
|
||||
<form class="form-horizontal" method="post"
|
||||
action="<?= self::getUrl("CalendarTemplate", "save") ?>">
|
||||
<div class="card no-shadow">
|
||||
<div class="card-body">
|
||||
<input type="hidden" name="id" value="<?= $calendartemplates->id ?>"/>
|
||||
<div class="form-group row">
|
||||
<label class="col-lg-2 col-form-label" for="event_type">Termintyp</label>
|
||||
<div class="col-lg-3">
|
||||
<select class="select2 form-control " name="event_type" id="event_type">
|
||||
<?php foreach (CalendarTemplateModel::$calendarTemplateEventTypes as $key => $value): ?>
|
||||
<option value="<?= $key ?>" <?= ($calendartemplates->event_type == $key) ? 'selected="selected"' : '' ?>><?= $value ?></option>
|
||||
<?php endforeach; ?>
|
||||
</select>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-lg-2 col-form-label" for="name">Vorlagen Name</label>
|
||||
<div class="col-lg-3">
|
||||
<input type="text" id="name" name="name" class="form-control"
|
||||
value="<?= $calendartemplates->name ?>"/>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-lg-2 col-form-label" for="is_reminder">Reminder</label>
|
||||
<div class="col-lg-3">
|
||||
<div class="form-check mt-1">
|
||||
<input class="form-check-input" <?= ($calendartemplates->is_reminder) ? 'checked="checked"' : '' ?> type="checkbox" name="is_reminder" id="is_reminder" value="1">
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
|
||||
<label class="col-lg-2 col-form-label" for="text">Vorlagen Text</label>
|
||||
<div class="col-lg-3">
|
||||
<div class="snippet-buttons mb-1">
|
||||
<button class="btn btn-info btn-sm" type="button" data-snippet="[&&date&&]"
|
||||
title="Datum des Termins">Datum
|
||||
</button>
|
||||
<button class="btn btn-info btn-sm" type="button" data-snippet="[&&start&&]"
|
||||
title="Start Uhrzeit des Termins">Start
|
||||
</button>
|
||||
<button class="btn btn-info btn-sm" type="button" data-snippet="[&&end&&]"
|
||||
title="End Uhrzeit des Termins">Ende
|
||||
</button>
|
||||
<button class="btn btn-info btn-sm" type="button" data-snippet="[&&vmnm&&]"
|
||||
title="Dynamisch Vormittag/Nachmittags je nach Termin begin">dyn.
|
||||
VM/NM
|
||||
</button>
|
||||
</div>
|
||||
<textarea id="text" name="text" style="height: 200px;"
|
||||
class="form-control"><?= $calendartemplates->text ?></textarea>
|
||||
</div>
|
||||
<div class="col-lg-4">
|
||||
<h5 id="preview-info" data-date="<?= date('d.m.Y', strtotime('+1 day')) ?>"
|
||||
data-start="08:00" data-end="10:00" data-dynvmnm="vormittags"
|
||||
class="pt-0 mt-0">Vorschau für Beispieltermin: <span
|
||||
class="font-14 font-weight-normal"><?= date('d.m.Y', strtotime('+1 day')) . " 08:00 - 10:00" ?></span>
|
||||
</h5>
|
||||
<div id="text-preview"></div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
<div class="form-group row">
|
||||
<label class="col-lg-2"></label>
|
||||
<div class="col-lg-10">
|
||||
<button type="submit" class="btn btn-primary">Speichern</button>
|
||||
<a href="<?= self::getUrl("Calendar") ?>">
|
||||
<button type="button" class="btn btn-secondary">Abbrechen</button>
|
||||
</a>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
</form>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
$(".select2").select2({placeholder: ""});
|
||||
|
||||
// disable mousewheel on a input number field when in focus
|
||||
$('form').on('focus', 'input[type=number]', function (e) {
|
||||
$(this).on('wheel.disableScroll', function (e) {
|
||||
e.preventDefault()
|
||||
})
|
||||
});
|
||||
$('form').on('blur', 'input[type=number]', function (e) {
|
||||
$(this).off('wheel.disableScroll')
|
||||
});
|
||||
$(document).ready(function () {
|
||||
function preview() {
|
||||
let text = $("#text").val();
|
||||
text = text.replace(/\[&&vmnm&&\]/g, $("#preview-info").data("dynvmnm"));
|
||||
text = text.replace(/\[&&date&&\]/g, $("#preview-info").data("date"));
|
||||
text = text.replace(/\[&&start&&\]/g, $("#preview-info").data("start"));
|
||||
text = text.replace(/\[&&end&&\]/g, $("#preview-info").data("end"));
|
||||
text = text.replace(/\n/g, "<br>");
|
||||
$("#text-preview").html(text);
|
||||
}
|
||||
$("#text").on("keyup blur change focus", preview);
|
||||
preview();
|
||||
$('.snippet-buttons button').on('click', function () {
|
||||
var snippet = $(this).data('snippet');
|
||||
insertAtCursor('#text', snippet);
|
||||
$('#text').focus();
|
||||
});
|
||||
|
||||
function insertAtCursor(textareaSelector, text) {
|
||||
var textarea = $(textareaSelector)[0];
|
||||
var start = textarea.selectionStart;
|
||||
var end = textarea.selectionEnd;
|
||||
var value = textarea.value;
|
||||
|
||||
// Text vor und nach der Cursorposition
|
||||
var before = value.substring(0, start);
|
||||
var after = value.substring(end, value.length);
|
||||
|
||||
// Neuen Wert setzen
|
||||
textarea.value = before + text + after;
|
||||
|
||||
// Cursorposition setzen
|
||||
var cursorPosition = start + text.length;
|
||||
textarea.selectionStart = textarea.selectionEnd = cursorPosition;
|
||||
}
|
||||
|
||||
});
|
||||
</script>
|
||||
|
||||
<?php include(realpath(dirname(__FILE__) . "/../../$mfLayoutPackage") . "/footer.php"); ?>
|
||||
88
Layout/default/CalendarTemplate/Index.php
Normal file
88
Layout/default/CalendarTemplate/Index.php
Normal file
@@ -0,0 +1,88 @@
|
||||
<?php include(realpath(dirname(__FILE__) . "/../../$mfLayoutPackage") . "/header.php"); ?>
|
||||
<link href="<?= self::getResourcePath() ?>assets/css/datatables-std.css?<?= date('U') ?>" rel="stylesheet"
|
||||
type="text/css"/>
|
||||
<!-- start page title -->
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="page-title-box">
|
||||
<div class="page-title-right">
|
||||
<ol class="breadcrumb m-0">
|
||||
<li class="breadcrumb-item"><a href="<?= self::getUrl("Dashboard") ?>"><?= MFAPPNAME_SLUG ?></a>
|
||||
</li>
|
||||
<li class="breadcrumb-item active">Vorlagen</li>
|
||||
</ol>
|
||||
</div>
|
||||
<h4 class="page-title">Vorlagen</h4>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<!-- end page title -->
|
||||
|
||||
|
||||
<div class="card">
|
||||
<div class="card-body mb-3">
|
||||
<div class="row">
|
||||
<div class="col-12">
|
||||
<div class="float-left">
|
||||
<h4 class="header-title">Liste aller Vorlagen</h4>
|
||||
</div>
|
||||
<div class="float-right">
|
||||
<a class="btn btn-primary mb-2" href="<?= self::getUrl("CalendarTemplate", "add") ?>"><i
|
||||
class="fas fa-plus"></i> Neuen Vorlage anlegen</a>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
<table id="datatable" class="table table-striped table-hover table-sm">
|
||||
<thead>
|
||||
<tr>
|
||||
<th class="text-center">Termintyp</th>
|
||||
<th class="text-center">Vorlagen Name</th>
|
||||
<th class="text-center">Reminder</th>
|
||||
<th class="text-center">Vorlagen Text</th>
|
||||
<th class="edit-width"></th>
|
||||
</tr>
|
||||
<tr id="filterrow">
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
<th></th>
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
<?php foreach ($calendartemplates as $calendartemplate): ?>
|
||||
<tr>
|
||||
<td class="text-center"><?= $calendarTemplateEventTypes[$calendartemplate->event_type] ?></td>
|
||||
<td><?= $calendartemplate->name ?></td>
|
||||
<td style="text-align: center" class="text-center"><?= ($calendartemplate->is_reminder) ? 'Ja' : 'Nein' ?></td>
|
||||
<td><?= $calendartemplate->text ?></td>
|
||||
<td style="text-align: left; letter-spacing: 4px; font-size: 1.1em;">
|
||||
<a href="<?= self::getUrl("CalendarTemplate", "edit", ["id" => $calendartemplate->id]) ?>"><i
|
||||
class="far fa-edit" title="Bearbeiten"></i></a>
|
||||
<a href="<?= self::getUrl("CalendarTemplate", "delete", ["id" => $calendartemplate->id]) ?>"
|
||||
onclick="if(!confirm('Vorlage wirklich löschen?')) return false;" class="text-danger"
|
||||
title="Löschen"><i class="fas fa-trash"></i></a>
|
||||
</td>
|
||||
</tr>
|
||||
<?php endforeach; ?>
|
||||
</tbody>
|
||||
</table>
|
||||
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
|
||||
<script type="text/javascript">
|
||||
var hidesearch = [4];
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
});
|
||||
</script>
|
||||
<script type="text/javascript"
|
||||
src="<?= self::getResourcePath() ?>assets/js/datatables-std.js?<?= date('U') ?>"></script>
|
||||
|
||||
|
||||
<?php include(realpath(dirname(__FILE__) . "/../../$mfLayoutPackage") . "/footer.php"); ?>
|
||||
@@ -326,11 +326,13 @@ class CalendarController extends mfBaseController
|
||||
|
||||
protected function indexAction()
|
||||
{
|
||||
|
||||
$this->layout()->setTemplate("Calendar/Index");
|
||||
$calendars = CalendarModel::getAll();
|
||||
$calendarTemplateEventTypes = CalendarTemplateModel::$calendarTemplateEventTypes;
|
||||
$this->layout()->set("calendarTemplateEventTypes", $calendarTemplateEventTypes);
|
||||
$calendartemplates = CalendarTemplateModel::getAll();
|
||||
$this->layout()->set("calendartemplates", $calendartemplates);
|
||||
$this->layout()->set("calendars", $calendars);
|
||||
|
||||
}
|
||||
|
||||
protected function addAction()
|
||||
|
||||
59
application/CalendarTemplate/CalendarTemplate.php
Normal file
59
application/CalendarTemplate/CalendarTemplate.php
Normal file
@@ -0,0 +1,59 @@
|
||||
<?php
|
||||
|
||||
class CalendarTemplate extends mfBaseModel
|
||||
{
|
||||
private $editor;
|
||||
private $creator;
|
||||
|
||||
|
||||
|
||||
public function getProperty($name)
|
||||
{
|
||||
if ($this->$name == null) {
|
||||
|
||||
if (!$this->id) {
|
||||
return null;
|
||||
}
|
||||
|
||||
if ($name == "creator") {
|
||||
$this->creator = mfValuecache::singleton()->get("Worker-id-" . $this->create_by);
|
||||
if ($this->creator === null) {
|
||||
$this->creator = new User($this->create_by);
|
||||
if ($this->creator->id) {
|
||||
mfValuecache::singleton()->set("Worker-id-" . $this->create_by, $this->creator);
|
||||
}
|
||||
}
|
||||
return $this->creator;
|
||||
}
|
||||
|
||||
if ($name == "editor") {
|
||||
$this->editor = mfValuecache::singleton()->get("Worker-id-" . $this->edit_by);
|
||||
if ($this->editor === null) {
|
||||
$this->editor = new User($this->edit_by);
|
||||
if ($this->editor->id) {
|
||||
mfValuecache::singleton()->set("Worker-id-" . $this->edit_by, $this->editor);
|
||||
}
|
||||
}
|
||||
return $this->editor;
|
||||
}
|
||||
|
||||
$classname = ucfirst($name);
|
||||
$idfield = $name . "_id";
|
||||
$this->$name = mfValuecache::singleton()->get("mfObjectmodel-$name-" . $this->$idfield);
|
||||
if (!$this->$name) {
|
||||
$this->$name = new $classname($this->$idfield);
|
||||
}
|
||||
|
||||
if ($this->$name->id) {
|
||||
mfValuecache::singleton()->set("mfObjectmodel-$name-" . $this->$name->id, $this->$name);
|
||||
return $this->$name;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return $this->$name;
|
||||
}
|
||||
|
||||
}
|
||||
150
application/CalendarTemplate/CalendarTemplateController.php
Normal file
150
application/CalendarTemplate/CalendarTemplateController.php
Normal file
@@ -0,0 +1,150 @@
|
||||
<?php
|
||||
|
||||
class CalendarTemplateController extends mfBaseController
|
||||
{
|
||||
|
||||
protected function init()
|
||||
{
|
||||
$this->needlogin = true;
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
$this->me = $me;
|
||||
$this->layout()->set("me", $me);
|
||||
|
||||
if (!$me->is(["Admin"])) {
|
||||
$this->redirect("Dashboard");
|
||||
}
|
||||
}
|
||||
protected function apiAction()
|
||||
{
|
||||
$r = $this->request;
|
||||
$do=$r->do;
|
||||
switch ($do) {
|
||||
case "getPreview":
|
||||
$event_type = $r->event_type;
|
||||
$calendartemplates = CalendarTemplateModel::search(array("event_type"=>$event_type));
|
||||
$result['status'] = "success";
|
||||
$result['data'] = $calendartemplates;
|
||||
break;
|
||||
default:
|
||||
$result['status'] = "error";
|
||||
$result['message'] = "Aktion nicht gefunden";
|
||||
break;
|
||||
}
|
||||
echo json_encode($result);
|
||||
die();
|
||||
}
|
||||
|
||||
protected function indexAction()
|
||||
{
|
||||
$this->layout()->setTemplate("CalendarTemplate/Index");
|
||||
$calendartemplates = CalendarTemplateModel::getAll();
|
||||
$calendarTemplateEventTypes=CalendarTemplateModel::$calendarTemplateEventTypes;
|
||||
$this->layout()->set("calendarTemplateEventTypes", $calendarTemplateEventTypes);
|
||||
$this->layout()->set("calendartemplates", $calendartemplates);
|
||||
}
|
||||
protected function addAction()
|
||||
{
|
||||
$this->layout()->setTemplate("CalendarTemplate/Form");
|
||||
}
|
||||
|
||||
protected function editAction()
|
||||
{
|
||||
$id = $this->request->id;
|
||||
|
||||
if (!is_numeric($id) || !$id) {
|
||||
$this->layout()->setFlash("Vorlage nicht gefunden", "error");
|
||||
$this->redirect("CalendarTemplate");
|
||||
}
|
||||
|
||||
$calendartemplates = new CalendarTemplate($id);
|
||||
if ($calendartemplates->id != $id) {
|
||||
$this->layout()->setFlash("Vorlage nicht gefunden", "error");
|
||||
$this->redirect("CalendarTemplate");
|
||||
}
|
||||
$calendarTemplateEventTypes=CalendarTemplateModel::$calendarTemplateEventTypes;
|
||||
$this->layout()->set("calendarTemplateEventTypes", $calendarTemplateEventTypes);
|
||||
$this->layout()->set("calendartemplates", $calendartemplates);
|
||||
return $this->addAction();
|
||||
}
|
||||
|
||||
protected function saveAction()
|
||||
{
|
||||
$r = $this->request;
|
||||
$id = $r->id;
|
||||
//var_dump($r->get());exit;
|
||||
if (is_numeric($id) && $id > 0) {
|
||||
$mode = "edit";
|
||||
$calendartemplates = new CalendarTemplate($id);
|
||||
if (!$calendartemplates->id) {
|
||||
$this->layout()->setFlash("Vorlagen nicht gefunden", "error");
|
||||
$this->redirect("Calendar");
|
||||
}
|
||||
} else {
|
||||
$mode = "add";
|
||||
}
|
||||
|
||||
$data = [];
|
||||
$data['event_type'] = trim($r->event_type);
|
||||
$data['name'] = trim($r->name);
|
||||
$data['is_reminder'] = trim($r->is_reminder);
|
||||
$data['text'] = trim($r->text);
|
||||
|
||||
|
||||
if (!$data['event_type']) {
|
||||
$data['event_type']=NULL;
|
||||
}
|
||||
if (!$data['name']) {
|
||||
$data['name']=NULL;
|
||||
}
|
||||
if (!$data['is_reminder']) {
|
||||
$data['is_reminder']=0;
|
||||
}
|
||||
if (!$data['text']) {
|
||||
$data['text']=NULL;
|
||||
}
|
||||
|
||||
|
||||
// var_dump($_FILES);
|
||||
// var_dump($upload);
|
||||
// exit;
|
||||
|
||||
|
||||
if ($mode == "edit") {
|
||||
$calendartemplates->update($data);
|
||||
|
||||
} else {
|
||||
$calendartemplates = CalendarTemplateModel::create($data);
|
||||
}
|
||||
// var_dump($filestore);
|
||||
// exit;
|
||||
$id = $calendartemplates->save();
|
||||
|
||||
if (!$id) {
|
||||
$this->layout()->setFlash("Vorlage konnte nicht angelegt werden", "error");
|
||||
$this->redirect("CalendarTemplate");
|
||||
}
|
||||
|
||||
if ($mode == "edit") {
|
||||
$this->layout()->setFlash("Vorlage erfolgreich geändert", "success");
|
||||
} else if ($mode = "add") {
|
||||
$this->layout()->setFlash("Vorlage erfolgreich angelegt", "success");
|
||||
}
|
||||
$this->redirect("Calendar");
|
||||
}
|
||||
|
||||
|
||||
protected function deleteAction()
|
||||
{
|
||||
$id = $this->request->id;
|
||||
$calendartemplates = new CalendarTemplate($id);
|
||||
if (!$calendartemplates->id || $calendartemplates->id != $id) {
|
||||
$this->layout()->setFlash("Vorlage nicht gefunden.", "error");
|
||||
$this->redirect("CalendarTemplate");
|
||||
}
|
||||
|
||||
$calendartemplates->delete();
|
||||
$this->redirect("Calendar");
|
||||
}
|
||||
|
||||
}
|
||||
134
application/CalendarTemplate/CalendarTemplateModel.php
Normal file
134
application/CalendarTemplate/CalendarTemplateModel.php
Normal file
@@ -0,0 +1,134 @@
|
||||
<?php
|
||||
|
||||
class CalendarTemplateModel
|
||||
{
|
||||
private $event_type;
|
||||
private $name;
|
||||
private $is_reminder;
|
||||
private $text;
|
||||
|
||||
public static $calendarTemplateEventTypes=array(
|
||||
"1"=>"Termin",
|
||||
"2"=>"IBN",
|
||||
"3"=>"IBN E-Stmk",
|
||||
"4"=>"IBN Snopp",
|
||||
"5"=>"Störungen"
|
||||
);
|
||||
public static function find($data)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
public static function create(array $data)
|
||||
{
|
||||
$model = new CalendarTemplate();
|
||||
|
||||
foreach ($data as $field => $value) {
|
||||
if (property_exists(get_called_class(), $field)) {
|
||||
if (substr($field, 0, 5) == "vlan_" && !$value) {
|
||||
$model->$field = null;
|
||||
continue;
|
||||
}
|
||||
$model->$field = $value;
|
||||
}
|
||||
}
|
||||
|
||||
$me = mfValuecache::singleton()->get("me");
|
||||
if (!$me) {
|
||||
$me = new User();
|
||||
$me->loadMe();
|
||||
mfValuecache::singleton()->set("me", $me);
|
||||
}
|
||||
|
||||
if ($model->create_by === null) {
|
||||
$model->create_by = $me->id;
|
||||
}
|
||||
if ($model->edit_by === null) {
|
||||
$model->edit_by = $me->id;
|
||||
}
|
||||
|
||||
return $model;
|
||||
}
|
||||
|
||||
public static function getOne($id)
|
||||
{
|
||||
if (!is_numeric($id) || !$id) {
|
||||
throw new Exception("Invalid number", 400);
|
||||
}
|
||||
$item = [];
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$res = $db->select("CalendarTemplate", "*", "id=$id LIMIT 1");
|
||||
if ($db->num_rows($res)) {
|
||||
$data = $db->fetch_object($res);
|
||||
$item = new CalendarTemplate($data);
|
||||
}
|
||||
return $item;
|
||||
}
|
||||
|
||||
public static function getAll()
|
||||
{
|
||||
$items = [];
|
||||
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$res = $db->select("CalendarTemplate", "*", "1=1");
|
||||
if ($db->num_rows($res)) {
|
||||
while ($data = $db->fetch_object($res)) {
|
||||
$items[] = new CalendarTemplate($data);
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
|
||||
}
|
||||
|
||||
public static function getFirst()
|
||||
{
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$where = self::getSqlFilter($filter);
|
||||
$res = $db->select("CalendarTemplate", "*", "$where ");
|
||||
if ($db->num_rows($res)) {
|
||||
$data = $db->fetch_object($res);
|
||||
$item = new CalendarTemplate($data);
|
||||
if ($item->id) {
|
||||
return $item;
|
||||
} else {
|
||||
return null;
|
||||
}
|
||||
}
|
||||
return null;
|
||||
}
|
||||
|
||||
public static function search($filter)
|
||||
{
|
||||
$items = [];
|
||||
$db = FronkDB::singleton();
|
||||
|
||||
$where = self::getSqlFilter($filter);
|
||||
$res = $db->select("CalendarTemplate", "*", "$where");
|
||||
if ($db->num_rows($res)) {
|
||||
while ($data = $db->fetch_object($res)) {
|
||||
$items[] = new CalendarTemplate($data);
|
||||
}
|
||||
}
|
||||
return $items;
|
||||
}
|
||||
|
||||
private static function getSqlFilter($filter)
|
||||
{
|
||||
$where = "1=1 ";
|
||||
|
||||
//var_dump($filter);exit;
|
||||
if (array_key_exists("event_type", $filter)) {
|
||||
$event_type = $filter['event_type'];
|
||||
if (is_numeric($event_type)) {
|
||||
$where .= " AND event_type=$event_type";
|
||||
}
|
||||
}
|
||||
|
||||
//var_dump($filter, $where);exit;
|
||||
return $where;
|
||||
}
|
||||
|
||||
}
|
||||
37
db/migrations/20250114175252_calendar_template.php
Normal file
37
db/migrations/20250114175252_calendar_template.php
Normal file
@@ -0,0 +1,37 @@
|
||||
<?php
|
||||
|
||||
use Phinx\Migration\AbstractMigration;
|
||||
|
||||
final class CalendarTemplate extends AbstractMigration
|
||||
{
|
||||
public function up(): void
|
||||
{
|
||||
if ($this->getEnvironment() == "thetool") {
|
||||
$table = $this->table("CalendarTemplate", ["signed" => true]);
|
||||
|
||||
$table->addColumn("event_type", "integer", ["null" => false, "default" => "0"]);
|
||||
$table->addColumn("name", "text", ["null" => false]);
|
||||
$table->addColumn("is_reminder", "integer", ["null" => false, "default" => "0"]);
|
||||
$table->addColumn("text", "text", ["null" => true]);
|
||||
$table->addColumn("create_by", "integer", ["null" => false]);
|
||||
$table->addColumn("edit_by", "integer", ["null" => false]);
|
||||
$table->addColumn("create", "integer", ["null" => false]);
|
||||
$table->addColumn("edit", "integer", ["null" => false]);
|
||||
$table->save();
|
||||
}
|
||||
|
||||
if ($this->getEnvironment() == "addressdb") {
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
public function down(): void
|
||||
{
|
||||
if ($this->getEnvironment() == "thetool") {
|
||||
$this->table("CalendarTemplate")->drop()->save();
|
||||
}
|
||||
if ($this->getEnvironment() == "addressdb") {
|
||||
}
|
||||
}
|
||||
}
|
||||
?>
|
||||
@@ -2,6 +2,7 @@ var hidesearch = [2, 3, 4, 8];
|
||||
var columnfilter = [7];
|
||||
var columnoptions = '<option value=""></option><option value="Offen">Offen</option><option value="Genehmigt">Genehmigt</option><option value="Abgelehnt">Abgelehnt</option>';
|
||||
|
||||
|
||||
const fileTypeClasses = {
|
||||
'image/png': 'fa-file-png',
|
||||
'image/jpeg': 'fa-file-jpg',
|
||||
@@ -28,8 +29,8 @@ const fileTypeClasses = {
|
||||
|
||||
// Weitere Typen und Klassen hinzufügen...
|
||||
};
|
||||
var calendar;
|
||||
var calendarEl = document.getElementById('calendar');
|
||||
let calendar;
|
||||
let calendarEl = document.getElementById('calendar');
|
||||
calendarRights = JSON.parse(calendarRights);
|
||||
|
||||
function formatFileSize(bytes) {
|
||||
@@ -76,16 +77,16 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
|
||||
}, 'json').done(function (json) {
|
||||
if (json.success == true) {
|
||||
var userevents = [];
|
||||
var otherevents = [];
|
||||
var resources = [];
|
||||
var category = "";
|
||||
var rights = false;
|
||||
var movable = false;
|
||||
var resourceCounter = 0;
|
||||
var rrule = null;
|
||||
var duration = null;
|
||||
var rruleflag = false;
|
||||
let userevents = [];
|
||||
let otherevents = [];
|
||||
let resources = [];
|
||||
let category = "";
|
||||
let rights = false;
|
||||
let movable = false;
|
||||
let resourceCounter = 0;
|
||||
let rrule = null;
|
||||
let duration = null;
|
||||
let rruleflag = false;
|
||||
let allDAy;
|
||||
let cursorclass = "";
|
||||
$.each($('.calendar-check'), function (index, value) {
|
||||
@@ -445,21 +446,20 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
minute: '2-digit',
|
||||
second: '2-digit',
|
||||
});
|
||||
var typeText;
|
||||
let typeText;
|
||||
if (obj.customer_info_type == 1) {
|
||||
typeText = 'E-Mail';
|
||||
} else if (obj.customer_info_type == 2) {
|
||||
typeText = 'SMS';
|
||||
}
|
||||
var title = `<div class="text-center font-weight-500">Letzte gesendete Info (` + typeText + `):</div>
|
||||
let title = `<div class="text-center font-weight-500">Letzte gesendete Info (` + typeText + `):</div>
|
||||
<div class="text-left">` + obj.customer_info_text.replace(/([^>\r\n]?)(\r\n|\n\r|\r|\n)/g, '$1<br />$2') + `</div>
|
||||
<div class="text-left"><span class="font-weight-500">gesendet an:</span> ` + obj.customer_info_type_text + `</div>
|
||||
<div class="text-left"><span class="font-weight-500">gesendet von:</span> ` + obj.sendby + `</div>
|
||||
<div class="text-left"><span class="font-weight-500">gesendet am:</span> ` + germanDateTime + `</div>
|
||||
|
||||
`;
|
||||
console.log(title);
|
||||
var tooltip = new Tooltip($('.customer-info-point'), {
|
||||
let tooltip = new Tooltip($('.customer-info-point'), {
|
||||
title: title,
|
||||
placement: 'right',
|
||||
trigger: 'hover',
|
||||
@@ -505,7 +505,7 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
let attendees = JSON.parse(data.data.attendees.attendees);
|
||||
$.each(attendees, function (index, value) {
|
||||
if (!Number.isInteger(value)) {
|
||||
var valueExists = $("#calendar-attendees option").filter(function () {
|
||||
let valueExists = $("#calendar-attendees option").filter(function () {
|
||||
return $(this).val() === value;
|
||||
}).length > 0;
|
||||
if (!valueExists) {
|
||||
@@ -599,10 +599,10 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
}
|
||||
},
|
||||
eventDidMount: function (info) {
|
||||
var eventstart = new Date(info.event.startStr);
|
||||
var eventend = new Date(info.event.endStr);
|
||||
let eventstart = new Date(info.event.startStr);
|
||||
let eventend = new Date(info.event.endStr);
|
||||
|
||||
var title;
|
||||
let title;
|
||||
if (!info.event.allDay) {
|
||||
eventstart = String(eventstart.getUTCHours()).padStart(2, '0') + ':' + String(eventstart.getUTCMinutes()).padStart(2, '0');
|
||||
eventend = String(eventend.getUTCHours()).padStart(2, '0') + ':' + String(eventend.getUTCMinutes()).padStart(2, '0');
|
||||
@@ -628,7 +628,7 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
const obj = JSON.parse(info.event.extendedProps['attachments']);
|
||||
let docs = "";
|
||||
$.each(obj, function (index, value) {
|
||||
var filename;
|
||||
let filename;
|
||||
if (fileTypeClasses[value.contentType]) {
|
||||
filename = fileTypeClasses[value.contentType];
|
||||
} else {
|
||||
@@ -666,7 +666,7 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
|
||||
}
|
||||
|
||||
var tooltip = new Tooltip(info.el, {
|
||||
let tooltip = new Tooltip(info.el, {
|
||||
title: title,
|
||||
placement: 'right',
|
||||
delay: {hide: 50},
|
||||
@@ -675,25 +675,25 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
html: true,
|
||||
});
|
||||
|
||||
var tooltips = info.event.extendedProps['tooltips'] || [];
|
||||
let tooltips = info.event.extendedProps['tooltips'] || [];
|
||||
tooltips.push(tooltip);
|
||||
info.event.setExtendedProp('tooltips', tooltips);
|
||||
},
|
||||
|
||||
eventWillUnmount: function (info) {
|
||||
for (var tooltip of info.event.extendedProps['tooltips']) {
|
||||
for (let tooltip of info.event.extendedProps['tooltips']) {
|
||||
tooltip.dispose();
|
||||
}
|
||||
},
|
||||
eventResize: function (info) {
|
||||
|
||||
var start = info.event.start.getTime();
|
||||
let start = info.event.start.getTime();
|
||||
const offsetstart = getOffset(start);
|
||||
start = (start / 1000 + offsetstart) * 1000;
|
||||
var end = info.event.end.getTime();
|
||||
let end = info.event.end.getTime();
|
||||
const offsetend = getOffset(end);
|
||||
end = (end / 1000 + offsetend) * 1000;
|
||||
var id = info.event.id;
|
||||
let id = info.event.id;
|
||||
$.post(requestUpdateUrl, {
|
||||
start: start,
|
||||
end: end,
|
||||
@@ -701,14 +701,14 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
}, function (data) {
|
||||
|
||||
}).done(function (data) {
|
||||
var tooltip = new Tooltip(info.el, {
|
||||
let tooltip = new Tooltip(info.el, {
|
||||
title: info.event.extendedProps.description,
|
||||
placement: 'right',
|
||||
trigger: 'hover',
|
||||
container: 'body'
|
||||
});
|
||||
|
||||
var tooltips = info.event.extendedProps['tooltips'] || [];
|
||||
let tooltips = info.event.extendedProps['tooltips'] || [];
|
||||
tooltips.push(tooltip);
|
||||
info.event.setExtendedProp('tooltips', tooltips);
|
||||
});
|
||||
@@ -716,13 +716,13 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
},
|
||||
eventDrop: function (info) {
|
||||
// sleep(2000).then(() => {
|
||||
var start = info.event.start.getTime();
|
||||
let start = info.event.start.getTime();
|
||||
const offsetstart = getOffset(start);
|
||||
start = (start / 1000 + offsetstart) * 1000;
|
||||
var end = info.event.end.getTime();
|
||||
let end = info.event.end.getTime();
|
||||
const offsetend = getOffset(end);
|
||||
end = (end / 1000 + offsetend) * 1000;
|
||||
var id = info.event.id;
|
||||
let id = info.event.id;
|
||||
$.post(requestUpdateUrl, {
|
||||
start: start,
|
||||
end: end,
|
||||
@@ -797,7 +797,7 @@ document.addEventListener('DOMContentLoaded', function () {
|
||||
if (typeof (EventSource) !== 'undefined') {
|
||||
console.info('Starting connection...');
|
||||
|
||||
var source = new EventSourcePolyfill(requestUpdateEventsUrl, {
|
||||
let source = new EventSourcePolyfill(requestUpdateEventsUrl, {
|
||||
// Specifying custom request headers
|
||||
headers: {
|
||||
'X-API-KEY': 'wcdqEHXcXl5f1sZTEHKPTutqpFBbRf55'
|
||||
@@ -809,7 +809,7 @@ if (typeof (EventSource) !== 'undefined') {
|
||||
}, false);
|
||||
let jsondata;
|
||||
source.addEventListener('error', function (e) {
|
||||
var txt;
|
||||
let txt;
|
||||
switch (Event.target.readyState) {
|
||||
// if reconnecting
|
||||
case EventSource.CONNECTING:
|
||||
@@ -839,12 +839,12 @@ if (typeof (EventSource) !== 'undefined') {
|
||||
if (!visibleCalendars.includes(event.calendar_id)) {
|
||||
return;
|
||||
}
|
||||
var cevent = calendar.getEventById(event.cal_events_id);
|
||||
var rights = false;
|
||||
var movable = false;
|
||||
var rrule = null;
|
||||
var duration = null;
|
||||
var rruleflag = false;
|
||||
let cevent = calendar.getEventById(event.cal_events_id);
|
||||
let rights = false;
|
||||
let movable = false;
|
||||
let rrule = null;
|
||||
let duration = null;
|
||||
let rruleflag = false;
|
||||
let cursorclass = '';
|
||||
if (event.rrule) {
|
||||
rrule = event.rrule;
|
||||
@@ -937,7 +937,7 @@ if (typeof (EventSource) !== 'undefined') {
|
||||
|
||||
} else if (event.change_type == '1' || !cevent) {
|
||||
if (event.calendar_id == event.calendar_id) {
|
||||
var info = calendar.addEvent({
|
||||
let info = calendar.addEvent({
|
||||
id: event.cal_events_id,
|
||||
title: event.name,
|
||||
start: event.start_time,
|
||||
@@ -964,7 +964,7 @@ if (typeof (EventSource) !== 'undefined') {
|
||||
});
|
||||
|
||||
} else {
|
||||
var info = calendar.addEvent({
|
||||
let info = calendar.addEvent({
|
||||
id: event.cal_events_id,
|
||||
title: event.name,
|
||||
start: event.start_time,
|
||||
@@ -992,7 +992,7 @@ if (typeof (EventSource) !== 'undefined') {
|
||||
}
|
||||
calendar.render();
|
||||
} else if (event.change_type == '3') {
|
||||
var cevent = calendar.getEventById(event.cal_events_id);
|
||||
let cevent = calendar.getEventById(event.cal_events_id);
|
||||
cevent.remove();
|
||||
}
|
||||
|
||||
@@ -1010,6 +1010,24 @@ $(document).ready(function () {
|
||||
calendar.render();
|
||||
});
|
||||
|
||||
$(document).on('show.bs.dropdown', '.dropdown', function () {
|
||||
let previewMenue='';
|
||||
$.getJSON(requestgetpreviewtUrl, {
|
||||
event_type: $('#type').val()
|
||||
}, function (data) {
|
||||
|
||||
}).done(function (data) {
|
||||
;
|
||||
|
||||
let counter =1;
|
||||
$.each(data.data, function(index, item) {
|
||||
previewMenue += '<li><a class="dropdown-item text-template" data-text="' + item.data.text + '">' + item.data.name + '</a></li>';
|
||||
counter++;
|
||||
});
|
||||
$('.dropdown-menu').html(previewMenue);
|
||||
});
|
||||
});
|
||||
|
||||
$('body').on('click', '.fa-window-restore', function () {
|
||||
$('.card').removeClass('card-fullscreen');
|
||||
$('#card-size').removeClass('fa-window-restore').addClass('fa-window-maximize');
|
||||
@@ -1084,7 +1102,7 @@ $(document).ready(function () {
|
||||
});
|
||||
|
||||
$('body').on('click', '#add-event', function () {
|
||||
var valid = true;
|
||||
let valid = true;
|
||||
|
||||
$('#EventModal .is-require').each(function (index, value) {
|
||||
if ($(this).val() == "") {
|
||||
@@ -1098,35 +1116,35 @@ $(document).ready(function () {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
var attachments = [];
|
||||
let attachments = [];
|
||||
$('.doc-main-div').each(function (index, value) {
|
||||
if ($(this).data('docid')) {
|
||||
attachments.push($(this).data('docid'));
|
||||
}
|
||||
});
|
||||
|
||||
var start = $('#start-date').val() + ' ' + $('#start-time').val();
|
||||
var end = $('#end-date').val() + ' ' + $('#end-time').val();
|
||||
var title = $('#name').val();
|
||||
var location = $('#location').val();
|
||||
var description = $('#description').val();
|
||||
var newkey = $('#attachments').data('newkey');
|
||||
var allday = 0;
|
||||
var reminder = $('#reminder').val();
|
||||
var type = $('#type').val();
|
||||
var busy = $('#busy').val();
|
||||
var customer;
|
||||
var customer_info_check = 0;
|
||||
var customer_info_text;
|
||||
var customer_info_type;
|
||||
var customer_info_type_text;
|
||||
var customer_info_reminder_check = 0;
|
||||
var private = $('.privacy-click');
|
||||
var privateflag = 0;
|
||||
let start = $('#start-date').val() + ' ' + $('#start-time').val();
|
||||
let end = $('#end-date').val() + ' ' + $('#end-time').val();
|
||||
let title = $('#name').val();
|
||||
let location = $('#location').val();
|
||||
let description = $('#description').val();
|
||||
let newkey = $('#attachments').data('newkey');
|
||||
let allday = 0;
|
||||
let reminder = $('#reminder').val();
|
||||
let type = $('#type').val();
|
||||
let busy = $('#busy').val();
|
||||
let customer;
|
||||
let customer_info_check = 0;
|
||||
let customer_info_text;
|
||||
let customer_info_type;
|
||||
let customer_info_type_text;
|
||||
let customer_info_reminder_check = 0;
|
||||
let private = $('.privacy-click');
|
||||
let privateflag = 0;
|
||||
if (private.hasClass('fa-lock')) {
|
||||
privateflag = 1;
|
||||
}
|
||||
var users = [];
|
||||
let users = [];
|
||||
|
||||
if ($('#allday').is(':checked')) {
|
||||
allday = 1;
|
||||
@@ -1178,7 +1196,7 @@ $(document).ready(function () {
|
||||
|
||||
$('body').on('click', '#update-event', function () {
|
||||
|
||||
var valid = true;
|
||||
let valid = true;
|
||||
|
||||
$('#EventModal .is-require').each(function (index, value) {
|
||||
if ($(this).val() == "") {
|
||||
@@ -1192,35 +1210,35 @@ $(document).ready(function () {
|
||||
if (!valid) {
|
||||
return;
|
||||
}
|
||||
var attachments = [];
|
||||
let attachments = [];
|
||||
$('.doc-main-div').each(function (index, value) {
|
||||
if ($(this).data('docid')) {
|
||||
attachments.push($(this).data('docid'));
|
||||
}
|
||||
});
|
||||
|
||||
var start = $('#start-date').val() + ' ' + $('#start-time').val();
|
||||
var end = $('#end-date').val() + ' ' + $('#end-time').val();
|
||||
var title = $('#name').val();
|
||||
var location = $('#location').val();
|
||||
var description = $('#description').val();
|
||||
var newkey = $('#attachments').data('newkey');
|
||||
var allday = 0;
|
||||
var reminder = $('#reminder').val();
|
||||
var type = $('#type').val();
|
||||
var busy = $('#busy').val();
|
||||
var customer;
|
||||
var customer_info_check = 0;
|
||||
var customer_info_text;
|
||||
var customer_info_type;
|
||||
var customer_info_type_text;
|
||||
var customer_info_reminder_check = 0;
|
||||
var private = $('.privacy-click');
|
||||
var privateflag = 0;
|
||||
let start = $('#start-date').val() + ' ' + $('#start-time').val();
|
||||
let end = $('#end-date').val() + ' ' + $('#end-time').val();
|
||||
let title = $('#name').val();
|
||||
let location = $('#location').val();
|
||||
let description = $('#description').val();
|
||||
let newkey = $('#attachments').data('newkey');
|
||||
let allday = 0;
|
||||
let reminder = $('#reminder').val();
|
||||
let type = $('#type').val();
|
||||
let busy = $('#busy').val();
|
||||
let customer;
|
||||
let customer_info_check = 0;
|
||||
let customer_info_text;
|
||||
let customer_info_type;
|
||||
let customer_info_type_text;
|
||||
let customer_info_reminder_check = 0;
|
||||
let private = $('.privacy-click');
|
||||
let privateflag = 0;
|
||||
if (private.hasClass('fa-lock')) {
|
||||
privateflag = 1;
|
||||
}
|
||||
var users = [];
|
||||
let users = [];
|
||||
|
||||
if ($('#allday').is(':checked')) {
|
||||
allday = 1;
|
||||
@@ -1240,7 +1258,7 @@ $(document).ready(function () {
|
||||
|
||||
|
||||
}
|
||||
var id = $(this).data('id');
|
||||
let id = $(this).data('id');
|
||||
|
||||
$('#calendar-users > option:selected').each(function () {
|
||||
users.push($(this).val());
|
||||
@@ -1305,8 +1323,8 @@ $(document).ready(function () {
|
||||
|
||||
|
||||
$('body').on('click', '#delete-event', function () {
|
||||
var id = $(this).data('id');
|
||||
var users = [];
|
||||
let id = $(this).data('id');
|
||||
let users = [];
|
||||
$('#calendar-users > option:selected').each(function () {
|
||||
users.push($(this).val());
|
||||
});
|
||||
@@ -1343,10 +1361,10 @@ $(document).ready(function () {
|
||||
});
|
||||
|
||||
$('body').on('change', '.color-input,.color-text-input', function (event, init = 0) {
|
||||
var bgcolors = [];
|
||||
var txtcolors = [];
|
||||
var calendar_id = [];
|
||||
var thisis = $(this);
|
||||
let bgcolors = [];
|
||||
let txtcolors = [];
|
||||
let calendar_id = [];
|
||||
let thisis = $(this);
|
||||
$.each($('.color-input'), function (index, value) {
|
||||
if ($(this).data('calendar_id')) {
|
||||
bgcolors.push($(this).closest('div').find('.color-input').val());
|
||||
@@ -1358,7 +1376,7 @@ $(document).ready(function () {
|
||||
});
|
||||
|
||||
|
||||
var id = $('#calendar-id').data('id');
|
||||
let id = $('#calendar-id').data('id');
|
||||
let groups = getGroups();
|
||||
$.post(requestUpdateColorUrl, {
|
||||
id: id,
|
||||
@@ -1381,11 +1399,11 @@ $(document).ready(function () {
|
||||
} else {
|
||||
refreshCalendarEvents()
|
||||
}
|
||||
var resources = calendar.getResources();
|
||||
let resources = calendar.getResources();
|
||||
$.each(resources, function (index, value) {
|
||||
value.remove();
|
||||
});
|
||||
var resourceCounter = 0;
|
||||
let resourceCounter = 0;
|
||||
$.each($('.calendar-check'), function (index, value) {
|
||||
if ($(this).prop('checked')) {
|
||||
rights = true;
|
||||
@@ -1405,8 +1423,8 @@ $(document).ready(function () {
|
||||
;
|
||||
|
||||
function uploadajax(ttl, cl) {
|
||||
var fileList = $('#files-input').prop("files");
|
||||
var form_data = "";
|
||||
let fileList = $('#files-input').prop("files");
|
||||
let form_data = "";
|
||||
|
||||
form_data = new FormData();
|
||||
form_data.append("upload_file", fileList[cl]);
|
||||
@@ -1414,7 +1432,7 @@ $(document).ready(function () {
|
||||
form_data.append("newkey", $('#attachments').data('newkey'));
|
||||
|
||||
|
||||
var request = $.ajax({
|
||||
let request = $.ajax({
|
||||
url: requestEventAttachmentUploadUrl,
|
||||
cache: false,
|
||||
contentType: false,
|
||||
@@ -1423,10 +1441,10 @@ $(document).ready(function () {
|
||||
data: form_data,
|
||||
type: 'POST',
|
||||
xhr: function () {
|
||||
var xhr = $.ajaxSettings.xhr();
|
||||
let xhr = $.ajaxSettings.xhr();
|
||||
if (xhr.upload) {
|
||||
xhr.upload.addEventListener('progress', function (event) {
|
||||
var percent = 0;
|
||||
let percent = 0;
|
||||
if (event.lengthComputable) {
|
||||
percent = Math.ceil(event.loaded / event.total * 100);
|
||||
}
|
||||
@@ -1453,10 +1471,10 @@ $(document).ready(function () {
|
||||
|
||||
|
||||
$('body').on('change', '#files-input', function () {
|
||||
var fileList = $('#files-input').prop("files");
|
||||
let fileList = $('#files-input').prop("files");
|
||||
|
||||
$('#uploadsts').html('');
|
||||
var i;
|
||||
let i;
|
||||
for (i = 0; i < fileList.length; i++) {
|
||||
let newkey = $('#attachments').data('newkey');
|
||||
const filetype = fileList[i].type;
|
||||
@@ -1521,6 +1539,7 @@ $(document).ready(function () {
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
$('body').on('change', '#jumpevent', function () {
|
||||
$('.event-search-result').removeClass('event-search-result');
|
||||
if ($(this).val() == "" || $(this).val() == null) {
|
||||
@@ -1552,7 +1571,7 @@ $(document).ready(function () {
|
||||
return {
|
||||
q: params.term, // Der Suchbegriff
|
||||
term: params.term, // Der Suchbegriff
|
||||
calendars: visibleCalendars, // Die dynamische Variable, die du hinzufügen möchtest
|
||||
calendars: visibleCalendars, // Die dynamische letiable, die du hinzufügen möchtest
|
||||
cal_id: $('#calendar-id').data('calendarid')
|
||||
};
|
||||
},
|
||||
@@ -1582,22 +1601,15 @@ $(document).ready(function () {
|
||||
} else {
|
||||
daytimetext = "nachmittags";
|
||||
}
|
||||
let textTemplate;
|
||||
if ($(this).data('id') == 1) {
|
||||
textTemplate = `Sehr geehrter Kunde,
|
||||
Ihr Technikertermin findet am ` + formattedDate + ` ` + daytimetext + ` statt.
|
||||
Mit Freundlichen Grüßen
|
||||
Xinon GMbH`;
|
||||
} else if ($(this).data('id') == 2) {
|
||||
textTemplate = `Sehr geehrter Kunde,
|
||||
wir möchten Sie daran erinnern, dass Ihr Technikertermin am ` + formattedDate + ` ` + daytimetext + ` stattfindet.
|
||||
Mit Freundlichen Grüßen
|
||||
Xinon GMbH`;
|
||||
} else if ($(this).data('id') == 3) {
|
||||
textTemplate = formattedDate + ` zwischen ` + starttime + ` und ` + endtime;
|
||||
}
|
||||
let text = $(this).data('text');
|
||||
text = text.replace(/\[&&vmnm&&\]/g, daytimetext);
|
||||
text = text.replace(/\[&&date&&\]/g, formattedDate);
|
||||
text = text.replace(/\[&&start&&\]/g, starttime);
|
||||
text = text.replace(/\[&&end&&\]/g, endtime);
|
||||
|
||||
$('#customer-info-text').val(textTemplate);
|
||||
|
||||
|
||||
$('#customer-info-text').val(text);
|
||||
});
|
||||
|
||||
|
||||
@@ -1657,7 +1669,7 @@ Xinon GMbH`;
|
||||
|
||||
let groupname = $.trim($(this).text());
|
||||
$(this).html('<input type="text" data-oldname="' + groupname + '" class="form-control cal-group-name-input" value="' + groupname + '">');
|
||||
var strLength = $(this).find('.cal-group-name-input').val().length * 2;
|
||||
let strLength = $(this).find('.cal-group-name-input').val().length * 2;
|
||||
|
||||
|
||||
$(this).find('.cal-group-name-input')[0].setSelectionRange(strLength, strLength);
|
||||
@@ -1676,11 +1688,11 @@ Xinon GMbH`;
|
||||
$(this).closest('.calendar-side-borders-sub').find('.form-check-input').prop('checked', false);
|
||||
refreshCalendarEvents()
|
||||
}
|
||||
var resources = calendar.getResources();
|
||||
let resources = calendar.getResources();
|
||||
$.each(resources, function (index, value) {
|
||||
value.remove();
|
||||
});
|
||||
var resourceCounter = 0;
|
||||
let resourceCounter = 0;
|
||||
$.each($('.calendar-check'), function (index, value) {
|
||||
if ($(this).prop('checked')) {
|
||||
rights = true;
|
||||
@@ -1814,6 +1826,7 @@ Xinon GMbH`;
|
||||
return groupsJson;
|
||||
}
|
||||
|
||||
|
||||
function checkGroupCheckboxes() {
|
||||
$('.group-checkbox').each(function (index, value) {
|
||||
let checked = 0;
|
||||
@@ -1907,16 +1920,16 @@ Xinon GMbH`;
|
||||
|
||||
}, 'json').done(function (json) {
|
||||
if (json.success == true) {
|
||||
var userevents = [];
|
||||
var otherevents = [];
|
||||
var resources = [];
|
||||
var category = "";
|
||||
var rights = false;
|
||||
var movable = false;
|
||||
var resourceCounter = 0;
|
||||
var rrule = null;
|
||||
var duration = null;
|
||||
var rruleflag = false;
|
||||
let userevents = [];
|
||||
let otherevents = [];
|
||||
let resources = [];
|
||||
let category = "";
|
||||
let rights = false;
|
||||
let movable = false;
|
||||
let resourceCounter = 0;
|
||||
let rrule = null;
|
||||
let duration = null;
|
||||
let rruleflag = false;
|
||||
let allDAy = false;
|
||||
let cursorclass = "";
|
||||
$.each($('.calendar-check'), function (index, value) {
|
||||
|
||||
Reference in New Issue
Block a user