From 211ce11e06cc6aa01557cc3d6a55a0b20200a9e7 Mon Sep 17 00:00:00 2001 From: Clemens Creutzburg Date: Tue, 24 Mar 2026 14:45:06 +0100 Subject: [PATCH] Abgleich mit Live-Daten --- README.md | 4 +- admin/admin.php | 60 +- admin/anrufbeantworter.php | 116 +- admin/css/popup.css | 78 +- admin/impfadmin.php | 6 +- admin/impfworkflow.php | 4 +- admin/impfworkflow_event_create.php | 2 +- admin/impfworkflow_event_teilnehmer.php | 2 +- admin/impfworkflow_teilnehmer.php | 2 +- admin/index.php | 236 +-- admin/js/ajax.js | 92 +- admin/js/jquery-3.6.0.min.js | 2 +- admin/js/patienten.js | 90 +- admin/kalender.php | 220 +-- admin/layout.php | 190 +-- admin/mailtemplate.php | 88 +- admin/mailtemplatebetreff.php | 36 +- admin/mailtemplatebody.php | 118 +- admin/phpinfo.php | 10 +- admin/templates/header.inc.php | 2 +- admin/togoadmin.php | 1712 +++++++++---------- admin/wartelisteadmin.php | 2 +- admin/webseitenadmin.php | 338 ++-- anfrageneinsicht.php | 670 ++++---- css/formulare.css | 32 +- css/ticker.css | 42 +- dienstleistung.php | 1088 ++++++------ download/download.php | 72 +- download/login.php | 66 +- formulare.php | 928 +++++----- grippeimpfbestaetigung.php | 2 +- grippeimpfwarteliste.php | 2 +- ical/ICS.php | 260 +-- ical/includes/date.php | 1136 ++++++------- ical/includes/ical.php | 1972 +++++++++++----------- ical/includes/recurringdate.php | 1592 ++++++++--------- ical/kalender.ical | 107 +- ical/kalender.ics | 107 +- ical/urlaub_generator.php | 102 +- impfanmeldung.php | 2 +- impfbestaetigung.php | 558 +++--- impferinnerung.php | 310 ++-- impfterminloeschung.php | 328 ++-- impfwartelisteerinnerung.php | 186 +- impfwartelisteinfomail.php | 194 +-- impfwartelistekinder.php | 2 +- impfwartelisteloeschung.php | 196 +-- inc/functions.anfragen.inc.php | 328 ++-- inc/functions.formulare.inc.php | 10 +- inc/suchepatient.php | 72 +- inc/zweittermin.php | 238 +-- index.php | 356 ++-- intern/admin.php | 60 +- intern/index.php | 236 +-- intern/js/ajax.js | 92 +- intern/js/jquery-3.6.0.min.js | 2 +- intern/js/patienten.js | 90 +- intern/layout.php | 190 +-- intern/mailtemplatebetreff.php | 36 +- intern/mailtemplatebody.php | 118 +- intern/meineanfragen.php | 528 +++--- intern/neueanfrage-old1.php | 1620 +++++++++--------- intern/neueanfrage-old2.php | 1620 +++++++++--------- intern/neueanfrage.php | 886 +++++----- intern/verify_2fa.php | 222 +-- jobs-mfaazubi.php | 416 ++--- jobs-mfateilzeit.php | 432 ++--- jobs/css/formulare.css | 32 +- jobs/css/ticker.css | 42 +- jobs/js/googlea.js | 892 +++++----- jobs/js/karo-config.js | 742 ++++---- jobs/js/klaro-config.js | 474 +++--- jobs/js/patienten.js | 36 +- js/googlea.js | 892 +++++----- js/karo-config.js | 742 ++++---- js/klaro-config.js | 474 +++--- js/patienten.js | 36 +- patientenfragebogen.php | 552 +++--- rezepte2.php | 0 stellenangebote.php | 266 +-- submit_survey.php | 140 +- survey_form.php | 328 ++-- umfrage.php | 322 ++-- umfrage/index.html | 22 +- umfrage_danke.php | 122 +- upload/aufraeumen.php | 106 +- upload/index.html | 22 +- zeiterfassung/ZeitenAnzeige.php | 266 +-- zeiterfassung/alleZeitenanzeige.php | 304 ++-- zeiterfassung/allefehlbuchungen.php | 338 ++-- zeiterfassung/api/vacations.php | 394 ++--- zeiterfassung/approveVacation.php | 210 +-- zeiterfassung/ausgabezeiten.php | 194 +-- zeiterfassung/company_holidays.php | 180 +- zeiterfassung/createPDF.php | 480 +++--- zeiterfassung/deleteCompanyHoliday.php | 50 +- zeiterfassung/deleteDayEntry.php | 100 +- zeiterfassung/deleteEntry.php | 76 +- zeiterfassung/deleteVacation.php | 76 +- zeiterfassung/editDayEntries.php | 230 +-- zeiterfassung/editTimeEntry.php | 52 +- zeiterfassung/editworker.php | 242 +-- zeiterfassung/editworkerpassword.php | 154 +- zeiterfassung/fehlbuchungen.php | 198 +-- zeiterfassung/footer.php | 12 +- zeiterfassung/header.php | 184 +- zeiterfassung/index.php | 310 ++-- zeiterfassung/my_vacations_calendar.php | 122 +- zeiterfassung/saveDayEntries.php | 158 +- zeiterfassung/showworker.php | 226 +-- zeiterfassung/urlaub_genehmigen.php | 240 +-- zeiterfassung/urlaubsantrag.php | 354 ++-- zeiterfassung/vacations_calendar.php | 126 +- zeiterfassung/vacations_calendar_all.php | 118 +- zeiterfassung/vacations_overview.php | 168 +- zusatzleistungen.php | 494 +++--- 116 files changed, 16602 insertions(+), 16612 deletions(-) create mode 100644 rezepte2.php diff --git a/README.md b/README.md index 9cca669..04a8cf9 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,2 @@ -# praxis-creutzburg-web - +# praxis-creutzburg-web + diff --git a/admin/admin.php b/admin/admin.php index e917d87..2ca8b0e 100644 --- a/admin/admin.php +++ b/admin/admin.php @@ -1,30 +1,30 @@ - - - - - - - - + + + + + + + + diff --git a/admin/anrufbeantworter.php b/admin/anrufbeantworter.php index d8cf271..071eb13 100644 --- a/admin/anrufbeantworter.php +++ b/admin/anrufbeantworter.php @@ -1,58 +1,58 @@ - - -
-'; - echo "
"; - echo ''; - echo ''; - echo ' - '; - //echo ''; - echo "
"; -echo '
'; -?> -

Administration - Anrufantworter

- -Hallo ,
-Herzlich Willkommen im internen Bereich!

- - - - - -

"; -}else{ - -?> - - - -Übersicht der Anruf auf dem Anrufbeantworter - - - - - - - - + + +
+'; + echo "
"; + echo ''; + echo ''; + echo ' + '; + //echo ''; + echo "
"; +echo '
'; +?> +

Administration - Anrufantworter

+ +Hallo ,
+Herzlich Willkommen im internen Bereich!

+ + + + + +

"; +}else{ + +?> + + + +Übersicht der Anruf auf dem Anrufbeantworter + + + + + + + + diff --git a/admin/css/popup.css b/admin/css/popup.css index b79f819..adfbe32 100644 --- a/admin/css/popup.css +++ b/admin/css/popup.css @@ -1,40 +1,40 @@ -/* Popup box BEGIN */ -.infofenster { - position: absolute; - top: 100px; - right: 100px; - width: auto; - height: auto; - min-height: 100px; - min-width: 400px; - padding-left: 50px; - padding-right: 50px; - padding-top: 15px; - padding-bottom: 15px; -border-radius: 15px 15px 15px 15px; -text-align: center; - - z-index: 1000; - background-color: #555; -color: #fff; - animation:signup-response 0.5s 1; - -webkit-animation:signup-response 0.5s 1; - animation-fill-mode: forwards; - - animation-delay:5s; - -webkit-animation-delay:5s; /* Safari and Chrome */ - -webkit-animation-fill-mode: forwards; - -} - -@keyframes signup-response{ - from {opacity :1;} - to {opacity :0;} -} - -@-webkit-keyframes signup-response{ - from {opacity :1;} - to {opacity :0;} -} - +/* Popup box BEGIN */ +.infofenster { + position: absolute; + top: 100px; + right: 100px; + width: auto; + height: auto; + min-height: 100px; + min-width: 400px; + padding-left: 50px; + padding-right: 50px; + padding-top: 15px; + padding-bottom: 15px; +border-radius: 15px 15px 15px 15px; +text-align: center; + + z-index: 1000; + background-color: #555; +color: #fff; + animation:signup-response 0.5s 1; + -webkit-animation:signup-response 0.5s 1; + animation-fill-mode: forwards; + + animation-delay:5s; + -webkit-animation-delay:5s; /* Safari and Chrome */ + -webkit-animation-fill-mode: forwards; + +} + +@keyframes signup-response{ + from {opacity :1;} + to {opacity :0;} +} + +@-webkit-keyframes signup-response{ + from {opacity :1;} + to {opacity :0;} +} + /* Popup box BEGIN */ \ No newline at end of file diff --git a/admin/impfadmin.php b/admin/impfadmin.php index 786bbce..8535756 100644 --- a/admin/impfadmin.php +++ b/admin/impfadmin.php @@ -1,4 +1,4 @@ - - - + + diff --git a/admin/impfworkflow_event_create.php b/admin/impfworkflow_event_create.php index eb395f1..71798cc 100644 --- a/admin/impfworkflow_event_create.php +++ b/admin/impfworkflow_event_create.php @@ -1,3 +1,3 @@ 

Erst anmelden: Login


"; - -include("templates/footer.inc.php"); - exit; } -?> - - - - - -
- - prepare("SELECT * FROM securitytokens WHERE identifier = :identifier"); - $result = $statement->execute(array('identifier' => $identifier)); - $securitytoken_row = $statement->fetch(); - echo $securitytoken_row['securitytoken']; - echo "
"; - echo sha1($securitytoken); - */ - ?> -

Administration

- - Hallo ,
- Herzlich Willkommen im internen Bereich!
- - - - - -Welche Aktion möchtest du durchführen? - - - -



- - - - -
- -
- - -
-


-
- - -
-


-
- - -
-


-
- - -
-

Urlaub / Hinweis planen

-
- - -
-


-
- - -
-
-

- '; - - - -?> - -
-

Erst anmelden: Login


"; + +include("templates/footer.inc.php"); + exit; } +?> + + + + + +
+ + prepare("SELECT * FROM securitytokens WHERE identifier = :identifier"); + $result = $statement->execute(array('identifier' => $identifier)); + $securitytoken_row = $statement->fetch(); + echo $securitytoken_row['securitytoken']; + echo "
"; + echo sha1($securitytoken); + */ + ?> +

Administration

+ + Hallo ,
+ Herzlich Willkommen im internen Bereich!
+ + + + + +Welche Aktion möchtest du durchführen? + + + +



+ + + + +
+ +
+ + +
+


+
+ + +
+


+
+ + +
+


+
+ + +
+

Urlaub / Hinweis planen

+
+ + +
+


+
+ + +
+
+

+ '; + + + +?> + +
+ \ No newline at end of file diff --git a/admin/js/ajax.js b/admin/js/ajax.js index 4093979..a2692fa 100644 --- a/admin/js/ajax.js +++ b/admin/js/ajax.js @@ -1,47 +1,47 @@ -var http = createRequestObject(); -var objectId = ''; - - -function createRequestObject(htmlObjectId){ - var obj; - var browser = navigator.appName; - - objectId = htmlObjectId; - - if(browser == "Microsoft Internet Explorer"){ - obj = new ActiveXObject("Microsoft.XMLHTTP"); - } - else{ - obj = new XMLHttpRequest(); - } - return obj; -} - -function sendReq(serverFileName, variableNames, variableValues) { - var paramString = ''; - - variableNames = variableNames.split(','); - variableValues = variableValues.split(','); - - for(i=0; i+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0'; - -function build_calendar($month, $year) { - $daysOfWeek = array('M','T','W','T','F','S','S'); - $firstDayOfMonth = mktime(0,0,0,$month,1,$year); - $numberDays = date('t',$firstDayOfMonth); - $dateComponents = getdate($firstDayOfMonth); - $monthName = $dateComponents['month']; - $dayOfWeek = $dateComponents['wday'] -1; - $calendar = ""; - $calendar .= ""; - $calendar .= ""; - foreach($daysOfWeek as $day) { - $calendar .= ""; - } - $currentDay = 1; - $calendar .= ""; - if ($dayOfWeek > 0) { - $calendar .= ""; - } - $month = str_pad($month, 2, "0", STR_PAD_LEFT); - while($currentDay <= $numberDays){ - if($dayOfWeek == 7){ - $dayOfWeek = 0; - $calendar .= ""; - } - $currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT); - $date = "$year-$month-$currentDayRel"; - - // Is this today? - if(date('Y-m-d') == $date) { - $calendar .= ""; - - $currentDay++; - $dayOfWeek++; - } - if($dayOfWeek != 7){ - $remainingDays = 7 - $dayOfWeek; - $calendar .= ""; - } - $calendar .= ""; - $calendar .= "

$monthName $year

$day
 
$currentDay"; - - } else { - $calendar .= "$currentDay"; - - } - $calendar .= "
"; - $calendar .= AuswertungImpfungdailycalendar($date); - $calendar .= "
 
"; - return $calendar; -} - -$calendar = build_calendar(7, 2021); - -//$calendar = '
' . $calendar . '
'; - -$calendar .= ''; - - -$calendar .= ''; -$calendar .= ""; - -/* -$calendar .= ""; -*/ -print $calendar; - - - - include_once('footer.php'); - +'; + +function build_calendar($month, $year) { + $daysOfWeek = array('M','T','W','T','F','S','S'); + $firstDayOfMonth = mktime(0,0,0,$month,1,$year); + $numberDays = date('t',$firstDayOfMonth); + $dateComponents = getdate($firstDayOfMonth); + $monthName = $dateComponents['month']; + $dayOfWeek = $dateComponents['wday'] -1; + $calendar = ""; + $calendar .= ""; + $calendar .= ""; + foreach($daysOfWeek as $day) { + $calendar .= ""; + } + $currentDay = 1; + $calendar .= ""; + if ($dayOfWeek > 0) { + $calendar .= ""; + } + $month = str_pad($month, 2, "0", STR_PAD_LEFT); + while($currentDay <= $numberDays){ + if($dayOfWeek == 7){ + $dayOfWeek = 0; + $calendar .= ""; + } + $currentDayRel = str_pad($currentDay, 2, "0", STR_PAD_LEFT); + $date = "$year-$month-$currentDayRel"; + + // Is this today? + if(date('Y-m-d') == $date) { + $calendar .= ""; + + $currentDay++; + $dayOfWeek++; + } + if($dayOfWeek != 7){ + $remainingDays = 7 - $dayOfWeek; + $calendar .= ""; + } + $calendar .= ""; + $calendar .= "

$monthName $year

$day
 
$currentDay"; + + } else { + $calendar .= "$currentDay"; + + } + $calendar .= "
"; + $calendar .= AuswertungImpfungdailycalendar($date); + $calendar .= "
 
"; + return $calendar; +} + +$calendar = build_calendar(7, 2021); + +//$calendar = '
' . $calendar . '
'; + +$calendar .= ''; + + +$calendar .= ''; +$calendar .= ""; + +/* +$calendar .= ""; +*/ +print $calendar; + + + + include_once('footer.php'); + ?> \ No newline at end of file diff --git a/admin/layout.php b/admin/layout.php index 91eb1bb..b5e2195 100644 --- a/admin/layout.php +++ b/admin/layout.php @@ -1,96 +1,96 @@ - - - - - - - - - - - Sticky Footer Navbar Template for Bootstrap - - - - - - - - - - - - - - -
- - - - - -
- - - - - -
-
- - - - - - - - - - - - + + + + + + + + + + + Sticky Footer Navbar Template for Bootstrap + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+
+ + + + + + + + + + + + \ No newline at end of file diff --git a/admin/mailtemplate.php b/admin/mailtemplate.php index 20761a7..f95bb8c 100644 --- a/admin/mailtemplate.php +++ b/admin/mailtemplate.php @@ -1,45 +1,45 @@ -query("SELECT anfragebestaetigung FROM config LIMIT 1"); - $anfragebestaetigung = (string)$stmt->fetchColumn(); - - if ($anfragebestaetigung === '') { - throw new RuntimeException('Config anfragebestaetigung ist leer'); - } - - $result = renderTemplateForAnfrage( - $pdo, - $anfrageid, - $templetid, - $anfragebestaetigung, // aus config - [ - // optional: - // '%TERMINZEITVORGABE%' => $Zeitanzeige, - ], - false // CP1252 nur wenn nötig - ); - - echo json_encode([ - 'betreff' => $result['betreff'], - 'body' => $result['body'] - ]); - -} catch (Throwable $e) { - http_response_code(500); - echo json_encode([ - 'error' => $e->getMessage() - ]); +query("SELECT anfragebestaetigung FROM config LIMIT 1"); + $anfragebestaetigung = (string)$stmt->fetchColumn(); + + if ($anfragebestaetigung === '') { + throw new RuntimeException('Config anfragebestaetigung ist leer'); + } + + $result = renderTemplateForAnfrage( + $pdo, + $anfrageid, + $templetid, + $anfragebestaetigung, // aus config + [ + // optional: + // '%TERMINZEITVORGABE%' => $Zeitanzeige, + ], + false // CP1252 nur wenn nötig + ); + + echo json_encode([ + 'betreff' => $result['betreff'], + 'body' => $result['body'] + ]); + +} catch (Throwable $e) { + http_response_code(500); + echo json_encode([ + 'error' => $e->getMessage() + ]); } \ No newline at end of file diff --git a/admin/mailtemplatebetreff.php b/admin/mailtemplatebetreff.php index 9cd7209..9383ae9 100644 --- a/admin/mailtemplatebetreff.php +++ b/admin/mailtemplatebetreff.php @@ -1,19 +1,19 @@ - \ No newline at end of file diff --git a/admin/mailtemplatebody.php b/admin/mailtemplatebody.php index a4d22bf..634b767 100644 --- a/admin/mailtemplatebody.php +++ b/admin/mailtemplatebody.php @@ -1,60 +1,60 @@ - \ No newline at end of file diff --git a/admin/phpinfo.php b/admin/phpinfo.php index 2bc97f1..c9121e7 100644 --- a/admin/phpinfo.php +++ b/admin/phpinfo.php @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/admin/templates/header.inc.php b/admin/templates/header.inc.php index c73d3c5..4857eb1 100644 --- a/admin/templates/header.inc.php +++ b/admin/templates/header.inc.php @@ -87,4 +87,4 @@ - + diff --git a/admin/togoadmin.php b/admin/togoadmin.php index ecee503..5b11a97 100644 --- a/admin/togoadmin.php +++ b/admin/togoadmin.php @@ -1,857 +1,857 @@ -

Erst anmelden: Login


"; - -include("templates/footer.inc.php"); - exit; } - -?> - -
-'; - echo "
"; - echo ''; - echo ''; - echo ' - '; - //echo ''; - echo "
"; -echo '
'; -?> -

Administration - Corona-Impfung

- -Hallo ,
-Herzlich Willkommen im internen Bereich!

- - -

"; -}else{ - - if($_POST["aktion"] == "togoterminverwaltungnewserie" ){ - - ## Neuen Serien Termin anlegen - ?> -

Serientermin "togo" anlegen

-
- '; - echo "Wochentag:
"; - echo ""; - echo "

"; - echo "Startzeit:
"; - echo ""; - - echo "

"; - echo "Endzeit:
"; - echo ""; - echo "

"; - echo "Standort:
"; - echo ""; - echo "

"; - echo "Warnmeldung ab Teilnehmer (gelb):
"; - echo ""; - echo "

"; - echo "Errormeldung ab Teilnehmer (rot):
"; - echo ""; - echo "

"; - echo ""; - echo ''; - echo ""; - - - - echo "

"; - echo '
'; - echo ''; - echo "
"; - - }elseif($_POST["aktion"] == "folgenewtermin"){ - - echo "

Folge von Terminen anlegen


"; - echo '
'; - echo "Datum:
"; - echo "Startzeit:
"; - echo "Länge eines Termins (Min):
"; - echo "Anzahl der Termine:
"; - echo "gelbe Warnstufe ab Impfungen:
"; - echo "rote Warnstufe ab Impfungen:
"; - echo "Standort:"; - echo "

"; - echo ""; - echo "

"; - echo '
'; - - echo "

"; - echo '
'; - echo ''; - echo "
"; - - }elseif($_GET["a"] == "showtogotermin" ){ - ?> -

Termine "togo" einsehen

-
- -

Eintrag wurde gelöscht!

"; - - }else{ - echo "

Fehler beim der Löschung des Eintrag!

"; - - - } - - } - - - $terminid = $_GET["id"]; - $sqlstring = "SELECT * FROM togo_termin_teilnehmer WHERE terminid = ". $_GET["id"] . ""; - $query = mysqli_query($con,$sqlstring); - $i=1; - echo ""; - while ($row = $query->fetch_assoc()) { - $terminteilnehmerid = $row["terminteilnehmerid"]; - $togoname = $row["name"]; - $togomail = $row["mail"]; - $togoid = $row["IP"]; - $togodate = $row["create_time"]; - - echo ""; - $i++; - } - echo "
NummerPersonIP-AdresseAnlegungsdatumAktion
" . $i . "". $togoname ." - " . $togomail . "" . $togoid . "" . $togodate . "
"; - - - echo "

"; - echo '
'; - echo ""; - echo ''; - echo "
"; - - - - - ## EDIT EinzelTermin - }elseif($_GET["a"] == "togoedittermin" ){ - - $queryinsert = mysqli_query($con, "SELECT * FROM togo_termin WHERE terminid = ". $_GET["id"] . ""); - while ($row = $queryinsert->fetch_assoc()) { - $date = $row["date"]; - $start = $row["start"]; - $end = $row["end"]; - $standort = $row["standort"]; - $error = $row["error"]; - $warning = $row["warning"]; - $count = $row["count"]; - } - - echo "

Termin Anpassung

"; - echo '
'; - - echo "Datum:
"; - echo ""; - echo "

"; - echo "Startzeit:
"; - echo ""; - echo "

"; - echo "Endzeit:
"; - echo ""; - echo "

"; - - echo "Aktuelle Meldungen:
"; - echo ""; - echo "

"; - echo "Standort:
"; - echo ""; - echo "

"; - echo "Warnmeldung ab Teilnehmer (gelb):
"; - echo ""; - echo "

"; - echo "Errormeldung ab Teilnehmer (rot):
"; - echo ""; - echo "

"; - echo ""; - echo ""; - echo ''; - echo "
"; - - - - echo "

"; - echo '
'; - //echo ""; - - echo ''; - echo "
"; - - ### Allen im Termin eine E-Mail senden - }else if($_GET["a"] == "togosendmail" ){ - $queryinsert = mysqli_query($con, "SELECT * FROM togo_termin WHERE terminid = ". $_GET["id"] . ""); - while ($row = $queryinsert->fetch_assoc()) { - $date = $row["date"]; - $start = $row["start"]; - $end = $row["ende"]; - $standort = $row["standort"]; - $error = $row["error"]; - $warning = $row["warning"]; - $count = $row["count"]; - } - - echo "

E-Mail Benachrichtigung


"; - echo "Infos:
"; - echo "
- Datum: $date
- Start: $start
- Ende: $end
- Standort: $standort
-
"; - - echo "
"; - echo "Betreff:
"; - echo "
"; - echo "
"; - echo "Inhalt:
"; - echo ''; - echo ""; - echo "

"; - echo "
"; - echo '
'; - }else if($_GET["a"] == "togomaildeletetimes" ){ - - - echo "

E-Mail Benachrichtigung


"; - echo "Infos:
"; - echo "Hiermit werden alle Benutzer mit abgesagten Terminen informiert und die Einträge dann gelöscht.
"; - - - echo "
"; - echo "Betreff:
"; - echo "
"; - echo "
"; - echo "Inhalt:
"; - echo ''; - echo ""; - echo ""; - - echo "
"; - echo "
"; - echo '
'; - ### EDIT Serientermin - }else if($_GET["a"] == "togoeditserientermin" ){ - - $queryinsert = mysqli_query($con, "SELECT * FROM togo_termin WHERE terminid = ". $_GET["id"] . ""); - while ($row = $queryinsert->fetch_assoc()) { - $date = $row["date"]; - $start = $row["start"]; - $end = $row["ende"]; - $standort = $row["standort"]; - $error = $row["error"]; - $warning = $row["warning"]; - $count = $row["count"]; - } - - echo "

Serientermin Anpassung

"; - echo '
'; - echo ""; - echo "Wochentag:
"; - - - echo ""; - echo "

"; - echo "Startzeit:
"; - echo ""; - echo "

"; - echo "Endzeit:
"; - echo ""; - echo "

"; - echo "Aktuelle Meldungen:
"; - echo ""; - echo "

"; - echo "Standort:
"; - echo ""; - echo "

"; - echo "Warnmeldung ab Teilnehmer (gelb):
"; - echo ""; - echo "

"; - echo "Errormeldung ab Teilnehmer (rot):
"; - echo ""; - echo "

"; - echo ""; - echo ''; - echo "
"; - - - - echo "

"; - echo '
'; - echo ""; - echo ''; - echo "
"; - - - - - - }elseif($_GET["a"] == "togoAddUser" || $_POST["aktion"] == "togoAddUser" ){ - - $textausgabe .= "

ToGo Anmeldung

"; - $textausgabe .= '
'; - $textausgabe .= "Melden Sie sich unverbindlich an.
Es wird Ihre IP-Addresse gespeichert.

Dieses dient nur zur Planung und ist keine feste Terminzusage!

"; - $textausgabe .= "Bitte beachten Sie, dass die angezeigte Anzahl der Online Anmeldungen vom tatsächlichen Andrang vor Ort abweichen kann.
Auch ist eine Verschiebung der Impfung für einzelne Impflinge immer möglich!

"; - $textausgabe .= ""; - $textausgabe .= "Name:
"; - $textausgabe .= ""; - $textausgabe .= "
"; - $textausgabe .= "E-Mail-Adresse:
"; - $textausgabe .= ""; - $textausgabe .= "
"; - $textausgabe .= "

"; - $textausgabe .= ""; - //$textausgabe .= ""; - $textausgabe .= ""; - $textausgabe .= ""; - $textausgabe .= '
'; - $textausgabe .= "
"; - $textausgabe .= "

Bitte beachten Sie, dass die angezeigte Anzahl der Online Anmeldungen vom tatsächlichen Andrang vor Ort abweichen kann.
Auch ist eine Verschiebung der Impfung für einzelne Impflinge immer möglich!

"; - //$textausgabe .= "

Kommen Sie unverbindlich zu einem unserer ToGo Impfterminen.

"; - echo $textausgabe; - - - - - - }elseif($_POST["aktion"] == "togoterminverwaltungnewtogo" ){ - - - - echo '
'; - - echo ""; - echo "

"; - echo ""; - echo "

"; - echo ""; - echo "

"; - echo "Standort:
"; - echo ""; - echo "

"; - echo "Warnmeldung ab Teilnehmer (gelb):
"; - echo ""; - echo "

"; - echo "Errormeldung ab Teilnehmer (rot):
"; - echo ""; - echo "

"; - echo ""; - echo ''; - echo "
"; - - - - echo "

"; - echo '
'; - echo ''; - echo "
"; - - - - - - }else{ - - - - if($_GET["a"] == "removeserie" ){ - - $sqlstring = "DELETE FROM togo_terminvorgaben WHERE vorgabenid = ". $_GET["id"] . ""; - $query = mysqli_query($con,$sqlstring); - - if($query){ - echo "

Serientermin wurde gelöscht!

"; - }else{ - echo "

Fehler beim der Löschung des Serientermins!

"; - - } - } - - - - - if($_GET["a"] == "activetogotermin" ){ - - $sqlstring = "Update togo_termin SET count='0' WHERE terminid = ". $_GET["id"] . ""; - $query = mysqli_query($con,$sqlstring); - if($query){ - echo "

Termin wurde aktiviert!

"; - }else{ - echo "

Fehler beim der Aktivierung des Termins!

"; - - } - - } - if($_GET["a"] == "removetogotermin" ){ - - $sqlstring = "Update togo_termin SET count='-1' WHERE terminid = ". $_GET["id"] . ""; - $query = mysqli_query($con,$sqlstring); - - if($query){ - echo "

Termin wurde deaktiviert!

"; - }else{ - echo "

Fehler beim der Deaktivierung des Termins!

"; - - } - } - if($_GET["a"] == "deletetogotermin" ){ - - $sqlstring = "DELETE FROM togo_termin WHERE terminid = ". $_GET["id"] . ""; - $query = mysqli_query($con,$sqlstring); - - if($query){ - echo "

Termin wurde gelöscht!
gelöschte Serientermine werden wieder erstellt. Serientermine können nur deaktiviert werden.

"; - }else{ - echo "

Fehler beim der Löschen des Termins!

"; - - } - } - - - if($_POST["save"] == "savenewserie"){ - $date = $_POST["date"]; - $start = $_POST["start"]; - $end = $_POST["end"]; - $standort = $_POST["standort"]; - $error = $_POST["error"]; - $warning = $_POST["warning"]; - $queryinsert = mysqli_query($con, "INSERT INTO togo_terminvorgaben (date, start, ende,standort,error,warning) VALUES ('".$date."', '".$start."', '".$end."', '".$standort."', '".$error."', '".$warning."')"); - - // Termin wird gespeichert - if($queryinsert){ - echo "

Serientermin gespeichert!

"; - }else{ - echo "

Fehler beim Speichern des Serientermins!

"; - - } - } - - if($_POST["save"] == "savesendmail"){ - - $betreff = $_POST["betreff"]; - $body = $_POST["body"]; - if($_POST["abgesagten"] == "1"){ - $queryinsert = mysqli_query($con, "SELECT * - FROM togo_termin_teilnehmer - LEFT JOIN togo_termin ON togo_termin_teilnehmer.terminid = togo_termin.terminid - WHERE standort IS NULL OR COUNT = '-1'"); - - }else{ - $queryinsert = mysqli_query($con, "SELECT * FROM togo_termin_teilnehmer WHERE terminid = ". $_POST["id"] . ""); - } - - while ($row = $queryinsert->fetch_assoc()) { - $mail = $row["mail"]; - //echo $mail; - - $ok = SendMailMessage($pdo, $mail, $betreff, $body); - - if ($ok) { - echo "Ihre Nachricht wurde erfolgreich versendet!
"; - } else { - echo "Leider gab es einen Fehler bei E-Mailversand.
"; - } - if($_POST["abgesagten"] == "1"){ - $id = $row["terminteilnehmerid"]; - $sqldeletestring = "DELETE FROM togo_termin_teilnehmer WHERE terminteilnehmerid = ". $id . ""; - $querydelete = mysqli_query($con,$sqldeletestring); - echo "Benutzer $id gelöscht
"; - - - - } - - - } - echo "

E-Mails wurde versendet!

$mailrueckmeldung

"; - - } - - - if($_POST["save"] == "saveediteinzeltermin"){ - $date = $_POST["date"]; - $start = $_POST["start"]; - $end = $_POST["end"]; - $standort = $_POST["standort"]; - $error = $_POST["error"]; - $warning = $_POST["warning"]; - $terminid = $_POST["terminid"]; - $count = $_POST["count"]; - - // Termin Änderung speichern - $queryinsert = mysqli_query($con, "UPDATE togo_termin SET date='".$date."', start='".$start."', count='".$count."', end='".$end."', standort='".$standort."', error= '".$error."', warning='".$warning."' WHERE terminid='".$terminid."'"); - - - if($queryinsert){ - echo "

Termin gespeichert!

"; - }else{ - echo "

Fehler beim Speichern des Termins!

"; - - } - - } - if($_POST["save"] == "savefolgenewtermin"){ - $date = $_POST["date"]; - $start = $_POST["folgestartzeit"]; - $folgelaenge = $_POST["folgelaenge"]; - $folgeanzahl = $_POST["folgeanzahl"]; - $standort = $_POST["standort"]; - $error = $_POST["error"]; - $warning = $_POST["warning"]; - $terminid = $_POST["terminid"]; - $i =1; - while($i <= $folgeanzahl){ - // Termin Änderung speichern - $endTime = strtotime($start) + ($folgelaenge*60); - $ende = date('H:i:s', $endTime); - $queryinsert = mysqli_query($con, "INSERT INTO togo_termin (date, start, end,standort,error,warning) VALUES ('".$date."', '".$start."', '".$ende."', '".$standort."', '".$error."', '".$warning."')"); - - $start = $ende; - - if($queryinsert){ - echo "

Termin gespeichert!

"; - }else{ - echo "

Fehler beim Speichern des Termins!

"; - - } - $i++; - } - } - - - - if($_POST["save"] == "saveeditserientermin"){ - $date = $_POST["date"]; - $start = $_POST["start"]; - $end = $_POST["end"]; - $standort = $_POST["standort"]; - $error = $_POST["error"]; - $warning = $_POST["warning"]; - $terminid = $_POST["terminid"]; - $count = $_POST["count"]; - $queryinsert = mysqli_query($con, "UPDATE togo_termin SET date='".$date."', start='".$start."', ende='".$end."',count='".$count."', standort='".$standort."', error= '".$error."', warning='".$warning."' WHERE terminid='".$terminid."'"); - - - // Termin wird angelegt - if($queryinsert){ - echo "

Termin gespeichert!

"; - }else{ - echo "

Fehler beim Speichern des Termins!

"; - - } - - } - - - if($_POST["save"] == "savenewtogo"){ - $date = $_POST["date"]; - $start = $_POST["start"]; - $end = $_POST["end"]; - $standort = $_POST["standort"]; - $error = $_POST["error"]; - $warning = $_POST["warning"]; - $queryinsert = mysqli_query($con, "INSERT INTO togo_termin (date, start, end,standort,error,warning) VALUES ('".$date."', '".$start."', '".$end."', '".$standort."', '".$error."', '".$warning."')"); - - // Termin wird angelegt - if($queryinsert){ - echo "

Termin gespeichert!

"; - }else{ - echo "

Fehler beim Speichern des Termins!

"; - } - } - if($_POST["save"] == "saveadduser"){ - - $terminid = $_POST["terminid"]; - $ip = $_POST["ip"]; - $mail = $_POST["mail"]; - $name = $_POST["name"]; - ##Doppelte Anemldung blocken zum gleichen Termin - $queryinsert = mysqli_query($con, "Select * FROM togo_termin_teilnehmer WHERE terminid = '".$terminid."' AND mail = '".$mail."' AND name = '".$name."' AND ip = '".$ip."'"); - $rows = mysqli_num_rows($queryinsert); - - //echo $rows; - //echo $rowsvierzehen; - //$countinsert= $row->total_count ; - if($rows > 0){ - $textausgabe .= "

Doppelte Eintragung

"; - $textausgabe .= "Diese Daten sind schon für diesen Termin eingetragen. Bitte tragen Sie sich nicht doppelt ein.
Kommen Sie einfach zum ausgewählen Impftermin vorbei.

"; - $textausgabe .= "

Sie erhalten keine E-Mail oder Terminbestätigung.

"; - $textausgabe .= "

Vielen Dank für Ihren Eintrag. Dadurch helfen Sie uns eine bessere Planung der Impfungen bereitzustellen.

"; - $textausgabe .= "Bitte beachten Sie, dass die angezeigte Anzahl der Online Anmeldungen vom tatsächlichen Andrang vor Ort abweichen kann.
Auch ist eine Verschiebung der Impfung für einzelne Impflinge immer möglich!

"; - - - }else{ - $queryinsert = mysqli_query($con, "UPDATE togo_termin SET count = count + 1 WHERE terminid = '".$terminid."'"); - $queryinserttwo = mysqli_query($con, "INSERT INTO togo_termin_teilnehmer (terminid, ip, mail, create_time,name) VALUES ('".$terminid."', '".$ip."', '".$mail."', '". date("Y-m-d H:i:s") ."', '".$name."')"); - - // Termin wird angelegt - if($queryinsert){ - $textausgabe .= "

Unverbindliche Anmeldung gespeichert!

"; - $textausgabe .= "

Sie erhalten keine E-Mail oder Terminbestätigung.

"; - $textausgabe .= "

Vielen Dank für Ihren Eintrag. Dadurch helfen Sie uns eine bessere Planung der Impfungen bereitzustellen.

"; - $textausgabe .= "Bitte beachten Sie, dass die angezeigte Anzahl der Online Anmeldungen vom tatsächlichen Andrang vor Ort abweichen kann.
Auch ist eine Verschiebung der Impfung für einzelne Impflinge immer möglich!

"; - - }else{ - $textausgabe .= "

Fehler beim Speichern!

"; - - } - } - //echo $textausgabe; - echo "
$textausgabe
"; - - - - - } - - - - - - //echo '
Wir sind im Urlaub
'; - - ##Anlegung der nächsten Termin für die nächsten vier Wochen - gototerminanlegung(); - ?> -

Termine "togo" verwalten

-
- SerientermineSerientermine werden jede Woche wiederholt. Während aktivierem Urlaub werden die Termine ausgesetzt.
- Sollten Termine von der Serie abweichen, müssen diese Termine einzeln angelegt werden und die angelegten Termine der Serie deaktiviert werden.

- "; - - while ($row = $query->fetch_assoc()) { - $togovorgabenid = $row["vorgabenid"]; - $togodate = $row["date"]; - $togostart = $row["start"]; - $togoende = $row["ende"]; - if($togodate == "Mo"){ - $ausgabedate = "montags"; - }elseif($togodate == "Di"){ - $ausgabedate = "dienstags"; - }elseif($togodate == "Mi"){ - $ausgabedate = "mittwochs"; - }elseif($togodate == "Do"){ - $ausgabedate = "donnerstags"; - }elseif($togodate == "Fr"){ - $ausgabedate = "freitags"; - }elseif($togodate == "Sa"){ - $ausgabedate = "samstags"; - }elseif($togodate == "so"){ - $ausgabedate = "sonntags"; - }else{ - $ausgabedate = "error"; - } - $togostandort = $row["standort"]; - $togowarning = $row["warning"]; - $togoerror = $row["error"]; - echo "
DatumUhrzeitStandort/InfosAktion
" . $ausgabedate . "" . date("H:i", strtotime($togostart)) . " - " . date("H:i", strtotime($togoende)) . "" . $togostandort . " - Gelb:" . $togowarning . " Rot:" . $togoerror . " "; - - } - echo "

"; - echo '
'; - echo ""; - echo ''; - echo "
"; - echo "

"; - ##aktuelle Termine einsehen - $datum = date("Y-m-d"); - $sqlstring = "SELECT * FROM togo_termin WHERE date >='". $datum . "' ORDER by date,start ASC "; - $query = mysqli_query($con,$sqlstring); - - echo "

Aktuelle Termine

Auf der öffentlichen Webseite können immer nur die Termine der nächsten 14 Tage eingesehen werden.
"; - - while ($row = $query->fetch_assoc()) { - $togoterminid = $row["terminid"]; - $togodate = $row["date"]; - $togostart = $row["start"]; - $togoende = $row["end"]; - $togostandort = $row["standort"]; - $togocount = $row["count"]; - $togowarning = $row["warning"]; - $togoerror = $row["error"]; - if($togocount >= 0){ - - echo ""; - }else{ - echo ""; - } - } - echo "
DatumUhrzeitStandortTeilnehmer/InfosAktion
" . date("d.m.y", strtotime($togodate)) . "" . date("H:i", strtotime($togostart)) . " - " . date("H:i", strtotime($togoende)) . "" . $togostandort . "Meldung:" . $togocount . " - Gelb:" . $togowarning . " Rot:" . $togoerror . "
" . date("d.m.y", strtotime($togodate)) . "" . date("H:i", strtotime($togostart)) . " - " . date("H:i", strtotime($togoende)) . "" . $togostandort . "deaktivert - Gelb:" . $togowarning . " Rot:" . $togoerror . "

"; - echo '
'; - echo ""; - echo ''; - echo "
"; - echo "
"; - echo '
'; - echo ""; - echo ''; - echo "
"; - - - - echo "
"; - - echo "

Statistik

"; - - echo "Anmeldung der letzten 14 Tagen pro Tag
"; - - $vorzweiwochen = date('Y-m-d', strtotime('-14 days', strtotime($datum))); - - $sqlstring = "SELECT date, SUM(count) FROM togo_termin WHERE date >='". $vorzweiwochen . "' AND date <='". $datum . "' AND count != '-1' AND count !='0' group BY date order by date"; - #echo $sqlstring; - $query = mysqli_query($con,$sqlstring); - - while ($row = $query->fetch_assoc()) { - $count = $row["SUM(count)"]; - $togodate = $row["date"]; - echo $togodate . " - " . $count . " Anmeldungen
"; - - } - echo "
Anmeldung der nächsten 14 Tagen pro Tag
" ; - $inzweiwochen = date('Y-m-d', strtotime('+14 days', strtotime($datum))); - - $sqlstring = "SELECT date, SUM(count) FROM togo_termin WHERE date >'". $datum . "' AND date <='". $inzweiwochen . "' AND count != '-1' AND count !='0' group BY date order by date"; - $query = mysqli_query($con,$sqlstring); - while ($row = $query->fetch_assoc()) { - $count = $row["SUM(count)"]; - $togodate = $row["date"]; - echo $togodate . " - " . $count . " Anmeldungen
"; - - } - - echo "
Gesamtzähler
"; - $sqlstring = "SELECT SUM(count),MIN(date) FROM togo_termin WHERE count != '-1' AND count !='0' AND date <='". $datum . "'"; - $query = mysqli_query($con,$sqlstring); - while ($row = $query->fetch_assoc()) { - $count = $row["SUM(count)"]; - $togodate = $row["MIN(date)"]; - echo $count . " Anmeldungen seit dem " . $togodate . " bis heute.
"; - - } - $queryinsert = mysqli_query($con, "SELECT * - FROM togo_termin_teilnehmer - LEFT JOIN togo_termin ON togo_termin_teilnehmer.terminid = togo_termin.terminid - WHERE standort IS NULL OR COUNT = '-1'"); - $anzahlzeilen = $queryinsert->num_rows; - - if( $anzahlzeilen != 0){ - echo "

Abgesagte Termine

"; - echo "Mail an alle Teilnehmer bei abgesagten Terminen "; - } - echo "

"; - echo '
'; - echo ""; - echo ''; - echo "
"; - - } - - - - - - -} - - - ?> - -


- - - - - -

Erst anmelden: Login


"; + +include("templates/footer.inc.php"); + exit; } + +?> + +
+'; + echo "
"; + echo ''; + echo ''; + echo ' + '; + //echo ''; + echo "
"; +echo '
'; +?> +

Administration - Corona-Impfung

+ +Hallo ,
+Herzlich Willkommen im internen Bereich!

+ + +

"; +}else{ + + if($_POST["aktion"] == "togoterminverwaltungnewserie" ){ + + ## Neuen Serien Termin anlegen + ?> +

Serientermin "togo" anlegen

+
+ '; + echo "Wochentag:
"; + echo ""; + echo "

"; + echo "Startzeit:
"; + echo ""; + + echo "

"; + echo "Endzeit:
"; + echo ""; + echo "

"; + echo "Standort:
"; + echo ""; + echo "

"; + echo "Warnmeldung ab Teilnehmer (gelb):
"; + echo ""; + echo "

"; + echo "Errormeldung ab Teilnehmer (rot):
"; + echo ""; + echo "

"; + echo ""; + echo ''; + echo ""; + + + + echo "

"; + echo '
'; + echo ''; + echo "
"; + + }elseif($_POST["aktion"] == "folgenewtermin"){ + + echo "

Folge von Terminen anlegen


"; + echo '
'; + echo "Datum:
"; + echo "Startzeit:
"; + echo "Länge eines Termins (Min):
"; + echo "Anzahl der Termine:
"; + echo "gelbe Warnstufe ab Impfungen:
"; + echo "rote Warnstufe ab Impfungen:
"; + echo "Standort:"; + echo "

"; + echo ""; + echo "

"; + echo '
'; + + echo "

"; + echo '
'; + echo ''; + echo "
"; + + }elseif($_GET["a"] == "showtogotermin" ){ + ?> +

Termine "togo" einsehen

+
+ +

Eintrag wurde gelöscht!

"; + + }else{ + echo "

Fehler beim der Löschung des Eintrag!

"; + + + } + + } + + + $terminid = $_GET["id"]; + $sqlstring = "SELECT * FROM togo_termin_teilnehmer WHERE terminid = ". $_GET["id"] . ""; + $query = mysqli_query($con,$sqlstring); + $i=1; + echo ""; + while ($row = $query->fetch_assoc()) { + $terminteilnehmerid = $row["terminteilnehmerid"]; + $togoname = $row["name"]; + $togomail = $row["mail"]; + $togoid = $row["IP"]; + $togodate = $row["create_time"]; + + echo ""; + $i++; + } + echo "
NummerPersonIP-AdresseAnlegungsdatumAktion
" . $i . "". $togoname ." - " . $togomail . "" . $togoid . "" . $togodate . "
"; + + + echo "

"; + echo '
'; + echo ""; + echo ''; + echo "
"; + + + + + ## EDIT EinzelTermin + }elseif($_GET["a"] == "togoedittermin" ){ + + $queryinsert = mysqli_query($con, "SELECT * FROM togo_termin WHERE terminid = ". $_GET["id"] . ""); + while ($row = $queryinsert->fetch_assoc()) { + $date = $row["date"]; + $start = $row["start"]; + $end = $row["end"]; + $standort = $row["standort"]; + $error = $row["error"]; + $warning = $row["warning"]; + $count = $row["count"]; + } + + echo "

Termin Anpassung

"; + echo '
'; + + echo "Datum:
"; + echo ""; + echo "

"; + echo "Startzeit:
"; + echo ""; + echo "

"; + echo "Endzeit:
"; + echo ""; + echo "

"; + + echo "Aktuelle Meldungen:
"; + echo ""; + echo "

"; + echo "Standort:
"; + echo ""; + echo "

"; + echo "Warnmeldung ab Teilnehmer (gelb):
"; + echo ""; + echo "

"; + echo "Errormeldung ab Teilnehmer (rot):
"; + echo ""; + echo "

"; + echo ""; + echo ""; + echo ''; + echo "
"; + + + + echo "

"; + echo '
'; + //echo ""; + + echo ''; + echo "
"; + + ### Allen im Termin eine E-Mail senden + }else if($_GET["a"] == "togosendmail" ){ + $queryinsert = mysqli_query($con, "SELECT * FROM togo_termin WHERE terminid = ". $_GET["id"] . ""); + while ($row = $queryinsert->fetch_assoc()) { + $date = $row["date"]; + $start = $row["start"]; + $end = $row["ende"]; + $standort = $row["standort"]; + $error = $row["error"]; + $warning = $row["warning"]; + $count = $row["count"]; + } + + echo "

E-Mail Benachrichtigung


"; + echo "Infos:
"; + echo "
+ Datum: $date
+ Start: $start
+ Ende: $end
+ Standort: $standort
+
"; + + echo "
"; + echo "Betreff:
"; + echo "
"; + echo "
"; + echo "Inhalt:
"; + echo ''; + echo ""; + echo "

"; + echo "
"; + echo '
'; + }else if($_GET["a"] == "togomaildeletetimes" ){ + + + echo "

E-Mail Benachrichtigung


"; + echo "Infos:
"; + echo "Hiermit werden alle Benutzer mit abgesagten Terminen informiert und die Einträge dann gelöscht.
"; + + + echo "
"; + echo "Betreff:
"; + echo "
"; + echo "
"; + echo "Inhalt:
"; + echo ''; + echo ""; + echo ""; + + echo "
"; + echo "
"; + echo '
'; + ### EDIT Serientermin + }else if($_GET["a"] == "togoeditserientermin" ){ + + $queryinsert = mysqli_query($con, "SELECT * FROM togo_termin WHERE terminid = ". $_GET["id"] . ""); + while ($row = $queryinsert->fetch_assoc()) { + $date = $row["date"]; + $start = $row["start"]; + $end = $row["ende"]; + $standort = $row["standort"]; + $error = $row["error"]; + $warning = $row["warning"]; + $count = $row["count"]; + } + + echo "

Serientermin Anpassung

"; + echo '
'; + echo ""; + echo "Wochentag:
"; + + + echo ""; + echo "

"; + echo "Startzeit:
"; + echo ""; + echo "

"; + echo "Endzeit:
"; + echo ""; + echo "

"; + echo "Aktuelle Meldungen:
"; + echo ""; + echo "

"; + echo "Standort:
"; + echo ""; + echo "

"; + echo "Warnmeldung ab Teilnehmer (gelb):
"; + echo ""; + echo "

"; + echo "Errormeldung ab Teilnehmer (rot):
"; + echo ""; + echo "

"; + echo ""; + echo ''; + echo "
"; + + + + echo "

"; + echo '
'; + echo ""; + echo ''; + echo "
"; + + + + + + }elseif($_GET["a"] == "togoAddUser" || $_POST["aktion"] == "togoAddUser" ){ + + $textausgabe .= "

ToGo Anmeldung

"; + $textausgabe .= '
'; + $textausgabe .= "Melden Sie sich unverbindlich an.
Es wird Ihre IP-Addresse gespeichert.

Dieses dient nur zur Planung und ist keine feste Terminzusage!

"; + $textausgabe .= "Bitte beachten Sie, dass die angezeigte Anzahl der Online Anmeldungen vom tatsächlichen Andrang vor Ort abweichen kann.
Auch ist eine Verschiebung der Impfung für einzelne Impflinge immer möglich!

"; + $textausgabe .= ""; + $textausgabe .= "Name:
"; + $textausgabe .= ""; + $textausgabe .= "
"; + $textausgabe .= "E-Mail-Adresse:
"; + $textausgabe .= ""; + $textausgabe .= "
"; + $textausgabe .= "

"; + $textausgabe .= ""; + //$textausgabe .= ""; + $textausgabe .= ""; + $textausgabe .= ""; + $textausgabe .= '
'; + $textausgabe .= "
"; + $textausgabe .= "

Bitte beachten Sie, dass die angezeigte Anzahl der Online Anmeldungen vom tatsächlichen Andrang vor Ort abweichen kann.
Auch ist eine Verschiebung der Impfung für einzelne Impflinge immer möglich!

"; + //$textausgabe .= "

Kommen Sie unverbindlich zu einem unserer ToGo Impfterminen.

"; + echo $textausgabe; + + + + + + }elseif($_POST["aktion"] == "togoterminverwaltungnewtogo" ){ + + + + echo '
'; + + echo ""; + echo "

"; + echo ""; + echo "

"; + echo ""; + echo "

"; + echo "Standort:
"; + echo ""; + echo "

"; + echo "Warnmeldung ab Teilnehmer (gelb):
"; + echo ""; + echo "

"; + echo "Errormeldung ab Teilnehmer (rot):
"; + echo ""; + echo "

"; + echo ""; + echo ''; + echo "
"; + + + + echo "

"; + echo '
'; + echo ''; + echo "
"; + + + + + + }else{ + + + + if($_GET["a"] == "removeserie" ){ + + $sqlstring = "DELETE FROM togo_terminvorgaben WHERE vorgabenid = ". $_GET["id"] . ""; + $query = mysqli_query($con,$sqlstring); + + if($query){ + echo "

Serientermin wurde gelöscht!

"; + }else{ + echo "

Fehler beim der Löschung des Serientermins!

"; + + } + } + + + + + if($_GET["a"] == "activetogotermin" ){ + + $sqlstring = "Update togo_termin SET count='0' WHERE terminid = ". $_GET["id"] . ""; + $query = mysqli_query($con,$sqlstring); + if($query){ + echo "

Termin wurde aktiviert!

"; + }else{ + echo "

Fehler beim der Aktivierung des Termins!

"; + + } + + } + if($_GET["a"] == "removetogotermin" ){ + + $sqlstring = "Update togo_termin SET count='-1' WHERE terminid = ". $_GET["id"] . ""; + $query = mysqli_query($con,$sqlstring); + + if($query){ + echo "

Termin wurde deaktiviert!

"; + }else{ + echo "

Fehler beim der Deaktivierung des Termins!

"; + + } + } + if($_GET["a"] == "deletetogotermin" ){ + + $sqlstring = "DELETE FROM togo_termin WHERE terminid = ". $_GET["id"] . ""; + $query = mysqli_query($con,$sqlstring); + + if($query){ + echo "

Termin wurde gelöscht!
gelöschte Serientermine werden wieder erstellt. Serientermine können nur deaktiviert werden.

"; + }else{ + echo "

Fehler beim der Löschen des Termins!

"; + + } + } + + + if($_POST["save"] == "savenewserie"){ + $date = $_POST["date"]; + $start = $_POST["start"]; + $end = $_POST["end"]; + $standort = $_POST["standort"]; + $error = $_POST["error"]; + $warning = $_POST["warning"]; + $queryinsert = mysqli_query($con, "INSERT INTO togo_terminvorgaben (date, start, ende,standort,error,warning) VALUES ('".$date."', '".$start."', '".$end."', '".$standort."', '".$error."', '".$warning."')"); + + // Termin wird gespeichert + if($queryinsert){ + echo "

Serientermin gespeichert!

"; + }else{ + echo "

Fehler beim Speichern des Serientermins!

"; + + } + } + + if($_POST["save"] == "savesendmail"){ + + $betreff = $_POST["betreff"]; + $body = $_POST["body"]; + if($_POST["abgesagten"] == "1"){ + $queryinsert = mysqli_query($con, "SELECT * + FROM togo_termin_teilnehmer + LEFT JOIN togo_termin ON togo_termin_teilnehmer.terminid = togo_termin.terminid + WHERE standort IS NULL OR COUNT = '-1'"); + + }else{ + $queryinsert = mysqli_query($con, "SELECT * FROM togo_termin_teilnehmer WHERE terminid = ". $_POST["id"] . ""); + } + + while ($row = $queryinsert->fetch_assoc()) { + $mail = $row["mail"]; + //echo $mail; + + $ok = SendMailMessage($pdo, $mail, $betreff, $body); + + if ($ok) { + echo "Ihre Nachricht wurde erfolgreich versendet!
"; + } else { + echo "Leider gab es einen Fehler bei E-Mailversand.
"; + } + if($_POST["abgesagten"] == "1"){ + $id = $row["terminteilnehmerid"]; + $sqldeletestring = "DELETE FROM togo_termin_teilnehmer WHERE terminteilnehmerid = ". $id . ""; + $querydelete = mysqli_query($con,$sqldeletestring); + echo "Benutzer $id gelöscht
"; + + + + } + + + } + echo "

E-Mails wurde versendet!

$mailrueckmeldung

"; + + } + + + if($_POST["save"] == "saveediteinzeltermin"){ + $date = $_POST["date"]; + $start = $_POST["start"]; + $end = $_POST["end"]; + $standort = $_POST["standort"]; + $error = $_POST["error"]; + $warning = $_POST["warning"]; + $terminid = $_POST["terminid"]; + $count = $_POST["count"]; + + // Termin Änderung speichern + $queryinsert = mysqli_query($con, "UPDATE togo_termin SET date='".$date."', start='".$start."', count='".$count."', end='".$end."', standort='".$standort."', error= '".$error."', warning='".$warning."' WHERE terminid='".$terminid."'"); + + + if($queryinsert){ + echo "

Termin gespeichert!

"; + }else{ + echo "

Fehler beim Speichern des Termins!

"; + + } + + } + if($_POST["save"] == "savefolgenewtermin"){ + $date = $_POST["date"]; + $start = $_POST["folgestartzeit"]; + $folgelaenge = $_POST["folgelaenge"]; + $folgeanzahl = $_POST["folgeanzahl"]; + $standort = $_POST["standort"]; + $error = $_POST["error"]; + $warning = $_POST["warning"]; + $terminid = $_POST["terminid"]; + $i =1; + while($i <= $folgeanzahl){ + // Termin Änderung speichern + $endTime = strtotime($start) + ($folgelaenge*60); + $ende = date('H:i:s', $endTime); + $queryinsert = mysqli_query($con, "INSERT INTO togo_termin (date, start, end,standort,error,warning) VALUES ('".$date."', '".$start."', '".$ende."', '".$standort."', '".$error."', '".$warning."')"); + + $start = $ende; + + if($queryinsert){ + echo "

Termin gespeichert!

"; + }else{ + echo "

Fehler beim Speichern des Termins!

"; + + } + $i++; + } + } + + + + if($_POST["save"] == "saveeditserientermin"){ + $date = $_POST["date"]; + $start = $_POST["start"]; + $end = $_POST["end"]; + $standort = $_POST["standort"]; + $error = $_POST["error"]; + $warning = $_POST["warning"]; + $terminid = $_POST["terminid"]; + $count = $_POST["count"]; + $queryinsert = mysqli_query($con, "UPDATE togo_termin SET date='".$date."', start='".$start."', ende='".$end."',count='".$count."', standort='".$standort."', error= '".$error."', warning='".$warning."' WHERE terminid='".$terminid."'"); + + + // Termin wird angelegt + if($queryinsert){ + echo "

Termin gespeichert!

"; + }else{ + echo "

Fehler beim Speichern des Termins!

"; + + } + + } + + + if($_POST["save"] == "savenewtogo"){ + $date = $_POST["date"]; + $start = $_POST["start"]; + $end = $_POST["end"]; + $standort = $_POST["standort"]; + $error = $_POST["error"]; + $warning = $_POST["warning"]; + $queryinsert = mysqli_query($con, "INSERT INTO togo_termin (date, start, end,standort,error,warning) VALUES ('".$date."', '".$start."', '".$end."', '".$standort."', '".$error."', '".$warning."')"); + + // Termin wird angelegt + if($queryinsert){ + echo "

Termin gespeichert!

"; + }else{ + echo "

Fehler beim Speichern des Termins!

"; + } + } + if($_POST["save"] == "saveadduser"){ + + $terminid = $_POST["terminid"]; + $ip = $_POST["ip"]; + $mail = $_POST["mail"]; + $name = $_POST["name"]; + ##Doppelte Anemldung blocken zum gleichen Termin + $queryinsert = mysqli_query($con, "Select * FROM togo_termin_teilnehmer WHERE terminid = '".$terminid."' AND mail = '".$mail."' AND name = '".$name."' AND ip = '".$ip."'"); + $rows = mysqli_num_rows($queryinsert); + + //echo $rows; + //echo $rowsvierzehen; + //$countinsert= $row->total_count ; + if($rows > 0){ + $textausgabe .= "

Doppelte Eintragung

"; + $textausgabe .= "Diese Daten sind schon für diesen Termin eingetragen. Bitte tragen Sie sich nicht doppelt ein.
Kommen Sie einfach zum ausgewählen Impftermin vorbei.

"; + $textausgabe .= "

Sie erhalten keine E-Mail oder Terminbestätigung.

"; + $textausgabe .= "

Vielen Dank für Ihren Eintrag. Dadurch helfen Sie uns eine bessere Planung der Impfungen bereitzustellen.

"; + $textausgabe .= "Bitte beachten Sie, dass die angezeigte Anzahl der Online Anmeldungen vom tatsächlichen Andrang vor Ort abweichen kann.
Auch ist eine Verschiebung der Impfung für einzelne Impflinge immer möglich!

"; + + + }else{ + $queryinsert = mysqli_query($con, "UPDATE togo_termin SET count = count + 1 WHERE terminid = '".$terminid."'"); + $queryinserttwo = mysqli_query($con, "INSERT INTO togo_termin_teilnehmer (terminid, ip, mail, create_time,name) VALUES ('".$terminid."', '".$ip."', '".$mail."', '". date("Y-m-d H:i:s") ."', '".$name."')"); + + // Termin wird angelegt + if($queryinsert){ + $textausgabe .= "

Unverbindliche Anmeldung gespeichert!

"; + $textausgabe .= "

Sie erhalten keine E-Mail oder Terminbestätigung.

"; + $textausgabe .= "

Vielen Dank für Ihren Eintrag. Dadurch helfen Sie uns eine bessere Planung der Impfungen bereitzustellen.

"; + $textausgabe .= "Bitte beachten Sie, dass die angezeigte Anzahl der Online Anmeldungen vom tatsächlichen Andrang vor Ort abweichen kann.
Auch ist eine Verschiebung der Impfung für einzelne Impflinge immer möglich!

"; + + }else{ + $textausgabe .= "

Fehler beim Speichern!

"; + + } + } + //echo $textausgabe; + echo "
$textausgabe
"; + + + + + } + + + + + + //echo '
Wir sind im Urlaub
'; + + ##Anlegung der nächsten Termin für die nächsten vier Wochen + gototerminanlegung(); + ?> +

Termine "togo" verwalten

+
+ SerientermineSerientermine werden jede Woche wiederholt. Während aktivierem Urlaub werden die Termine ausgesetzt.
+ Sollten Termine von der Serie abweichen, müssen diese Termine einzeln angelegt werden und die angelegten Termine der Serie deaktiviert werden.

+ "; + + while ($row = $query->fetch_assoc()) { + $togovorgabenid = $row["vorgabenid"]; + $togodate = $row["date"]; + $togostart = $row["start"]; + $togoende = $row["ende"]; + if($togodate == "Mo"){ + $ausgabedate = "montags"; + }elseif($togodate == "Di"){ + $ausgabedate = "dienstags"; + }elseif($togodate == "Mi"){ + $ausgabedate = "mittwochs"; + }elseif($togodate == "Do"){ + $ausgabedate = "donnerstags"; + }elseif($togodate == "Fr"){ + $ausgabedate = "freitags"; + }elseif($togodate == "Sa"){ + $ausgabedate = "samstags"; + }elseif($togodate == "so"){ + $ausgabedate = "sonntags"; + }else{ + $ausgabedate = "error"; + } + $togostandort = $row["standort"]; + $togowarning = $row["warning"]; + $togoerror = $row["error"]; + echo "
DatumUhrzeitStandort/InfosAktion
" . $ausgabedate . "" . date("H:i", strtotime($togostart)) . " - " . date("H:i", strtotime($togoende)) . "" . $togostandort . " - Gelb:" . $togowarning . " Rot:" . $togoerror . " "; + + } + echo "

"; + echo '
'; + echo ""; + echo ''; + echo "
"; + echo "

"; + ##aktuelle Termine einsehen + $datum = date("Y-m-d"); + $sqlstring = "SELECT * FROM togo_termin WHERE date >='". $datum . "' ORDER by date,start ASC "; + $query = mysqli_query($con,$sqlstring); + + echo "

Aktuelle Termine

Auf der öffentlichen Webseite können immer nur die Termine der nächsten 14 Tage eingesehen werden.
"; + + while ($row = $query->fetch_assoc()) { + $togoterminid = $row["terminid"]; + $togodate = $row["date"]; + $togostart = $row["start"]; + $togoende = $row["end"]; + $togostandort = $row["standort"]; + $togocount = $row["count"]; + $togowarning = $row["warning"]; + $togoerror = $row["error"]; + if($togocount >= 0){ + + echo ""; + }else{ + echo ""; + } + } + echo "
DatumUhrzeitStandortTeilnehmer/InfosAktion
" . date("d.m.y", strtotime($togodate)) . "" . date("H:i", strtotime($togostart)) . " - " . date("H:i", strtotime($togoende)) . "" . $togostandort . "Meldung:" . $togocount . " - Gelb:" . $togowarning . " Rot:" . $togoerror . "
" . date("d.m.y", strtotime($togodate)) . "" . date("H:i", strtotime($togostart)) . " - " . date("H:i", strtotime($togoende)) . "" . $togostandort . "deaktivert - Gelb:" . $togowarning . " Rot:" . $togoerror . "

"; + echo '
'; + echo ""; + echo ''; + echo "
"; + echo "
"; + echo '
'; + echo ""; + echo ''; + echo "
"; + + + + echo "
"; + + echo "

Statistik

"; + + echo "Anmeldung der letzten 14 Tagen pro Tag
"; + + $vorzweiwochen = date('Y-m-d', strtotime('-14 days', strtotime($datum))); + + $sqlstring = "SELECT date, SUM(count) FROM togo_termin WHERE date >='". $vorzweiwochen . "' AND date <='". $datum . "' AND count != '-1' AND count !='0' group BY date order by date"; + #echo $sqlstring; + $query = mysqli_query($con,$sqlstring); + + while ($row = $query->fetch_assoc()) { + $count = $row["SUM(count)"]; + $togodate = $row["date"]; + echo $togodate . " - " . $count . " Anmeldungen
"; + + } + echo "
Anmeldung der nächsten 14 Tagen pro Tag
" ; + $inzweiwochen = date('Y-m-d', strtotime('+14 days', strtotime($datum))); + + $sqlstring = "SELECT date, SUM(count) FROM togo_termin WHERE date >'". $datum . "' AND date <='". $inzweiwochen . "' AND count != '-1' AND count !='0' group BY date order by date"; + $query = mysqli_query($con,$sqlstring); + while ($row = $query->fetch_assoc()) { + $count = $row["SUM(count)"]; + $togodate = $row["date"]; + echo $togodate . " - " . $count . " Anmeldungen
"; + + } + + echo "
Gesamtzähler
"; + $sqlstring = "SELECT SUM(count),MIN(date) FROM togo_termin WHERE count != '-1' AND count !='0' AND date <='". $datum . "'"; + $query = mysqli_query($con,$sqlstring); + while ($row = $query->fetch_assoc()) { + $count = $row["SUM(count)"]; + $togodate = $row["MIN(date)"]; + echo $count . " Anmeldungen seit dem " . $togodate . " bis heute.
"; + + } + $queryinsert = mysqli_query($con, "SELECT * + FROM togo_termin_teilnehmer + LEFT JOIN togo_termin ON togo_termin_teilnehmer.terminid = togo_termin.terminid + WHERE standort IS NULL OR COUNT = '-1'"); + $anzahlzeilen = $queryinsert->num_rows; + + if( $anzahlzeilen != 0){ + echo "

Abgesagte Termine

"; + echo "Mail an alle Teilnehmer bei abgesagten Terminen "; + } + echo "

"; + echo '
'; + echo ""; + echo ''; + echo "
"; + + } + + + + + + +} + + + ?> + +


+ + + + + + \ No newline at end of file diff --git a/admin/wartelisteadmin.php b/admin/wartelisteadmin.php index 90ab271..0dc3eac 100644 --- a/admin/wartelisteadmin.php +++ b/admin/wartelisteadmin.php @@ -1,3 +1,3 @@

Erst anmelden: Login


"; - -include("templates/footer.inc.php"); - exit; } -?> - - -
-'; -echo "
"; -echo ''; -echo ''; -echo ' - '; -echo "
"; -echo '
'; - -?> -

Administration - webseiteninhalt anpassen

- -Hallo ,
-Herzlich Willkommen im internen Bereich!

- -

"; -} else { - - // ========================= - // EDIT-MODUS - // ========================= - if ($aktion === "edit") { - - // ------- Speichern ------- - if ($subaktion === "save") { - - $inhaltid = (int)($_POST["inhaltid"] ?? 0); - $inhalt = $_POST["inhalt"] ?? ""; - $webseitentitel = $_POST["webseitentitel"] ?? ""; - - try { - $stmt = $pdo->prepare(" - UPDATE webseiteninhalt - SET inhalt = :inhalt, - webseitentitel = :webseitentitel - WHERE inhaltid = :inhaltid - "); - $stmt->execute([ - ':inhalt' => $inhalt, - ':webseitentitel' => $webseitentitel, - ':inhaltid' => $inhaltid, - ]); - - echo "

Speicherung der Vorlage erfolgreich!

"; - } catch (Throwable $e) { - echo "

Fehler bei der Speicherung der Vorlage!

"; - // Optional debug: - // echo "
" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "
"; - } - } - - // ------- Vorlage laden ------- - $inhaltid = (int)($_POST["inhaltid"] ?? 0); - - try { - $stmt = $pdo->prepare(" - SELECT webseitentitel, inhalt - FROM webseiteninhalt - WHERE inhaltid = ? - LIMIT 1 - "); - $stmt->execute([$inhaltid]); - $rowconfig = $stmt->fetch(PDO::FETCH_ASSOC); - - if (!$rowconfig) { - echo "

Vorlage nicht gefunden.

"; - } else { - $webseitentitel = $rowconfig["webseitentitel"] ?? ""; - $inhalt = $rowconfig["inhalt"] ?? ""; - - echo "

Webseiteninhalt bearbeiten


"; - echo "

Vorlage: " . htmlspecialchars($webseitentitel, ENT_QUOTES, 'UTF-8') . "

"; - echo "

"; - - echo "
"; - echo ""; - echo "
"; - // Inhalt ist HTML -> bewusst NICHT escapen, sonst zerstörst du HTML im Editor - echo ""; - echo ""; - echo ""; - echo "

"; - echo "
"; - echo "
"; - - echo "

"; - echo "
"; - echo ""; - echo "
"; - } - - } catch (Throwable $e) { - echo "

Fehler beim Laden der Vorlage.

"; - // Optional debug: - // echo "
" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "
"; - } - - // ========================= - // LISTE (Auswahl) - // ========================= - } else { - - echo "
"; - echo "Wählen Sie die zu bearbeitenden Webseiteninhalt aus:

"; - - try { - $stmt = $pdo->prepare(" - SELECT webseitentitel, inhaltid - FROM webseiteninhalt - ORDER BY webseitentitel - "); - $stmt->execute(); - $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); - - echo ""; - echo "

"; - echo "


"; - echo "
"; - - } catch (Throwable $e) { - echo "

Fehler beim Laden der Liste.

"; - // Optional debug: - // echo "
" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "
"; - } - } -} - -include __DIR__ . "/templates/footer.inc.php"; -?> - +

Erst anmelden: Login


"; + +include("templates/footer.inc.php"); + exit; } +?> + + +
+'; +echo "
"; +echo ''; +echo ''; +echo ' + '; +echo "
"; +echo '
'; + +?> +

Administration - webseiteninhalt anpassen

+ +Hallo ,
+Herzlich Willkommen im internen Bereich!

+ +

"; +} else { + + // ========================= + // EDIT-MODUS + // ========================= + if ($aktion === "edit") { + + // ------- Speichern ------- + if ($subaktion === "save") { + + $inhaltid = (int)($_POST["inhaltid"] ?? 0); + $inhalt = $_POST["inhalt"] ?? ""; + $webseitentitel = $_POST["webseitentitel"] ?? ""; + + try { + $stmt = $pdo->prepare(" + UPDATE webseiteninhalt + SET inhalt = :inhalt, + webseitentitel = :webseitentitel + WHERE inhaltid = :inhaltid + "); + $stmt->execute([ + ':inhalt' => $inhalt, + ':webseitentitel' => $webseitentitel, + ':inhaltid' => $inhaltid, + ]); + + echo "

Speicherung der Vorlage erfolgreich!

"; + } catch (Throwable $e) { + echo "

Fehler bei der Speicherung der Vorlage!

"; + // Optional debug: + // echo "
" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "
"; + } + } + + // ------- Vorlage laden ------- + $inhaltid = (int)($_POST["inhaltid"] ?? 0); + + try { + $stmt = $pdo->prepare(" + SELECT webseitentitel, inhalt + FROM webseiteninhalt + WHERE inhaltid = ? + LIMIT 1 + "); + $stmt->execute([$inhaltid]); + $rowconfig = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$rowconfig) { + echo "

Vorlage nicht gefunden.

"; + } else { + $webseitentitel = $rowconfig["webseitentitel"] ?? ""; + $inhalt = $rowconfig["inhalt"] ?? ""; + + echo "

Webseiteninhalt bearbeiten


"; + echo "

Vorlage: " . htmlspecialchars($webseitentitel, ENT_QUOTES, 'UTF-8') . "

"; + echo "

"; + + echo "
"; + echo ""; + echo "
"; + // Inhalt ist HTML -> bewusst NICHT escapen, sonst zerstörst du HTML im Editor + echo ""; + echo ""; + echo ""; + echo "

"; + echo "
"; + echo "
"; + + echo "

"; + echo "
"; + echo ""; + echo "
"; + } + + } catch (Throwable $e) { + echo "

Fehler beim Laden der Vorlage.

"; + // Optional debug: + // echo "
" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "
"; + } + + // ========================= + // LISTE (Auswahl) + // ========================= + } else { + + echo "
"; + echo "Wählen Sie die zu bearbeitenden Webseiteninhalt aus:

"; + + try { + $stmt = $pdo->prepare(" + SELECT webseitentitel, inhaltid + FROM webseiteninhalt + ORDER BY webseitentitel + "); + $stmt->execute(); + $rows = $stmt->fetchAll(PDO::FETCH_ASSOC); + + echo ""; + echo "

"; + echo "


"; + echo "
"; + + } catch (Throwable $e) { + echo "

Fehler beim Laden der Liste.

"; + // Optional debug: + // echo "
" . htmlspecialchars($e->getMessage(), ENT_QUOTES, 'UTF-8') . "
"; + } + } +} + +include __DIR__ . "/templates/footer.inc.php"; +?> + diff --git a/anfrageneinsicht.php b/anfrageneinsicht.php index f263d78..aeb75a6 100644 --- a/anfrageneinsicht.php +++ b/anfrageneinsicht.php @@ -1,336 +1,336 @@ - - - - - - Praxis Creutzburg - Anfragenbestätigung - - - - - - - - - -
- - - - -
-

Anfrage einsehen

- - - -Leider konnten wir Ihre Anforderung nicht verarbeiten.
Bitte überprüfen Sie den aufgerufenden Link.

"; - exit; - } - - // Anfrage + Person laden (NEUES SCHEMA) - $stmt = $pdo->prepare(" - SELECT - a.anfrageid, - a.checked, - a.nachricht, - a.medikament1, - a.medikament2, - a.anforderungart, - a.ordnungsid, - p.vorname, - p.nachname, - p.email, - p.tele, - p.geburtstag - FROM anfragen a - INNER JOIN persons p ON a.requester_person_id = p.person_id - WHERE a.hash = ? - LIMIT 1 - "); - $stmt->execute([$id]); - $row = $stmt->fetch(PDO::FETCH_ASSOC); - - if (!$row) { - echo "

Leider konnten wir Ihre Anforderung nicht verarbeiten.


Bitte überprüfen Sie den aufgerufenden Link.

"; - exit; - } - - // Variablen aus DB - $anfrageid = (int)$row["anfrageid"]; - $checked = (int)$row["checked"]; - - $vorname = $row["vorname"] ?? ""; - $nachname = $row["nachname"] ?? ""; - $mail = $row["email"] ?? ""; - $tel = $row["tele"] ?? ""; - $geburtstag = $row["geburtstag"] ?? null; - - $userausgabe = trim($vorname . " " . $nachname); - - $nachricht = $row["nachricht"] ?? ""; - $medikamenteins = $row["medikament1"] ?? ""; - $medikamentzwei = $row["medikament2"] ?? ""; - - $anforderungart = $row["anforderungart"] ?? null; - $ordnungsid = $row["ordnungsid"] ?? null; - - // Ordnungsstring wie bisher (deine Funktion) - $ordnungsstring = GetOrdnungsid($ordnungsid); - - // Rezeptart-Name holen - $rezeptart = null; - if (!empty($anforderungart)) { - $stmtArt = $pdo->prepare("SELECT artname FROM anfrageart WHERE artid = ? LIMIT 1"); - $stmtArt->execute([$anforderungart]); - $rezeptart = $stmtArt->fetchColumn() ?: null; - } - - // Ausgabe sicher escapen - $e = fn($s) => htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); - - if ($checked === 0) { - - echo "

Sie haben Ihre Anfrage aktuell noch nicht bestätigt!

"; - echo "Sie haben die folgenden Anfragedaten:

"; - echo "

Name: " . $e($userausgabe) . "

"; - echo "

Art: " . $e($ordnungsstring) . " - " . $e($rezeptart) . "

"; - - if (!empty($medikamenteins)) { - echo "

Medikament1: " . $e($medikamenteins) . "

"; - } - if (!empty($medikamentzwei)) { - echo "

Medikament2: " . $e($medikamentzwei) . "

"; - } - if (!empty($nachricht)) { - echo "

Nachricht: " . nl2br(strip_tags($nachricht, '

  • ')) . "

"; - } - - echo "
"; - echo ''; - echo ''; - echo ''; - echo "
"; - - echo "
"; - echo ''; - echo ''; - echo ''; - echo "
"; - - } elseif ($checked === 1) { - - echo "

Sie haben Ihre Anforderung bestätigt!
Vielen Dank!
"; - echo "Sie haben die folgenden Anfragedaten:

"; - echo "

Name: " . $e($userausgabe) . "

"; - echo "

Art: " . $e($rezeptart) . "

"; - - if (!empty($medikamenteins)) { - echo "

Medikament1: " . $e($medikamenteins) . "

"; - } - if (!empty($medikamentzwei)) { - echo "

Medikament2: " . $e($medikamentzwei) . "

"; - } - if (!empty($nachricht)) { - echo "

Nachricht: " . nl2br(strip_tags($nachricht, '

  • ')) . "

"; - } - - echo "Hat sich Ihre Anfrage erledigt, tragen Sie sich bitte aus, Ihre Anfrage wird gelöscht:
"; - echo "
"; - echo ''; - echo ''; - echo ''; - echo "
"; - - } elseif ($checked === 2) { - - echo "

Ihre Anfrage wurde erfolgreich gelöscht!


Wünschen Sie eine neue Anfrage, tragen Sie sich wieder über das Formular ein.
"; - - } elseif ($checked === 3) { - - echo "

Ihre Anfrage wurde vom Praxisteam storniert!


Wünschen Sie eine neue Anfrage, tragen Sie sich wieder über das Formular ein.
"; - - } elseif ($checked === 10) { - - echo "

Ihre Anfrage wurde vom Praxisteam beantwortet!


Prüfen Sie Ihre E-Mails auf die Antwort.
"; - - } else { - echo "

Status unbekannt.

"; - } - - -}else if($_POST["aktion"] == 1){ - echo "Wollen Sie wirklich Ihren Anfrage löschen?
Dieses ist nicht rückgängig zu machen!
Dann bestätigen Sie die Abmeldung:
"; - echo "Bitte bestätigen!"; - echo "
"; - echo ''; - echo '
'; - echo ''; - echo "
"; - - -}else if($_POST["aktion"] == 2){ - - $anfrageid = (int)($_POST["anfrageid"] ?? 0); - if ($anfrageid <= 0) { - die("

Ungültige Anfrage-ID.

"); - } - - // 1) Prüfen/Updaten in einem Schritt: nur bestätigen, wenn noch nicht bestätigt - $stmt = $pdo->prepare(" - UPDATE anfragen - SET checked = 1 - WHERE anfrageid = ? - AND checked < 1 - "); - $stmt->execute([$anfrageid]); - - if ($stmt->rowCount() === 0) { - // Es wurde nichts geändert -> war schon bestätigt oder existiert nicht - // Optional: prüfen ob Anfrage existiert - $stmt = $pdo->prepare("SELECT checked FROM anfragen WHERE anfrageid = ? LIMIT 1"); - $stmt->execute([$anfrageid]); - $checked = $stmt->fetchColumn(); - - if ($checked === false) { - echo "

Anfrage nicht gefunden.

"; - } else { - echo "

Sie haben Ihre Anfrage schon bestätigt.

"; - } - exit; - } - - echo "

Ihre Anfrage wurde erfolgreich bestätigt!


"; - - - // 2) Anfrage + Person laden (NEUES SCHEMA) - $stmt = $pdo->prepare(" - SELECT - ordnungsid - FROM anfragen a - WHERE anfrageid = ? - LIMIT 1 - "); - $stmt->execute([$anfrageid]); - $ordnungsid = $stmt->fetchColumn(); - echo "Sie erhalten gleich eine schriftliche Bestätigung per E-Mail

"; - if (!$row) { - echo "

Fehler: Anfrage wurde bestätigt, aber konnte nicht geladen werden.

"; - exit; - } - - $ordnungsid = $row["ordnungsid"] ?? null; - - if($ordnungsid == 1){ - // Anfragen allgemein Bestätigung - SendMailMessageVorlage($pdo, "3", $anfrageid, "19"); - }else if($ordnungsid == 2 || $ordnungsid == 3){ - // Anfragen Rezept Bestätigung - SendMailMessageVorlage($pdo, "3", $anfrageid, "26"); - } - - - -}else if($_POST["aktion"] == 3){ - $anfrageid = (int)($_POST["anfrageid"] ?? 0); - if ($anfrageid <= 0) { - die("

Ungültige Anfrage-ID.

"); - } - - /* - 1) Anfrage auf "gelöscht" setzen, - aber nur wenn noch nicht gelöscht (checked < 2) - */ - $stmt = $pdo->prepare(" - UPDATE anfragen - SET checked = 2 - WHERE anfrageid = ? - AND checked < 2 - "); - $stmt->execute([$anfrageid]); - - if ($stmt->rowCount() === 0) { - // Entweder existiert nicht oder war schon gelöscht - $stmt = $pdo->prepare("SELECT checked FROM anfragen WHERE anfrageid = ? LIMIT 1"); - $stmt->execute([$anfrageid]); - $checked = $stmt->fetchColumn(); - - if ($checked === false) { - echo "

Anfrage nicht gefunden.

"; - } else { - echo "

Sie haben Ihre Anfrage schon gelöscht.

"; - } - - }else{ - - echo "

Ihre Anfrage wurde erfolgreich gelöscht!


"; - echo "Sie erhalten gleich eine schriftliche Bestätigung per E-Mail
"; - - SendMailMessageVorlage($pdo, "3", $anfrageid, "49"); - - } - - - - - - - -}else{ - - echo "Leider konnten wir Ihre ID-Nummer nicht erkennen.
Bitte tragen Sie diese in dem folgendem Feld ein und klicken Sie auf 'Senden'

"; - echo "
"; - echo '
'; - echo ''; - -} - - - - - - -?> - - - - -
- - - - - + + + + + + Praxis Creutzburg - Anfragenbestätigung + + + + + + + + + +
+ + + + +
+

Anfrage einsehen

+ + + +Leider konnten wir Ihre Anforderung nicht verarbeiten.
Bitte überprüfen Sie den aufgerufenden Link.

"; + exit; + } + + // Anfrage + Person laden (NEUES SCHEMA) + $stmt = $pdo->prepare(" + SELECT + a.anfrageid, + a.checked, + a.nachricht, + a.medikament1, + a.medikament2, + a.anforderungart, + a.ordnungsid, + p.vorname, + p.nachname, + p.email, + p.tele, + p.geburtstag + FROM anfragen a + INNER JOIN persons p ON a.requester_person_id = p.person_id + WHERE a.hash = ? + LIMIT 1 + "); + $stmt->execute([$id]); + $row = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$row) { + echo "

Leider konnten wir Ihre Anforderung nicht verarbeiten.


Bitte überprüfen Sie den aufgerufenden Link.

"; + exit; + } + + // Variablen aus DB + $anfrageid = (int)$row["anfrageid"]; + $checked = (int)$row["checked"]; + + $vorname = $row["vorname"] ?? ""; + $nachname = $row["nachname"] ?? ""; + $mail = $row["email"] ?? ""; + $tel = $row["tele"] ?? ""; + $geburtstag = $row["geburtstag"] ?? null; + + $userausgabe = trim($vorname . " " . $nachname); + + $nachricht = $row["nachricht"] ?? ""; + $medikamenteins = $row["medikament1"] ?? ""; + $medikamentzwei = $row["medikament2"] ?? ""; + + $anforderungart = $row["anforderungart"] ?? null; + $ordnungsid = $row["ordnungsid"] ?? null; + + // Ordnungsstring wie bisher (deine Funktion) + $ordnungsstring = GetOrdnungsid($ordnungsid); + + // Rezeptart-Name holen + $rezeptart = null; + if (!empty($anforderungart)) { + $stmtArt = $pdo->prepare("SELECT artname FROM anfrageart WHERE artid = ? LIMIT 1"); + $stmtArt->execute([$anforderungart]); + $rezeptart = $stmtArt->fetchColumn() ?: null; + } + + // Ausgabe sicher escapen + $e = fn($s) => htmlspecialchars((string)$s, ENT_QUOTES, 'UTF-8'); + + if ($checked === 0) { + + echo "

Sie haben Ihre Anfrage aktuell noch nicht bestätigt!

"; + echo "Sie haben die folgenden Anfragedaten:

"; + echo "

Name: " . $e($userausgabe) . "

"; + echo "

Art: " . $e($ordnungsstring) . " - " . $e($rezeptart) . "

"; + + if (!empty($medikamenteins)) { + echo "

Medikament1: " . $e($medikamenteins) . "

"; + } + if (!empty($medikamentzwei)) { + echo "

Medikament2: " . $e($medikamentzwei) . "

"; + } + if (!empty($nachricht)) { + echo "

Nachricht: " . nl2br(strip_tags($nachricht, '

  • ')) . "

"; + } + + echo ""; + echo ''; + echo ''; + echo ''; + echo ""; + + echo "
"; + echo ''; + echo ''; + echo ''; + echo "
"; + + } elseif ($checked === 1) { + + echo "

Sie haben Ihre Anforderung bestätigt!
Vielen Dank!
"; + echo "Sie haben die folgenden Anfragedaten:

"; + echo "

Name: " . $e($userausgabe) . "

"; + echo "

Art: " . $e($rezeptart) . "

"; + + if (!empty($medikamenteins)) { + echo "

Medikament1: " . $e($medikamenteins) . "

"; + } + if (!empty($medikamentzwei)) { + echo "

Medikament2: " . $e($medikamentzwei) . "

"; + } + if (!empty($nachricht)) { + echo "

Nachricht: " . nl2br(strip_tags($nachricht, '

  • ')) . "

"; + } + + echo "Hat sich Ihre Anfrage erledigt, tragen Sie sich bitte aus, Ihre Anfrage wird gelöscht:
"; + echo "
"; + echo ''; + echo ''; + echo ''; + echo "
"; + + } elseif ($checked === 2) { + + echo "

Ihre Anfrage wurde erfolgreich gelöscht!


Wünschen Sie eine neue Anfrage, tragen Sie sich wieder über das Formular ein.
"; + + } elseif ($checked === 3) { + + echo "

Ihre Anfrage wurde vom Praxisteam storniert!


Wünschen Sie eine neue Anfrage, tragen Sie sich wieder über das Formular ein.
"; + + } elseif ($checked === 10) { + + echo "

Ihre Anfrage wurde vom Praxisteam beantwortet!


Prüfen Sie Ihre E-Mails auf die Antwort.
"; + + } else { + echo "

Status unbekannt.

"; + } + + +}else if($_POST["aktion"] == 1){ + echo "Wollen Sie wirklich Ihren Anfrage löschen?
Dieses ist nicht rückgängig zu machen!
Dann bestätigen Sie die Abmeldung:
"; + echo "Bitte bestätigen!"; + echo "
"; + echo ''; + echo '
'; + echo ''; + echo "
"; + + +}else if($_POST["aktion"] == 2){ + + $anfrageid = (int)($_POST["anfrageid"] ?? 0); + if ($anfrageid <= 0) { + die("

Ungültige Anfrage-ID.

"); + } + + // 1) Prüfen/Updaten in einem Schritt: nur bestätigen, wenn noch nicht bestätigt + $stmt = $pdo->prepare(" + UPDATE anfragen + SET checked = 1 + WHERE anfrageid = ? + AND checked < 1 + "); + $stmt->execute([$anfrageid]); + + if ($stmt->rowCount() === 0) { + // Es wurde nichts geändert -> war schon bestätigt oder existiert nicht + // Optional: prüfen ob Anfrage existiert + $stmt = $pdo->prepare("SELECT checked FROM anfragen WHERE anfrageid = ? LIMIT 1"); + $stmt->execute([$anfrageid]); + $checked = $stmt->fetchColumn(); + + if ($checked === false) { + echo "

Anfrage nicht gefunden.

"; + } else { + echo "

Sie haben Ihre Anfrage schon bestätigt.

"; + } + exit; + } + + echo "

Ihre Anfrage wurde erfolgreich bestätigt!


"; + + + // 2) Anfrage + Person laden (NEUES SCHEMA) + $stmt = $pdo->prepare(" + SELECT + ordnungsid + FROM anfragen a + WHERE anfrageid = ? + LIMIT 1 + "); + $stmt->execute([$anfrageid]); + $ordnungsid = $stmt->fetchColumn(); + echo "Sie erhalten gleich eine schriftliche Bestätigung per E-Mail

"; + if (!$row) { + echo "

Fehler: Anfrage wurde bestätigt, aber konnte nicht geladen werden.

"; + exit; + } + + $ordnungsid = $row["ordnungsid"] ?? null; + + if($ordnungsid == 1){ + // Anfragen allgemein Bestätigung + SendMailMessageVorlage($pdo, "3", $anfrageid, "19"); + }else if($ordnungsid == 2 || $ordnungsid == 3){ + // Anfragen Rezept Bestätigung + SendMailMessageVorlage($pdo, "3", $anfrageid, "26"); + } + + + +}else if($_POST["aktion"] == 3){ + $anfrageid = (int)($_POST["anfrageid"] ?? 0); + if ($anfrageid <= 0) { + die("

Ungültige Anfrage-ID.

"); + } + + /* + 1) Anfrage auf "gelöscht" setzen, + aber nur wenn noch nicht gelöscht (checked < 2) + */ + $stmt = $pdo->prepare(" + UPDATE anfragen + SET checked = 2 + WHERE anfrageid = ? + AND checked < 2 + "); + $stmt->execute([$anfrageid]); + + if ($stmt->rowCount() === 0) { + // Entweder existiert nicht oder war schon gelöscht + $stmt = $pdo->prepare("SELECT checked FROM anfragen WHERE anfrageid = ? LIMIT 1"); + $stmt->execute([$anfrageid]); + $checked = $stmt->fetchColumn(); + + if ($checked === false) { + echo "

Anfrage nicht gefunden.

"; + } else { + echo "

Sie haben Ihre Anfrage schon gelöscht.

"; + } + + }else{ + + echo "

Ihre Anfrage wurde erfolgreich gelöscht!


"; + echo "Sie erhalten gleich eine schriftliche Bestätigung per E-Mail
"; + + SendMailMessageVorlage($pdo, "3", $anfrageid, "49"); + + } + + + + + + + +}else{ + + echo "Leider konnten wir Ihre ID-Nummer nicht erkennen.
Bitte tragen Sie diese in dem folgendem Feld ein und klicken Sie auf 'Senden'

"; + echo "
"; + echo '
'; + echo ''; + +} + + + + + + +?> + + + + +
+ + + + + \ No newline at end of file diff --git a/css/formulare.css b/css/formulare.css index aed8dc5..29d5da0 100644 --- a/css/formulare.css +++ b/css/formulare.css @@ -1,17 +1,17 @@ -input[type="number"],input[type="date"] { - -moz-appearance: none; - -webkit-appearance: none; - -o-appearance: none; - -ms-appearance: none; - appearance: none; - background: #f8f8f8; - border-radius: 6px; - border: solid 1px #e5e5e5; - color: inherit; - display: block; - outline: 0; - padding: 0 1em; - text-decoration: none; - width: 100%; - height: 3em; +input[type="number"],input[type="date"] { + -moz-appearance: none; + -webkit-appearance: none; + -o-appearance: none; + -ms-appearance: none; + appearance: none; + background: #f8f8f8; + border-radius: 6px; + border: solid 1px #e5e5e5; + color: inherit; + display: block; + outline: 0; + padding: 0 1em; + text-decoration: none; + width: 100%; + height: 3em; } \ No newline at end of file diff --git a/css/ticker.css b/css/ticker.css index a2ba75c..1dc951a 100644 --- a/css/ticker.css +++ b/css/ticker.css @@ -1,22 +1,22 @@ -#marquee-cont { - background: #ff6363; - margin-top:10px; -} -#marquee-cont marquee { - margin-top: 5px; - background: #ff6363; -} -#marquee-news { - - background: #1174A8; - padding: 5px; -} -#ticker-title{ - border:none; - padding:5px 20px; - background:#1174A8; - color:white; -} -#ticker-title:focus{ - outline:none; +#marquee-cont { + background: #ff6363; + margin-top:10px; +} +#marquee-cont marquee { + margin-top: 5px; + background: #ff6363; +} +#marquee-news { + + background: #1174A8; + padding: 5px; +} +#ticker-title{ + border:none; + padding:5px 20px; + background:#1174A8; + color:white; +} +#ticker-title:focus{ + outline:none; } \ No newline at end of file diff --git a/dienstleistung.php b/dienstleistung.php index ea4f7bf..ffecc50 100644 --- a/dienstleistung.php +++ b/dienstleistung.php @@ -1,237 +1,237 @@ - - - - - - Praxis Creutzburg - Dienstleistungen - - - - - - - -
- -

- - -
-
- - -
-

Ihre Hausarztpraxis direkt an der Burg und in Bisperode an der Schule

-
- -
- -

Internistische Leistungen der Praxis

-
- – DMP Diabetes
- – DMP KHK
- – DMP Asthma
- – EKG, Langzeit-EKG
- – Langzeitblutdruckmessung
- – Internistische und rheumatologische Blutuntersuchungen
- – Ultraschalluntersuchung innerer Organe
- – Gefäßuntersuchung mit Farbdoppler, CW-Doppler, PW-Doppler
- – Lungenfunktionstest
- – Allergieberatung
- – Farbdoppler-Sonografie der zuführenden Hirngefäße, Intimadickenmessung
-   (zur Bestimmung des Schlaganfall- und Herzinfarktrisikos)
- – Schilddrüsenuntersuchung
- – Erstberatung bei Depression, ADHS, Burnout, Suchterkrankungen (Drogen, Ernährung, Handy)
- – Erstberatung bei Angsterkrankungen
-
- Nutzen Sie meine 20-jährige medizinische Erfahrung für Ihre Vitalität und Gesundheit. -
- - -
-

Notfallsprechstunde

-

Bei Ohnmacht, Brustschmerzen, Herzschmerzen, Luftnot, akuten stark blutenden Wunden und Lähmungserscheinungen rufen Sie bitte einen Rettungswagen! Tel.: 112

- - - -

So funktioniert unsere Notfallsprechstunde:

-

- – Anmeldung direkt an der Praxistür bis 11:30
- – bei starker Nachfrage erhalten Sie ggf. ein Zeitfenster für Ihre Behandlung
- – 11:30 ist Annahmeschluss
- – für alle Patienten; einmal im Quartal auch für fremde Patienten aus anderen Orten oder von anderen Hausärzten
- – nur ein akutes Anliegen
- – nur mit ausgefülltem Fragebogen
- – ohne telefonische Anmeldung,
- – ohne feste Termine,
- – ohne Fremdsprachen
- – Sprache: nur Deutsch oder mit Dolmetscher
- – ohne lange Gespräche (maximal fünf Minuten)
- – ggf. mit Folgetermin -

- -

Typische Krankheitsbilder für die Notfallsprechstunde:

-

- – grippaler Infekt seit 1–2 Tagen
- – Rückenschmerzen seit wenigen Tagen
- – Kinder-AU
- – bekannte Beschwerden, AU erforderlich
- – Magen-Darm-Erkrankung akut
- – Husten seit 2–3 Tagen -

- -

Das können Sie erwarten:

-

- – alle bis 11:30 angenommenen Patienten werden (kurz) behandelt
- – kurze körperliche Untersuchungen
- – kurze Beratungen, auch durch qualifizierte Mitarbeitende
- – Arbeitsunfähigkeitsbescheinigungen
- – Schulattest
- – übliche Hausarztmedikamente auf Rezept
- – Verordnungen nach Krankenhausaufenthalt gemäß Entlassungsbrief
- – vergessene Medikamente verordnen (ggf. Nachweis)
- – ggf. Folgetermin, z. B. bei Gesprächsbedarf, Krise, Arbeitsplatzkonflikt -

- -

Das können Sie nicht erwarten:

-

- – BTM-Rezepte oder Psychopharmaka ohne Verordnungsnachweis für Fremdpatienten
- – Gespräche in fremden Sprachen
- – Sonografie, EKG etc.
- – dauerhafte Aufnahme von Patienten, die nicht in unserem Einzugsgebiet wohnen
- – Behandlung von komplexen vorbestehenden Erkrankungen
- – Atteste
- – Beratung zu Reha, Kur oder Rente -

- -

Bei Ohnmacht, Brustschmerzen, Herzschmerzen, Luftnot, akuten stark blutenden Wunden, Verletzungen und Lähmungserscheinungen rufen Sie bitte einen Rettungswagen! Tel.: 112

-
- - -
-

Vorsorgeleistungen

- – Impfungen
- – Früherkennungsuntersuchungen
-   Kinder (U6–U9) und Jugendliche (U10)
-   Erwachsene (ab 35 Jahren)
- – Herzratenvariabilitätstest (Stress)
- – Krebsvorsorge bei Männern (ab 45 Jahren)
- – Hautkrebsscreening (ab 35 Jahren)
- – Herzvorsorge (Farbdopplerechokardiografie), Lungenfunktionstest, Langzeit-EKG, Blutuntersuchung
- – Schlaganfallvorsorge (Langzeit-EKG, Untersuchung der Hauptschlagadern, Blutuntersuchung) -

Warum Vorsorge?

-

- Die Medizin hat in den vergangenen Jahren große Fortschritte gemacht. Viele Laborwerte geben einen sicheren Hinweis auf den Stand Ihrer Leistungsfähigkeit. - Gerade in unserer heutigen hektischen Zeit mit wenigen Ruheoasen ist die körperliche Gesundheit besonders wichtig, um vital im Alltag erfolgreich zu sein. - Profitieren Sie vom Wissen der modernen Medizin, der Neurowissenschaften und der modernen Ausstattung unserer Praxis. - Vorsorge ist besonders für Männer eine entscheidende Grundlage der persönlichen Gesundheitssorge. - Vereinbaren Sie noch heute einen Termin. Das geht hier im Internet ganz einfach online. -

- Arzt -
- -
-

Gesundheitsvorsorge

-

Alle drei Jahre steht Ihnen nach dem 35. Lebensjahr ein medizinischer Gesundheitscheck zu.

-

Alle zwei Jahre steht Ihnen nach dem 35. Lebensjahr eine Hautkrebsuntersuchung zu.

-

Alle zwei Jahre steht Ihnen nach dem 45. Lebensjahr ein Gesundheitscheck für Männer sowie eine Prostata-Untersuchung zu.

-

Nutzen Sie die Vorsorgeuntersuchungen in unserer Praxis.

-
- -
-

Schlaganfallvorsorge

-

- Mit einer technisch sehr aufwendigen Ultraschalluntersuchung können wir die Arterien vermessen, die das Gehirn mit Blut versorgen. - Die innere Schicht der Halsschlagader gibt Auskunft über den allgemeinen Zustand Ihrer Gefäße und Ihr persönliches Schlaganfallrisiko. - Verschaffen Sie sich Sicherheit durch diese ärztliche Vorsorge. -

- Impfen -
- -
-

Lange vital: Longevity

-

Wie bleibe ich lange vital und leistungsfähig?

-

- Gerade für die Babyboomer ist eine erhöhte Lebenserwartung mit der Frage verbunden: Wie werde ich gesund alt? - Während die Lebenserwartung der jüngeren Generation vor allem durch Überernährung und Bewegungsmangel deutlich sinkt. - Was können Sie tun? -

-

Vier Bausteine für eine vitale, verlängerte Lebensspanne:
- – Bewegung
- – guter Schlaf
- – entspannte Lebenseinstellungen
- – gute Ernährung mit wenig industriellen Fertigprodukten -

-

Es gibt keine Patentlösungen, die allen helfen.
- Das Praxisteam unterstützt Sie mit individuellen Lösungen: Bewegung in den Alltag integrieren, Schlafstörungen ansprechen und behandeln, - belastende Lebenseinstellungen auflösen, Ernährung sinnvoll umstellen. -

-

Das können Sie erwarten: Eine individuelle Beratung mit vielen Tipps zur Neugestaltung Ihres vitalisierenden Alltags.

-

Das bringen Sie mit: Bereitschaft, neue Wege zu gehen und Verantwortung für die eigene Gesundheit zu übernehmen.

-
- - -
-

Impfberatung

-

Derzeit individuelle Impfberatung:
- Die meisten Impfungen sind Kassenleistungen und damit für Sie kostenfrei! - Für erforderliche Impfungen bei geplanten Fernreisen buchen Sie bitte einen Termin für eine reisemedizinische Beratung. (Private Zusatzleistung) -

- -

Warum impfen wir?
- Impfungen sind ein sicherer Schutz vor gefährlichen Viruserkrankungen, die wir anders nicht oder nur schlecht behandeln können: - z. B. Masern, Diphtherie, Tetanus, Röteln, Meningitis, Gürtelrose (ab 60), Tollwut. Impfungen verbessern auch die durchschnittliche Gesundheit bei Kindern. -

- -

Gibt es Impfschäden?
- Unerwünschte Wirkungen sind möglich, aber selten. Der Nutzen einer Impfung überwiegt das Risiko deutlich. -

- -

Wogegen impfen wir?
- Tetanus, Diphtherie, Polio, Röteln, Meningitis, Pneumokokken, Varizellen, Rotaviren, FSME, Tollwut, Gürtelrose, Papillomaviren, Hepatitis A und B, Grippe, Covid-19 u. v. m. -

- -

Wen impfen wir?
- Säuglinge (alle empfohlenen Impfungen), Kleinkinder, Kinder, Jugendliche (Papillomavirus, Gardasil), Erwachsene. -

- + + + + + + Praxis Creutzburg - Dienstleistungen + + + + + + + +
+ +

+ + +
+
+ + +
+

Ihre Hausarztpraxis direkt an der Burg und in Bisperode an der Schule

+
+ +
+ +

Internistische Leistungen der Praxis

+
+ – DMP Diabetes
+ – DMP KHK
+ – DMP Asthma
+ – EKG, Langzeit-EKG
+ – Langzeitblutdruckmessung
+ – Internistische und rheumatologische Blutuntersuchungen
+ – Ultraschalluntersuchung innerer Organe
+ – Gefäßuntersuchung mit Farbdoppler, CW-Doppler, PW-Doppler
+ – Lungenfunktionstest
+ – Allergieberatung
+ – Farbdoppler-Sonografie der zuführenden Hirngefäße, Intimadickenmessung
+   (zur Bestimmung des Schlaganfall- und Herzinfarktrisikos)
+ – Schilddrüsenuntersuchung
+ – Erstberatung bei Depression, ADHS, Burnout, Suchterkrankungen (Drogen, Ernährung, Handy)
+ – Erstberatung bei Angsterkrankungen
+
+ Nutzen Sie meine 20-jährige medizinische Erfahrung für Ihre Vitalität und Gesundheit. +
+ + +
+

Notfallsprechstunde

+

Bei Ohnmacht, Brustschmerzen, Herzschmerzen, Luftnot, akuten stark blutenden Wunden und Lähmungserscheinungen rufen Sie bitte einen Rettungswagen! Tel.: 112

+ + + +

So funktioniert unsere Notfallsprechstunde:

+

+ – Anmeldung direkt an der Praxistür bis 11:30
+ – bei starker Nachfrage erhalten Sie ggf. ein Zeitfenster für Ihre Behandlung
+ – 11:30 ist Annahmeschluss
+ – für alle Patienten; einmal im Quartal auch für fremde Patienten aus anderen Orten oder von anderen Hausärzten
+ – nur ein akutes Anliegen
+ – nur mit ausgefülltem Fragebogen
+ – ohne telefonische Anmeldung,
+ – ohne feste Termine,
+ – ohne Fremdsprachen
+ – Sprache: nur Deutsch oder mit Dolmetscher
+ – ohne lange Gespräche (maximal fünf Minuten)
+ – ggf. mit Folgetermin +

+ +

Typische Krankheitsbilder für die Notfallsprechstunde:

+

+ – grippaler Infekt seit 1–2 Tagen
+ – Rückenschmerzen seit wenigen Tagen
+ – Kinder-AU
+ – bekannte Beschwerden, AU erforderlich
+ – Magen-Darm-Erkrankung akut
+ – Husten seit 2–3 Tagen +

+ +

Das können Sie erwarten:

+

+ – alle bis 11:30 angenommenen Patienten werden (kurz) behandelt
+ – kurze körperliche Untersuchungen
+ – kurze Beratungen, auch durch qualifizierte Mitarbeitende
+ – Arbeitsunfähigkeitsbescheinigungen
+ – Schulattest
+ – übliche Hausarztmedikamente auf Rezept
+ – Verordnungen nach Krankenhausaufenthalt gemäß Entlassungsbrief
+ – vergessene Medikamente verordnen (ggf. Nachweis)
+ – ggf. Folgetermin, z. B. bei Gesprächsbedarf, Krise, Arbeitsplatzkonflikt +

+ +

Das können Sie nicht erwarten:

+

+ – BTM-Rezepte oder Psychopharmaka ohne Verordnungsnachweis für Fremdpatienten
+ – Gespräche in fremden Sprachen
+ – Sonografie, EKG etc.
+ – dauerhafte Aufnahme von Patienten, die nicht in unserem Einzugsgebiet wohnen
+ – Behandlung von komplexen vorbestehenden Erkrankungen
+ – Atteste
+ – Beratung zu Reha, Kur oder Rente +

+ +

Bei Ohnmacht, Brustschmerzen, Herzschmerzen, Luftnot, akuten stark blutenden Wunden, Verletzungen und Lähmungserscheinungen rufen Sie bitte einen Rettungswagen! Tel.: 112

+
+ + +
+

Vorsorgeleistungen

+ – Impfungen
+ – Früherkennungsuntersuchungen
+   Kinder (U6–U9) und Jugendliche (U10)
+   Erwachsene (ab 35 Jahren)
+ – Herzratenvariabilitätstest (Stress)
+ – Krebsvorsorge bei Männern (ab 45 Jahren)
+ – Hautkrebsscreening (ab 35 Jahren)
+ – Herzvorsorge (Farbdopplerechokardiografie), Lungenfunktionstest, Langzeit-EKG, Blutuntersuchung
+ – Schlaganfallvorsorge (Langzeit-EKG, Untersuchung der Hauptschlagadern, Blutuntersuchung) +

Warum Vorsorge?

+

+ Die Medizin hat in den vergangenen Jahren große Fortschritte gemacht. Viele Laborwerte geben einen sicheren Hinweis auf den Stand Ihrer Leistungsfähigkeit. + Gerade in unserer heutigen hektischen Zeit mit wenigen Ruheoasen ist die körperliche Gesundheit besonders wichtig, um vital im Alltag erfolgreich zu sein. + Profitieren Sie vom Wissen der modernen Medizin, der Neurowissenschaften und der modernen Ausstattung unserer Praxis. + Vorsorge ist besonders für Männer eine entscheidende Grundlage der persönlichen Gesundheitssorge. + Vereinbaren Sie noch heute einen Termin. Das geht hier im Internet ganz einfach online. +

+ Arzt +
+ +
+

Gesundheitsvorsorge

+

Alle drei Jahre steht Ihnen nach dem 35. Lebensjahr ein medizinischer Gesundheitscheck zu.

+

Alle zwei Jahre steht Ihnen nach dem 35. Lebensjahr eine Hautkrebsuntersuchung zu.

+

Alle zwei Jahre steht Ihnen nach dem 45. Lebensjahr ein Gesundheitscheck für Männer sowie eine Prostata-Untersuchung zu.

+

Nutzen Sie die Vorsorgeuntersuchungen in unserer Praxis.

+
+ +
+

Schlaganfallvorsorge

+

+ Mit einer technisch sehr aufwendigen Ultraschalluntersuchung können wir die Arterien vermessen, die das Gehirn mit Blut versorgen. + Die innere Schicht der Halsschlagader gibt Auskunft über den allgemeinen Zustand Ihrer Gefäße und Ihr persönliches Schlaganfallrisiko. + Verschaffen Sie sich Sicherheit durch diese ärztliche Vorsorge. +

+ Impfen +
+ +
+

Lange vital: Longevity

+

Wie bleibe ich lange vital und leistungsfähig?

+

+ Gerade für die Babyboomer ist eine erhöhte Lebenserwartung mit der Frage verbunden: Wie werde ich gesund alt? + Während die Lebenserwartung der jüngeren Generation vor allem durch Überernährung und Bewegungsmangel deutlich sinkt. + Was können Sie tun? +

+

Vier Bausteine für eine vitale, verlängerte Lebensspanne:
+ – Bewegung
+ – guter Schlaf
+ – entspannte Lebenseinstellungen
+ – gute Ernährung mit wenig industriellen Fertigprodukten +

+

Es gibt keine Patentlösungen, die allen helfen.
+ Das Praxisteam unterstützt Sie mit individuellen Lösungen: Bewegung in den Alltag integrieren, Schlafstörungen ansprechen und behandeln, + belastende Lebenseinstellungen auflösen, Ernährung sinnvoll umstellen. +

+

Das können Sie erwarten: Eine individuelle Beratung mit vielen Tipps zur Neugestaltung Ihres vitalisierenden Alltags.

+

Das bringen Sie mit: Bereitschaft, neue Wege zu gehen und Verantwortung für die eigene Gesundheit zu übernehmen.

+
+ + +
+

Impfberatung

+

Derzeit individuelle Impfberatung:
+ Die meisten Impfungen sind Kassenleistungen und damit für Sie kostenfrei! + Für erforderliche Impfungen bei geplanten Fernreisen buchen Sie bitte einen Termin für eine reisemedizinische Beratung. (Private Zusatzleistung) +

+ +

Warum impfen wir?
+ Impfungen sind ein sicherer Schutz vor gefährlichen Viruserkrankungen, die wir anders nicht oder nur schlecht behandeln können: + z. B. Masern, Diphtherie, Tetanus, Röteln, Meningitis, Gürtelrose (ab 60), Tollwut. Impfungen verbessern auch die durchschnittliche Gesundheit bei Kindern. +

+ +

Gibt es Impfschäden?
+ Unerwünschte Wirkungen sind möglich, aber selten. Der Nutzen einer Impfung überwiegt das Risiko deutlich. +

+ +

Wogegen impfen wir?
+ Tetanus, Diphtherie, Polio, Röteln, Meningitis, Pneumokokken, Varizellen, Rotaviren, FSME, Tollwut, Gürtelrose, Papillomaviren, Hepatitis A und B, Grippe, Covid-19 u. v. m. +

+ +

Wen impfen wir?
+ Säuglinge (alle empfohlenen Impfungen), Kleinkinder, Kinder, Jugendliche (Papillomavirus, Gardasil), Erwachsene. +

+

Sichern Sie Ihre Gesundheit durch vollständigen Impfschutz!
Vereinbaren Sie einen Beratungstermin!

@@ -241,313 +241,313 @@
- - -
- Kinderzimmer -

Kinder? Wir sind darauf eingerichtet!

-

Die Praxis verfügt über ein großzügiges, separates Kinderwartezimmer und ein kindgerecht eingerichtetes Behandlungszimmer. Seit über 20 Jahren versorgen wir Kinder aller Altersgruppen.

- Kinder (U4–U9) und Jugendliche (U10)

-

Unser Angebot umfasst alle Vorsorgeuntersuchungen bis zum Erwachsenenalter.

- Impfberatung
-

Wir beraten Sie kompetent zu allen notwendigen Schutzimpfungen und führen diese auch durch. - Die Impfbücher Ihrer ganzen Familie können Sie bei uns kontrollieren lassen.

- Kinderzimmer -

Familienpraxis, Jugendpraxis, Krisenberatung

-

- Wenn Kinder heranwachsen, gibt es vielfältige – nicht nur gesundheitliche – Herausforderungen. - Diese Entwicklungen bringen Veränderungen mit sich, die Eltern und Kinder oft vor neue Aufgaben stellen. - Krisen sind hier die Regel, nicht die Ausnahme. Dann braucht das Familiensystem Unterstützung. - Wir nehmen uns Zeit, Familien und Jugendliche in solchen Krisen zu begleiten. -

- Kinderwartezimmer -
- - -
-

Ultraschall / Sonografie

- -

Ultraschall der inneren Organe (Abdomen)
- Mit unserem neuen Ultraschall- und Echokardiografiegerät (2022) untersuchen wir Ihre inneren Organe (z. B. Leber, Nieren, Milz). -

- -

Ultraschall der Schilddrüse
- Mit einer speziellen Ultraschallsonde beurteilen wir Schilddrüse auf häufige Veränderungen (Knoten, Zysten, Vergrößerung). -

- -

Ultraschall der Gefäße
- Mit Farbdoppler und Ultraschall untersuchen wir die Blutversorgung Ihrer Beine. Zusätzlich können krankhafte Veränderungen in den Arterien frühzeitig dargestellt werden. - Ebenso können die Venen untersucht und Thrombosen (Verstopfung der Venen) festgestellt werden. (Private Zusatzleistung) -

- -

Schlaganfallvorsorge
- Mit einer technisch aufwendigen Ultraschalluntersuchung können wir die Arterien vermessen, die das Gehirn mit Blut versorgen. - Die innere Schicht der Halsschlagader gibt Auskunft über den Zustand Ihrer Gefäße und Ihr persönliches Schlaganfallrisiko. (Privatleistung) -

- -

Herzultraschall (Echokardiografie)
- Mit einer Point-of-Care-Echokardiografie können wir Ihre Herzklappen und die Pumpfunktion Ihres Herzens genauer untersuchen. (Privatleistung) -

- -

Verschaffen Sie sich Sicherheit durch diese ärztliche Vorsorge.

- - - Arzt -
- - -
-

Ärztliches Attest für Führerscheine (LKW/Sportboot etc.)

-

- Die üblichen ärztlichen Untersuchungen für Führerscheine werden bei uns durchgeführt. (Privatleistung) -

- - -
- - -
-

Tauchtauglichkeitsuntersuchung

-

- Eine Tauchtauglichkeitsuntersuchung (Sporttaucher) ist eine ärztliche Untersuchung mit dem Ziel, - Tauchen gefahrenlos ausüben zu können. (Privatleistung) -

- - -
- - -
-

Blutbild

-

- Leistungsschwäche, Konzentrationsmangel und Müdigkeit haben häufig Ursachen, die durch eine Blutbild-Untersuchung erkannt werden können. - Ebenso können chronische bakterielle und virale Infekte, aber auch seltene bösartige Erkrankungen durch diese einfache Untersuchung häufig gefunden werden. - Verschaffen Sie sich rechtzeitig Sicherheit! -

-
- - -
-

Leber- / Nierenwerte

- -

Leberwerte
- Genussgifte wie Alkohol und Nikotin, aber auch körperliche Überanstrengung, fehlender Schlaf und zu üppiges Essen belasten die Leber. - Auch Viruserkrankungen können die Leistungsfähigkeit der Leber beeinträchtigen. Klarheit bringt der Leberstatus in unserer Praxis. - Ich berate Sie gern. (Kassenleistung/Privatleistung) -

- -

Nierenwerte
- Unser wichtigstes Ausscheidungsorgan wird häufig durch einfache Schmerzmittel und Umweltgifte geschädigt. - Die Niere reguliert Wasserhaushalt und Blutdruck. Ein einfacher Bluttest bringt schnell Sicherheit über die Leistungsfähigkeit Ihrer Niere. (Kassenleistung/Privatleistung) -

- - Arzt -
- - -
-

Herzuntersuchung

-

EKG
- Das Herz entscheidet über Ihre Leistungsfähigkeit und Kondition. Die Herzstromkurve zeigt, ob Ihr Herz gut durchblutet wird, ob der Rhythmus stimmt und Sie damit fit für den Alltag sind. -

- -

Langzeit-EKG
- 24 Stunden lang zeichnen wir jeden Herzschlag auf. Gesundheitliche Risiken können so sicher erkannt werden. -

- -

Herzultraschall (Echokardiografie)
- Mit einer Point-of-Care-Echokardiografie können wir Herzklappen und Pumpfunktion genauer untersuchen. (Privatleistung) -

- -
- - -
- DMP -

DMP Diabetes, DMP KHK, DMP Asthma

- -

DMP Diabetes
- Profitieren Sie von meiner langjährigen Erfahrung als Internist. Direkt vor Ort in unserer Terminpraxis mit kurzen Wartezeiten können Sie die üblichen Untersuchungen im DMP Diabetes wahrnehmen. Bei komplexeren Fragestellungen kooperieren wir mit Fachdiabetologen. -

- -

DMP KHK
- Auch hier profitieren Sie von langjähriger Erfahrung als Internist – mit kurzen Wartezeiten, Parkplatz direkt an der Burg und einem Facharzt, der Zeit für Sie hat. -

- -

DMP Asthma
- Auch das DMP Asthma können Sie bei uns absolvieren – mit kurzen Anfahrtswegen, geringen Wartezeiten und geschultem Personal in freundlicher Praxisgestaltung. -

- -

DMP – Wissenswert:
- Der Risikostrukturausgleich stärkt Ihre Krankenkasse u. a. über die Zahl der im DMP eingeschriebenen Patienten. - Deshalb nehmen wir als Praxis am DMP-Programm teil. -

- -

Nutzen Sie als DMP-Patient die vielfältigen Vorsorgeangebote unserer Praxis:

-
    -
  • Alle drei Jahre ab 35: medizinischer Gesundheitscheck
  • -
  • Alle zwei Jahre ab 35: Hautkrebsuntersuchung
  • -
  • Alle zwei Jahre ab 45: Gesundheitscheck für Männer und Prostata-Untersuchung
  • -
-
- -
-

Langzeit-EKG

-

24 Stunden zeichnen wir jeden Herzschlag auf. Gesundheitliche Risiken können so sicher erkannt werden.

-
- -
-

Lungenfunktionstest

-

- Die Lunge versorgt den Körper mit Sauerstoff. Schon kleine Veränderungen können Fitness und Konzentrationsfähigkeit vermindern. - Testen Sie mit einer präzisen Messung die Leistungsfähigkeit Ihrer Lunge. -

-
- -
-

Reiseberatung

-

- Eine medizinische Beratung (inkl. Impfberatung) für Ihr Reiseziel sichert Ihre Gesundheit im Urlaub, - damit Sie von Ihrer Fernreise gesund zurückkehren. (Private Zusatzleistung) - Tropenerkrankungen wie Malaria, Cholera, Dengue-Fieber und Tollwut brauchen vor der Abfahrt Aufmerksamkeit. -

- -
- -
-

Schlafstörungen

-

- Eine schlafmedizinische Beratung kann helfen, Ihren Schlafrhythmus zu stabilisieren und Ursachen von schlechtem Schlaf zu erkennen und zu beheben. - Schlafmittel (Sedativa) helfen dabei meist nicht; sie stören – ähnlich wie Alkohol – die gesunde Schlafstruktur. - Nur in seltenen Fällen werden zu Beginn Medikamente benötigt. -

-
- -
-

Suchtberatung

-

- Wir begleiten Sie bei Suchterkrankungen. Unsere schnelle Internet-, Wohlstands- und Konsumgesellschaft fördert Sucht. - Das ständige Streben nach dauerhaftem Glück überfordert unser Belohnungssystem. Wir zeigen Wege auf und vermitteln geeignete Hilfsangebote. -

-
- -
-

Schmerztherapie

-

- Wir behandeln akute und chronische Schmerzen und kooperieren mit fachärztlichen schmerztherapeutischen Praxen. -

-
- -
-

Chronische Erschöpfung

-

- Wir behandeln chronische Überlastungsreaktionen (Burnout) und zeigen Wege, wie Sie diese Krisen mit Angeboten unseres Gesundheitssystems erfolgreich bewältigen können. -

-
- -
-

Verbesserung der hausärztlichen Versorgung

- Verah Mobil - -

Leistungen unserer mobilen Medizinischen Fachangestellten bei Ihnen zu Hause

-

- – Blutentnahmen
- – Hausbesuche zur Sicherung und Koordinierung der medizinischen Versorgung
- – Verbände und Wundkontrollen
- – Impfungen
- – Quicktest
- – Beratung zu Pflege und medizinischen Maßnahmen
- – Blutdruck-Kontrollen -

- -

Praxis Mobil

-
Unsere mobilen Medizinischen Fachangestellten
- -

- VERAH® (Versorgungsassistentin in der Hausarztpraxis) sind erfahrene Medizinische Fachangestellte mit qualifizierter Weiterbildung. - Damit wird Ihr Hausarzt inner- und außerhalb der Praxis auch bei anspruchsvollen Tätigkeiten unterstützt. - Patienten werden vom vertrauten Praxispersonal betreut, das ihre Geschichte kennt – so kann ein Hilfeplan effizienter umgesetzt werden. - Die Hausarztpraxis als zentraler Ort Ihrer medizinischen Versorgung vor Ort wird gestärkt. -

- - -
- - -
-

Termin buchen

-

Sie möchten eine Leistung in Anspruch nehmen oder haben Fragen? Buchen Sie Ihren Termin bequem online.

- -
- -
-
-
- - - - - - - + + +
+ Kinderzimmer +

Kinder? Wir sind darauf eingerichtet!

+

Die Praxis verfügt über ein großzügiges, separates Kinderwartezimmer und ein kindgerecht eingerichtetes Behandlungszimmer. Seit über 20 Jahren versorgen wir Kinder aller Altersgruppen.

+ Kinder (U4–U9) und Jugendliche (U10)

+

Unser Angebot umfasst alle Vorsorgeuntersuchungen bis zum Erwachsenenalter.

+ Impfberatung
+

Wir beraten Sie kompetent zu allen notwendigen Schutzimpfungen und führen diese auch durch. + Die Impfbücher Ihrer ganzen Familie können Sie bei uns kontrollieren lassen.

+ Kinderzimmer +

Familienpraxis, Jugendpraxis, Krisenberatung

+

+ Wenn Kinder heranwachsen, gibt es vielfältige – nicht nur gesundheitliche – Herausforderungen. + Diese Entwicklungen bringen Veränderungen mit sich, die Eltern und Kinder oft vor neue Aufgaben stellen. + Krisen sind hier die Regel, nicht die Ausnahme. Dann braucht das Familiensystem Unterstützung. + Wir nehmen uns Zeit, Familien und Jugendliche in solchen Krisen zu begleiten. +

+ Kinderwartezimmer +
+ + +
+

Ultraschall / Sonografie

+ +

Ultraschall der inneren Organe (Abdomen)
+ Mit unserem neuen Ultraschall- und Echokardiografiegerät (2022) untersuchen wir Ihre inneren Organe (z. B. Leber, Nieren, Milz). +

+ +

Ultraschall der Schilddrüse
+ Mit einer speziellen Ultraschallsonde beurteilen wir Schilddrüse auf häufige Veränderungen (Knoten, Zysten, Vergrößerung). +

+ +

Ultraschall der Gefäße
+ Mit Farbdoppler und Ultraschall untersuchen wir die Blutversorgung Ihrer Beine. Zusätzlich können krankhafte Veränderungen in den Arterien frühzeitig dargestellt werden. + Ebenso können die Venen untersucht und Thrombosen (Verstopfung der Venen) festgestellt werden. (Private Zusatzleistung) +

+ +

Schlaganfallvorsorge
+ Mit einer technisch aufwendigen Ultraschalluntersuchung können wir die Arterien vermessen, die das Gehirn mit Blut versorgen. + Die innere Schicht der Halsschlagader gibt Auskunft über den Zustand Ihrer Gefäße und Ihr persönliches Schlaganfallrisiko. (Privatleistung) +

+ +

Herzultraschall (Echokardiografie)
+ Mit einer Point-of-Care-Echokardiografie können wir Ihre Herzklappen und die Pumpfunktion Ihres Herzens genauer untersuchen. (Privatleistung) +

+ +

Verschaffen Sie sich Sicherheit durch diese ärztliche Vorsorge.

+ + + Arzt +
+ + +
+

Ärztliches Attest für Führerscheine (LKW/Sportboot etc.)

+

+ Die üblichen ärztlichen Untersuchungen für Führerscheine werden bei uns durchgeführt. (Privatleistung) +

+ + +
+ + +
+

Tauchtauglichkeitsuntersuchung

+

+ Eine Tauchtauglichkeitsuntersuchung (Sporttaucher) ist eine ärztliche Untersuchung mit dem Ziel, + Tauchen gefahrenlos ausüben zu können. (Privatleistung) +

+ + +
+ + +
+

Blutbild

+

+ Leistungsschwäche, Konzentrationsmangel und Müdigkeit haben häufig Ursachen, die durch eine Blutbild-Untersuchung erkannt werden können. + Ebenso können chronische bakterielle und virale Infekte, aber auch seltene bösartige Erkrankungen durch diese einfache Untersuchung häufig gefunden werden. + Verschaffen Sie sich rechtzeitig Sicherheit! +

+
+ + +
+

Leber- / Nierenwerte

+ +

Leberwerte
+ Genussgifte wie Alkohol und Nikotin, aber auch körperliche Überanstrengung, fehlender Schlaf und zu üppiges Essen belasten die Leber. + Auch Viruserkrankungen können die Leistungsfähigkeit der Leber beeinträchtigen. Klarheit bringt der Leberstatus in unserer Praxis. + Ich berate Sie gern. (Kassenleistung/Privatleistung) +

+ +

Nierenwerte
+ Unser wichtigstes Ausscheidungsorgan wird häufig durch einfache Schmerzmittel und Umweltgifte geschädigt. + Die Niere reguliert Wasserhaushalt und Blutdruck. Ein einfacher Bluttest bringt schnell Sicherheit über die Leistungsfähigkeit Ihrer Niere. (Kassenleistung/Privatleistung) +

+ + Arzt +
+ + +
+

Herzuntersuchung

+

EKG
+ Das Herz entscheidet über Ihre Leistungsfähigkeit und Kondition. Die Herzstromkurve zeigt, ob Ihr Herz gut durchblutet wird, ob der Rhythmus stimmt und Sie damit fit für den Alltag sind. +

+ +

Langzeit-EKG
+ 24 Stunden lang zeichnen wir jeden Herzschlag auf. Gesundheitliche Risiken können so sicher erkannt werden. +

+ +

Herzultraschall (Echokardiografie)
+ Mit einer Point-of-Care-Echokardiografie können wir Herzklappen und Pumpfunktion genauer untersuchen. (Privatleistung) +

+ +
+ + +
+ DMP +

DMP Diabetes, DMP KHK, DMP Asthma

+ +

DMP Diabetes
+ Profitieren Sie von meiner langjährigen Erfahrung als Internist. Direkt vor Ort in unserer Terminpraxis mit kurzen Wartezeiten können Sie die üblichen Untersuchungen im DMP Diabetes wahrnehmen. Bei komplexeren Fragestellungen kooperieren wir mit Fachdiabetologen. +

+ +

DMP KHK
+ Auch hier profitieren Sie von langjähriger Erfahrung als Internist – mit kurzen Wartezeiten, Parkplatz direkt an der Burg und einem Facharzt, der Zeit für Sie hat. +

+ +

DMP Asthma
+ Auch das DMP Asthma können Sie bei uns absolvieren – mit kurzen Anfahrtswegen, geringen Wartezeiten und geschultem Personal in freundlicher Praxisgestaltung. +

+ +

DMP – Wissenswert:
+ Der Risikostrukturausgleich stärkt Ihre Krankenkasse u. a. über die Zahl der im DMP eingeschriebenen Patienten. + Deshalb nehmen wir als Praxis am DMP-Programm teil. +

+ +

Nutzen Sie als DMP-Patient die vielfältigen Vorsorgeangebote unserer Praxis:

+
    +
  • Alle drei Jahre ab 35: medizinischer Gesundheitscheck
  • +
  • Alle zwei Jahre ab 35: Hautkrebsuntersuchung
  • +
  • Alle zwei Jahre ab 45: Gesundheitscheck für Männer und Prostata-Untersuchung
  • +
+
+ +
+

Langzeit-EKG

+

24 Stunden zeichnen wir jeden Herzschlag auf. Gesundheitliche Risiken können so sicher erkannt werden.

+
+ +
+

Lungenfunktionstest

+

+ Die Lunge versorgt den Körper mit Sauerstoff. Schon kleine Veränderungen können Fitness und Konzentrationsfähigkeit vermindern. + Testen Sie mit einer präzisen Messung die Leistungsfähigkeit Ihrer Lunge. +

+
+ +
+

Reiseberatung

+

+ Eine medizinische Beratung (inkl. Impfberatung) für Ihr Reiseziel sichert Ihre Gesundheit im Urlaub, + damit Sie von Ihrer Fernreise gesund zurückkehren. (Private Zusatzleistung) + Tropenerkrankungen wie Malaria, Cholera, Dengue-Fieber und Tollwut brauchen vor der Abfahrt Aufmerksamkeit. +

+ +
+ +
+

Schlafstörungen

+

+ Eine schlafmedizinische Beratung kann helfen, Ihren Schlafrhythmus zu stabilisieren und Ursachen von schlechtem Schlaf zu erkennen und zu beheben. + Schlafmittel (Sedativa) helfen dabei meist nicht; sie stören – ähnlich wie Alkohol – die gesunde Schlafstruktur. + Nur in seltenen Fällen werden zu Beginn Medikamente benötigt. +

+
+ +
+

Suchtberatung

+

+ Wir begleiten Sie bei Suchterkrankungen. Unsere schnelle Internet-, Wohlstands- und Konsumgesellschaft fördert Sucht. + Das ständige Streben nach dauerhaftem Glück überfordert unser Belohnungssystem. Wir zeigen Wege auf und vermitteln geeignete Hilfsangebote. +

+
+ +
+

Schmerztherapie

+

+ Wir behandeln akute und chronische Schmerzen und kooperieren mit fachärztlichen schmerztherapeutischen Praxen. +

+
+ +
+

Chronische Erschöpfung

+

+ Wir behandeln chronische Überlastungsreaktionen (Burnout) und zeigen Wege, wie Sie diese Krisen mit Angeboten unseres Gesundheitssystems erfolgreich bewältigen können. +

+
+ +
+

Verbesserung der hausärztlichen Versorgung

+ Verah Mobil + +

Leistungen unserer mobilen Medizinischen Fachangestellten bei Ihnen zu Hause

+

+ – Blutentnahmen
+ – Hausbesuche zur Sicherung und Koordinierung der medizinischen Versorgung
+ – Verbände und Wundkontrollen
+ – Impfungen
+ – Quicktest
+ – Beratung zu Pflege und medizinischen Maßnahmen
+ – Blutdruck-Kontrollen +

+ +

Praxis Mobil

+
Unsere mobilen Medizinischen Fachangestellten
+ +

+ VERAH® (Versorgungsassistentin in der Hausarztpraxis) sind erfahrene Medizinische Fachangestellte mit qualifizierter Weiterbildung. + Damit wird Ihr Hausarzt inner- und außerhalb der Praxis auch bei anspruchsvollen Tätigkeiten unterstützt. + Patienten werden vom vertrauten Praxispersonal betreut, das ihre Geschichte kennt – so kann ein Hilfeplan effizienter umgesetzt werden. + Die Hausarztpraxis als zentraler Ort Ihrer medizinischen Versorgung vor Ort wird gestärkt. +

+ + +
+ + +
+

Termin buchen

+

Sie möchten eine Leistung in Anspruch nehmen oder haben Fragen? Buchen Sie Ihren Termin bequem online.

+ +
+ +
+
+
+ + + + + + + diff --git a/download/download.php b/download/download.php index 07f9fa2..6b8ba10 100644 --- a/download/download.php +++ b/download/download.php @@ -1,37 +1,37 @@ -close(); +close(); ?> \ No newline at end of file diff --git a/download/login.php b/download/login.php index eac57a5..a4d2523 100644 --- a/download/login.php +++ b/download/login.php @@ -1,34 +1,34 @@ - - - - - - - Login - - - - -
- -
- - - + + + + + + + Login + + +
+ +
+ +
+ +
+ \ No newline at end of file diff --git a/formulare.php b/formulare.php index 9ef298a..bfaa57e 100644 --- a/formulare.php +++ b/formulare.php @@ -1,465 +1,465 @@ - - - - - - Praxis Creutzburg - Formulare - - - - - - - - - -
- - - - -
-

Service anfordern

- -Kontrollieren Sie Ihre Angaben!
'; - echo '
'; - echo ''; - // Schleife durch Clemens 15.10.2018 - aktualisiert 01.02.2026 - foreach ($_POST as $key => $value) { - - if ($value === "" || $key === "submit" || $key === "aktion") { - continue; - } - - if ($key === "category") { - - $stmt = $pdo->prepare(" - SELECT artname - FROM anfrageart - WHERE artid = :artid - LIMIT 1 - "); - $stmt->execute([ - ':artid' => $value - ]); - - $rowimpf = $stmt->fetch(PDO::FETCH_ASSOC); - $anfragearttext = $rowimpf['artname'] ?? ''; - - echo " - - - \n"; - - echo "\n"; - - } else { - - echo " - - - \n"; - - echo "\n"; - } - } - - - echo '
{$key}:" . htmlspecialchars($anfragearttext, ENT_QUOTES, 'UTF-8') . "
{$key}:" . htmlspecialchars($value, ENT_QUOTES, 'UTF-8') . "
'; - echo ''; - echo ''; - echo '
'; - - - }else if($_POST["aktion"] == "2"){ - - $vorname = trim($_POST["Vorname"] ?? ""); - $nachname = trim($_POST["Name"] ?? ""); - $geburtstag = trim($_POST["Geburtsjahr"] ?? ""); // muss später YYYY-MM-DD sein - $email = trim($_POST["Email"] ?? ""); - $tele = trim($_POST["Tel"] ?? ""); - $plz = trim($_POST["plz"] ?? ""); - $ort = trim($_POST["ort"] ?? ""); - $strasse = trim($_POST["strasse"] ?? ""); - - $medikament1 = trim($_POST["Medikament1"] ?? ""); - $medikament2 = trim($_POST["Medikament2"] ?? ""); - $nachricht = trim($_POST["message"] ?? ""); - $anforderungart = trim($_POST["category"] ?? ""); - - $abholung = $_POST["abholung"] ?? "Praxis"; - - if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { - die("Ungültige E-Mail"); - } - if (!$geburtstag) { - die("Geburtsdatum fehlt"); - } - $abholungnr = ($abholung === "Apotheke") ? "2" : "1"; - - $karte = $_POST["karte"] ?? ""; - if ($karte === "Privat") { - $karte = "Privatrezept (Selbstzahler)"; - } - - $nachricht = "Karte eingelesen: " . $karte . "
" . - "Abholungsort: " . $abholung . "
" . - $nachricht; - - $impfstofftext = null; - if (!empty($impfstoff)) { - $stmt = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid = ?"); - $stmt->execute([$impfstoff]); - $impfstofftext = $stmt->fetchColumn(); - } - - $sendmail = false; - - $pdo->beginTransaction(); - - $stmt = $pdo->prepare(" - INSERT INTO persons (vorname, nachname, email, geburtstag, tele, ort, plz, strasse) - VALUES (:vorname, :nachname, :email, :geburtstag, :tele, :ort, :plz, :strasse) - ON DUPLICATE KEY UPDATE - vorname = VALUES(vorname), - nachname = VALUES(nachname), - tele = VALUES(tele), - ort = VALUES(ort), - plz = VALUES(plz), - strasse = VALUES(strasse), - updated_at = CURRENT_TIMESTAMP - "); - $stmt->execute([ - ':vorname' => $vorname, - ':nachname' => $nachname, - ':email' => $email, - ':geburtstag' => $geburtstag, - ':tele' => $tele, - ':ort' => $ort, - ':plz' => $plz, - ':strasse' => $strasse - ]); - - // person_id holen (weil ON DUPLICATE nicht zuverlässig lastInsertId liefert) - $stmt = $pdo->prepare("SELECT person_id FROM persons WHERE email = ? AND geburtstag = ?"); - $stmt->execute([$email, $geburtstag]); - $person_id = (int)$stmt->fetchColumn(); - - if (!$person_id) { - $pdo->rollBack(); - die("Keine eindeutige Kennung (person_id)"); - }else{ - - $hashvorher = $vorname . $nachname . $Email; - $hash = md5($hashvorher) . date("YmdHs"); - - - $sendmail = true; - - $stmt = $pdo->prepare(" - SELECT 1 - FROM anfragen - WHERE requester_person_id = ? - AND anforderungart = ? - AND medikament1 = ? - AND medikament2 = ? - AND nachricht = ? - AND create_time >= (NOW() - INTERVAL 7 DAY) - LIMIT 1 - "); - $stmt->execute([$person_id, $anforderungart, $medikament1, $medikament2, $nachricht]); - $exists = (bool)$stmt->fetchColumn(); - - if (!$exists) { - $stmt = $pdo->prepare(" - INSERT INTO anfragen - (requester_person_id, anforderungart, medikament1, medikament2, - nachricht, hash, create_time, ordnungsid, abholort, sicherenachricht, - source, created_by_account_id) - VALUES - (?, ?, ?, ?, ?, ?, NOW(), '1', ?, '0', 'mail', NULL) - "); - $stmt->execute([ - $person_id, - $anforderungart, - $medikament1, - $medikament2, - $nachricht, - $hash, - $abholungnr - ]); - - $anfrageid = (int)$pdo->lastInsertId(); - - $pdo->commit(); - - // Achtung: deine Funktion erwartet $con (mysqli). Die musst du später auf PDO umbauen. - // Übergangsweise: Lass die Mailfunktion noch mit mysqli laufen oder baue sie um. - SendMailMessageVorlage($pdo, "3", $anfrageid , "18" ); - - echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

Sie werden gleich weitergeleitet.
"; - header("refresh:15;rezepte.php"); - - } else { - $pdo->rollBack(); - echo "

Doppelte Anfrage


Ihre Anfrage wurde schon in unserem System gespeichert.
Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.
Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.

"; - header("refresh:15;rezepte.php"); - - } - - } - - - - - - } -}else{ - - -?> - - - - Formulare anfordern, nur nach ärztlicher Absprache und Kontakt. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
-
Benutzen Sie eine Email-Adresse auf die Sie direkt zugreifen können. Bitte bestätigen Sie dann den Link in der Email. So können wir Ihnen im Verlauf den Stand der Bearbeitung Ihrer Anfrage sicher mitteilen. -


- Stellen Sie wiederholt Anfragen an die Praxis Creutzburg?
- Wollen Sie bis zu sechs Medikamente beantragen?
- Benötigen Sie ein längeres Textfeld?
- -
Dann nutzen Sie auch unseren Internen Bereich für Patienten. -

-

Nutzen Sie unsere neue Datei-Upload-Funktion!

- Sie können damit dem Praxis-Team Unterlagen per PDF zur Verfügung stellen.
- - Den Upload finden Sie hier: Datei-Upload
- - -
-
- - -
- prepare(" - SELECT urlaubid - FROM urlaub - WHERE start <= ? - AND ende >= ? - LIMIT 1 - "); - $stmt->execute([$today, $today]); - - $urlaubid = $stmt->fetchColumn(); - - if (!$urlaubid) { - ?> - -

ACHTUNG!

- -

Fragen zu Corona?

- - Alle Informationen zur Corona-Impfung finden Sie hier:
- Corona-Informationen

- -

Sie benötigen einen Termin?

- - Schauen Sie in unserem Online-Kalender nach einem Termin. Dort sind meist auch kurzfristige Termine vorhanden.
- Untersuchungen wie Blutabnahmen, Blutbild oder Ultraschall auf Kassenleistung erfolgen ausschließlich nach direkter Rücksprache mit unserem Arzt und können nicht selbstständig online gebucht werden.
- -

Buchen Sie dafür zunächst einen Sprechstundentermin.

Anschließend wird das weitere Vorgehen mit unserem Arzt besprochen. -
- Online-Kalender

- -

Formular bitte ausfüllen und abschicken

-

Gehen Sie nach unten zum Formular und füllen Sie es (wie gewohnt) aus.

- - - '; - echo ''; - - - ?> - - - - -
- - -
- -
- - -
-
-
- -
- - -
- - -
- -
-
-
-
-
- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
- Ihre Daten werden HTTPS-verschlüsselt an unser System übertragen. Sie erhalten die Antwort per E-Mail mit TLS-Verschlüsselung. Mit Absenden Ihrer Anfrage stimmen Sie diesen Bedingungen zu.
- -
-
- -
-
-
    -
  • -
  • -
- - -
- - - - - - -
- - -
-Praxis im Urlaub"; - echo "Wir befinden uns aktuell im Urlaub.
Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.

"; - - $today = date("Y-m-d"); - - $stmt = $pdo->prepare(" - SELECT ende, vertretung, vertretertelefon, vertreteradresse, vertreterurl - FROM urlaub - WHERE start <= :today - AND ende >= :today - ORDER BY ende DESC - LIMIT 1 - "); - $stmt->execute([':today' => $today]); - - $row = $stmt->fetch(); // liefert Array oder false - - if ($row) { - $vertreter = $row["vertretung"] ?? null; - $vertretertelefon = $row["vertretertelefon"] ?? null; - $vertreteradresse = $row["vertreteradresse"] ?? null; - $vertreterurl = $row["vertreterurl"] ?? null; - $ende = $row["ende"] ?? null; - - if ($ende) { - $endeausgabe = date("d.m.Y", strtotime("+1 day", strtotime($ende))); - } else { - $endeausgabe = null; - } - - if (!empty($vertreter)) { - echo "Unsere Vertretung: " . htmlspecialchars($vertreter, ENT_QUOTES, 'UTF-8') . "
"; - } - if (!empty($vertreterurl)) { - // optional: URL escapen/validieren - echo "Webseite Vertretung: " . htmlspecialchars($vertreterurl, ENT_QUOTES, 'UTF-8') . "
"; - } - if (!empty($vertretertelefon)) { - echo "Telefonischer Kontakt Vertretung: " . htmlspecialchars($vertretertelefon, ENT_QUOTES, 'UTF-8') . "
"; - } - if (!empty($vertreteradresse)) { - echo "Adresse Vertretung: " . htmlspecialchars($vertreteradresse, ENT_QUOTES, 'UTF-8') . "
"; - } - - if ($endeausgabe) { - echo "
Wir stehen Ihnen ab dem " . htmlspecialchars($endeausgabe, ENT_QUOTES, 'UTF-8') . " wieder zur Verfügung.


"; - } - } - ?> -
- -
- - -
-
-
- - - - - + + + + + + Praxis Creutzburg - Formulare + + + + + + + + + +
+ + + + +
+

Service anfordern

+ +Kontrollieren Sie Ihre Angaben!
'; + echo '
'; + echo ''; + // Schleife durch Clemens 15.10.2018 - aktualisiert 01.02.2026 + foreach ($_POST as $key => $value) { + + if ($value === "" || $key === "submit" || $key === "aktion") { + continue; + } + + if ($key === "category") { + + $stmt = $pdo->prepare(" + SELECT artname + FROM anfrageart + WHERE artid = :artid + LIMIT 1 + "); + $stmt->execute([ + ':artid' => $value + ]); + + $rowimpf = $stmt->fetch(PDO::FETCH_ASSOC); + $anfragearttext = $rowimpf['artname'] ?? ''; + + echo " + + + \n"; + + echo "\n"; + + } else { + + echo " + + + \n"; + + echo "\n"; + } + } + + + echo '
{$key}:" . htmlspecialchars($anfragearttext, ENT_QUOTES, 'UTF-8') . "
{$key}:" . htmlspecialchars($value, ENT_QUOTES, 'UTF-8') . "
'; + echo ''; + echo ''; + echo '
'; + + + }else if($_POST["aktion"] == "2"){ + + $vorname = trim($_POST["Vorname"] ?? ""); + $nachname = trim($_POST["Name"] ?? ""); + $geburtstag = trim($_POST["Geburtsjahr"] ?? ""); // muss später YYYY-MM-DD sein + $email = trim($_POST["Email"] ?? ""); + $tele = trim($_POST["Tel"] ?? ""); + $plz = trim($_POST["plz"] ?? ""); + $ort = trim($_POST["ort"] ?? ""); + $strasse = trim($_POST["strasse"] ?? ""); + + $medikament1 = trim($_POST["Medikament1"] ?? ""); + $medikament2 = trim($_POST["Medikament2"] ?? ""); + $nachricht = trim($_POST["message"] ?? ""); + $anforderungart = trim($_POST["category"] ?? ""); + + $abholung = $_POST["abholung"] ?? "Praxis"; + + if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { + die("Ungültige E-Mail"); + } + if (!$geburtstag) { + die("Geburtsdatum fehlt"); + } + $abholungnr = ($abholung === "Apotheke") ? "2" : "1"; + + $karte = $_POST["karte"] ?? ""; + if ($karte === "Privat") { + $karte = "Privatrezept (Selbstzahler)"; + } + + $nachricht = "Karte eingelesen: " . $karte . "
" . + "Abholungsort: " . $abholung . "
" . + $nachricht; + + $impfstofftext = null; + if (!empty($impfstoff)) { + $stmt = $pdo->prepare("SELECT impfname FROM impfstoff WHERE impfid = ?"); + $stmt->execute([$impfstoff]); + $impfstofftext = $stmt->fetchColumn(); + } + + $sendmail = false; + + $pdo->beginTransaction(); + + $stmt = $pdo->prepare(" + INSERT INTO persons (vorname, nachname, email, geburtstag, tele, ort, plz, strasse) + VALUES (:vorname, :nachname, :email, :geburtstag, :tele, :ort, :plz, :strasse) + ON DUPLICATE KEY UPDATE + vorname = VALUES(vorname), + nachname = VALUES(nachname), + tele = VALUES(tele), + ort = VALUES(ort), + plz = VALUES(plz), + strasse = VALUES(strasse), + updated_at = CURRENT_TIMESTAMP + "); + $stmt->execute([ + ':vorname' => $vorname, + ':nachname' => $nachname, + ':email' => $email, + ':geburtstag' => $geburtstag, + ':tele' => $tele, + ':ort' => $ort, + ':plz' => $plz, + ':strasse' => $strasse + ]); + + // person_id holen (weil ON DUPLICATE nicht zuverlässig lastInsertId liefert) + $stmt = $pdo->prepare("SELECT person_id FROM persons WHERE email = ? AND geburtstag = ?"); + $stmt->execute([$email, $geburtstag]); + $person_id = (int)$stmt->fetchColumn(); + + if (!$person_id) { + $pdo->rollBack(); + die("Keine eindeutige Kennung (person_id)"); + }else{ + + $hashvorher = $vorname . $nachname . $Email; + $hash = md5($hashvorher) . date("YmdHs"); + + + $sendmail = true; + + $stmt = $pdo->prepare(" + SELECT 1 + FROM anfragen + WHERE requester_person_id = ? + AND anforderungart = ? + AND medikament1 = ? + AND medikament2 = ? + AND nachricht = ? + AND create_time >= (NOW() - INTERVAL 7 DAY) + LIMIT 1 + "); + $stmt->execute([$person_id, $anforderungart, $medikament1, $medikament2, $nachricht]); + $exists = (bool)$stmt->fetchColumn(); + + if (!$exists) { + $stmt = $pdo->prepare(" + INSERT INTO anfragen + (requester_person_id, anforderungart, medikament1, medikament2, + nachricht, hash, create_time, ordnungsid, abholort, sicherenachricht, + source, created_by_account_id) + VALUES + (?, ?, ?, ?, ?, ?, NOW(), '1', ?, '0', 'mail', NULL) + "); + $stmt->execute([ + $person_id, + $anforderungart, + $medikament1, + $medikament2, + $nachricht, + $hash, + $abholungnr + ]); + + $anfrageid = (int)$pdo->lastInsertId(); + + $pdo->commit(); + + // Achtung: deine Funktion erwartet $con (mysqli). Die musst du später auf PDO umbauen. + // Übergangsweise: Lass die Mailfunktion noch mit mysqli laufen oder baue sie um. + SendMailMessageVorlage($pdo, "3", $anfrageid , "18" ); + + echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

Sie werden gleich weitergeleitet.
"; + header("refresh:15;rezepte.php"); + + } else { + $pdo->rollBack(); + echo "

Doppelte Anfrage


Ihre Anfrage wurde schon in unserem System gespeichert.
Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.
Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.

"; + header("refresh:15;rezepte.php"); + + } + + } + + + + + + } +}else{ + + +?> + + + + Formulare anfordern, nur nach ärztlicher Absprache und Kontakt. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
+
Benutzen Sie eine Email-Adresse auf die Sie direkt zugreifen können. Bitte bestätigen Sie dann den Link in der Email. So können wir Ihnen im Verlauf den Stand der Bearbeitung Ihrer Anfrage sicher mitteilen. +


+ Stellen Sie wiederholt Anfragen an die Praxis Creutzburg?
+ Wollen Sie bis zu sechs Medikamente beantragen?
+ Benötigen Sie ein längeres Textfeld?
+ +
Dann nutzen Sie auch unseren Internen Bereich für Patienten. +

+

Nutzen Sie unsere neue Datei-Upload-Funktion!

+ Sie können damit dem Praxis-Team Unterlagen per PDF zur Verfügung stellen.
+ + Den Upload finden Sie hier: Datei-Upload
+ + +
+
+ + +
+ prepare(" + SELECT urlaubid + FROM urlaub + WHERE start <= ? + AND ende >= ? + LIMIT 1 + "); + $stmt->execute([$today, $today]); + + $urlaubid = $stmt->fetchColumn(); + + if (!$urlaubid) { + ?> + +

ACHTUNG!

+ +

Fragen zu Corona?

+ + Alle Informationen zur Corona-Impfung finden Sie hier:
+ Corona-Informationen

+ +

Sie benötigen einen Termin?

+ + Schauen Sie in unserem Online-Kalender nach einem Termin. Dort sind meist auch kurzfristige Termine vorhanden.
+ Untersuchungen wie Blutabnahmen, Blutbild oder Ultraschall auf Kassenleistung erfolgen ausschließlich nach direkter Rücksprache mit unserem Arzt und können nicht selbstständig online gebucht werden.
+ +

Buchen Sie dafür zunächst einen Sprechstundentermin.

Anschließend wird das weitere Vorgehen mit unserem Arzt besprochen. +
+ Online-Kalender

+ +

Formular bitte ausfüllen und abschicken

+

Gehen Sie nach unten zum Formular und füllen Sie es (wie gewohnt) aus.

+ + + '; + echo ''; + + + ?> + + + + +
+ + +
+ +
+ + +
+
+
+ +
+ + +
+ + +
+ +
+
+
+
+
+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
+ Ihre Daten werden HTTPS-verschlüsselt an unser System übertragen. Sie erhalten die Antwort per E-Mail mit TLS-Verschlüsselung. Mit Absenden Ihrer Anfrage stimmen Sie diesen Bedingungen zu.
+ +
+
+ +
+
+
    +
  • +
  • +
+ + +
+ + + + + + +
+ + +
+Praxis im Urlaub"; + echo "Wir befinden uns aktuell im Urlaub.
Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.

"; + + $today = date("Y-m-d"); + + $stmt = $pdo->prepare(" + SELECT ende, vertretung, vertretertelefon, vertreteradresse, vertreterurl + FROM urlaub + WHERE start <= :today + AND ende >= :today + ORDER BY ende DESC + LIMIT 1 + "); + $stmt->execute([':today' => $today]); + + $row = $stmt->fetch(); // liefert Array oder false + + if ($row) { + $vertreter = $row["vertretung"] ?? null; + $vertretertelefon = $row["vertretertelefon"] ?? null; + $vertreteradresse = $row["vertreteradresse"] ?? null; + $vertreterurl = $row["vertreterurl"] ?? null; + $ende = $row["ende"] ?? null; + + if ($ende) { + $endeausgabe = date("d.m.Y", strtotime("+1 day", strtotime($ende))); + } else { + $endeausgabe = null; + } + + if (!empty($vertreter)) { + echo "Unsere Vertretung: " . htmlspecialchars($vertreter, ENT_QUOTES, 'UTF-8') . "
"; + } + if (!empty($vertreterurl)) { + // optional: URL escapen/validieren + echo "Webseite Vertretung: " . htmlspecialchars($vertreterurl, ENT_QUOTES, 'UTF-8') . "
"; + } + if (!empty($vertretertelefon)) { + echo "Telefonischer Kontakt Vertretung: " . htmlspecialchars($vertretertelefon, ENT_QUOTES, 'UTF-8') . "
"; + } + if (!empty($vertreteradresse)) { + echo "Adresse Vertretung: " . htmlspecialchars($vertreteradresse, ENT_QUOTES, 'UTF-8') . "
"; + } + + if ($endeausgabe) { + echo "
Wir stehen Ihnen ab dem " . htmlspecialchars($endeausgabe, ENT_QUOTES, 'UTF-8') . " wieder zur Verfügung.


"; + } + } + ?> +
+ +
+ + +
+
+
+ + + + + \ No newline at end of file diff --git a/grippeimpfbestaetigung.php b/grippeimpfbestaetigung.php index 7501fcd..42399f8 100644 --- a/grippeimpfbestaetigung.php +++ b/grippeimpfbestaetigung.php @@ -1,2 +1,2 @@ to_string(); - * - * Setting properties after instantiation - * $ics = new ICS(); - * $ics->set('summary', 'My awesome event'); - * - * You can also set multiple properties at the same time by using an array: - * $ics->set(array( - * 'dtstart' => 'now + 30 minutes', - * 'dtend' => 'now + 1 hour' - * )); - * - * Available properties - * -------------------- - * description - * String description of the event. - * dtend - * A date/time stamp designating the end of the event. You can use either a - * DateTime object or a PHP datetime format string (e.g. "now + 1 hour"). - * dtstart - * A date/time stamp designating the start of the event. You can use either a - * DateTime object or a PHP datetime format string (e.g. "now + 1 hour"). - * location - * String address or description of the location of the event. - * summary - * String short summary of the event - usually used as the title. - * url - * A url to attach to the the event. Make sure to add the protocol (http:// - * or https://). - */ - -class ICS { - const DT_FORMAT = 'Ymd\THis\Z'; - - protected $properties = array(); - private $available_properties = array( - 'description', - 'dtend', - 'dtstart', - 'location', - 'summary', - 'url' - ); - - public function __construct($props) { - $this->set($props); - } - - public function set($key, $val = false) { - if (is_array($key)) { - foreach ($key as $k => $v) { - $this->set($k, $v); - } - } else { - if (in_array($key, $this->available_properties)) { - $this->properties[$key] = $this->sanitize_val($val, $key); - } - } - } - - public function to_string() { - $rows = $this->build_props(); - return implode("\r\n", $rows); - } - - private function build_props() { - // Build ICS properties - add header - $ics_props = array( - 'BEGIN:VCALENDAR', - 'VERSION:2.0', - 'PRODID:-//hacksw/handcal//NONSGML v1.0//EN', - 'CALSCALE:GREGORIAN', - 'BEGIN:VEVENT' - ); - - // Build ICS properties - add header - $props = array(); - foreach($this->properties as $k => $v) { - $props[strtoupper($k . ($k === 'url' ? ';VALUE=URI' : ''))] = $v; - } - - // Set some default values - $props['DTSTAMP'] = $this->format_timestamp('now'); - $props['UID'] = uniqid(); - - // Append properties - foreach ($props as $k => $v) { - $ics_props[] = "$k:$v"; - } - - // Build ICS properties - add footer - $ics_props[] = 'END:VEVENT'; - $ics_props[] = 'END:VCALENDAR'; - - return $ics_props; - } - - private function sanitize_val($val, $key = false) { - switch($key) { - case 'dtend': - case 'dtstamp': - case 'dtstart': - $val = $this->format_timestamp($val); - break; - default: - $val = $this->escape_string($val); - } - - return $val; - } - - private function format_timestamp($timestamp) { - $dt = new DateTime($timestamp); - return $dt->format(self::DT_FORMAT); - } - - private function escape_string($str) { - return preg_replace('/([\,;])/','\\\$1', $str); - } +to_string(); + * + * Setting properties after instantiation + * $ics = new ICS(); + * $ics->set('summary', 'My awesome event'); + * + * You can also set multiple properties at the same time by using an array: + * $ics->set(array( + * 'dtstart' => 'now + 30 minutes', + * 'dtend' => 'now + 1 hour' + * )); + * + * Available properties + * -------------------- + * description + * String description of the event. + * dtend + * A date/time stamp designating the end of the event. You can use either a + * DateTime object or a PHP datetime format string (e.g. "now + 1 hour"). + * dtstart + * A date/time stamp designating the start of the event. You can use either a + * DateTime object or a PHP datetime format string (e.g. "now + 1 hour"). + * location + * String address or description of the location of the event. + * summary + * String short summary of the event - usually used as the title. + * url + * A url to attach to the the event. Make sure to add the protocol (http:// + * or https://). + */ + +class ICS { + const DT_FORMAT = 'Ymd\THis\Z'; + + protected $properties = array(); + private $available_properties = array( + 'description', + 'dtend', + 'dtstart', + 'location', + 'summary', + 'url' + ); + + public function __construct($props) { + $this->set($props); + } + + public function set($key, $val = false) { + if (is_array($key)) { + foreach ($key as $k => $v) { + $this->set($k, $v); + } + } else { + if (in_array($key, $this->available_properties)) { + $this->properties[$key] = $this->sanitize_val($val, $key); + } + } + } + + public function to_string() { + $rows = $this->build_props(); + return implode("\r\n", $rows); + } + + private function build_props() { + // Build ICS properties - add header + $ics_props = array( + 'BEGIN:VCALENDAR', + 'VERSION:2.0', + 'PRODID:-//hacksw/handcal//NONSGML v1.0//EN', + 'CALSCALE:GREGORIAN', + 'BEGIN:VEVENT' + ); + + // Build ICS properties - add header + $props = array(); + foreach($this->properties as $k => $v) { + $props[strtoupper($k . ($k === 'url' ? ';VALUE=URI' : ''))] = $v; + } + + // Set some default values + $props['DTSTAMP'] = $this->format_timestamp('now'); + $props['UID'] = uniqid(); + + // Append properties + foreach ($props as $k => $v) { + $ics_props[] = "$k:$v"; + } + + // Build ICS properties - add footer + $ics_props[] = 'END:VEVENT'; + $ics_props[] = 'END:VCALENDAR'; + + return $ics_props; + } + + private function sanitize_val($val, $key = false) { + switch($key) { + case 'dtend': + case 'dtstamp': + case 'dtstart': + $val = $this->format_timestamp($val); + break; + default: + $val = $this->escape_string($val); + } + + return $val; + } + + private function format_timestamp($timestamp) { + $dt = new DateTime($timestamp); + return $dt->format(self::DT_FORMAT); + } + + private function escape_string($str) { + return preg_replace('/([\,;])/','\\\$1', $str); + } } \ No newline at end of file diff --git a/ical/includes/date.php b/ical/includes/date.php index 8ea0aed..dba86e4 100644 --- a/ical/includes/date.php +++ b/ical/includes/date.php @@ -1,568 +1,568 @@ - - * @copyright Copyright (C) 2006 - 2017 by Dan Cogliano - * @license GNU GPLv3 - * @link http://icalendar.org/php-library.html - */ - -// No direct access -defined('_ZAPCAL') or die( 'Restricted access' ); - -/** - * Zap Calendar Date Helper Class - * - * Helper class for various date functions - */ -class ZDateHelper { - - /** - * Find the number of days in a month - * - * @param int $month Month is between 1 and 12 inclusive - * - * @param int $year is between 1 and 32767 inclusive - * - * @return int - */ - static function DayInMonth($month, $year) { - $daysInMonth = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); - if ($month != 2) return $daysInMonth[$month - 1]; - return (checkdate($month, 29, $year)) ? 29 : 28; - } - - /** - * Is given date today? - * - * @param int $date date in Unix timestamp format - * - * @param int $tzid PHP recognized timezone (default is UTC) - * - * @return bool - */ - static function isToday($date, $tzid = "UTC") { - $dtz = new DateTimeZone($tzid); - $dt = new DateTime("now", $dtz); - $now = time() + $dtz->getOffset($dt); - return gmdate('Y-m-d', $date) == gmdate('Y-m-d', $now); - } - - /** - * Is given date before today? - * - * @param int $date date in Unix timestamp format - * - * @param int $tzid PHP recognized timezone (default is UTC) - * - * @return bool - */ - static function isBeforeToday($date, $tzid = "UTC"){ - $dtz = new DateTimeZone($tzid); - $dt = new DateTime("now", $dtz); - $now = time() + $dtz->getOffset($dt); - return mktime(0,0,0,date('m',$now),date('d',$now),date('Y',$now)) > - mktime(0,0,0,date('m',$date),date('d',$date),date('Y',$now)); - } - - /** - * Is given date after today? - * - * @param int $date date in Unix timestamp format - * - * @param int $tzid PHP recognized timezone (default is UTC) - * - * @return bool - */ - static function isAfterToday($date, $tzid = "UTC"){ - $dtz = new DateTimeZone($tzid); - $dt = new DateTime("now", $dtz); - $now = time() + $dtz->getOffset($dt); - return mktime(0,0,0,date('m',$now),date('d',$now),date('Y',$now)) < - mktime(0,0,0,date('m',$date),date('d',$date),date('Y',$now)); - } - - /** - * Is given date tomorrow? - * - * @param int $date date in Unix timestamp format - * - * @param int $tzid PHP recognized timezone (default is UTC) - * - * @return bool - */ - static function isTomorrow($date, $tzid = "UTC") { - $dtz = new DateTimeZone($tzid); - $dt = new DateTime("now", $dtz); - $now = time() + $dtz->getOffset($dt); - return gmdate('Y-m-d', $date) == gmdate('Y-m-d', $now + 60 * 60 * 24); - } - - /** - * Is given date in the future? - * - * This routine differs from isAfterToday() in that isFuture() will - * return true for date-time values later in the same day. - * - * @param int $date date in Unix timestamp format - * - * @param int $tzid PHP recognized timezone (default is UTC) - * - * @return bool - */ - static function isFuture($date, $tzid = "UTC"){ - $dtz = new DateTimeZone($tzid); - $dt = new DateTime("now", $dtz); - $now = time() + $dtz->getOffset($dt); - return $date > $now; - } - - /** - * Is given date in the past? - * - * This routine differs from isBeforeToday() in that isPast() will - * return true for date-time values earlier in the same day. - * - * @param int $date date in Unix timestamp format - * - * @param int $tzid PHP recognized timezone (default is UTC) - * - * @return bool - */ - static function isPast($date, $tzid = "UTC") { - $dtz = new DateTimeZone($tzid); - $dt = new DateTime("now", $dtz); - $now = time() + $dtz->getOffset($dt); - return $date < $now; - } - - /** - * Return current Unix timestamp in local timezone - * - * @param string $tzid PHP recognized timezone - * - * @return int - */ - static function now($tzid = "UTC"){ - $dtz = new DateTimeZone($tzid); - $dt = new DateTime("now", $dtz); - $now = time() + $dtz->getOffset($dt); - return $now; - } - - /** - * Is given date fall on a weekend? - * - * @param int $date Unix timestamp - * - * @return bool - */ - static function isWeekend($date) { - $dow = gmdate('w',$date); - return $dow == 0 || $dow == 6; - } - - /** - * Format Unix timestamp to SQL date-time - * - * @param int $t Unix timestamp - * - * @return string - */ - static function toSqlDateTime($t = 0) - { - date_default_timezone_set('GMT'); - if($t == 0) - return gmdate('Y-m-d H:i:s',self::now()); - return gmdate('Y-m-d H:i:s', $t); - } - - /** - * Format Unix timestamp to SQL date - * - * @param int $t Unix timestamp - * - * @return string - */ - static function toSqlDate($t = 0) - { - date_default_timezone_set('GMT'); - if($t == 0) - return gmdate('Y-m-d',self::now()); - return gmdate('Y-m-d', $t); - } - - /** - * Format iCal date-time string to Unix timestamp - * - * @param string $datetime in iCal time format ( YYYYMMDD or YYYYMMDDTHHMMSS or YYYYMMDDTHHMMSSZ ) - * - * @return int Unix timestamp - */ - static function fromiCaltoUnixDateTime($datetime) { - // first check format - $formats = array(); - $formats[] = "/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/"; - $formats[] = "/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]T[0-9][0-9][0-9][0-9][0-9][0-9]/"; - $formats[] = "/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]T[0-9][0-9][0-9][0-9][0-9][0-9]Z/"; - $ok = false; - foreach($formats as $format){ - if(preg_match($format,$datetime)){ - $ok = true; - break; - } - } - if(!$ok) - return null; - $year = substr($datetime,0,4); - $month = substr($datetime,4,2); - $day = substr($datetime,6,2); - $hour = 0; - $minute = 0; - $second = 0; - if(strlen($datetime) > 8 && $datetime[8] == "T") { - $hour = substr($datetime,9,2); - $minute = substr($datetime,11,2); - $second = substr($datetime,13,2); - } - return gmmktime($hour, $minute, $second, $month, $day, $year); - } - - /** - * Format Unix timestamp to iCal date-time string - * - * @param int $datetime Unix timestamp - * - * @return string - */ - static function fromUnixDateTimetoiCal($datetime){ - date_default_timezone_set('GMT'); - return gmdate("Ymd\THis",$datetime); - } - - /** - * Convert iCal duration string to # of seconds - * - * @param string $duration iCal duration string - * - * return int - */ - static function iCalDurationtoSeconds($duration) { - $secs = 0; - if($duration[0] == "P") { - $duration = str_replace(array("H","M","S","T","D","W","P"),array("H,","M,","S,","","D,","W,",""),$duration); - $dur2 = explode(",",$duration); - foreach($dur2 as $dur){ - $val=intval($dur); - if(strlen($dur) > 0){ - switch($dur[strlen($dur) - 1]) { - case "H": - $secs += 60*60 * $val; - break; - case "M": - $secs += 60 * $val; - break; - case "S": - $secs += $val; - break; - case "D": - $secs += 60*60*24 * $val; - break; - case "W": - $secs += 60*60*24*7 * $val; - break; - } - } - } - } - return $secs; - } - - /** - * Check if day falls within date range - * - * @param int $daystart start of day in Unix timestamp format - * - * @param int $begin Unix timestamp of starting date range - * - * @param int $end Unix timestamp of end date range - * - * @return bool - */ - static function inDay($daystart, $begin, $end) - { - //$dayend = $daystart + 60*60*24 - 60; - // add 1 day to determine end of day - // don't use 24 hours, since twice a year DST Sundays are 23 hours and 25 hours in length - // adding 1 day takes this into account - $dayend = self::addDate($daystart, 0,0,0,0,1,0); - - $end = max($begin, $end); // $end can't be less than $begin - $inday = - ($daystart <= $begin && $begin < $dayend) - ||($daystart < $end && $end < $dayend) - ||($begin <= $daystart && $end > $dayend) - ; - return $inday; - } - - /** - * Convert SQL date or date-time to Unix timestamp - * - * @param string $datetime SQL date or date-time - * - * @return int Unix date-time timestamp - */ - static function toUnixDate($datetime) - { - $year = substr($datetime,0,4); - $month = substr($datetime,5,2); - $day = substr($datetime,8,2); - - return mktime(0, 0, 0, $month, $day, $year); - } - - /** - * Convert SQL date or date-time to Unix date timestamp - * - * @param string $datetime SQL date or date-time - * - * @return int Unix timestamp - */ - static function toUnixDateTime($datetime) - { - // convert to absolute dates if neccessary - $datetime = self::getAbsDate($datetime); - $year = substr($datetime,0,4); - $month = substr($datetime,5,2); - $day = substr($datetime,8,2); - $hour = 0; - $minute = 0; - $second = 0; - if(strlen($datetime) > 10) { - $hour = substr($datetime,11,2); - $minute = substr($datetime,14,2); - $second = substr($datetime,17,2); - } - return gmmktime($hour, $minute, $second, $month, $day, $year); - } - - /** - * Date math: add or substract from current date to get a new date - * - * @param int $date date to add or subtract from - * - * @param int $hour add or subtract hours from date - * - * @param int $min add or subtract minutes from date - * - * @param int $sec add or subtract seconds from date - * - * @param int $month add or subtract months from date - * - * @param int $day add or subtract days from date - * - * @param int $year add or subtract years from date - * - * @param string $tzid PHP recognized timezone (default is UTC) - */ - static function addDate($date, $hour, $min, $sec, $month, $day, $year, $tzid = "UTC") { - date_default_timezone_set($tzid); - $sqldate = self::toSQLDateTime($date); - $tdate = array(); - $tdate["year"] = substr($sqldate,0,4); - $tdate["mon"] = substr($sqldate,5,2); - $tdate["mday"] = substr($sqldate,8,2); - $tdate["hours"] = substr($sqldate,11,2); - $tdate["minutes"] = substr($sqldate,14,2); - $tdate["seconds"] = substr($sqldate,17,2); - $newdate=mktime($tdate["hours"] + $hour, $tdate["minutes"] + $min, $tdate["seconds"] + $sec, $tdate["mon"] + $month, $tdate["mday"] + $day, $tdate["year"] + $year); - date_default_timezone_set("UTC"); - //echo self::toSQLDateTime($date) . " => " . self::toSQLDateTime($newdate) . " ($hour:$min:$sec $month/$day/$year)
\n"; - return $newdate; - } - - /** - * Date math: get date from week and day in specifiec month - * - * This routine finds actual dates for the second Tuesday of the month, last Friday of the month, etc. - * For second Tuesday, use $week = 1, $wday = 2 - * for last Friday, use $week = -1, $wday = 5 - * - * @param int $date Unix timestamp - * - * @param int $week week number, 0 is first week, -1 is last - * - * @param int $wday day of week, 0 is Sunday, 6 is Saturday - * - * @param string $tzid PHP supported timezone - * - * @return int Unix timestamp - */ - static function getDateFromDay($date, $week, $wday,$tzid="UTC") { - //echo "getDateFromDay(" . self::toSqlDateTime($date) . ",$week,$wday)
\n"; - // determine first day in month - $tdate = getdate($date); - $monthbegin = gmmktime(0,0,0, $tdate["mon"],1,$tdate["year"]); - $monthend = self::addDate($monthbegin, 0,0,0,1,-1,0,$tzid); // add 1 month and subtract 1 day - $day = self::addDate($date,0,0,0,0,1 - $tdate["mday"],0,$tzid); - $month = array(array()); - while($day <= $monthend) { - $tdate=getdate($day); - $month[$tdate["wday"]][]=$day; - //echo self::toSQLDateTime($day) . "
\n"; - $day = self::addDate($day, 0,0,0,0,1,0,$tzid); // add 1 day - } - $dayinmonth=0; - if($week >= 0) - $dayinmonth = $month[$wday][$week]; - else - $dayinmonth = $month[$wday][count($month[$wday]) - 1]; - //echo "return " . self::toSQLDateTime($dayinmonth); - //exit; - return $dayinmonth; - } - - /** - * Convert UTC date-time to local date-time - * - * @param string $sqldate SQL date-time string - * - * @param string $tzid PHP recognized timezone (default is "UTC") - * - * @return string SQL date-time string - */ - static function toLocalDateTime($sqldate, $tzid = "UTC" ){ - try - { - $timezone = new DateTimeZone($tzid); - } - catch(Exception $e) - { - // bad time zone specified - return $sqldate; - } - $udate = self::toUnixDateTime($sqldate); - $daydatetime = new DateTime("@" . $udate); - $tzoffset = $timezone->getOffset($daydatetime); - return self::toSqlDateTime($udate + $tzoffset); - } - - /** - * Convert local date-time to UTC date-time - * - * @param string $sqldate SQL date-time string - * - * @param string $tzid PHP recognized timezone (default is "UTC") - * - * @return string SQL date-time string - */ - static function toUTCDateTime($sqldate, $tzid = "UTC" ){ - - date_default_timezone_set("UTC"); - try - { - $date = new DateTime($sqldate, $tzid); - } - catch(Exception $e) - { - // bad time zone specified - return $sqldate; - } - $offset = $date->getOffsetFromGMT(); - if($offset >= 0) - $date->sub(new DateInterval("PT".$offset."S")); - else - $date->add(new DateInterval("PT".abs($offset)."S")); - return $date->toSql(true); - } - - /** - * Convert from a relative date to an absolute date - * - * Examples of relative dates are "-2y" for 2 years ago, "18m" - * for 18 months after today. Relative date uses "y", "m" and "d" for - * year, month and day. Relative date can be combined into comma - * separated list, i.e., "-1y,-1d" for 1 year and 1 day ago. - * - * @param string $date relative date string (i.e. "1y" for 1 year from today) - * - * @param string $rdate reference date, or blank for current date (in SQL date-time format) - * - * @return string in SQL date-time format - */ - static function getAbsDate($date,$rdate = ""){ - if(str_replace(array("y","m","d","h","n"),"",strtolower($date)) != strtolower($date)){ - date_default_timezone_set("UTC"); - if($rdate == "") - $udate = time(); - else - $udate = self::toUnixDateTime($rdate); - $values=explode(",",strtolower($date)); - $y = 0; - $m = 0; - $d = 0; - $h = 0; - $n = 0; - foreach($values as $value){ - $rtype = substr($value,strlen($value)-1); - $rvalue = intval(substr($value,0,strlen($value) - 1)); - switch($rtype){ - case 'y': - $y = $rvalue; - break; - case 'm': - $m = $rvalue; - break; - case 'd': - $d = $rvalue; - break; - case 'h': - $h = $rvalue; - break; - case 'n': - $n = $rvalue; - break; - } - // for "-" values, move to start of day , otherwise, move to end of day - if($rvalue[0] == '-') - $udate = mktime(0,0,0,date('m',$udate),date('d',$udate),date('Y',$udate)); - else - $udate = mktime(0,-1,0,date('m',$udate),date('d',$udate)+1,date('Y',$udate)); - $udate = self::addDate($udate,$h,$n,0,$m,$d,$y); - } - $date = self::toSqlDateTime($udate); - } - return $date; - } - - /** - * Format Unix timestamp to iCal date-time format - * - * @param int $datetime Unix timestamp - * - * @return string iCal date-time string - */ - static function toiCalDateTime($datetime = null){ - date_default_timezone_set('UTC'); - if($datetime == null) - $datetime = time(); - return gmdate("Ymd\THis",$datetime); - } - - /** - * Format Unix timestamp to iCal date format - * - * @param int $datetime Unix timestamp - * - * @return string iCal date-time string - */ - static function toiCalDate($datetime = null){ - date_default_timezone_set('UTC'); - if($datetime == null) - $datetime = time(); - return gmdate("Ymd",$datetime); - } -} + + * @copyright Copyright (C) 2006 - 2017 by Dan Cogliano + * @license GNU GPLv3 + * @link http://icalendar.org/php-library.html + */ + +// No direct access +defined('_ZAPCAL') or die( 'Restricted access' ); + +/** + * Zap Calendar Date Helper Class + * + * Helper class for various date functions + */ +class ZDateHelper { + + /** + * Find the number of days in a month + * + * @param int $month Month is between 1 and 12 inclusive + * + * @param int $year is between 1 and 32767 inclusive + * + * @return int + */ + static function DayInMonth($month, $year) { + $daysInMonth = array(31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31); + if ($month != 2) return $daysInMonth[$month - 1]; + return (checkdate($month, 29, $year)) ? 29 : 28; + } + + /** + * Is given date today? + * + * @param int $date date in Unix timestamp format + * + * @param int $tzid PHP recognized timezone (default is UTC) + * + * @return bool + */ + static function isToday($date, $tzid = "UTC") { + $dtz = new DateTimeZone($tzid); + $dt = new DateTime("now", $dtz); + $now = time() + $dtz->getOffset($dt); + return gmdate('Y-m-d', $date) == gmdate('Y-m-d', $now); + } + + /** + * Is given date before today? + * + * @param int $date date in Unix timestamp format + * + * @param int $tzid PHP recognized timezone (default is UTC) + * + * @return bool + */ + static function isBeforeToday($date, $tzid = "UTC"){ + $dtz = new DateTimeZone($tzid); + $dt = new DateTime("now", $dtz); + $now = time() + $dtz->getOffset($dt); + return mktime(0,0,0,date('m',$now),date('d',$now),date('Y',$now)) > + mktime(0,0,0,date('m',$date),date('d',$date),date('Y',$now)); + } + + /** + * Is given date after today? + * + * @param int $date date in Unix timestamp format + * + * @param int $tzid PHP recognized timezone (default is UTC) + * + * @return bool + */ + static function isAfterToday($date, $tzid = "UTC"){ + $dtz = new DateTimeZone($tzid); + $dt = new DateTime("now", $dtz); + $now = time() + $dtz->getOffset($dt); + return mktime(0,0,0,date('m',$now),date('d',$now),date('Y',$now)) < + mktime(0,0,0,date('m',$date),date('d',$date),date('Y',$now)); + } + + /** + * Is given date tomorrow? + * + * @param int $date date in Unix timestamp format + * + * @param int $tzid PHP recognized timezone (default is UTC) + * + * @return bool + */ + static function isTomorrow($date, $tzid = "UTC") { + $dtz = new DateTimeZone($tzid); + $dt = new DateTime("now", $dtz); + $now = time() + $dtz->getOffset($dt); + return gmdate('Y-m-d', $date) == gmdate('Y-m-d', $now + 60 * 60 * 24); + } + + /** + * Is given date in the future? + * + * This routine differs from isAfterToday() in that isFuture() will + * return true for date-time values later in the same day. + * + * @param int $date date in Unix timestamp format + * + * @param int $tzid PHP recognized timezone (default is UTC) + * + * @return bool + */ + static function isFuture($date, $tzid = "UTC"){ + $dtz = new DateTimeZone($tzid); + $dt = new DateTime("now", $dtz); + $now = time() + $dtz->getOffset($dt); + return $date > $now; + } + + /** + * Is given date in the past? + * + * This routine differs from isBeforeToday() in that isPast() will + * return true for date-time values earlier in the same day. + * + * @param int $date date in Unix timestamp format + * + * @param int $tzid PHP recognized timezone (default is UTC) + * + * @return bool + */ + static function isPast($date, $tzid = "UTC") { + $dtz = new DateTimeZone($tzid); + $dt = new DateTime("now", $dtz); + $now = time() + $dtz->getOffset($dt); + return $date < $now; + } + + /** + * Return current Unix timestamp in local timezone + * + * @param string $tzid PHP recognized timezone + * + * @return int + */ + static function now($tzid = "UTC"){ + $dtz = new DateTimeZone($tzid); + $dt = new DateTime("now", $dtz); + $now = time() + $dtz->getOffset($dt); + return $now; + } + + /** + * Is given date fall on a weekend? + * + * @param int $date Unix timestamp + * + * @return bool + */ + static function isWeekend($date) { + $dow = gmdate('w',$date); + return $dow == 0 || $dow == 6; + } + + /** + * Format Unix timestamp to SQL date-time + * + * @param int $t Unix timestamp + * + * @return string + */ + static function toSqlDateTime($t = 0) + { + date_default_timezone_set('GMT'); + if($t == 0) + return gmdate('Y-m-d H:i:s',self::now()); + return gmdate('Y-m-d H:i:s', $t); + } + + /** + * Format Unix timestamp to SQL date + * + * @param int $t Unix timestamp + * + * @return string + */ + static function toSqlDate($t = 0) + { + date_default_timezone_set('GMT'); + if($t == 0) + return gmdate('Y-m-d',self::now()); + return gmdate('Y-m-d', $t); + } + + /** + * Format iCal date-time string to Unix timestamp + * + * @param string $datetime in iCal time format ( YYYYMMDD or YYYYMMDDTHHMMSS or YYYYMMDDTHHMMSSZ ) + * + * @return int Unix timestamp + */ + static function fromiCaltoUnixDateTime($datetime) { + // first check format + $formats = array(); + $formats[] = "/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]/"; + $formats[] = "/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]T[0-9][0-9][0-9][0-9][0-9][0-9]/"; + $formats[] = "/[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]T[0-9][0-9][0-9][0-9][0-9][0-9]Z/"; + $ok = false; + foreach($formats as $format){ + if(preg_match($format,$datetime)){ + $ok = true; + break; + } + } + if(!$ok) + return null; + $year = substr($datetime,0,4); + $month = substr($datetime,4,2); + $day = substr($datetime,6,2); + $hour = 0; + $minute = 0; + $second = 0; + if(strlen($datetime) > 8 && $datetime[8] == "T") { + $hour = substr($datetime,9,2); + $minute = substr($datetime,11,2); + $second = substr($datetime,13,2); + } + return gmmktime($hour, $minute, $second, $month, $day, $year); + } + + /** + * Format Unix timestamp to iCal date-time string + * + * @param int $datetime Unix timestamp + * + * @return string + */ + static function fromUnixDateTimetoiCal($datetime){ + date_default_timezone_set('GMT'); + return gmdate("Ymd\THis",$datetime); + } + + /** + * Convert iCal duration string to # of seconds + * + * @param string $duration iCal duration string + * + * return int + */ + static function iCalDurationtoSeconds($duration) { + $secs = 0; + if($duration[0] == "P") { + $duration = str_replace(array("H","M","S","T","D","W","P"),array("H,","M,","S,","","D,","W,",""),$duration); + $dur2 = explode(",",$duration); + foreach($dur2 as $dur){ + $val=intval($dur); + if(strlen($dur) > 0){ + switch($dur[strlen($dur) - 1]) { + case "H": + $secs += 60*60 * $val; + break; + case "M": + $secs += 60 * $val; + break; + case "S": + $secs += $val; + break; + case "D": + $secs += 60*60*24 * $val; + break; + case "W": + $secs += 60*60*24*7 * $val; + break; + } + } + } + } + return $secs; + } + + /** + * Check if day falls within date range + * + * @param int $daystart start of day in Unix timestamp format + * + * @param int $begin Unix timestamp of starting date range + * + * @param int $end Unix timestamp of end date range + * + * @return bool + */ + static function inDay($daystart, $begin, $end) + { + //$dayend = $daystart + 60*60*24 - 60; + // add 1 day to determine end of day + // don't use 24 hours, since twice a year DST Sundays are 23 hours and 25 hours in length + // adding 1 day takes this into account + $dayend = self::addDate($daystart, 0,0,0,0,1,0); + + $end = max($begin, $end); // $end can't be less than $begin + $inday = + ($daystart <= $begin && $begin < $dayend) + ||($daystart < $end && $end < $dayend) + ||($begin <= $daystart && $end > $dayend) + ; + return $inday; + } + + /** + * Convert SQL date or date-time to Unix timestamp + * + * @param string $datetime SQL date or date-time + * + * @return int Unix date-time timestamp + */ + static function toUnixDate($datetime) + { + $year = substr($datetime,0,4); + $month = substr($datetime,5,2); + $day = substr($datetime,8,2); + + return mktime(0, 0, 0, $month, $day, $year); + } + + /** + * Convert SQL date or date-time to Unix date timestamp + * + * @param string $datetime SQL date or date-time + * + * @return int Unix timestamp + */ + static function toUnixDateTime($datetime) + { + // convert to absolute dates if neccessary + $datetime = self::getAbsDate($datetime); + $year = substr($datetime,0,4); + $month = substr($datetime,5,2); + $day = substr($datetime,8,2); + $hour = 0; + $minute = 0; + $second = 0; + if(strlen($datetime) > 10) { + $hour = substr($datetime,11,2); + $minute = substr($datetime,14,2); + $second = substr($datetime,17,2); + } + return gmmktime($hour, $minute, $second, $month, $day, $year); + } + + /** + * Date math: add or substract from current date to get a new date + * + * @param int $date date to add or subtract from + * + * @param int $hour add or subtract hours from date + * + * @param int $min add or subtract minutes from date + * + * @param int $sec add or subtract seconds from date + * + * @param int $month add or subtract months from date + * + * @param int $day add or subtract days from date + * + * @param int $year add or subtract years from date + * + * @param string $tzid PHP recognized timezone (default is UTC) + */ + static function addDate($date, $hour, $min, $sec, $month, $day, $year, $tzid = "UTC") { + date_default_timezone_set($tzid); + $sqldate = self::toSQLDateTime($date); + $tdate = array(); + $tdate["year"] = substr($sqldate,0,4); + $tdate["mon"] = substr($sqldate,5,2); + $tdate["mday"] = substr($sqldate,8,2); + $tdate["hours"] = substr($sqldate,11,2); + $tdate["minutes"] = substr($sqldate,14,2); + $tdate["seconds"] = substr($sqldate,17,2); + $newdate=mktime($tdate["hours"] + $hour, $tdate["minutes"] + $min, $tdate["seconds"] + $sec, $tdate["mon"] + $month, $tdate["mday"] + $day, $tdate["year"] + $year); + date_default_timezone_set("UTC"); + //echo self::toSQLDateTime($date) . " => " . self::toSQLDateTime($newdate) . " ($hour:$min:$sec $month/$day/$year)
\n"; + return $newdate; + } + + /** + * Date math: get date from week and day in specifiec month + * + * This routine finds actual dates for the second Tuesday of the month, last Friday of the month, etc. + * For second Tuesday, use $week = 1, $wday = 2 + * for last Friday, use $week = -1, $wday = 5 + * + * @param int $date Unix timestamp + * + * @param int $week week number, 0 is first week, -1 is last + * + * @param int $wday day of week, 0 is Sunday, 6 is Saturday + * + * @param string $tzid PHP supported timezone + * + * @return int Unix timestamp + */ + static function getDateFromDay($date, $week, $wday,$tzid="UTC") { + //echo "getDateFromDay(" . self::toSqlDateTime($date) . ",$week,$wday)
\n"; + // determine first day in month + $tdate = getdate($date); + $monthbegin = gmmktime(0,0,0, $tdate["mon"],1,$tdate["year"]); + $monthend = self::addDate($monthbegin, 0,0,0,1,-1,0,$tzid); // add 1 month and subtract 1 day + $day = self::addDate($date,0,0,0,0,1 - $tdate["mday"],0,$tzid); + $month = array(array()); + while($day <= $monthend) { + $tdate=getdate($day); + $month[$tdate["wday"]][]=$day; + //echo self::toSQLDateTime($day) . "
\n"; + $day = self::addDate($day, 0,0,0,0,1,0,$tzid); // add 1 day + } + $dayinmonth=0; + if($week >= 0) + $dayinmonth = $month[$wday][$week]; + else + $dayinmonth = $month[$wday][count($month[$wday]) - 1]; + //echo "return " . self::toSQLDateTime($dayinmonth); + //exit; + return $dayinmonth; + } + + /** + * Convert UTC date-time to local date-time + * + * @param string $sqldate SQL date-time string + * + * @param string $tzid PHP recognized timezone (default is "UTC") + * + * @return string SQL date-time string + */ + static function toLocalDateTime($sqldate, $tzid = "UTC" ){ + try + { + $timezone = new DateTimeZone($tzid); + } + catch(Exception $e) + { + // bad time zone specified + return $sqldate; + } + $udate = self::toUnixDateTime($sqldate); + $daydatetime = new DateTime("@" . $udate); + $tzoffset = $timezone->getOffset($daydatetime); + return self::toSqlDateTime($udate + $tzoffset); + } + + /** + * Convert local date-time to UTC date-time + * + * @param string $sqldate SQL date-time string + * + * @param string $tzid PHP recognized timezone (default is "UTC") + * + * @return string SQL date-time string + */ + static function toUTCDateTime($sqldate, $tzid = "UTC" ){ + + date_default_timezone_set("UTC"); + try + { + $date = new DateTime($sqldate, $tzid); + } + catch(Exception $e) + { + // bad time zone specified + return $sqldate; + } + $offset = $date->getOffsetFromGMT(); + if($offset >= 0) + $date->sub(new DateInterval("PT".$offset."S")); + else + $date->add(new DateInterval("PT".abs($offset)."S")); + return $date->toSql(true); + } + + /** + * Convert from a relative date to an absolute date + * + * Examples of relative dates are "-2y" for 2 years ago, "18m" + * for 18 months after today. Relative date uses "y", "m" and "d" for + * year, month and day. Relative date can be combined into comma + * separated list, i.e., "-1y,-1d" for 1 year and 1 day ago. + * + * @param string $date relative date string (i.e. "1y" for 1 year from today) + * + * @param string $rdate reference date, or blank for current date (in SQL date-time format) + * + * @return string in SQL date-time format + */ + static function getAbsDate($date,$rdate = ""){ + if(str_replace(array("y","m","d","h","n"),"",strtolower($date)) != strtolower($date)){ + date_default_timezone_set("UTC"); + if($rdate == "") + $udate = time(); + else + $udate = self::toUnixDateTime($rdate); + $values=explode(",",strtolower($date)); + $y = 0; + $m = 0; + $d = 0; + $h = 0; + $n = 0; + foreach($values as $value){ + $rtype = substr($value,strlen($value)-1); + $rvalue = intval(substr($value,0,strlen($value) - 1)); + switch($rtype){ + case 'y': + $y = $rvalue; + break; + case 'm': + $m = $rvalue; + break; + case 'd': + $d = $rvalue; + break; + case 'h': + $h = $rvalue; + break; + case 'n': + $n = $rvalue; + break; + } + // for "-" values, move to start of day , otherwise, move to end of day + if($rvalue[0] == '-') + $udate = mktime(0,0,0,date('m',$udate),date('d',$udate),date('Y',$udate)); + else + $udate = mktime(0,-1,0,date('m',$udate),date('d',$udate)+1,date('Y',$udate)); + $udate = self::addDate($udate,$h,$n,0,$m,$d,$y); + } + $date = self::toSqlDateTime($udate); + } + return $date; + } + + /** + * Format Unix timestamp to iCal date-time format + * + * @param int $datetime Unix timestamp + * + * @return string iCal date-time string + */ + static function toiCalDateTime($datetime = null){ + date_default_timezone_set('UTC'); + if($datetime == null) + $datetime = time(); + return gmdate("Ymd\THis",$datetime); + } + + /** + * Format Unix timestamp to iCal date format + * + * @param int $datetime Unix timestamp + * + * @return string iCal date-time string + */ + static function toiCalDate($datetime = null){ + date_default_timezone_set('UTC'); + if($datetime == null) + $datetime = time(); + return gmdate("Ymd",$datetime); + } +} diff --git a/ical/includes/ical.php b/ical/includes/ical.php index 89dd7a5..6712bb6 100644 --- a/ical/includes/ical.php +++ b/ical/includes/ical.php @@ -1,986 +1,986 @@ - - * @copyright Copyright (C) 2006 - 2017 by Dan Cogliano - * @license GNU GPLv3 - * @link http://icalendar.org/php-library.html - */ - -// No direct access -defined('_ZAPCAL') or die( 'Restricted access' ); - -/** - * Object for storing an unfolded iCalendar line - * - * The ZCiCalDataNode class contains data from an unfolded iCalendar line - * - */ -class ZCiCalDataNode { - /** - * The name of the node - * - * @var string - */ - var $name = ""; - - /** - * Node parameters (before the colon ":") - * - * @var array - */ - var $parameter=array(); - - /** - * Node values (after the colon ":") - * - * @var array - */ - var $value=array(); - - /** - * Create an object from an unfolded iCalendar line - * - * @param string $line An unfolded iCalendar line - * - * @return void - * - */ - function __construct( $line ) { - //echo "ZCiCalDataNode($line)
\n"; - //separate line into parameters and value - // look for colon separating name or parameter and value - // first change any escaped colons temporarily to make it easier - $tline = str_replace("\\:", "`~", $line); - // see if first colon is inside a quoted string - $i = 0; - $datafind = false; - $inquotes = false; - while(!$datafind && ($i < strlen($tline))) { - //echo "$i: " . $tline[$i] . ", ord() = " . ord($tline[$i]) . "
\n"; - if(!$inquotes && $tline[$i] == ':') - $datafind=true; - else{ - $i += 1; - if(substr($tline,$i,1) == '"') - $inquotes = !$inquotes; - } - } - if($datafind){ - $value = str_replace("`~","\\:",substr($line,$i+1)); - // fix escaped characters (don't see double quotes in spec but Apple apparently uses it in iCal) - $value = str_replace(array('\\N' , '\\n', '\\"' ), array("\n", "\n" , '"'), $value); - $tvalue = str_replace("\\,", "`~", $value); - //echo "value: " . $tvalue . "
\n"; - $tvalue = explode(",",$tvalue); - $value = str_replace("`~","\\,",$tvalue); - $this->value = $value; - } - - $parameter = trim(substr($line,0,$i)); - - $parameter = str_replace("\\;", "`~", $parameter); - $parameters = explode(";", $parameter); - $parameters = str_replace("`~", "\\;", $parameters); - $this->name = array_shift($parameters); - foreach($parameters as $parameter){ - $pos = strpos($parameter,"="); - if($pos > 0){ - $param = substr($parameter,0,$pos); - $paramvalue = substr($parameter,$pos+1); - $tvalue = str_replace("\\,", "`~", $paramvalue); - //$tvalue = explode(",",$tvalue); - $paramvalue = str_replace("`~","\\,",$tvalue); - $this->parameter[strtolower($param)] = $paramvalue; - //$this->paramvalue[] = $paramvalue; - } - } - } - -/** - * getName() - * - * Return the name of the object - * - * @return string - */ - function getName(){ - return $this->name; - } - -/** - * Get $ith parameter from array - * @param int $i - * - * @return var - */ - function getParameter($i){ - return $this->parameter[$i]; - } - -/** - * Get parameter array - * - * @return array - */ - function getParameters(){ - return $this->parameter; - } - -/** - * Get comma separated values - * - * @return string - */ - function getValues(){ - return implode(",",$this->value); - } -} - -/** - * Object for storing a list of unfolded iCalendar lines (ZCiCalDataNode objects) - * - * @property object $parentnode Parent of this node - * - * @property array $child Array of children for this node - * - * @property data $data Array of data for this node - * - * @property object $next Next sibling of this node - * - * @property object $prev Previous sibling of this node - */ - -class ZCiCalNode { - /** - * The name of the node - * - * @var string - */ - var $name=""; - - /** - * The parent of this node - * - * @var object - */ - var $parentnode=null; - - /** - * Array of children for this node - * - * @var array - */ - var $child= array(); - - /** - * Array of $data for this node - * - * @var array - */ - var $data= array(); - - - /** - * Next sibling of this node - * - * @var object - */ - var $next=null; - - /** - * Previous sibling of this node - * - * @var object - */ - var $prev=null; - - /** - * Create ZCiCalNode - * - * @param string $_name Name of node - * - * @param object $_parent Parent node for this node - * - * @param bool $first Is this the first child for this parent? - */ - function __construct( $_name, & $_parent, $first = false) { - $this->name = $_name; - $this->parentnode = $_parent; - if($_parent != null){ - if(count($this->parentnode->child) > 0) { - if($first) - { - $first = & $this->parentnode->child[0]; - $first->prev = & $this; - $this->next = & $first; - } - else - { - $prev =& $this->parentnode->child[count($this->parentnode->child)-1]; - $prev->next =& $this; - $this->prev =& $prev; - } - } - if($first) - { - array_unshift($this->parentnode->child, $this); - } - else - { - $this->parentnode->child[] =& $this; - } - } - /* - echo "creating " . $this->getName(); - if($_parent != null) - echo " child of " . $_parent->getName() . "/" . count($this->parentnode->child); - echo "
"; - */ - } - - /** - * Return the name of the object - * - * @return string - */ - function getName() { - return $this->name; - } - - /** - * Add node to list - * - * @param object $node - * - */ - function addNode($node) { - if(array_key_exists($node->getName(), $this->data)) - { - if(!is_array($this->data[$node->getName()])) - { - $this->data[$node->getName()] = array($this->data[$node->getName()]); - } - $this->data[$node->getName()][] = $node; - } - else - { - $this->data[$node->getName()] = $node; - } - } - - /** - * Get Attribute - * - * @param int $i array id of attribute to get - * - * @return string - */ - function getAttrib($i) { - return $this->attrib[$i]; - } - - /** - * Set Attribute - * - * @param string $value value of attribute to set - * - */ - function setAttrib($value) { - $this->attrib[] = $value; - } - - /** - * Get the parent object of this object - * - * @return object parent of this object - */ - function &getParent() { - return $this->parentnode; - } - - /** - * Get the first child of this object - * - * @return object The first child - */ - function &getFirstChild(){ - static $nullguard = null; - if(count($this->child) > 0) { - //echo "moving from " . $this->getName() . " to " . $this->child[0]->getName() . "
"; - return $this->child[0]; - } - else - return $nullguard; - } - - /** - * Print object tree in HTML for debugging purposes - * - * @param object $node select part of tree to print, or leave blank for full tree - * - * @param int $level Level of recursion (usually leave this blank) - * - * @return string - HTML formatted display of object tree - */ - function printTree(& $node=null, $level=1){ - $level += 1; - $html = ""; - if($node == null) - $node = $this->parentnode; - if($level > 5) - { - die("levels nested too deep
\n"); - //return; - } - for($i = 0 ; $i < $level; $i ++) - $html .= "+"; - $html .= $node->getName() . "
\n"; - foreach ($node->child as $c){ - $html .= $node->printTree($c,$level); - } - $level -= 1; - return $html; - } - - /** - * export tree to icalendar format - * - * @param object $node Top level node to export - * - * @param int $level Level of recursion (usually leave this blank) - * - * @return string iCalendar formatted output - */ - function export(& $node=null, $level=0){ - $txtstr = ""; - if($node == null) - $node = $this; - if($level > 5) - { - //die("levels nested too deep
\n"); - throw new Exception("levels nested too deep"); - } - $txtstr .= "BEGIN:" . $node->getName() . "\r\n"; - if(property_exists($node,"data")) - foreach ($node->data as $d){ - if(is_array($d)) - { - foreach ($d as $c) - { - //$txtstr .= $node->export($c,$level + 1); - $p = ""; - $params = @$c->getParameters(); - if(count($params) > 0) - { - foreach($params as $key => $value){ - $p .= ";" . strtoupper($key) . "=" . $value; - } - } - $txtstr .= $this->printDataLine($c, $p); - } - } - else - { - $p = ""; - $params = @$d->getParameters(); - if(count($params) > 0) - { - foreach($params as $key => $value){ - $p .= ";" . strtoupper($key) . "=" . $value; - } - } - $txtstr .= $this->printDataLine($d, $p); - /* - $values = $d->getValues(); - // don't think we need this, Sunbird does not like it in the EXDATE field - //$values = str_replace(",", "\\,", $values); - - $line = $d->getName() . $p . ":" . $values; - $line = str_replace(array("
","
","
","
0) { - $linewidth = ($linecount == 0? 75 : 74); - $linesize = (strlen($line) > $linewidth? $linewidth: strlen($line)); - if($linecount > 0) - $txtstr .= " "; - $txtstr .= substr($line,0,$linesize) . "\r\n"; - $linecount += 1; - $line = substr($line,$linewidth); - } - */ - } - //echo $line . "\n"; - } - if(property_exists($node,"child")) - foreach ($node->child as $c){ - $txtstr .= $node->export($c,$level + 1); - } - $txtstr .= "END:" . $node->getName() . "\r\n"; - return $txtstr; - } - - /** - * print an attribute line - - * @param object $d attributes - * @param object $p properties - * - */ - function printDataLine($d, $p) - { - $txtstr = ""; - - $values = $d->getValues(); - // don't think we need this, Sunbird does not like it in the EXDATE field - //$values = str_replace(",", "\\,", $values); - - $line = $d->getName() . $p . ":" . $values; - $line = str_replace(array("
","
","
","
0) { - $linewidth = ($linecount == 0? 75 : 74); - $linesize = (strlen($line) > $linewidth? $linewidth: strlen($line)); - if($linecount > 0) - $txtstr .= " "; - $txtstr .= substr($line,0,$linesize) . "\r\n"; - $linecount += 1; - $line = substr($line,$linewidth); - } - return $txtstr; - } -} - -/** - * - * The main iCalendar object containing ZCiCalDataNodes and ZCiCalNodes. - * -*/ -class ZCiCal { - /** - * The root node of the object tree - * - * @var object - */ - var $tree=null; - /** - * The most recently created node in the tree - * - * @var object - */ - var $curnode=null; - -/** - * The main iCalendar object containing ZCiCalDataNodes and ZCiCalNodes. - * - * use maxevents and startevent to read events in multiple passes (to save memory) - * - * @param string $data icalendar feed string (empty if creating new feed) - * - * @param int $maxevents maximum # of events to read - * - * @param int $startevent starting event to read - * - * @return void - * -* -*/ -function __construct($data = "", $maxevents = 1000000, $startevent = 0) { - - if($data != ""){ - // unfold lines - // first change all eol chars to "\n" - $data = str_replace(array("\r\n", "\n\r", "\n", "\r"), "\n", $data); - // now unfold lines - //$data = str_replace(array("\n ", "\n "),"!?", $data); - $data = str_replace(array("\n ", "\n "),"", $data); - // replace special iCal chars - $data = str_replace(array("\\\\","\,"),array("\\",","), $data); - - // parse each line - $lines = explode("\n", $data); - - $linecount = 0; - $eventcount = 0; - $eventpos = 0; - foreach($lines as $line) { - //$line = str_replace("!?", "\n", $line); // add nl back into descriptions - // echo ($linecount + 1) . ": " . $line . "
"; - if(substr($line,0,6) == "BEGIN:") { - // start new object - $name = substr($line,6); - if($name == "VEVENT") - { - if($eventcount < $maxevents && $eventpos >= $startevent) - { - $this->curnode = new ZCiCalNode($name, $this->curnode); - if($this->tree == null) - $this->tree = $this->curnode; - } - } - else - { - $this->curnode = new ZCiCalNode($name, $this->curnode); - if($this->tree == null) - $this->tree = $this->curnode; - } - //echo "new node: " . $this->curnode->name . "
\n"; - /* - if($this->curnode->getParent() != null) - echo "parent of " . $this->curnode->getName() . " is " . $this->curnode->getParent()->getName() . "
"; - else - echo "parent of " . $this->curnode->getName() . " is null
"; - */ - } - else if(substr($line,0,4) == "END:") { - $name = substr($line,4); - if($name == "VEVENT") - { - if($eventcount < $maxevents && $eventpos >= $startevent) - { - $eventcount++; - if($this->curnode->getName() != $name) { - //panic, mismatch in iCal structure - //die("Can't read iCal file structure, expecting " . $this->curnode->getName() . " but reading $name instead"); - throw new Exception("Can't read iCal file structure, expecting " . $this->curnode->getName() . " but reading $name instead"); - } - if($this->curnode->getParent() != null) { - //echo "moving up from " . $this->curnode->getName() ; - $this->curnode = & $this->curnode->getParent(); - //echo " to " . $this->curnode->getName() . "
"; - //echo $this->curnode->getName() . " has " . count($this->curnode->child) . " children
"; - } - } - $eventpos++; - } - else - { - if($this->curnode->getName() != $name) { - //panic, mismatch in iCal structure - //die("Can't read iCal file structure, expecting " . $this->curnode->getName() . " but reading $name instead"); - throw new Exception("Can't read iCal file structure, expecting " . $this->curnode->getName() . " but reading $name instead"); - } - if($this->curnode->getParent() != null) { - //echo "moving up from " . $this->curnode->getName() ; - $this->curnode = & $this->curnode->getParent(); - //echo " to " . $this->curnode->getName() . "
"; - //echo $this->curnode->getName() . " has " . count($this->curnode->child) . " children
"; - } - } - } - else { - $datanode = new ZCiCalDataNode($line); - if($this->curnode->getName() == "VEVENT") - { - if($eventcount < $maxevents && $eventpos >= $startevent) - { - if($datanode->getName() == "EXDATE") - { - if(!array_key_exists($datanode->getName(),$this->curnode->data)) - { - $this->curnode->data[$datanode->getName()] = $datanode; - } - else - { - $this->curnode->data[$datanode->getName()]->value[] = $datanode->value[0]; - } - } - else - { - if(!array_key_exists($datanode->getName(),$this->curnode->data)) - { - $this->curnode->data[$datanode->getName()] = $datanode; - } - else - { - $tnode = $this->curnode->data[$datanode->getName()]; - $this->curnode->data[$datanode->getName()] = array(); - $this->curnode->data[$datanode->getName()][] = $tnode; - $this->curnode->data[$datanode->getName()][] = $datanode; - } - } - } - } - else - { - if($datanode->getName() == "EXDATE") - { - if(!array_key_exists($datanode->getName(),$this->curnode->data)) - { - $this->curnode->data[$datanode->getName()] = $datanode; - } - else - { - $this->curnode->data[$datanode->getName()]->value[] = $datanode->value[0]; - } - } - else - { - if(!array_key_exists($datanode->getName(),$this->curnode->data)) - { - $this->curnode->data[$datanode->getName()] = $datanode; - } - else - { - $tnode = $this->curnode->data[$datanode->getName()]; - $this->curnode->data[$datanode->getName()] = array(); - $this->curnode->data[$datanode->getName()][] = $tnode; - $this->curnode->data[$datanode->getName()][] = $datanode; - } - } - } - } - $linecount++; - } - } - else { - $name = "VCALENDAR"; - $this->curnode = new ZCiCalNode($name, $this->curnode); - $this->tree = $this->curnode; - $datanode = new ZCiCalDataNode("VERSION:2.0"); - $this->curnode->data[$datanode->getName()] = $datanode; - - $datanode = new ZCiCalDataNode("PRODID:-//ZContent.net//ZapCalLib 1.0//EN"); - $this->curnode->data[$datanode->getName()] = $datanode; - $datanode = new ZCiCalDataNode("CALSCALE:GREGORIAN"); - $this->curnode->data[$datanode->getName()] = $datanode; - $datanode = new ZCiCalDataNode("METHOD:PUBLISH"); - $this->curnode->data[$datanode->getName()] = $datanode; - } -} - -/** - * CountEvents() - * - * Return the # of VEVENTs in the object - * - * @return int - */ - -function countEvents() { - $count = 0; - if(isset($this->tree->child)){ - foreach($this->tree->child as $child){ - if($child->getName() == "VEVENT") - $count++; - } - } - return $count; -} - -/** - * CountVenues() - * - * Return the # of VVENUEs in the object - * - * @return int - */ - -function countVenues() { - $count = 0; - if(isset($this->tree->child)){ - foreach($this->tree->child as $child){ - if($child->getName() == "VVENUE") - $count++; - } - } - return $count; -} - -/** - * Export object to string - * - * This function exports all objects to an iCalendar string - * - * @return string an iCalendar formatted string - */ - -function export() { - return $this->tree->export($this->tree); -} - -/** - * Get first event in object list - * Use getNextEvent() to navigate through list - * - * @return object The first event, or null - */ -function &getFirstEvent() { - static $nullguard = null; - if ($this->countEvents() > 0){ - $child = $this->tree->child[0]; - $event=false; - while(!$event && $child != null){ - if($child->getName() == "VEVENT") - $event = true; - else - $child = $child->next; - } - return $child; - } - else - return $nullguard; -} - -/** - * Get next event in object list - * - * @param object $event The current event object - * - * @return object Returns the next event or null if past last event - */ -function &getNextEvent($event){ - do{ - $event = $event->next; - } while($event != null && $event->getName() != "VEVENT"); - return $event; -} - -/** - * Get first venue in object list - * Use getNextVenue() to navigate through list - * - * @return object The first venue, or null - */ -function &getFirstVenue() { - static $nullguard = null; - if ($this->countVenues() > 0){ - $child = $this->tree->child[0]; - $event=false; - while(!$event && $child != null){ - if($child->getName() == "VVENUE") - $event = true; - else - $child = $child->next; - } - return $child; - } - else - return $nullguard; -} - -/** - * Get next venue in object list - * - * @param object $venue The current venue object - * - * @return object Returns the next venue or null if past last venue - */ -function &getNextVenue($venue){ - do{ - $venue = $venue->next; - } while($venue != null && $venue->getName() != "VVENUE"); - return $venue; -} - -/** - * Get first child in object list - * Use getNextSibling() and getPreviousSibling() to navigate through list - * - * @param object $thisnode The parent object - * - * @return object The child object - */ -function &getFirstChild(& $thisnode){ - $nullvalue = null; - if(count($thisnode->child) > 0) { - //echo "moving from " . $thisnode->getName() . " to " . $thisnode->child[0]->getName() . "
"; - return $thisnode->child[0]; - } - else - return $nullvalue; -} - -/** - * Get next sibling in object list - * - * @param object $thisnode The current object - * - * @return object Returns the next sibling - */ -function &getNextSibling(& $thisnode){ - return $thisnode->next; -} - -/** - * Get previous sibling in object list - * - * @param object $thisnode The current object - * - * @return object Returns the previous sibling - */ -function &getPrevSibling(& $thisnode){ - return $thisnode->prev; -} - -/** - * Read date/time in iCal formatted string - * - * @param string iCal formated date/time string - * - * @return int Unix timestamp - * @deprecated Use ZDateHelper::toUnixDateTime() instead - */ - -function toUnixDateTime($datetime){ - $year = substr($datetime,0,4); - $month = substr($datetime,4,2); - $day = substr($datetime,6,2); - $hour = 0; - $minute = 0; - $second = 0; - if(strlen($datetime) > 8 && $datetime[8] == "T") { - $hour = substr($datetime,9,2); - $minute = substr($datetime,11,2); - $second = substr($datetime,13,2); - } - $d1 = mktime($hour, $minute, $second, $month, $day, $year); - -} - -/** - * fromUnixDateTime() - * - * Take Unix timestamp and format to iCal date/time string - * - * @param int $datetime Unix timestamp, leave blank for current date/time - * - * @return string formatted iCal date/time string - * @deprecated Use ZDateHelper::fromUnixDateTimetoiCal() instead - */ - -static function fromUnixDateTime($datetime = null){ - date_default_timezone_set('UTC'); - if($datetime == null) - $datetime = time(); - return date("Ymd\THis",$datetime); -} - - -/** - * fromUnixDate() - * - * Take Unix timestamp and format to iCal date string - * - * @param int $datetime Unix timestamp, leave blank for current date/time - * - * @return string formatted iCal date string - * @deprecated Use ZDateHelper::fromUnixDateTimetoiCal() instead - */ - -static function fromUnixDate($datetime = null){ - date_default_timezone_set('UTC'); - if($datetime == null) - $datetime = time(); - return date("Ymd",$datetime); -} - -/** - * Format into iCal time format from SQL date or SQL date-time format - * - * @param string $datetime SQL date or SQL date-time string - * - * @return string iCal formatted string - * @deprecated Use ZDateHelper::fromSqlDateTime() instead - */ -static function fromSqlDateTime($datetime = ""){ - if($datetime == "") - $datetime = ZDateHelper::toSqlDateTime(); - if(strlen($datetime) > 10) - return sprintf('%04d%02d%02dT%02d%02d%02d',substr($datetime,0,4),substr($datetime,5,2),substr($datetime,8,2), - substr($datetime,11,2),substr($datetime,14,2),substr($datetime,17,2)); - else - return sprintf('%04d%02d%02d',substr($datetime,0,4),substr($datetime,5,2),substr($datetime,8,2)); -} - -/** - * Format iCal time format to either SQL date or SQL date-time format - * - * @param string $datetime icalendar formatted date or date-time - * @return string SQL date or SQL date-time string - * @deprecated Use ZDateHelper::toSqlDateTime() instead - */ -static function toSqlDateTime($datetime = ""){ - if($datetime == "") - return ZDateHelper::toSqlDateTime(); - if(strlen($datetime) > 10) - return sprintf('%04d-%02d-%02d %02d:%02d:%02d',substr($datetime,0,4),substr($datetime,5,2),substr($datetime,8,2), - substr($datetime,11,2),substr($datetime,14,2),substr($datetime,17,2)); - else - return sprintf('%04d-%02d-%02d',substr($datetime,0,4),substr($datetime,5,2),substr($datetime,8,2)); -} - -/** - * Pull timezone data from node and put in array - * - * Returning array contains the following array keys: tzoffsetfrom, tzoffsetto, tzname, dtstart, rrule - * - * @param array $node timezone object - * - * @return array - */ -static function getTZValues($node){ - $tzvalues = array(); - - $tnode = @$node->data['TZOFFSETFROM']; - if($tnode != null){ - $tzvalues["tzoffsetfrom"] = $tnode->getValues(); - } - - $tnode = @$node->data['TZOFFSETTO']; - if($tnode != null){ - $tzvalues["tzoffsetto"] = $tnode->getValues(); - } - - $tnode = @$node->data['TZNAME']; - if($tnode != null){ - $tzvalues["tzname"] = $tnode->getValues(); - } - else - $tzvalues["tzname"] = ""; - - $tnode = @$node->data['DTSTART']; - if($tnode != null){ - $tzvalues["dtstart"] = ZDateHelper::fromiCaltoUnixDateTime($tnode->getValues()); - } - - $tnode = @$node->data['RRULE']; - if($tnode != null){ - $tzvalues["rrule"] = $tnode->getValues(); - //echo "rule: " . $tzvalues["rrule"] . "
\n"; - } - else{ - // no rule specified, let's create one from based on the date - $date = getdate($tzvalues["dtstart"]); - $month = $date["mon"]; - $day = $date["mday"]; - $tzvalues["rrule"] = "FREQ=YEARLY;INTERVAL=1;BYMONTH=$month;BYMONTHDAY=$day"; - } - - return $tzvalues; -} - -/** - * Escape slashes, commas and semicolons in strings - * - * @param string $content - * - * @return string - */ -static function formatContent($content) -{ - $content = str_replace(array('\\' , ',' , ';' ), array('\\\\' , '\\,' , '\\;' ),$content); - return $content; -} - -} - -?> + + * @copyright Copyright (C) 2006 - 2017 by Dan Cogliano + * @license GNU GPLv3 + * @link http://icalendar.org/php-library.html + */ + +// No direct access +defined('_ZAPCAL') or die( 'Restricted access' ); + +/** + * Object for storing an unfolded iCalendar line + * + * The ZCiCalDataNode class contains data from an unfolded iCalendar line + * + */ +class ZCiCalDataNode { + /** + * The name of the node + * + * @var string + */ + var $name = ""; + + /** + * Node parameters (before the colon ":") + * + * @var array + */ + var $parameter=array(); + + /** + * Node values (after the colon ":") + * + * @var array + */ + var $value=array(); + + /** + * Create an object from an unfolded iCalendar line + * + * @param string $line An unfolded iCalendar line + * + * @return void + * + */ + function __construct( $line ) { + //echo "ZCiCalDataNode($line)
\n"; + //separate line into parameters and value + // look for colon separating name or parameter and value + // first change any escaped colons temporarily to make it easier + $tline = str_replace("\\:", "`~", $line); + // see if first colon is inside a quoted string + $i = 0; + $datafind = false; + $inquotes = false; + while(!$datafind && ($i < strlen($tline))) { + //echo "$i: " . $tline[$i] . ", ord() = " . ord($tline[$i]) . "
\n"; + if(!$inquotes && $tline[$i] == ':') + $datafind=true; + else{ + $i += 1; + if(substr($tline,$i,1) == '"') + $inquotes = !$inquotes; + } + } + if($datafind){ + $value = str_replace("`~","\\:",substr($line,$i+1)); + // fix escaped characters (don't see double quotes in spec but Apple apparently uses it in iCal) + $value = str_replace(array('\\N' , '\\n', '\\"' ), array("\n", "\n" , '"'), $value); + $tvalue = str_replace("\\,", "`~", $value); + //echo "value: " . $tvalue . "
\n"; + $tvalue = explode(",",$tvalue); + $value = str_replace("`~","\\,",$tvalue); + $this->value = $value; + } + + $parameter = trim(substr($line,0,$i)); + + $parameter = str_replace("\\;", "`~", $parameter); + $parameters = explode(";", $parameter); + $parameters = str_replace("`~", "\\;", $parameters); + $this->name = array_shift($parameters); + foreach($parameters as $parameter){ + $pos = strpos($parameter,"="); + if($pos > 0){ + $param = substr($parameter,0,$pos); + $paramvalue = substr($parameter,$pos+1); + $tvalue = str_replace("\\,", "`~", $paramvalue); + //$tvalue = explode(",",$tvalue); + $paramvalue = str_replace("`~","\\,",$tvalue); + $this->parameter[strtolower($param)] = $paramvalue; + //$this->paramvalue[] = $paramvalue; + } + } + } + +/** + * getName() + * + * Return the name of the object + * + * @return string + */ + function getName(){ + return $this->name; + } + +/** + * Get $ith parameter from array + * @param int $i + * + * @return var + */ + function getParameter($i){ + return $this->parameter[$i]; + } + +/** + * Get parameter array + * + * @return array + */ + function getParameters(){ + return $this->parameter; + } + +/** + * Get comma separated values + * + * @return string + */ + function getValues(){ + return implode(",",$this->value); + } +} + +/** + * Object for storing a list of unfolded iCalendar lines (ZCiCalDataNode objects) + * + * @property object $parentnode Parent of this node + * + * @property array $child Array of children for this node + * + * @property data $data Array of data for this node + * + * @property object $next Next sibling of this node + * + * @property object $prev Previous sibling of this node + */ + +class ZCiCalNode { + /** + * The name of the node + * + * @var string + */ + var $name=""; + + /** + * The parent of this node + * + * @var object + */ + var $parentnode=null; + + /** + * Array of children for this node + * + * @var array + */ + var $child= array(); + + /** + * Array of $data for this node + * + * @var array + */ + var $data= array(); + + + /** + * Next sibling of this node + * + * @var object + */ + var $next=null; + + /** + * Previous sibling of this node + * + * @var object + */ + var $prev=null; + + /** + * Create ZCiCalNode + * + * @param string $_name Name of node + * + * @param object $_parent Parent node for this node + * + * @param bool $first Is this the first child for this parent? + */ + function __construct( $_name, & $_parent, $first = false) { + $this->name = $_name; + $this->parentnode = $_parent; + if($_parent != null){ + if(count($this->parentnode->child) > 0) { + if($first) + { + $first = & $this->parentnode->child[0]; + $first->prev = & $this; + $this->next = & $first; + } + else + { + $prev =& $this->parentnode->child[count($this->parentnode->child)-1]; + $prev->next =& $this; + $this->prev =& $prev; + } + } + if($first) + { + array_unshift($this->parentnode->child, $this); + } + else + { + $this->parentnode->child[] =& $this; + } + } + /* + echo "creating " . $this->getName(); + if($_parent != null) + echo " child of " . $_parent->getName() . "/" . count($this->parentnode->child); + echo "
"; + */ + } + + /** + * Return the name of the object + * + * @return string + */ + function getName() { + return $this->name; + } + + /** + * Add node to list + * + * @param object $node + * + */ + function addNode($node) { + if(array_key_exists($node->getName(), $this->data)) + { + if(!is_array($this->data[$node->getName()])) + { + $this->data[$node->getName()] = array($this->data[$node->getName()]); + } + $this->data[$node->getName()][] = $node; + } + else + { + $this->data[$node->getName()] = $node; + } + } + + /** + * Get Attribute + * + * @param int $i array id of attribute to get + * + * @return string + */ + function getAttrib($i) { + return $this->attrib[$i]; + } + + /** + * Set Attribute + * + * @param string $value value of attribute to set + * + */ + function setAttrib($value) { + $this->attrib[] = $value; + } + + /** + * Get the parent object of this object + * + * @return object parent of this object + */ + function &getParent() { + return $this->parentnode; + } + + /** + * Get the first child of this object + * + * @return object The first child + */ + function &getFirstChild(){ + static $nullguard = null; + if(count($this->child) > 0) { + //echo "moving from " . $this->getName() . " to " . $this->child[0]->getName() . "
"; + return $this->child[0]; + } + else + return $nullguard; + } + + /** + * Print object tree in HTML for debugging purposes + * + * @param object $node select part of tree to print, or leave blank for full tree + * + * @param int $level Level of recursion (usually leave this blank) + * + * @return string - HTML formatted display of object tree + */ + function printTree(& $node=null, $level=1){ + $level += 1; + $html = ""; + if($node == null) + $node = $this->parentnode; + if($level > 5) + { + die("levels nested too deep
\n"); + //return; + } + for($i = 0 ; $i < $level; $i ++) + $html .= "+"; + $html .= $node->getName() . "
\n"; + foreach ($node->child as $c){ + $html .= $node->printTree($c,$level); + } + $level -= 1; + return $html; + } + + /** + * export tree to icalendar format + * + * @param object $node Top level node to export + * + * @param int $level Level of recursion (usually leave this blank) + * + * @return string iCalendar formatted output + */ + function export(& $node=null, $level=0){ + $txtstr = ""; + if($node == null) + $node = $this; + if($level > 5) + { + //die("levels nested too deep
\n"); + throw new Exception("levels nested too deep"); + } + $txtstr .= "BEGIN:" . $node->getName() . "\r\n"; + if(property_exists($node,"data")) + foreach ($node->data as $d){ + if(is_array($d)) + { + foreach ($d as $c) + { + //$txtstr .= $node->export($c,$level + 1); + $p = ""; + $params = @$c->getParameters(); + if(count($params) > 0) + { + foreach($params as $key => $value){ + $p .= ";" . strtoupper($key) . "=" . $value; + } + } + $txtstr .= $this->printDataLine($c, $p); + } + } + else + { + $p = ""; + $params = @$d->getParameters(); + if(count($params) > 0) + { + foreach($params as $key => $value){ + $p .= ";" . strtoupper($key) . "=" . $value; + } + } + $txtstr .= $this->printDataLine($d, $p); + /* + $values = $d->getValues(); + // don't think we need this, Sunbird does not like it in the EXDATE field + //$values = str_replace(",", "\\,", $values); + + $line = $d->getName() . $p . ":" . $values; + $line = str_replace(array("
","
","
","
0) { + $linewidth = ($linecount == 0? 75 : 74); + $linesize = (strlen($line) > $linewidth? $linewidth: strlen($line)); + if($linecount > 0) + $txtstr .= " "; + $txtstr .= substr($line,0,$linesize) . "\r\n"; + $linecount += 1; + $line = substr($line,$linewidth); + } + */ + } + //echo $line . "\n"; + } + if(property_exists($node,"child")) + foreach ($node->child as $c){ + $txtstr .= $node->export($c,$level + 1); + } + $txtstr .= "END:" . $node->getName() . "\r\n"; + return $txtstr; + } + + /** + * print an attribute line + + * @param object $d attributes + * @param object $p properties + * + */ + function printDataLine($d, $p) + { + $txtstr = ""; + + $values = $d->getValues(); + // don't think we need this, Sunbird does not like it in the EXDATE field + //$values = str_replace(",", "\\,", $values); + + $line = $d->getName() . $p . ":" . $values; + $line = str_replace(array("
","
","
","
0) { + $linewidth = ($linecount == 0? 75 : 74); + $linesize = (strlen($line) > $linewidth? $linewidth: strlen($line)); + if($linecount > 0) + $txtstr .= " "; + $txtstr .= substr($line,0,$linesize) . "\r\n"; + $linecount += 1; + $line = substr($line,$linewidth); + } + return $txtstr; + } +} + +/** + * + * The main iCalendar object containing ZCiCalDataNodes and ZCiCalNodes. + * +*/ +class ZCiCal { + /** + * The root node of the object tree + * + * @var object + */ + var $tree=null; + /** + * The most recently created node in the tree + * + * @var object + */ + var $curnode=null; + +/** + * The main iCalendar object containing ZCiCalDataNodes and ZCiCalNodes. + * + * use maxevents and startevent to read events in multiple passes (to save memory) + * + * @param string $data icalendar feed string (empty if creating new feed) + * + * @param int $maxevents maximum # of events to read + * + * @param int $startevent starting event to read + * + * @return void + * +* +*/ +function __construct($data = "", $maxevents = 1000000, $startevent = 0) { + + if($data != ""){ + // unfold lines + // first change all eol chars to "\n" + $data = str_replace(array("\r\n", "\n\r", "\n", "\r"), "\n", $data); + // now unfold lines + //$data = str_replace(array("\n ", "\n "),"!?", $data); + $data = str_replace(array("\n ", "\n "),"", $data); + // replace special iCal chars + $data = str_replace(array("\\\\","\,"),array("\\",","), $data); + + // parse each line + $lines = explode("\n", $data); + + $linecount = 0; + $eventcount = 0; + $eventpos = 0; + foreach($lines as $line) { + //$line = str_replace("!?", "\n", $line); // add nl back into descriptions + // echo ($linecount + 1) . ": " . $line . "
"; + if(substr($line,0,6) == "BEGIN:") { + // start new object + $name = substr($line,6); + if($name == "VEVENT") + { + if($eventcount < $maxevents && $eventpos >= $startevent) + { + $this->curnode = new ZCiCalNode($name, $this->curnode); + if($this->tree == null) + $this->tree = $this->curnode; + } + } + else + { + $this->curnode = new ZCiCalNode($name, $this->curnode); + if($this->tree == null) + $this->tree = $this->curnode; + } + //echo "new node: " . $this->curnode->name . "
\n"; + /* + if($this->curnode->getParent() != null) + echo "parent of " . $this->curnode->getName() . " is " . $this->curnode->getParent()->getName() . "
"; + else + echo "parent of " . $this->curnode->getName() . " is null
"; + */ + } + else if(substr($line,0,4) == "END:") { + $name = substr($line,4); + if($name == "VEVENT") + { + if($eventcount < $maxevents && $eventpos >= $startevent) + { + $eventcount++; + if($this->curnode->getName() != $name) { + //panic, mismatch in iCal structure + //die("Can't read iCal file structure, expecting " . $this->curnode->getName() . " but reading $name instead"); + throw new Exception("Can't read iCal file structure, expecting " . $this->curnode->getName() . " but reading $name instead"); + } + if($this->curnode->getParent() != null) { + //echo "moving up from " . $this->curnode->getName() ; + $this->curnode = & $this->curnode->getParent(); + //echo " to " . $this->curnode->getName() . "
"; + //echo $this->curnode->getName() . " has " . count($this->curnode->child) . " children
"; + } + } + $eventpos++; + } + else + { + if($this->curnode->getName() != $name) { + //panic, mismatch in iCal structure + //die("Can't read iCal file structure, expecting " . $this->curnode->getName() . " but reading $name instead"); + throw new Exception("Can't read iCal file structure, expecting " . $this->curnode->getName() . " but reading $name instead"); + } + if($this->curnode->getParent() != null) { + //echo "moving up from " . $this->curnode->getName() ; + $this->curnode = & $this->curnode->getParent(); + //echo " to " . $this->curnode->getName() . "
"; + //echo $this->curnode->getName() . " has " . count($this->curnode->child) . " children
"; + } + } + } + else { + $datanode = new ZCiCalDataNode($line); + if($this->curnode->getName() == "VEVENT") + { + if($eventcount < $maxevents && $eventpos >= $startevent) + { + if($datanode->getName() == "EXDATE") + { + if(!array_key_exists($datanode->getName(),$this->curnode->data)) + { + $this->curnode->data[$datanode->getName()] = $datanode; + } + else + { + $this->curnode->data[$datanode->getName()]->value[] = $datanode->value[0]; + } + } + else + { + if(!array_key_exists($datanode->getName(),$this->curnode->data)) + { + $this->curnode->data[$datanode->getName()] = $datanode; + } + else + { + $tnode = $this->curnode->data[$datanode->getName()]; + $this->curnode->data[$datanode->getName()] = array(); + $this->curnode->data[$datanode->getName()][] = $tnode; + $this->curnode->data[$datanode->getName()][] = $datanode; + } + } + } + } + else + { + if($datanode->getName() == "EXDATE") + { + if(!array_key_exists($datanode->getName(),$this->curnode->data)) + { + $this->curnode->data[$datanode->getName()] = $datanode; + } + else + { + $this->curnode->data[$datanode->getName()]->value[] = $datanode->value[0]; + } + } + else + { + if(!array_key_exists($datanode->getName(),$this->curnode->data)) + { + $this->curnode->data[$datanode->getName()] = $datanode; + } + else + { + $tnode = $this->curnode->data[$datanode->getName()]; + $this->curnode->data[$datanode->getName()] = array(); + $this->curnode->data[$datanode->getName()][] = $tnode; + $this->curnode->data[$datanode->getName()][] = $datanode; + } + } + } + } + $linecount++; + } + } + else { + $name = "VCALENDAR"; + $this->curnode = new ZCiCalNode($name, $this->curnode); + $this->tree = $this->curnode; + $datanode = new ZCiCalDataNode("VERSION:2.0"); + $this->curnode->data[$datanode->getName()] = $datanode; + + $datanode = new ZCiCalDataNode("PRODID:-//ZContent.net//ZapCalLib 1.0//EN"); + $this->curnode->data[$datanode->getName()] = $datanode; + $datanode = new ZCiCalDataNode("CALSCALE:GREGORIAN"); + $this->curnode->data[$datanode->getName()] = $datanode; + $datanode = new ZCiCalDataNode("METHOD:PUBLISH"); + $this->curnode->data[$datanode->getName()] = $datanode; + } +} + +/** + * CountEvents() + * + * Return the # of VEVENTs in the object + * + * @return int + */ + +function countEvents() { + $count = 0; + if(isset($this->tree->child)){ + foreach($this->tree->child as $child){ + if($child->getName() == "VEVENT") + $count++; + } + } + return $count; +} + +/** + * CountVenues() + * + * Return the # of VVENUEs in the object + * + * @return int + */ + +function countVenues() { + $count = 0; + if(isset($this->tree->child)){ + foreach($this->tree->child as $child){ + if($child->getName() == "VVENUE") + $count++; + } + } + return $count; +} + +/** + * Export object to string + * + * This function exports all objects to an iCalendar string + * + * @return string an iCalendar formatted string + */ + +function export() { + return $this->tree->export($this->tree); +} + +/** + * Get first event in object list + * Use getNextEvent() to navigate through list + * + * @return object The first event, or null + */ +function &getFirstEvent() { + static $nullguard = null; + if ($this->countEvents() > 0){ + $child = $this->tree->child[0]; + $event=false; + while(!$event && $child != null){ + if($child->getName() == "VEVENT") + $event = true; + else + $child = $child->next; + } + return $child; + } + else + return $nullguard; +} + +/** + * Get next event in object list + * + * @param object $event The current event object + * + * @return object Returns the next event or null if past last event + */ +function &getNextEvent($event){ + do{ + $event = $event->next; + } while($event != null && $event->getName() != "VEVENT"); + return $event; +} + +/** + * Get first venue in object list + * Use getNextVenue() to navigate through list + * + * @return object The first venue, or null + */ +function &getFirstVenue() { + static $nullguard = null; + if ($this->countVenues() > 0){ + $child = $this->tree->child[0]; + $event=false; + while(!$event && $child != null){ + if($child->getName() == "VVENUE") + $event = true; + else + $child = $child->next; + } + return $child; + } + else + return $nullguard; +} + +/** + * Get next venue in object list + * + * @param object $venue The current venue object + * + * @return object Returns the next venue or null if past last venue + */ +function &getNextVenue($venue){ + do{ + $venue = $venue->next; + } while($venue != null && $venue->getName() != "VVENUE"); + return $venue; +} + +/** + * Get first child in object list + * Use getNextSibling() and getPreviousSibling() to navigate through list + * + * @param object $thisnode The parent object + * + * @return object The child object + */ +function &getFirstChild(& $thisnode){ + $nullvalue = null; + if(count($thisnode->child) > 0) { + //echo "moving from " . $thisnode->getName() . " to " . $thisnode->child[0]->getName() . "
"; + return $thisnode->child[0]; + } + else + return $nullvalue; +} + +/** + * Get next sibling in object list + * + * @param object $thisnode The current object + * + * @return object Returns the next sibling + */ +function &getNextSibling(& $thisnode){ + return $thisnode->next; +} + +/** + * Get previous sibling in object list + * + * @param object $thisnode The current object + * + * @return object Returns the previous sibling + */ +function &getPrevSibling(& $thisnode){ + return $thisnode->prev; +} + +/** + * Read date/time in iCal formatted string + * + * @param string iCal formated date/time string + * + * @return int Unix timestamp + * @deprecated Use ZDateHelper::toUnixDateTime() instead + */ + +function toUnixDateTime($datetime){ + $year = substr($datetime,0,4); + $month = substr($datetime,4,2); + $day = substr($datetime,6,2); + $hour = 0; + $minute = 0; + $second = 0; + if(strlen($datetime) > 8 && $datetime[8] == "T") { + $hour = substr($datetime,9,2); + $minute = substr($datetime,11,2); + $second = substr($datetime,13,2); + } + $d1 = mktime($hour, $minute, $second, $month, $day, $year); + +} + +/** + * fromUnixDateTime() + * + * Take Unix timestamp and format to iCal date/time string + * + * @param int $datetime Unix timestamp, leave blank for current date/time + * + * @return string formatted iCal date/time string + * @deprecated Use ZDateHelper::fromUnixDateTimetoiCal() instead + */ + +static function fromUnixDateTime($datetime = null){ + date_default_timezone_set('UTC'); + if($datetime == null) + $datetime = time(); + return date("Ymd\THis",$datetime); +} + + +/** + * fromUnixDate() + * + * Take Unix timestamp and format to iCal date string + * + * @param int $datetime Unix timestamp, leave blank for current date/time + * + * @return string formatted iCal date string + * @deprecated Use ZDateHelper::fromUnixDateTimetoiCal() instead + */ + +static function fromUnixDate($datetime = null){ + date_default_timezone_set('UTC'); + if($datetime == null) + $datetime = time(); + return date("Ymd",$datetime); +} + +/** + * Format into iCal time format from SQL date or SQL date-time format + * + * @param string $datetime SQL date or SQL date-time string + * + * @return string iCal formatted string + * @deprecated Use ZDateHelper::fromSqlDateTime() instead + */ +static function fromSqlDateTime($datetime = ""){ + if($datetime == "") + $datetime = ZDateHelper::toSqlDateTime(); + if(strlen($datetime) > 10) + return sprintf('%04d%02d%02dT%02d%02d%02d',substr($datetime,0,4),substr($datetime,5,2),substr($datetime,8,2), + substr($datetime,11,2),substr($datetime,14,2),substr($datetime,17,2)); + else + return sprintf('%04d%02d%02d',substr($datetime,0,4),substr($datetime,5,2),substr($datetime,8,2)); +} + +/** + * Format iCal time format to either SQL date or SQL date-time format + * + * @param string $datetime icalendar formatted date or date-time + * @return string SQL date or SQL date-time string + * @deprecated Use ZDateHelper::toSqlDateTime() instead + */ +static function toSqlDateTime($datetime = ""){ + if($datetime == "") + return ZDateHelper::toSqlDateTime(); + if(strlen($datetime) > 10) + return sprintf('%04d-%02d-%02d %02d:%02d:%02d',substr($datetime,0,4),substr($datetime,5,2),substr($datetime,8,2), + substr($datetime,11,2),substr($datetime,14,2),substr($datetime,17,2)); + else + return sprintf('%04d-%02d-%02d',substr($datetime,0,4),substr($datetime,5,2),substr($datetime,8,2)); +} + +/** + * Pull timezone data from node and put in array + * + * Returning array contains the following array keys: tzoffsetfrom, tzoffsetto, tzname, dtstart, rrule + * + * @param array $node timezone object + * + * @return array + */ +static function getTZValues($node){ + $tzvalues = array(); + + $tnode = @$node->data['TZOFFSETFROM']; + if($tnode != null){ + $tzvalues["tzoffsetfrom"] = $tnode->getValues(); + } + + $tnode = @$node->data['TZOFFSETTO']; + if($tnode != null){ + $tzvalues["tzoffsetto"] = $tnode->getValues(); + } + + $tnode = @$node->data['TZNAME']; + if($tnode != null){ + $tzvalues["tzname"] = $tnode->getValues(); + } + else + $tzvalues["tzname"] = ""; + + $tnode = @$node->data['DTSTART']; + if($tnode != null){ + $tzvalues["dtstart"] = ZDateHelper::fromiCaltoUnixDateTime($tnode->getValues()); + } + + $tnode = @$node->data['RRULE']; + if($tnode != null){ + $tzvalues["rrule"] = $tnode->getValues(); + //echo "rule: " . $tzvalues["rrule"] . "
\n"; + } + else{ + // no rule specified, let's create one from based on the date + $date = getdate($tzvalues["dtstart"]); + $month = $date["mon"]; + $day = $date["mday"]; + $tzvalues["rrule"] = "FREQ=YEARLY;INTERVAL=1;BYMONTH=$month;BYMONTHDAY=$day"; + } + + return $tzvalues; +} + +/** + * Escape slashes, commas and semicolons in strings + * + * @param string $content + * + * @return string + */ +static function formatContent($content) +{ + $content = str_replace(array('\\' , ',' , ';' ), array('\\\\' , '\\,' , '\\;' ),$content); + return $content; +} + +} + +?> diff --git a/ical/includes/recurringdate.php b/ical/includes/recurringdate.php index 9e49511..9f6920f 100644 --- a/ical/includes/recurringdate.php +++ b/ical/includes/recurringdate.php @@ -1,796 +1,796 @@ - - * @copyright Copyright (C) 2006 - 2017 by Dan Cogliano - * @license GNU GPLv3 - * @link http://icalendar.org/php-library.html - */ - -// No direct access -defined('_ZAPCAL') or die( 'Restricted access' ); - -/** - * Zap Calendar Recurring Date Helper Class - * - * Class to expand recurring rule to a list of dates - */ -class ZCRecurringDate { - /** - * rules string - * - * @var string - */ - var $rules = ""; - - /** - * start date in Unix Timestamp format (local timezone) - * - * @var integer - */ - var $startdate = null; - - /** - * repeating frequency type (i.e. "y" for yearly, "m" for monthly) - * - * @var string - */ - var $freq = null; - - /** - * timezone of event (using PHP timezones) - * - * @var string - */ - var $tzid = null; - - /** - * repeat mode ('c': count, 'u': until) - * - * @var string - */ - var $repeatmode=null; - - /** - * repeat until date (in UTC Unix Timestamp format) - * - * @var integer - */ - var $until=null; - - /** - * repeat count when repeat mode is 'c' - * - * @var integer - */ - var $count=0; - - /** - * array of repeat by seconds values - * - * @var array - */ - var $bysecond=array(); - - /** - * array of repeat by minutes values - * - * @var array - */ - var $byminute=array(); - - /** - * array of repeat by hour values - * - * @var array - */ - var $byhour=array(); - - /** - * array of repeat by day values - * - * @var array - */ - var $byday=array(); - - /** - * array of repeat by month day values - * - * @var array - */ - var $bymonthday=array(); - - /** - * array of repeat by month values - * - * @var array - */ - var $bymonth=array(); - - /** - * array of repeat by year values - * - * @var array - */ - var $byyear=array(); - - /** - * array of repeat by setpos values - * - * @var array - */ - var $bysetpos=array(); - - /** - * inteval of repeating event (i.e. every 2 weeks, every 6 months) - * - * @var integer - */ - var $interval = 1; - - /** - * debug level (for testing only) - * - * @var integer - */ - var $debug = 0; - - /** - * error string (future use) - * - * @var string - */ - var $error; - - /** - * array of exception dates in Unix Timestamp format (UTC dates) - * - * @var array - */ - var $exdates=array(); - -/** - * Expand recurring rule to a list of dates - * - * @param string $rules iCalendar rules string - * @param integer $startdate start date in Unix Timestamp format - * @param array $exdates array of exception dates - * @param string $tzid timezone of event (using PHP timezones) - */ - function __construct($rules, $startdate, $exdates = array(),$tzid = "UTC"){ - if(strlen($rules) > 0){ - //move exdates to event timezone for comparing with event date - for($i = 0; $i < count($exdates); $i++) - { - $exdates[$i] = ZDateHelper::toUnixDateTime(ZDateHelper::toLocalDateTime(ZDateHelper::toSQLDateTime($exdates[$i]),$tzid)); - } - - $rules=str_replace("\'","",$rules); - $this->rules = $rules; - if($startdate == null){ - // if not specified, use start date of beginning of last year - $tdate=getdate(); - $startdate=mktime(0,0,0,1,1,$tdate["year"] - 1); - } - $this->startdate = $startdate; - $this->tzid = $tzid; - $this->exdates = $exdates; - - $rules=explode(";", $rules); - $ruletype = ""; - foreach($rules as $rule){ - $item=explode("=",$rule); - //echo $item[0] . "=" . $item[1] . "
\n"; - switch($item[0]){ - case "FREQ": - switch($item[1]){ - case "YEARLY": - $this->freq="y"; - break; - case "MONTHLY": - $this->freq="m"; - break; - case "WEEKLY": - $this->freq="w"; - break; - case "DAILY": - $this->freq="d"; - break; - case "HOURLY": - $this->freq="h"; - break; - case "MINUTELY": - $this->freq="i"; - break; - case "SECONDLY": - $this->freq="s"; - break; - } - break; - case "INTERVAL": - $this->interval = $item[1]; - break; - case "BYSECOND": - $this->bysecond = explode(",",$item[1]); - $ruletype = $item[0]; - break; - case "BYMINUTE": - $this->byminute = explode(",",$item[1]); - $ruletype = $item[0]; - break; - case "BYHOUR": - $this->byhour = explode(",",$item[1]); - $ruletype = $item[0]; - break; - case "BYDAY": - $this->byday = explode(",",$item[1]); - $ruletype = $item[0]; - break; - case "BYMONTHDAY": - $this->bymonthday = explode(",",$item[1]); - $ruletype = $item[0]; - break; - case "BYMONTH": - $this->bymonth = explode(",",$item[1]); - $ruletype = $item[0]; - break; - case "BYYEAR": - $this->byyear = explode(",",$item[1]); - $ruletype = $item[0]; - break; - case "COUNT": - $this->count = intval($item[1]); - $this->repeatmode = "c"; - break; - case "BYSETPOS": - $this->bysetpos = explode(",",$item[1]); - break; - case "UNTIL": - $this->until = ZDateHelper::fromiCaltoUnixDateTime($item[1]); - $this->repeatmode = "u"; - break; - } - } - if(count($this->bysetpos) > 0){ - switch($ruletype){ - case "BYYEAR": - $this->byyear = $this->bySetPos($this->byyear,$this->bysetpos); - break; - case "BYMONTH": - $this->bymonth = $this->bySetPos($this->bymonth,$this->bysetpos); - break; - case "BYMONTHDAY": - $this->bymonthday = $this->bySetPos($this->bymonthday,$this->bysetpos); - break; - case "BYDAY": - $this->byday = $this->bySetPos($this->byday,$this->bysetpos); - break; - case "BYHOUR": - $this->byhour = $this->bySetPos($this->byhour,$this->bysetpos); - break; - case "BYMINUTE": - $this->byminute = $this->bySetPos($this->byminute,$this->bysetpos); - break; - case "BYSECOND": - $this->bysecond = $this->bySetPos($this->bysecond,$this->bysetpos); - break; - } - } - } - } - -/** - * bysetpos rule support - * - * @param array $bytype - * @param array $bysetpos - * - * @return array - */ - function bySetPos($bytype, $bysetpos){ - $result = array(); - for($i=0; $i < count($bysetpos); $i++){ - for($j=0; $j < count($bytype); $j++){ - $result[] = $bysetpos[$i] . $bytype[$j]; - } - } - return $result; - } - -/** - * save error - * - * @param string $msg - */ - function setError($msg){ - $this->error = $msg; - } - -/** - * get error message - * - * @return string error message - */ - function getError(){ - return $this->error; - } - -/** - * set debug level (0: none, 1: minimal, 2: more output) - * - * @param integer $level - * - */ - function setDebug($level) - { - $this->debug = $level; - } - -/** - * display debug message - * - * @param integer $level - * @param string $msg - */ - function debug($level, $msg){ - if($this->debug >= $level) - echo $msg . "
\n"; - } - -/** - * Get repeating dates by year - * - * @param integer $startdate start date of repeating events, in Unix timestamp format - * @param integer $enddate end date of repeating events, in Unix timestamp format - * @param array $rdates array to contain expanded repeating dates - * @param string $tzid timezone of event (using PHP timezones) - * - * @return integer count of dates - */ - private function byYear($startdate, $enddate, &$rdates, $tzid="UTC"){ - self::debug(1,"byYear(" . ZDateHelper::toSqlDateTime($startdate) . "," - . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); - $count = 0; - if(count($this->byyear) > 0){ - foreach($this->byyear as $year){ - $t = getdate($startdate); - $wdate = mktime($t[hours],$t[minutes],$t[seconds],$t[month],$t[mday],$year); - if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ - $count = $this->byMonth($wdate, $enddate, $rdates, $tzid); - if($count == 0) { - $rdates[] = $wdate; - $count++; - } - } - } - } - else if(!$this->maxDates($rdates)) - $count = $this->byMonth($startdate, $enddate, $rdates, $tzid); - self::debug(1,"byYear() returned " . $count ); - return $count; - } - -/** - * Get repeating dates by month - * - * @param integer $startdate start date of repeating events, in Unix timestamp format - * @param integer $enddate end date of repeating events, in Unix timestamp format - * @param array $rdates array to contain expanded repeating dates - * @param string $tzid timezone of event (using PHP timezones) - * - * @return integer count of dates - */ - private function byMonth($startdate, $enddate, &$rdates, $tzid="UTC"){ - self::debug(1,"byMonth(" . ZDateHelper::toSqlDateTime($startdate) . "," - . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); - $count = 0; - if(count($this->bymonth) > 0){ - foreach($this->bymonth as $month){ - $t = getdate($startdate); - $wdate = mktime($t["hours"],$t["minutes"],$t["seconds"],$month,$t["mday"],$t["year"]); - if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ - $count = $this->byMonthDay($wdate, $enddate, $rdates, $tzid); - if($count == 0) { - $rdates[] = $wdate; - $count++; - } - } - } - } - else if(!$this->maxDates($rdates)) - $count = $this->byMonthDay($startdate, $enddate, $rdates, $tzid); - self::debug(1,"byMonth() returned " . $count ); - return $count; - } - -/** - * Get repeating dates by month day - * - * @param integer $startdate start date of repeating events, in Unix timestamp format - * @param integer $enddate end date of repeating events, in Unix timestamp format - * @param array $rdates array to contain expanded repeating dates - * @param string $tzid timezone of event (using PHP timezones) - * - * @return integer count of dates - */ - private function byMonthDay($startdate, $enddate, &$rdates, $tzid="UTC"){ - self::debug(1,"byMonthDay(" . ZDateHelper::toSqlDateTime($startdate) . "," - . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); - $count = 0; - self::debug(1,"start date: " . ZDateHelper::toSqlDateTime($startdate)); - if(count($this->bymonthday) > 0){ - foreach($this->bymonthday as $day){ - $day = intval($day); - $t = getdate($startdate); - $wdate = mktime($t['hours'],$t['minutes'],$t['seconds'],$t['mon'],$day,$t['year']); - self::debug(2,"mktime(" . $t['hours'] . ", " . $t['minutes'] - . ", " . $t['mon'] . ", " . $day . ", " . $t['year'] . ") returned $wdate"); - if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ - $count = $this->byDay($wdate, $enddate, $rdates, $tzid); - if($count == 0) { - $rdates[] = $wdate; - $count++; - } - } - } - } - else if(!$this->maxDates($rdates)) { - self::debug(1,"start date: " . ZDateHelper::toSqlDateTime($startdate)); - $count = $this->byDay($startdate, $enddate, $rdates, $tzid); - } - self::debug(1,"byMonthDay() returned " . $count ); - return $count; - } - -/** - * Get repeating dates by day - * - * @param integer $startdate start date of repeating events, in Unix timestamp format - * @param integer $enddate end date of repeating events, in Unix timestamp format - * @param array $rdates array to contain expanded repeating dates - * @param string $tzid timezone of event (using PHP timezones) - * - * @return integer count of dates - */ - private function byDay($startdate, $enddate, &$rdates, $tzid="UTC"){ - self::debug(1,"byDay(" . ZDateHelper::toSqlDateTime($startdate) . "," - . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); - $days = array( - "SU" => 0, - "MO" => 1, - "TU" => 2, - "WE" => 3, - "TH" => 4, - "FR" => 5, - "SA" => 6); - $idays = array( - 0 => "SU", - 1 => "MO", - 2 => "TU", - 3 => "WE", - 4 => "TH", - 5 => "FR", - 6 => "SA"); - - $count = 0; - if(count($this->byday) > 0){ - if(empty($this->byday[0])) - { - $this->byday[0] = $idays[date("w",$startdate)]; - } - foreach($this->byday as $tday){ - $t = getdate($startdate); - $day = substr($tday,strlen($tday) - 2); - if(strlen($day) < 2) - { - // missing start day, use current date for DOW - $day = $idays[date("w",$startdate)]; - } - if(strlen($tday) > 2) { - $imin = 1; - $imax = 5; // max # of occurances in a month - if(strlen($tday) > 2) - $imin = $imax = substr($tday,0,strlen($tday) - 2); - self::debug(2,"imin: $imin, imax: $imax, tday: $tday, day: $day, daynum: {$days[$day]}"); - for($i = $imin; $i <= $imax; $i++){ - $wdate = ZDateHelper::getDateFromDay($startdate,$i-1,$days[$day],$tzid); - self::debug(2,"getDateFromDay(" . ZDateHelper::toSqlDateTime($startdate) - . ",$i,{$days[$day]}) returned " . ZDateHelper::toSqlDateTime($wdate)); - if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ - $count = $this->byHour($wdate, $enddate, $rdates); - if($count == 0){ - $rdates[] = $wdate; - $count++; - //break; - } - } - } - } - else { - // day of week version - $startdate_dow = date("w",$startdate); - $datedelta = $days[$day] - $startdate_dow; - self::debug(2, "start_dow: $startdate_dow, datedelta: $datedelta"); - if($datedelta >= 0) - { - $wdate = ZDateHelper::addDate($startdate,0,0,0,0,$datedelta,0,$this->tzid); - self::debug(2, "wdate: " . ZDateHelper::toSqlDateTime($wdate)); - if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ - $count = $this->byHour($wdate, $enddate, $rdates); - if($count == 0){ - $rdates[] = $wdate; - $count++; - self::debug(2,"adding date " . ZDateHelper::toSqlDateTime($wdate) ); - } - } - } - } - } - } - else if(!$this->maxDates($rdates)) - $count = $this->byHour($startdate, $enddate, $rdates); - self::debug(1,"byDay() returned " . $count ); - return $count; - } - -/** - * Get repeating dates by hour - * - * @param integer $startdate start date of repeating events, in Unix timestamp format - * @param integer $enddate end date of repeating events, in Unix timestamp format - * @param array $rdates array to contain expanded repeating dates - * @param string $tzid timezone of event (using PHP timezones) - * - * @return integer count of dates - */ - private function byHour($startdate, $enddate, &$rdates, $tzid="UTC"){ - self::debug(1,"byHour(" . ZDateHelper::toSqlDateTime($startdate) . "," - . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); - $count = 0; - if(count($this->byhour) > 0){ - foreach($this->byhour as $hour){ - $t = getdate($startdate); - $wdate = mktime($hour,$t["minutes"],$t["seconds"],$t["mon"],$t["mday"],$t["year"]); - self::debug(2,"checking date/time " . ZDateHelper::toSqlDateTime($wdate)); - if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ - $count = $this->byMinute($wdate, $enddate, $rdates); - if($count == 0) { - $rdates[] = $wdate; - $count++; - } - } - } - } - else if(!$this->maxDates($rdates)) - $count = $this->byMinute($startdate, $enddate, $rdates); - self::debug(1,"byHour() returned " . $count ); - return $count; - } - -/** - * Get repeating dates by minute - * - * @param integer $startdate start date of repeating events, in Unix timestamp format - * @param integer $enddate end date of repeating events, in Unix timestamp format - * @param array $rdates array to contain expanded repeating dates - * @param string $tzid timezone of event (using PHP timezones) - * - * @return integer count of dates - */ - private function byMinute($startdate, $enddate, &$rdates, $tzid="UTC"){ - self::debug(1,"byMinute(" . ZDateHelper::toSqlDateTime($startdate) . "," - . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); - $count = 0; - if(count($this->byminute) > 0){ - foreach($this->byminute as $minute){ - $t = getdate($startdate); - $wdate = mktime($t["hours"],$minute,$t["seconds"],$t["mon"],$t["mday"],$t["year"]); - if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ - $count = $this->bySecond($wdate, $enddate, $rdates); - if($count == 0) { - $rdates[] = $wdate; - $count++; - } - } - } - } - else if(!$this->maxDates($rdates)) - $count = $this->bySecond($startdate, $enddate, $rdates); - self::debug(1,"byMinute() returned " . $count ); - return $count; - } -/** - * Get repeating dates by second - * - * @param integer $startdate start date of repeating events, in Unix timestamp format - * @param integer $enddate end date of repeating events, in Unix timestamp format - * @param array $rdates array to contain expanded repeating dates - * @param string $tzid timezone of event (using PHP timezones) - * - * @return integer count of dates - */ - private function bySecond($startdate, $enddate, &$rdates, $tzid="UTC"){ - self::debug(1,"bySecond(" . ZDateHelper::toSqlDateTime($startdate) . "," - . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); - $count = 0; - if(count($this->bysecond) > 0){ - foreach($this->bysecond as $second){ - $t = getdate($startdate); - $wdate = mktime($t["hours"],$t["minutes"],$second,$t["mon"],$t["mday"],$t["year"]); - if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ - $rdates[] = $wdate; - $count++; - } - } - } - self::debug(1,"bySecond() returned " . $count ); - return $count; - } - -/** - * Determine if the loop has reached the end date - * - * @param array $rdates array of repeating dates - * - * @return boolean - */ - private function maxDates($rdates){ - if($this->repeatmode == "c" && count($rdates) >= $this->count) - return true; // exceeded count - else if(count($rdates) > 0 && $this->repeatmode == "u" && $rdates[count($rdates) - 1] > $this->until){ - return true; //past date - } - return false; - } - -/** - * Get array of dates from recurring rule - * - * @param $maxdate integer maximum date to appear in repeating dates in Unix timestamp format - * - * @return array - */ - public function getDates($maxdate = null){ - //$this->debug = 2; - self::debug(1,"getDates()"); - $nextdate = $enddate = $this->startdate; - $rdates = array(); - $done = false; - $eventcount = 0; - $loopcount = 0; - self::debug(2,"freq: " . $this->freq . ", interval: " . $this->interval); - while(!$done){ - self::debug(1,"*** Frequency ({$this->freq}) loop pass $loopcount ***"); - switch($this->freq){ - case "y": - if($eventcount > 0) - { - $nextdate = ZDateHelper::addDate($nextdate,0,0,0,0,0,$this->interval,$this->tzid); - self::debug(2,"addDate() returned " . ZDateHelper::toSqlDateTime($nextdate)); - if(!empty($this->byday)){ - $t = getdate($nextdate); - $nextdate = gmmktime($t["hours"],$t["minutes"],$t["seconds"],$t["mon"],1,$t["year"]); - } - self::debug(2,"nextdate set to $nextdate (". ZDateHelper::toSQLDateTime($nextdate) . ")"); - } - $enddate=ZDateHelper::addDate($nextdate,0,0,0,0,0,1); - break; - case "m": - if($eventcount > 0) - { - - $nextdate = ZDateHelper::addDate($nextdate,0,0,0,$this->interval,0,0,$this->tzid); - self::debug(2,"addDate() returned " . ZDateHelper::toSqlDateTime($nextdate)); - } - if(count($this->byday) > 0) - { - $t = getdate($nextdate); - if($t["mday"] > 28) - { - //check for short months when using month by day, make sure we do not overshoot the counter and skip a month - $nextdate = ZDateHelper::addDate($nextdate,0,0,0,$this->interval,0,0,$this->tzid); - $t2 = getdate($nextdate); - if($t2["mday"] < $t["mday"]) - { - // oops, skipped a month, backup to previous month - $nextdate = ZDateHelper::addDate($nextdate,0,0,0,0,$t2["mday"] - $t["mday"],0,$this->tzid); - } - } - $t = getdate($nextdate); - $nextdate = mktime($t["hours"],$t["minutes"],$t["seconds"],$t["mon"],1,$t["year"]); - } - self::debug(2,"nextdate set to $nextdate (". ZDateHelper::toSQLDateTime($nextdate) . ")"); - $enddate=ZDateHelper::addDate($nextdate,0,0,0,$this->interval,0,0); - break; - case "w": - if($eventcount == 0) - $nextdate=$nextdate; - else { - $nextdate = ZDateHelper::addDate($nextdate,0,0,0,0,$this->interval*7,0,$this->tzid); - if(count($this->byday) > 0){ - $dow = date("w", $nextdate); - // move to beginning of week (Sunday) - $bow = 0; - $diff = $bow - $dow; - if($diff > 0) - $diff = $diff - 7; - $nextdate = ZDateHelper::addDate($nextdate,0,0,0,0,$diff,0); - } - self::debug(2,"nextdate set to $nextdate (". ZDateHelper::toSQLDateTime($nextdate) . ")"); - } - $enddate=ZDateHelper::addDate($nextdate,0,0,0,0,$this->interval*7,0); - break; - case "d": - $nextdate=($eventcount==0?$nextdate: - ZDateHelper::addDate($nextdate,0,0,0,0,$this->interval,0,$this->tzid)); - $enddate=ZDateHelper::addDate($nextdate,0,0,0,0,1,0); - break; - } - - $count = $this->byYear($nextdate,$enddate,$rdates,$this->tzid); - $eventcount += $count; - if($maxdate > 0 && $maxdate < $nextdate) - { - array_pop($rdates); - $done = true; - } - else if($count == 0 && !$this->maxDates($rdates)){ - $rdates[] = $nextdate; - $eventcount++; - } - if($this->maxDates($rdates)) - $done = true; - - $year = date("Y", $nextdate); - if($year > _ZAPCAL_MAXYEAR) - { - $done = true; - } - $loopcount++; - if($loopcount > _ZAPCAL_MAXYEAR){ - $done = true; - throw new Exception("Infinite loop detected in getDates()"); - } - } - if($this->repeatmode == "u" && $rdates[count($rdates) - 1] > $this->until){ - // erase last item - array_pop($rdates); - } - $count1 = count($rdates); - $rdates = array_unique($rdates); - $count2 = count($rdates); - $dups = $count1 - $count2; - $excount = 0; - - foreach($this->exdates as $exdate) - { - if($pos = array_search($exdate,$rdates)) - { - array_splice($rdates,$pos,1); - $excount++; - } - } - self::debug(1,"getDates() returned " . count($rdates) . " dates, removing $dups duplicates, $excount exceptions"); - - - if($this->debug >= 2) - { - self::debug(2,"Recurring Dates:"); - foreach($rdates as $rdate) - { - $d = getdate($rdate); - self::debug(2,ZDateHelper::toSQLDateTime($rdate) . " " . $d["wday"] ); - } - self::debug(2,"Exception Dates:"); - foreach($this->exdates as $exdate) - { - self::debug(2, ZDateHelper::toSQLDateTime($exdate)); - } - //exit; - } - - return $rdates; - } -} + + * @copyright Copyright (C) 2006 - 2017 by Dan Cogliano + * @license GNU GPLv3 + * @link http://icalendar.org/php-library.html + */ + +// No direct access +defined('_ZAPCAL') or die( 'Restricted access' ); + +/** + * Zap Calendar Recurring Date Helper Class + * + * Class to expand recurring rule to a list of dates + */ +class ZCRecurringDate { + /** + * rules string + * + * @var string + */ + var $rules = ""; + + /** + * start date in Unix Timestamp format (local timezone) + * + * @var integer + */ + var $startdate = null; + + /** + * repeating frequency type (i.e. "y" for yearly, "m" for monthly) + * + * @var string + */ + var $freq = null; + + /** + * timezone of event (using PHP timezones) + * + * @var string + */ + var $tzid = null; + + /** + * repeat mode ('c': count, 'u': until) + * + * @var string + */ + var $repeatmode=null; + + /** + * repeat until date (in UTC Unix Timestamp format) + * + * @var integer + */ + var $until=null; + + /** + * repeat count when repeat mode is 'c' + * + * @var integer + */ + var $count=0; + + /** + * array of repeat by seconds values + * + * @var array + */ + var $bysecond=array(); + + /** + * array of repeat by minutes values + * + * @var array + */ + var $byminute=array(); + + /** + * array of repeat by hour values + * + * @var array + */ + var $byhour=array(); + + /** + * array of repeat by day values + * + * @var array + */ + var $byday=array(); + + /** + * array of repeat by month day values + * + * @var array + */ + var $bymonthday=array(); + + /** + * array of repeat by month values + * + * @var array + */ + var $bymonth=array(); + + /** + * array of repeat by year values + * + * @var array + */ + var $byyear=array(); + + /** + * array of repeat by setpos values + * + * @var array + */ + var $bysetpos=array(); + + /** + * inteval of repeating event (i.e. every 2 weeks, every 6 months) + * + * @var integer + */ + var $interval = 1; + + /** + * debug level (for testing only) + * + * @var integer + */ + var $debug = 0; + + /** + * error string (future use) + * + * @var string + */ + var $error; + + /** + * array of exception dates in Unix Timestamp format (UTC dates) + * + * @var array + */ + var $exdates=array(); + +/** + * Expand recurring rule to a list of dates + * + * @param string $rules iCalendar rules string + * @param integer $startdate start date in Unix Timestamp format + * @param array $exdates array of exception dates + * @param string $tzid timezone of event (using PHP timezones) + */ + function __construct($rules, $startdate, $exdates = array(),$tzid = "UTC"){ + if(strlen($rules) > 0){ + //move exdates to event timezone for comparing with event date + for($i = 0; $i < count($exdates); $i++) + { + $exdates[$i] = ZDateHelper::toUnixDateTime(ZDateHelper::toLocalDateTime(ZDateHelper::toSQLDateTime($exdates[$i]),$tzid)); + } + + $rules=str_replace("\'","",$rules); + $this->rules = $rules; + if($startdate == null){ + // if not specified, use start date of beginning of last year + $tdate=getdate(); + $startdate=mktime(0,0,0,1,1,$tdate["year"] - 1); + } + $this->startdate = $startdate; + $this->tzid = $tzid; + $this->exdates = $exdates; + + $rules=explode(";", $rules); + $ruletype = ""; + foreach($rules as $rule){ + $item=explode("=",$rule); + //echo $item[0] . "=" . $item[1] . "
\n"; + switch($item[0]){ + case "FREQ": + switch($item[1]){ + case "YEARLY": + $this->freq="y"; + break; + case "MONTHLY": + $this->freq="m"; + break; + case "WEEKLY": + $this->freq="w"; + break; + case "DAILY": + $this->freq="d"; + break; + case "HOURLY": + $this->freq="h"; + break; + case "MINUTELY": + $this->freq="i"; + break; + case "SECONDLY": + $this->freq="s"; + break; + } + break; + case "INTERVAL": + $this->interval = $item[1]; + break; + case "BYSECOND": + $this->bysecond = explode(",",$item[1]); + $ruletype = $item[0]; + break; + case "BYMINUTE": + $this->byminute = explode(",",$item[1]); + $ruletype = $item[0]; + break; + case "BYHOUR": + $this->byhour = explode(",",$item[1]); + $ruletype = $item[0]; + break; + case "BYDAY": + $this->byday = explode(",",$item[1]); + $ruletype = $item[0]; + break; + case "BYMONTHDAY": + $this->bymonthday = explode(",",$item[1]); + $ruletype = $item[0]; + break; + case "BYMONTH": + $this->bymonth = explode(",",$item[1]); + $ruletype = $item[0]; + break; + case "BYYEAR": + $this->byyear = explode(",",$item[1]); + $ruletype = $item[0]; + break; + case "COUNT": + $this->count = intval($item[1]); + $this->repeatmode = "c"; + break; + case "BYSETPOS": + $this->bysetpos = explode(",",$item[1]); + break; + case "UNTIL": + $this->until = ZDateHelper::fromiCaltoUnixDateTime($item[1]); + $this->repeatmode = "u"; + break; + } + } + if(count($this->bysetpos) > 0){ + switch($ruletype){ + case "BYYEAR": + $this->byyear = $this->bySetPos($this->byyear,$this->bysetpos); + break; + case "BYMONTH": + $this->bymonth = $this->bySetPos($this->bymonth,$this->bysetpos); + break; + case "BYMONTHDAY": + $this->bymonthday = $this->bySetPos($this->bymonthday,$this->bysetpos); + break; + case "BYDAY": + $this->byday = $this->bySetPos($this->byday,$this->bysetpos); + break; + case "BYHOUR": + $this->byhour = $this->bySetPos($this->byhour,$this->bysetpos); + break; + case "BYMINUTE": + $this->byminute = $this->bySetPos($this->byminute,$this->bysetpos); + break; + case "BYSECOND": + $this->bysecond = $this->bySetPos($this->bysecond,$this->bysetpos); + break; + } + } + } + } + +/** + * bysetpos rule support + * + * @param array $bytype + * @param array $bysetpos + * + * @return array + */ + function bySetPos($bytype, $bysetpos){ + $result = array(); + for($i=0; $i < count($bysetpos); $i++){ + for($j=0; $j < count($bytype); $j++){ + $result[] = $bysetpos[$i] . $bytype[$j]; + } + } + return $result; + } + +/** + * save error + * + * @param string $msg + */ + function setError($msg){ + $this->error = $msg; + } + +/** + * get error message + * + * @return string error message + */ + function getError(){ + return $this->error; + } + +/** + * set debug level (0: none, 1: minimal, 2: more output) + * + * @param integer $level + * + */ + function setDebug($level) + { + $this->debug = $level; + } + +/** + * display debug message + * + * @param integer $level + * @param string $msg + */ + function debug($level, $msg){ + if($this->debug >= $level) + echo $msg . "
\n"; + } + +/** + * Get repeating dates by year + * + * @param integer $startdate start date of repeating events, in Unix timestamp format + * @param integer $enddate end date of repeating events, in Unix timestamp format + * @param array $rdates array to contain expanded repeating dates + * @param string $tzid timezone of event (using PHP timezones) + * + * @return integer count of dates + */ + private function byYear($startdate, $enddate, &$rdates, $tzid="UTC"){ + self::debug(1,"byYear(" . ZDateHelper::toSqlDateTime($startdate) . "," + . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); + $count = 0; + if(count($this->byyear) > 0){ + foreach($this->byyear as $year){ + $t = getdate($startdate); + $wdate = mktime($t[hours],$t[minutes],$t[seconds],$t[month],$t[mday],$year); + if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ + $count = $this->byMonth($wdate, $enddate, $rdates, $tzid); + if($count == 0) { + $rdates[] = $wdate; + $count++; + } + } + } + } + else if(!$this->maxDates($rdates)) + $count = $this->byMonth($startdate, $enddate, $rdates, $tzid); + self::debug(1,"byYear() returned " . $count ); + return $count; + } + +/** + * Get repeating dates by month + * + * @param integer $startdate start date of repeating events, in Unix timestamp format + * @param integer $enddate end date of repeating events, in Unix timestamp format + * @param array $rdates array to contain expanded repeating dates + * @param string $tzid timezone of event (using PHP timezones) + * + * @return integer count of dates + */ + private function byMonth($startdate, $enddate, &$rdates, $tzid="UTC"){ + self::debug(1,"byMonth(" . ZDateHelper::toSqlDateTime($startdate) . "," + . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); + $count = 0; + if(count($this->bymonth) > 0){ + foreach($this->bymonth as $month){ + $t = getdate($startdate); + $wdate = mktime($t["hours"],$t["minutes"],$t["seconds"],$month,$t["mday"],$t["year"]); + if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ + $count = $this->byMonthDay($wdate, $enddate, $rdates, $tzid); + if($count == 0) { + $rdates[] = $wdate; + $count++; + } + } + } + } + else if(!$this->maxDates($rdates)) + $count = $this->byMonthDay($startdate, $enddate, $rdates, $tzid); + self::debug(1,"byMonth() returned " . $count ); + return $count; + } + +/** + * Get repeating dates by month day + * + * @param integer $startdate start date of repeating events, in Unix timestamp format + * @param integer $enddate end date of repeating events, in Unix timestamp format + * @param array $rdates array to contain expanded repeating dates + * @param string $tzid timezone of event (using PHP timezones) + * + * @return integer count of dates + */ + private function byMonthDay($startdate, $enddate, &$rdates, $tzid="UTC"){ + self::debug(1,"byMonthDay(" . ZDateHelper::toSqlDateTime($startdate) . "," + . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); + $count = 0; + self::debug(1,"start date: " . ZDateHelper::toSqlDateTime($startdate)); + if(count($this->bymonthday) > 0){ + foreach($this->bymonthday as $day){ + $day = intval($day); + $t = getdate($startdate); + $wdate = mktime($t['hours'],$t['minutes'],$t['seconds'],$t['mon'],$day,$t['year']); + self::debug(2,"mktime(" . $t['hours'] . ", " . $t['minutes'] + . ", " . $t['mon'] . ", " . $day . ", " . $t['year'] . ") returned $wdate"); + if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ + $count = $this->byDay($wdate, $enddate, $rdates, $tzid); + if($count == 0) { + $rdates[] = $wdate; + $count++; + } + } + } + } + else if(!$this->maxDates($rdates)) { + self::debug(1,"start date: " . ZDateHelper::toSqlDateTime($startdate)); + $count = $this->byDay($startdate, $enddate, $rdates, $tzid); + } + self::debug(1,"byMonthDay() returned " . $count ); + return $count; + } + +/** + * Get repeating dates by day + * + * @param integer $startdate start date of repeating events, in Unix timestamp format + * @param integer $enddate end date of repeating events, in Unix timestamp format + * @param array $rdates array to contain expanded repeating dates + * @param string $tzid timezone of event (using PHP timezones) + * + * @return integer count of dates + */ + private function byDay($startdate, $enddate, &$rdates, $tzid="UTC"){ + self::debug(1,"byDay(" . ZDateHelper::toSqlDateTime($startdate) . "," + . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); + $days = array( + "SU" => 0, + "MO" => 1, + "TU" => 2, + "WE" => 3, + "TH" => 4, + "FR" => 5, + "SA" => 6); + $idays = array( + 0 => "SU", + 1 => "MO", + 2 => "TU", + 3 => "WE", + 4 => "TH", + 5 => "FR", + 6 => "SA"); + + $count = 0; + if(count($this->byday) > 0){ + if(empty($this->byday[0])) + { + $this->byday[0] = $idays[date("w",$startdate)]; + } + foreach($this->byday as $tday){ + $t = getdate($startdate); + $day = substr($tday,strlen($tday) - 2); + if(strlen($day) < 2) + { + // missing start day, use current date for DOW + $day = $idays[date("w",$startdate)]; + } + if(strlen($tday) > 2) { + $imin = 1; + $imax = 5; // max # of occurances in a month + if(strlen($tday) > 2) + $imin = $imax = substr($tday,0,strlen($tday) - 2); + self::debug(2,"imin: $imin, imax: $imax, tday: $tday, day: $day, daynum: {$days[$day]}"); + for($i = $imin; $i <= $imax; $i++){ + $wdate = ZDateHelper::getDateFromDay($startdate,$i-1,$days[$day],$tzid); + self::debug(2,"getDateFromDay(" . ZDateHelper::toSqlDateTime($startdate) + . ",$i,{$days[$day]}) returned " . ZDateHelper::toSqlDateTime($wdate)); + if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ + $count = $this->byHour($wdate, $enddate, $rdates); + if($count == 0){ + $rdates[] = $wdate; + $count++; + //break; + } + } + } + } + else { + // day of week version + $startdate_dow = date("w",$startdate); + $datedelta = $days[$day] - $startdate_dow; + self::debug(2, "start_dow: $startdate_dow, datedelta: $datedelta"); + if($datedelta >= 0) + { + $wdate = ZDateHelper::addDate($startdate,0,0,0,0,$datedelta,0,$this->tzid); + self::debug(2, "wdate: " . ZDateHelper::toSqlDateTime($wdate)); + if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ + $count = $this->byHour($wdate, $enddate, $rdates); + if($count == 0){ + $rdates[] = $wdate; + $count++; + self::debug(2,"adding date " . ZDateHelper::toSqlDateTime($wdate) ); + } + } + } + } + } + } + else if(!$this->maxDates($rdates)) + $count = $this->byHour($startdate, $enddate, $rdates); + self::debug(1,"byDay() returned " . $count ); + return $count; + } + +/** + * Get repeating dates by hour + * + * @param integer $startdate start date of repeating events, in Unix timestamp format + * @param integer $enddate end date of repeating events, in Unix timestamp format + * @param array $rdates array to contain expanded repeating dates + * @param string $tzid timezone of event (using PHP timezones) + * + * @return integer count of dates + */ + private function byHour($startdate, $enddate, &$rdates, $tzid="UTC"){ + self::debug(1,"byHour(" . ZDateHelper::toSqlDateTime($startdate) . "," + . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); + $count = 0; + if(count($this->byhour) > 0){ + foreach($this->byhour as $hour){ + $t = getdate($startdate); + $wdate = mktime($hour,$t["minutes"],$t["seconds"],$t["mon"],$t["mday"],$t["year"]); + self::debug(2,"checking date/time " . ZDateHelper::toSqlDateTime($wdate)); + if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ + $count = $this->byMinute($wdate, $enddate, $rdates); + if($count == 0) { + $rdates[] = $wdate; + $count++; + } + } + } + } + else if(!$this->maxDates($rdates)) + $count = $this->byMinute($startdate, $enddate, $rdates); + self::debug(1,"byHour() returned " . $count ); + return $count; + } + +/** + * Get repeating dates by minute + * + * @param integer $startdate start date of repeating events, in Unix timestamp format + * @param integer $enddate end date of repeating events, in Unix timestamp format + * @param array $rdates array to contain expanded repeating dates + * @param string $tzid timezone of event (using PHP timezones) + * + * @return integer count of dates + */ + private function byMinute($startdate, $enddate, &$rdates, $tzid="UTC"){ + self::debug(1,"byMinute(" . ZDateHelper::toSqlDateTime($startdate) . "," + . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); + $count = 0; + if(count($this->byminute) > 0){ + foreach($this->byminute as $minute){ + $t = getdate($startdate); + $wdate = mktime($t["hours"],$minute,$t["seconds"],$t["mon"],$t["mday"],$t["year"]); + if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ + $count = $this->bySecond($wdate, $enddate, $rdates); + if($count == 0) { + $rdates[] = $wdate; + $count++; + } + } + } + } + else if(!$this->maxDates($rdates)) + $count = $this->bySecond($startdate, $enddate, $rdates); + self::debug(1,"byMinute() returned " . $count ); + return $count; + } +/** + * Get repeating dates by second + * + * @param integer $startdate start date of repeating events, in Unix timestamp format + * @param integer $enddate end date of repeating events, in Unix timestamp format + * @param array $rdates array to contain expanded repeating dates + * @param string $tzid timezone of event (using PHP timezones) + * + * @return integer count of dates + */ + private function bySecond($startdate, $enddate, &$rdates, $tzid="UTC"){ + self::debug(1,"bySecond(" . ZDateHelper::toSqlDateTime($startdate) . "," + . ZDateHelper::toSqlDateTime($enddate) . "," . count($rdates) . " dates)"); + $count = 0; + if(count($this->bysecond) > 0){ + foreach($this->bysecond as $second){ + $t = getdate($startdate); + $wdate = mktime($t["hours"],$t["minutes"],$second,$t["mon"],$t["mday"],$t["year"]); + if($startdate <= $wdate && $wdate < $enddate && !$this->maxDates($rdates)){ + $rdates[] = $wdate; + $count++; + } + } + } + self::debug(1,"bySecond() returned " . $count ); + return $count; + } + +/** + * Determine if the loop has reached the end date + * + * @param array $rdates array of repeating dates + * + * @return boolean + */ + private function maxDates($rdates){ + if($this->repeatmode == "c" && count($rdates) >= $this->count) + return true; // exceeded count + else if(count($rdates) > 0 && $this->repeatmode == "u" && $rdates[count($rdates) - 1] > $this->until){ + return true; //past date + } + return false; + } + +/** + * Get array of dates from recurring rule + * + * @param $maxdate integer maximum date to appear in repeating dates in Unix timestamp format + * + * @return array + */ + public function getDates($maxdate = null){ + //$this->debug = 2; + self::debug(1,"getDates()"); + $nextdate = $enddate = $this->startdate; + $rdates = array(); + $done = false; + $eventcount = 0; + $loopcount = 0; + self::debug(2,"freq: " . $this->freq . ", interval: " . $this->interval); + while(!$done){ + self::debug(1,"*** Frequency ({$this->freq}) loop pass $loopcount ***"); + switch($this->freq){ + case "y": + if($eventcount > 0) + { + $nextdate = ZDateHelper::addDate($nextdate,0,0,0,0,0,$this->interval,$this->tzid); + self::debug(2,"addDate() returned " . ZDateHelper::toSqlDateTime($nextdate)); + if(!empty($this->byday)){ + $t = getdate($nextdate); + $nextdate = gmmktime($t["hours"],$t["minutes"],$t["seconds"],$t["mon"],1,$t["year"]); + } + self::debug(2,"nextdate set to $nextdate (". ZDateHelper::toSQLDateTime($nextdate) . ")"); + } + $enddate=ZDateHelper::addDate($nextdate,0,0,0,0,0,1); + break; + case "m": + if($eventcount > 0) + { + + $nextdate = ZDateHelper::addDate($nextdate,0,0,0,$this->interval,0,0,$this->tzid); + self::debug(2,"addDate() returned " . ZDateHelper::toSqlDateTime($nextdate)); + } + if(count($this->byday) > 0) + { + $t = getdate($nextdate); + if($t["mday"] > 28) + { + //check for short months when using month by day, make sure we do not overshoot the counter and skip a month + $nextdate = ZDateHelper::addDate($nextdate,0,0,0,$this->interval,0,0,$this->tzid); + $t2 = getdate($nextdate); + if($t2["mday"] < $t["mday"]) + { + // oops, skipped a month, backup to previous month + $nextdate = ZDateHelper::addDate($nextdate,0,0,0,0,$t2["mday"] - $t["mday"],0,$this->tzid); + } + } + $t = getdate($nextdate); + $nextdate = mktime($t["hours"],$t["minutes"],$t["seconds"],$t["mon"],1,$t["year"]); + } + self::debug(2,"nextdate set to $nextdate (". ZDateHelper::toSQLDateTime($nextdate) . ")"); + $enddate=ZDateHelper::addDate($nextdate,0,0,0,$this->interval,0,0); + break; + case "w": + if($eventcount == 0) + $nextdate=$nextdate; + else { + $nextdate = ZDateHelper::addDate($nextdate,0,0,0,0,$this->interval*7,0,$this->tzid); + if(count($this->byday) > 0){ + $dow = date("w", $nextdate); + // move to beginning of week (Sunday) + $bow = 0; + $diff = $bow - $dow; + if($diff > 0) + $diff = $diff - 7; + $nextdate = ZDateHelper::addDate($nextdate,0,0,0,0,$diff,0); + } + self::debug(2,"nextdate set to $nextdate (". ZDateHelper::toSQLDateTime($nextdate) . ")"); + } + $enddate=ZDateHelper::addDate($nextdate,0,0,0,0,$this->interval*7,0); + break; + case "d": + $nextdate=($eventcount==0?$nextdate: + ZDateHelper::addDate($nextdate,0,0,0,0,$this->interval,0,$this->tzid)); + $enddate=ZDateHelper::addDate($nextdate,0,0,0,0,1,0); + break; + } + + $count = $this->byYear($nextdate,$enddate,$rdates,$this->tzid); + $eventcount += $count; + if($maxdate > 0 && $maxdate < $nextdate) + { + array_pop($rdates); + $done = true; + } + else if($count == 0 && !$this->maxDates($rdates)){ + $rdates[] = $nextdate; + $eventcount++; + } + if($this->maxDates($rdates)) + $done = true; + + $year = date("Y", $nextdate); + if($year > _ZAPCAL_MAXYEAR) + { + $done = true; + } + $loopcount++; + if($loopcount > _ZAPCAL_MAXYEAR){ + $done = true; + throw new Exception("Infinite loop detected in getDates()"); + } + } + if($this->repeatmode == "u" && $rdates[count($rdates) - 1] > $this->until){ + // erase last item + array_pop($rdates); + } + $count1 = count($rdates); + $rdates = array_unique($rdates); + $count2 = count($rdates); + $dups = $count1 - $count2; + $excount = 0; + + foreach($this->exdates as $exdate) + { + if($pos = array_search($exdate,$rdates)) + { + array_splice($rdates,$pos,1); + $excount++; + } + } + self::debug(1,"getDates() returned " . count($rdates) . " dates, removing $dups duplicates, $excount exceptions"); + + + if($this->debug >= 2) + { + self::debug(2,"Recurring Dates:"); + foreach($rdates as $rdate) + { + $d = getdate($rdate); + self::debug(2,ZDateHelper::toSQLDateTime($rdate) . " " . $d["wday"] ); + } + self::debug(2,"Exception Dates:"); + foreach($this->exdates as $exdate) + { + self::debug(2, ZDateHelper::toSQLDateTime($exdate)); + } + //exit; + } + + return $rdates; + } +} diff --git a/ical/kalender.ical b/ical/kalender.ical index d6a96e1..fefbe19 100644 --- a/ical/kalender.ical +++ b/ical/kalender.ical @@ -1,56 +1,51 @@ -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//ZContent.net//ZapCalLib 1.0//EN -CALSCALE:GREGORIAN -METHOD:PUBLISH -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20250912 -DTEND:20250921 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251002 -DTEND:20251005 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251020 -DTEND:20251103 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251223 -DTEND:20251228 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251230 -DTEND:20260102 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251231 -DTEND:20260102 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251231 -DTEND:20260101 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20260102 -DTEND:20260111 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20260109 -DTEND:20260110 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20260201 -DTEND:20260204 -END:VEVENT -END:VCALENDAR +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//ZContent.net//ZapCalLib 1.0//EN +CALSCALE:GREGORIAN +METHOD:PUBLISH +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251002 +DTEND:20251005 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251020 +DTEND:20251103 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251223 +DTEND:20251228 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251230 +DTEND:20260102 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251231 +DTEND:20260102 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251231 +DTEND:20260101 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20260102 +DTEND:20260111 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20260109 +DTEND:20260110 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20260201 +DTEND:20260204 +END:VEVENT +END:VCALENDAR diff --git a/ical/kalender.ics b/ical/kalender.ics index d6a96e1..fefbe19 100644 --- a/ical/kalender.ics +++ b/ical/kalender.ics @@ -1,56 +1,51 @@ -BEGIN:VCALENDAR -VERSION:2.0 -PRODID:-//ZContent.net//ZapCalLib 1.0//EN -CALSCALE:GREGORIAN -METHOD:PUBLISH -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20250912 -DTEND:20250921 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251002 -DTEND:20251005 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251020 -DTEND:20251103 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251223 -DTEND:20251228 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251230 -DTEND:20260102 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251231 -DTEND:20260102 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20251231 -DTEND:20260101 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20260102 -DTEND:20260111 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20260109 -DTEND:20260110 -END:VEVENT -BEGIN:VEVENT -SUMMARY:Urlaub -DTSTART:20260201 -DTEND:20260204 -END:VEVENT -END:VCALENDAR +BEGIN:VCALENDAR +VERSION:2.0 +PRODID:-//ZContent.net//ZapCalLib 1.0//EN +CALSCALE:GREGORIAN +METHOD:PUBLISH +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251002 +DTEND:20251005 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251020 +DTEND:20251103 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251223 +DTEND:20251228 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251230 +DTEND:20260102 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251231 +DTEND:20260102 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20251231 +DTEND:20260101 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20260102 +DTEND:20260111 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20260109 +DTEND:20260110 +END:VEVENT +BEGIN:VEVENT +SUMMARY:Urlaub +DTSTART:20260201 +DTEND:20260204 +END:VEVENT +END:VCALENDAR diff --git a/ical/urlaub_generator.php b/ical/urlaub_generator.php index e2585a0..3834622 100644 --- a/ical/urlaub_generator.php +++ b/ical/urlaub_generator.php @@ -1,52 +1,52 @@ -= "' . $startdate . '"'; -$sql = 'SELECT start AS stadate , DATE_ADD(ende, INTERVAL 1 DAY) AS enddate FROM urlaub WHERE start >= "' . $startdate . '"'; -#echo $sql; -$result = mysqli_query($con, $sql); - -// create the ical object -$icalobj = new ZCiCal(); - -$title = "Urlaub"; - -// Iteriere durch die Ergebnisse und füge Events zur iCal-Datei hinzu -while ($row = mysqli_fetch_assoc($result)) { - // create the event within the ical object - $eventobj = new ZCiCalNode("VEVENT", $icalobj->curnode); - - // add title - $eventobj->addNode(new ZCiCalDataNode("SUMMARY:" . $title)); - - // add start date - $eventobj->addNode(new ZCiCalDataNode("DTSTART:" . ZCiCal::fromSqlDateTime($row["stadate"]))); - - // add end date - $eventobj->addNode(new ZCiCalDataNode("DTEND:" . ZCiCal::fromSqlDateTime($row["enddate"]))); - -} - -// iCal-Datei ausgeben -file_put_contents("kalender.ics", $icalobj->export()); -file_put_contents("kalender.ical", $icalobj->export()); -echo "Aktualisierung angestossen. Bitte Kalender pruefen.
Wenn in dieser Liste der Eintrag steht, dann sind Anfragen und Telefonanlage vorbereitet!

"; -#echo file_get_contents('./kalender.ical', true); -$handle = fopen("./kalender.ical", "r"); -if ($handle) { - while (($line = fgets($handle)) !== false) { - // process the line read. - echo $line . "
"; - } - - fclose($handle); -} -echo"
Der letzte oder vorherige Eintrag bei DTSTART und DTEND sollte das gewuenschte Urlaubsdatum plus einen Tag haben.
-20240330 steht fuer den 30.03.2024.
-"; - += "' . $startdate . '"'; +$sql = 'SELECT start AS stadate , DATE_ADD(ende, INTERVAL 1 DAY) AS enddate FROM urlaub WHERE start >= "' . $startdate . '"'; +#echo $sql; +$result = mysqli_query($con, $sql); + +// create the ical object +$icalobj = new ZCiCal(); + +$title = "Urlaub"; + +// Iteriere durch die Ergebnisse und füge Events zur iCal-Datei hinzu +while ($row = mysqli_fetch_assoc($result)) { + // create the event within the ical object + $eventobj = new ZCiCalNode("VEVENT", $icalobj->curnode); + + // add title + $eventobj->addNode(new ZCiCalDataNode("SUMMARY:" . $title)); + + // add start date + $eventobj->addNode(new ZCiCalDataNode("DTSTART:" . ZCiCal::fromSqlDateTime($row["stadate"]))); + + // add end date + $eventobj->addNode(new ZCiCalDataNode("DTEND:" . ZCiCal::fromSqlDateTime($row["enddate"]))); + +} + +// iCal-Datei ausgeben +file_put_contents("kalender.ics", $icalobj->export()); +file_put_contents("kalender.ical", $icalobj->export()); +echo "Aktualisierung angestossen. Bitte Kalender pruefen.
Wenn in dieser Liste der Eintrag steht, dann sind Anfragen und Telefonanlage vorbereitet!

"; +#echo file_get_contents('./kalender.ical', true); +$handle = fopen("./kalender.ical", "r"); +if ($handle) { + while (($line = fgets($handle)) !== false) { + // process the line read. + echo $line . "
"; + } + + fclose($handle); +} +echo"
Der letzte oder vorherige Eintrag bei DTSTART und DTEND sollte das gewuenschte Urlaubsdatum plus einen Tag haben.
+20240330 steht fuer den 30.03.2024.
+"; + ?> \ No newline at end of file diff --git a/impfanmeldung.php b/impfanmeldung.php index fe309f7..8da8d06 100644 --- a/impfanmeldung.php +++ b/impfanmeldung.php @@ -1,2 +1,2 @@  - - - - + + + + + Praxis Creutzburg - Impfung Terminbestätigung - - - - - - - - -
-
- Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 -

Impftermin bestätigen

- - - -
- -
-
- - -
- -fetch_assoc() ; - $userid = $rowimpf["userid"]; - $checked = $rowimpf["checked"]; - $terminid = $rowimpf["terminid"]; - $timeid = $rowimpf["timeid"]; - //echo $userid; + + + + + + + + +
+
+ Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 +

Impftermin bestätigen

+ + + +
+ +
+
+ + +
+ +fetch_assoc() ; + $userid = $rowimpf["userid"]; + $checked = $rowimpf["checked"]; + $terminid = $rowimpf["terminid"]; + $timeid = $rowimpf["timeid"]; + //echo $userid; $queryuser = mysqli_query($con, "SELECT * FROM persons WHERE person_id='" . $userid . "'"); - $rowuser = mysqli_fetch_assoc($queryuser); - //$rowuser = $queryuser->fetch_assoc(); - $vorname = $rowuser["vorname"]; - $nachname = $rowuser["nachname"]; + $rowuser = mysqli_fetch_assoc($queryuser); + //$rowuser = $queryuser->fetch_assoc(); + $vorname = $rowuser["vorname"]; + $nachname = $rowuser["nachname"]; $mail = $rowuser["email"]; - //echo $mail; - $tel = $rowuser["tele"]; + //echo $mail; + $tel = $rowuser["tele"]; $userausgabe = $vorname . " " . $nachname; - $querytime = mysqli_query($con, "Select date,start,ende,impfstoff,impfortid FROM timeslots WHERE timeid='" . $timeid . "'"); - $rowtime = mysqli_fetch_assoc($querytime); - //$rowtime = $querytime->fetch_assoc(); - $datum = date("d.m.Y", strtotime($rowtime["date"])); - $start = substr($rowtime["start"],0, 5); - $ende = substr($rowtime["ende"],0, 5); - - // Impfstoff - $impfstoff = $rowtime["impfstoff"]; - $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $impfstofftext = $rowimpf["impfname"]; - - $impfortid = $rowtime["impfortid"]; - $sqlimpfortstring = "SELECT * FROM impfort WHERE ortid ='" . $impfortid . "'"; - $queryimpfort = mysqli_query($con,$sqlimpfortstring); - $rowimpfort = mysqli_fetch_assoc($queryimpfort); - $impforttext = $rowimpfort["anzeigename"] ."- " . $rowimpfort["adresse"]; - $impforttext = iconv('CP1252//IGNORE', 'UTF-8' , $impforttext); - - $mailbetreff = "Ihre Coronaimpfung bei Praxis Creutzburg"; - - $Zeitanzeige = $datum . " " . $start . "-" . $ende ; - if($checked == 0){ - echo "

Sie haben Ihren Termin aktuell noch nicht bestätigt!


"; - echo "

Sagen Sie einen zugesagten Termin ab, werden Sie für 7 Tage für weitere Termine gesperrt!


Sein Sie solidarisch und kommen Sie zu Ihren festgelegten Termin!
Doppelbuchung und Falschangaben führen zum generellen Ausschluss einer Impfung!
"; - echo "Sie haben die folgenden Termindaten:

"; - echo "

Name: $userausgabe

"; - echo "

Zeit: $Zeitanzeige

"; - echo "

Impfstoff: $impfstofftext

"; - echo "

Impfort: $impforttext


"; - - echo "
"; - echo ''; - echo ''; - echo ''; - echo "
"; - echo "
"; - echo ''; - echo ''; - echo ''; - echo "
"; - - }else if($checked == 1){ - echo "

Sie haben Ihren Termin bestätigt!
Vielen Dank!


"; - echo "

Sagen Sie einen zugesagten Termin ab, werden Sie für 7 Tage für weitere Termine gesperrt!


Sein Sie solidarisch und kommen Sie zu Ihren festgelegten Termin!
Doppelbuchung und Falschangaben führen zum generellen Ausschluss einer Impfung!
"; - echo "Sie haben die folgenden Termindaten:

"; - echo "

Name: $userausgabe

"; - echo "

Zeit: $Zeitanzeige

"; - echo "

Impfstoff: $impfstofftext

"; - echo "

Impfort: $impforttext


"; - - echo "Können Sie Ihren Termin nicht wahrnehmen tragen Sie sich bitte aus:
"; - echo "
"; - echo ''; - echo ''; - echo ''; - echo "
"; - - - }else if($checked == 2){ - echo "

Ihr Termin wurde erfolgreich abgesagt!!


Wünschen Sie einen neuen Termin, tragen Sie sich wieder über das Formular ein.
"; - - - }else if($checked == 3){ - echo "

Ihr Termin wurde vom Praxisteam storniert!


Wünschen Sie einen neuen Termin, tragen Sie sich wieder über das Formular ein.
"; - - - } - - }else{ - echo "

Leider konnten wir Ihre Anforderung nicht verarbeiten.


Bitte überprüfen Sie den aufgerufenden Link.

"; - - } - - - -}else if($_POST["aktion"] == 1){ - echo "Wollen Sie wirklich Ihren Termin absagen?
Dieses ist nicht rückgängig zu machen!
Dann bestätigen Sie die Abmeldung:
"; - echo "Achtung! Sagen Sie Ihren festgelegten Termin ab, können Sie eine Woche keinen neuen Termin beantragen.
"; - echo "
"; - echo ''; - echo '
'; - echo ''; - echo "
"; - - -}else if($_POST["aktion"] == 2){ - - $querychecked = mysqli_query($con, "SELECT checked FROM impftermin WHERE terminid='" . $_POST["terminid"] . "'"); - $rowchecked = mysqli_fetch_assoc($querychecked); - //$rowchecked = $querychecked->fetch_assoc() ; - $checked = $rowchecked["checked"]; - if($checked >= 1){ - echo "

Sie haben Ihren Termin schon bestätigt.

"; - - }else{ - $query = mysqli_query($con, "Update impftermin SET checked='1' WHERE terminid ='".$_POST["terminid"]."'"); - if($query){ - echo "

Ihr Termin wurde erfolgreich bestätigt!


"; - echo "Sie erhalten gleiche eine schriftliche Bestätigung per E-Mail
"; - - - $queryimpf = mysqli_query($con, "SELECT * FROM impftermin WHERE terminid='" . $_POST["terminid"] . "'"); - $rowimpf = mysqli_fetch_assoc($queryimpf); - //$rowimpf = $queryimpf->fetch_assoc() ; - $userid = $rowimpf["userid"]; - $checked = $rowimpf["checked"]; - $terminid = $rowimpf["terminid"]; - $timeid = $rowimpf["timeid"]; - //echo $userid; + $querytime = mysqli_query($con, "Select date,start,ende,impfstoff,impfortid FROM timeslots WHERE timeid='" . $timeid . "'"); + $rowtime = mysqli_fetch_assoc($querytime); + //$rowtime = $querytime->fetch_assoc(); + $datum = date("d.m.Y", strtotime($rowtime["date"])); + $start = substr($rowtime["start"],0, 5); + $ende = substr($rowtime["ende"],0, 5); + + // Impfstoff + $impfstoff = $rowtime["impfstoff"]; + $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $impfstofftext = $rowimpf["impfname"]; + + $impfortid = $rowtime["impfortid"]; + $sqlimpfortstring = "SELECT * FROM impfort WHERE ortid ='" . $impfortid . "'"; + $queryimpfort = mysqli_query($con,$sqlimpfortstring); + $rowimpfort = mysqli_fetch_assoc($queryimpfort); + $impforttext = $rowimpfort["anzeigename"] ."- " . $rowimpfort["adresse"]; + $impforttext = iconv('CP1252//IGNORE', 'UTF-8' , $impforttext); + + $mailbetreff = "Ihre Coronaimpfung bei Praxis Creutzburg"; + + $Zeitanzeige = $datum . " " . $start . "-" . $ende ; + if($checked == 0){ + echo "

Sie haben Ihren Termin aktuell noch nicht bestätigt!


"; + echo "

Sagen Sie einen zugesagten Termin ab, werden Sie für 7 Tage für weitere Termine gesperrt!


Sein Sie solidarisch und kommen Sie zu Ihren festgelegten Termin!
Doppelbuchung und Falschangaben führen zum generellen Ausschluss einer Impfung!
"; + echo "Sie haben die folgenden Termindaten:

"; + echo "

Name: $userausgabe

"; + echo "

Zeit: $Zeitanzeige

"; + echo "

Impfstoff: $impfstofftext

"; + echo "

Impfort: $impforttext


"; + + echo "
"; + echo ''; + echo ''; + echo ''; + echo "
"; + echo "
"; + echo ''; + echo ''; + echo ''; + echo "
"; + + }else if($checked == 1){ + echo "

Sie haben Ihren Termin bestätigt!
Vielen Dank!


"; + echo "

Sagen Sie einen zugesagten Termin ab, werden Sie für 7 Tage für weitere Termine gesperrt!


Sein Sie solidarisch und kommen Sie zu Ihren festgelegten Termin!
Doppelbuchung und Falschangaben führen zum generellen Ausschluss einer Impfung!
"; + echo "Sie haben die folgenden Termindaten:

"; + echo "

Name: $userausgabe

"; + echo "

Zeit: $Zeitanzeige

"; + echo "

Impfstoff: $impfstofftext

"; + echo "

Impfort: $impforttext


"; + + echo "Können Sie Ihren Termin nicht wahrnehmen tragen Sie sich bitte aus:
"; + echo "
"; + echo ''; + echo ''; + echo ''; + echo "
"; + + + }else if($checked == 2){ + echo "

Ihr Termin wurde erfolgreich abgesagt!!


Wünschen Sie einen neuen Termin, tragen Sie sich wieder über das Formular ein.
"; + + + }else if($checked == 3){ + echo "

Ihr Termin wurde vom Praxisteam storniert!


Wünschen Sie einen neuen Termin, tragen Sie sich wieder über das Formular ein.
"; + + + } + + }else{ + echo "

Leider konnten wir Ihre Anforderung nicht verarbeiten.


Bitte überprüfen Sie den aufgerufenden Link.

"; + + } + + + +}else if($_POST["aktion"] == 1){ + echo "Wollen Sie wirklich Ihren Termin absagen?
Dieses ist nicht rückgängig zu machen!
Dann bestätigen Sie die Abmeldung:
"; + echo "Achtung! Sagen Sie Ihren festgelegten Termin ab, können Sie eine Woche keinen neuen Termin beantragen.
"; + echo "
"; + echo ''; + echo '
'; + echo ''; + echo "
"; + + +}else if($_POST["aktion"] == 2){ + + $querychecked = mysqli_query($con, "SELECT checked FROM impftermin WHERE terminid='" . $_POST["terminid"] . "'"); + $rowchecked = mysqli_fetch_assoc($querychecked); + //$rowchecked = $querychecked->fetch_assoc() ; + $checked = $rowchecked["checked"]; + if($checked >= 1){ + echo "

Sie haben Ihren Termin schon bestätigt.

"; + + }else{ + $query = mysqli_query($con, "Update impftermin SET checked='1' WHERE terminid ='".$_POST["terminid"]."'"); + if($query){ + echo "

Ihr Termin wurde erfolgreich bestätigt!


"; + echo "Sie erhalten gleiche eine schriftliche Bestätigung per E-Mail
"; + + + $queryimpf = mysqli_query($con, "SELECT * FROM impftermin WHERE terminid='" . $_POST["terminid"] . "'"); + $rowimpf = mysqli_fetch_assoc($queryimpf); + //$rowimpf = $queryimpf->fetch_assoc() ; + $userid = $rowimpf["userid"]; + $checked = $rowimpf["checked"]; + $terminid = $rowimpf["terminid"]; + $timeid = $rowimpf["timeid"]; + //echo $userid; $queryuser = mysqli_query($con, "SELECT * FROM persons WHERE person_id='" . $userid . "'"); - $rowuser = mysqli_fetch_assoc($queryuser); - //$rowuser = $queryuser->fetch_assoc(); - $vorname = $rowuser["vorname"]; - $nachname = $rowuser["nachname"]; + $rowuser = mysqli_fetch_assoc($queryuser); + //$rowuser = $queryuser->fetch_assoc(); + $vorname = $rowuser["vorname"]; + $nachname = $rowuser["nachname"]; $mail = $rowuser["email"]; - //echo $mail; - $tel = $rowuser["tele"]; + //echo $mail; + $tel = $rowuser["tele"]; $userausgabe = $vorname . " " . $nachname; - $querytime = mysqli_query($con, "Select date,start,ende FROM timeslots WHERE timeid='" . $timeid . "'"); - $rowtime = mysqli_fetch_assoc($querytime); - //$rowtime = $querytime->fetch_assoc(); - $datum = date("d.m.Y", strtotime($rowtime["date"])); - $start = substr($rowtime["start"],0, 5); - $ende = substr($rowtime["ende"],0, 5); - $Zeitanzeige = $datum . " " . $start. " - " . $ende; - - - SendMailMessageVorlage($pdo, "1", $terminid, "2"); - - - } - } - -}else if($_POST["aktion"] == 3){ - $querychecked = mysqli_query($con, "SELECT checked FROM impftermin WHERE terminid='" . $_POST["terminid"] . "'"); + $querytime = mysqli_query($con, "Select date,start,ende FROM timeslots WHERE timeid='" . $timeid . "'"); + $rowtime = mysqli_fetch_assoc($querytime); + //$rowtime = $querytime->fetch_assoc(); + $datum = date("d.m.Y", strtotime($rowtime["date"])); + $start = substr($rowtime["start"],0, 5); + $ende = substr($rowtime["ende"],0, 5); + $Zeitanzeige = $datum . " " . $start. " - " . $ende; + + + SendMailMessageVorlage($pdo, "1", $terminid, "2"); + + + } + } + +}else if($_POST["aktion"] == 3){ + $querychecked = mysqli_query($con, "SELECT checked FROM impftermin WHERE terminid='" . $_POST["terminid"] . "'"); $rowchecked = mysqli_fetch_assoc($querychecked); $checked = $rowchecked["checked"]; - if($checked >= 2){ - echo "

Sie haben Ihren Termin schon abgesagt.

"; - - }else{ - $query = mysqli_query($con, "Update impftermin SET checked='2' WHERE terminid ='".$_POST["terminid"]."'"); - if($query){ - echo "

Ihr Termin wurde erfolgreich gelöscht!


"; - echo "Sie erhalten gleiche eine schriftliche Bestätigung per E-Mail
"; - - $queryimpf = mysqli_query($con, "SELECT * FROM impftermin WHERE terminid='" . $_POST["terminid"] . "'"); - $rowimpf = mysqli_fetch_assoc($queryimpf); - //$rowimpf = $queryimpf->fetch_assoc() ; - $userid = $rowimpf["userid"]; - $checked = $rowimpf["checked"]; - $terminid = $rowimpf["terminid"]; - $timeid = $rowimpf["timeid"]; - //echo $userid; + if($checked >= 2){ + echo "

Sie haben Ihren Termin schon abgesagt.

"; + + }else{ + $query = mysqli_query($con, "Update impftermin SET checked='2' WHERE terminid ='".$_POST["terminid"]."'"); + if($query){ + echo "

Ihr Termin wurde erfolgreich gelöscht!


"; + echo "Sie erhalten gleiche eine schriftliche Bestätigung per E-Mail
"; + + $queryimpf = mysqli_query($con, "SELECT * FROM impftermin WHERE terminid='" . $_POST["terminid"] . "'"); + $rowimpf = mysqli_fetch_assoc($queryimpf); + //$rowimpf = $queryimpf->fetch_assoc() ; + $userid = $rowimpf["userid"]; + $checked = $rowimpf["checked"]; + $terminid = $rowimpf["terminid"]; + $timeid = $rowimpf["timeid"]; + //echo $userid; $queryuser = mysqli_query($con, "SELECT * FROM persons WHERE person_id='" . $userid . "'"); - $rowuser = mysqli_fetch_assoc($queryuser); - //$rowuser = $queryuser->fetch_assoc(); - $vorname = $rowuser["vorname"]; - $nachname = $rowuser["nachname"]; + $rowuser = mysqli_fetch_assoc($queryuser); + //$rowuser = $queryuser->fetch_assoc(); + $vorname = $rowuser["vorname"]; + $nachname = $rowuser["nachname"]; $mail = $rowuser["email"]; - //echo $mail; - $tel = $rowuser["tele"]; + //echo $mail; + $tel = $rowuser["tele"]; $userausgabe = $vorname . " " . $nachname; - $querytime = mysqli_query($con, "Select date,start,ende,impfdosen FROM timeslots WHERE timeid='" . $timeid . "'"); - $rowtime = mysqli_fetch_assoc($querytime); - //$rowtime = $querytime->fetch_assoc(); - $datum = date("d.m.Y", strtotime($rowtime["date"])); - $start = substr($rowtime["start"],0, 5); - $ende = substr($rowtime["ende"],0, 5); - $dosen = $rowtime["impfdosen"]; - $dosen = $dosen + 1; - $Zeitanzeige = $datum . " " . $start. " - " . $ende; - $query = mysqli_query($con, "Update timeslots SET impfdosen='".$dosen."' WHERE timeid ='".$timeid."'"); - - SendMailMessageVorlage($pdo, "1", $terminid, "3"); - - - } - } - -}else{ - - echo "Leider konnten wir Ihre ID-Nummer nicht erkennen.
Bitte tragen Sie diese in dem folgendem Feld ein und klicken Sie auf 'Senden'

"; - echo "
"; - echo '
'; - echo ''; - -} - - - - - - -?> - - - - -

- - - - - + $querytime = mysqli_query($con, "Select date,start,ende,impfdosen FROM timeslots WHERE timeid='" . $timeid . "'"); + $rowtime = mysqli_fetch_assoc($querytime); + //$rowtime = $querytime->fetch_assoc(); + $datum = date("d.m.Y", strtotime($rowtime["date"])); + $start = substr($rowtime["start"],0, 5); + $ende = substr($rowtime["ende"],0, 5); + $dosen = $rowtime["impfdosen"]; + $dosen = $dosen + 1; + $Zeitanzeige = $datum . " " . $start. " - " . $ende; + $query = mysqli_query($con, "Update timeslots SET impfdosen='".$dosen."' WHERE timeid ='".$timeid."'"); + + SendMailMessageVorlage($pdo, "1", $terminid, "3"); + + + } + } + +}else{ + + echo "Leider konnten wir Ihre ID-Nummer nicht erkennen.
Bitte tragen Sie diese in dem folgendem Feld ein und klicken Sie auf 'Senden'

"; + echo ""; + echo '
'; + echo ''; + +} + + + + + + +?> + + + + +
+ + + + + diff --git a/impferinnerung.php b/impferinnerung.php index 4b8e11e..0ef91a0 100644 --- a/impferinnerung.php +++ b/impferinnerung.php @@ -1,156 +1,156 @@ - - - - - - Praxis Creutzburg - Corona Termin Erinnerung - - - - - - - - -
-
- Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 -

Impftermin online anfordern erfolgreich

- - - -
- -
-
- - -
- - - = '". $today . "' AND checked = '0'"); -while ($rowtermin = $querytermin->fetch_assoc()) { - $terminid = $rowtermin["terminid"]; - $hash = $rowtermin["hash"]; - $userid = $rowtermin["userid"]; - $timeid = $rowtermin["timeid"]; - $query = mysqli_query($con, "SELECT * FROM user WHERE userid ='". $userid . "'"); - while ($row = $query->fetch_assoc()) { - $vorname = $row["vorname"]; - $nachname = $row["nachname"]; - $jahrgang = $row["jahrgang"]; - $Email = $row["mail"]; - $tele = $row["tele"]; - - - - echo "$Email

"; - /* - $querytime = mysqli_query($con, "Select date,start,ende FROM timeslots WHERE timeid='" . $timeid . "'"); - $rowtime = $querytime->fetch_assoc(); - $datum = date("d.m.Y", strtotime($rowtime["date"])); - $start = substr($rowtime["start"],0, 5); - $ende = substr($rowtime["ende"],0, 5); - $Zeitanzeige = $datum . " " . $start. " - " . $ende; - - $hashaufruf = "https://praxis-creutzburg.de/impfbestaetigung.php?id=$hash"; - - $nachricht = " - Sehr geehrte(r) Herr/Frau $nachname,

Ihre Impftermin Anfrage bei Praxis-Creutzburg war erfolgreich!
- Bitte bestätigten Sie Ihre Impfanfrage noch über dieses Formular:
- Impftermin bestätigen

- oder geben Sie die folgende Zeile in Ihrem Browser in die Adressezeile ein:
- $hashaufruf
- Bitte bestätigen Sie Ihren Termin innerhalb von 24 Stunden!
- Anderenfalls wird der Termin automatisch storniert.

- Erscheinen Sie nicht zum Termin wird eine Aufwandentschädigung von 50€ fällig.
- Sie können den Termin bis einen Tag vor dem Termin kostenfrei stornieren.

- -

Die Impfunterlagen liegen zwei Tage vor dem Impftermin ausgedruckt aussen neben der Eingangstuer, vor der Praxis fuer Sie bereit, wenn Sie keine Moeglichkeiten zum ausdrucken haben! - Impfaufklaerung und Einwilligung sind zusammengeheftet, beide Dokumente muessen Unterschrieben werden.

- - https://www.praxis-creutzburg.de/impfunterlagen.php
- Hier koennen Sie die Unterlagen zum ausdrucken herunterladen.
- Unterschreiben Sie die Einwilligungserklaerung und die Impfaufklaerung!
Zwei Dokumente, zwei Unterschriften!
- -

Bitte rufen Sie uns nicht wegen Impfterminen an!

- - Ihre Angaben

- Name: $vorname $nachname
- Termin: $Zeitanzeige
-
- Bitte sein Sie pünktlich zum Termin vor Ort.
Vielen Dank für Ihre Mithilfe!
-
- Ihr Praxis-Team
- der Praxis Creutzburg
- - - - "; - - echo "

Nachricht abgeschickt!

"; - $betreff = 'Impftermin-Anfrage bei Praxis Creuzburg'; - - SendMailMessage($con, $Email, $betreff, $nachricht); - */ - SendMailMessageVorlage($pdo, "1", $terminid, "31"); - - } -} - - - - ?> - - - Impftermin sichern -

- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
- Elektronische Nachrichten können von Dritten gelesen werden. Bei Bedenken nutzen Sie unsere Rezepthotline für alle Serviceleistungen: 05156 99 03 77 - - -
- -
- - -
- - -
-
-
- - - - - + + + + + + Praxis Creutzburg - Corona Termin Erinnerung + + + + + + + + +
+
+ Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 +

Impftermin online anfordern erfolgreich

+ + + +
+ +
+
+ + +
+ + + = '". $today . "' AND checked = '0'"); +while ($rowtermin = $querytermin->fetch_assoc()) { + $terminid = $rowtermin["terminid"]; + $hash = $rowtermin["hash"]; + $userid = $rowtermin["userid"]; + $timeid = $rowtermin["timeid"]; + $query = mysqli_query($con, "SELECT * FROM user WHERE userid ='". $userid . "'"); + while ($row = $query->fetch_assoc()) { + $vorname = $row["vorname"]; + $nachname = $row["nachname"]; + $jahrgang = $row["jahrgang"]; + $Email = $row["mail"]; + $tele = $row["tele"]; + + + + echo "$Email

"; + /* + $querytime = mysqli_query($con, "Select date,start,ende FROM timeslots WHERE timeid='" . $timeid . "'"); + $rowtime = $querytime->fetch_assoc(); + $datum = date("d.m.Y", strtotime($rowtime["date"])); + $start = substr($rowtime["start"],0, 5); + $ende = substr($rowtime["ende"],0, 5); + $Zeitanzeige = $datum . " " . $start. " - " . $ende; + + $hashaufruf = "https://praxis-creutzburg.de/impfbestaetigung.php?id=$hash"; + + $nachricht = " + Sehr geehrte(r) Herr/Frau $nachname,

Ihre Impftermin Anfrage bei Praxis-Creutzburg war erfolgreich!
+ Bitte bestätigten Sie Ihre Impfanfrage noch über dieses Formular:
+ Impftermin bestätigen

+ oder geben Sie die folgende Zeile in Ihrem Browser in die Adressezeile ein:
+ $hashaufruf
+ Bitte bestätigen Sie Ihren Termin innerhalb von 24 Stunden!
+ Anderenfalls wird der Termin automatisch storniert.

+ Erscheinen Sie nicht zum Termin wird eine Aufwandentschädigung von 50€ fällig.
+ Sie können den Termin bis einen Tag vor dem Termin kostenfrei stornieren.

+ +

Die Impfunterlagen liegen zwei Tage vor dem Impftermin ausgedruckt aussen neben der Eingangstuer, vor der Praxis fuer Sie bereit, wenn Sie keine Moeglichkeiten zum ausdrucken haben! + Impfaufklaerung und Einwilligung sind zusammengeheftet, beide Dokumente muessen Unterschrieben werden.

+ + https://www.praxis-creutzburg.de/impfunterlagen.php
+ Hier koennen Sie die Unterlagen zum ausdrucken herunterladen.
+ Unterschreiben Sie die Einwilligungserklaerung und die Impfaufklaerung!
Zwei Dokumente, zwei Unterschriften!
+ +

Bitte rufen Sie uns nicht wegen Impfterminen an!

+ + Ihre Angaben

+ Name: $vorname $nachname
+ Termin: $Zeitanzeige
+
+ Bitte sein Sie pünktlich zum Termin vor Ort.
Vielen Dank für Ihre Mithilfe!
+
+ Ihr Praxis-Team
+ der Praxis Creutzburg
+ + + + "; + + echo "

Nachricht abgeschickt!

"; + $betreff = 'Impftermin-Anfrage bei Praxis Creuzburg'; + + SendMailMessage($con, $Email, $betreff, $nachricht); + */ + SendMailMessageVorlage($pdo, "1", $terminid, "31"); + + } +} + + + + ?> + + + Impftermin sichern +

+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
+ Elektronische Nachrichten können von Dritten gelesen werden. Bei Bedenken nutzen Sie unsere Rezepthotline für alle Serviceleistungen: 05156 99 03 77 + + +
+ +
+ + +
+ + + + +
+ + + + + \ No newline at end of file diff --git a/impfterminloeschung.php b/impfterminloeschung.php index 233a34d..391dbda 100644 --- a/impfterminloeschung.php +++ b/impfterminloeschung.php @@ -1,165 +1,165 @@ - - - - - - Praxis Creutzburg - Corona Termin Löschung - - - - - - - - -
-
- Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 -

Impftermin online anfordern

- - - -
- -
-
- - -
- - - fetch_assoc()) { - $terminid = $rowtermin["terminid"]; - $hash = $rowtermin["hash"]; - $userid = $rowtermin["userid"]; - $timeid = $rowtermin["timeid"]; - $query = mysqli_query($con, "SELECT * FROM user WHERE userid ='". $userid . "'"); - $row = $query->fetch_assoc(); - $vorname = $row["vorname"]; - $nachname = $row["nachname"]; - $jahrgang = $row["jahrgang"]; - $mail = $row["mail"]; - $tele = $row["tele"]; - - echo "Löschen Id $terminid
"; - - $datum = date("d.m.Y", strtotime($row["date"])); - $start = substr($row["start"],0, 5); - $ende = substr($row["ende"],0, 5); - $Zeitanzeige = $datum . " " . $start. " - " . $ende; - $queryloeschen = mysqli_query($con, "Update impftermin SET checked='5' WHERE terminid = '". $terminid . "' "); - - // Impfdosen um einen erhöhen - $query = mysqli_query($con, "Select impfdosen FROM timeslots WHERE timeid='".$timeid."'"); - $row = mysqli_fetch_assoc($query); - $dosen = $row["impfdosen"] + 1; - $query = mysqli_query($con, "Update timeslots SET impfdosen='".$dosen ."' WHERE timeid ='".$timeid."'"); - - if($queryloeschen){ - - /* - $dosen = $rowtermin["impfdosen"]; - $dosen = $dosen + 1; - $query = mysqli_query($con, "Update timeslots SET impfdosen='".$dosen."' WHERE timeid ='".$timeid."'"); - - $nachricht = " - Sehr geehrte(r) Herr/Frau $nachname,

- - Ihre ausgewählter Impftermin wurde storniert, da Sie diesen nicht innerhalb von 24 Stunden bestätigt haben.
- Termin: $Zeitanzeige
-
- Benötigen Sie einen neuen Termin, müssen Sie das Formular erneut ausfüllen.
- -

Bitte rufen Sie uns nicht wegen Impfterminen an!

- -
Vielen Dank für Ihre Mithilfe!
-
- Ihr Praxis-Team
- der Praxis Creutzburg
- - - - "; - $nachricht = iconv('UTF-8', 'CP1252//IGNORE', $nachricht); - - //echo $nachricht; - - echo "

Nachricht abgeschickt!

"; - $betreff = 'Impftermin-Anfrage bei Praxis Creuzburg'; - - SendMailMessage($con, $mail, $betreff, $nachricht); - */ - SendMailMessageVorlage($pdo, "1", $terminid, "30"); - - } - - - } - - - } -} - - ?> - - - - - Impftermin sichern -

- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
- Elektronische Nachrichten können von Dritten gelesen werden. Bei Bedenken nutzen Sie unsere Rezepthotline für alle Serviceleistungen: 05156 99 03 77 - - -
- -
- - -
- - - - -
- - - - - + + + + + + Praxis Creutzburg - Corona Termin Löschung + + + + + + + + +
+
+ Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 +

Impftermin online anfordern

+ + + +
+ +
+
+ + +
+ + + fetch_assoc()) { + $terminid = $rowtermin["terminid"]; + $hash = $rowtermin["hash"]; + $userid = $rowtermin["userid"]; + $timeid = $rowtermin["timeid"]; + $query = mysqli_query($con, "SELECT * FROM user WHERE userid ='". $userid . "'"); + $row = $query->fetch_assoc(); + $vorname = $row["vorname"]; + $nachname = $row["nachname"]; + $jahrgang = $row["jahrgang"]; + $mail = $row["mail"]; + $tele = $row["tele"]; + + echo "Löschen Id $terminid
"; + + $datum = date("d.m.Y", strtotime($row["date"])); + $start = substr($row["start"],0, 5); + $ende = substr($row["ende"],0, 5); + $Zeitanzeige = $datum . " " . $start. " - " . $ende; + $queryloeschen = mysqli_query($con, "Update impftermin SET checked='5' WHERE terminid = '". $terminid . "' "); + + // Impfdosen um einen erhöhen + $query = mysqli_query($con, "Select impfdosen FROM timeslots WHERE timeid='".$timeid."'"); + $row = mysqli_fetch_assoc($query); + $dosen = $row["impfdosen"] + 1; + $query = mysqli_query($con, "Update timeslots SET impfdosen='".$dosen ."' WHERE timeid ='".$timeid."'"); + + if($queryloeschen){ + + /* + $dosen = $rowtermin["impfdosen"]; + $dosen = $dosen + 1; + $query = mysqli_query($con, "Update timeslots SET impfdosen='".$dosen."' WHERE timeid ='".$timeid."'"); + + $nachricht = " + Sehr geehrte(r) Herr/Frau $nachname,

+ + Ihre ausgewählter Impftermin wurde storniert, da Sie diesen nicht innerhalb von 24 Stunden bestätigt haben.
+ Termin: $Zeitanzeige
+
+ Benötigen Sie einen neuen Termin, müssen Sie das Formular erneut ausfüllen.
+ +

Bitte rufen Sie uns nicht wegen Impfterminen an!

+ +
Vielen Dank für Ihre Mithilfe!
+
+ Ihr Praxis-Team
+ der Praxis Creutzburg
+ + + + "; + $nachricht = iconv('UTF-8', 'CP1252//IGNORE', $nachricht); + + //echo $nachricht; + + echo "

Nachricht abgeschickt!

"; + $betreff = 'Impftermin-Anfrage bei Praxis Creuzburg'; + + SendMailMessage($con, $mail, $betreff, $nachricht); + */ + SendMailMessageVorlage($pdo, "1", $terminid, "30"); + + } + + + } + + + } +} + + ?> + + + + + Impftermin sichern +

+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
+ Elektronische Nachrichten können von Dritten gelesen werden. Bei Bedenken nutzen Sie unsere Rezepthotline für alle Serviceleistungen: 05156 99 03 77 + + +
+ +
+ + +
+ + + + +
+ + + + + \ No newline at end of file diff --git a/impfwartelisteerinnerung.php b/impfwartelisteerinnerung.php index aae232d..3941a6c 100644 --- a/impfwartelisteerinnerung.php +++ b/impfwartelisteerinnerung.php @@ -1,94 +1,94 @@ - - - - - - Praxis Creutzburg - corona warteliste info - - - - - - - - -
-
- Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 -

Impftermin online anfordern erfolgreich

- - - -
- -
-
- - -
- - - fetch_assoc()) { - $warteid = $rowtermin["warteid"]; - - SendMailMessageVorlage($pdo, "2", $warteid , "22" ); - -} - - - - ?> - - - Impftermin sichern -

- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
- Elektronische Nachrichten können von Dritten gelesen werden. Bei Bedenken nutzen Sie unsere Rezepthotline für alle Serviceleistungen: 05156 99 03 77 - - -
- -
- - -
- - - - -
- - - - - + + + + + + Praxis Creutzburg - corona warteliste info + + + + + + + + +
+
+ Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 +

Impftermin online anfordern erfolgreich

+ + + +
+ +
+
+ + +
+ + + fetch_assoc()) { + $warteid = $rowtermin["warteid"]; + + SendMailMessageVorlage($pdo, "2", $warteid , "22" ); + +} + + + + ?> + + + Impftermin sichern +

+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
+ Elektronische Nachrichten können von Dritten gelesen werden. Bei Bedenken nutzen Sie unsere Rezepthotline für alle Serviceleistungen: 05156 99 03 77 + + +
+ +
+ + +
+ + + + +
+ + + + + \ No newline at end of file diff --git a/impfwartelisteinfomail.php b/impfwartelisteinfomail.php index d1b9b62..57d7c63 100644 --- a/impfwartelisteinfomail.php +++ b/impfwartelisteinfomail.php @@ -1,98 +1,98 @@ - - - - - - Praxis Creutzburg - Corona wateliste info mail - - - - - - - - -
-
- Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 -

Impftermin online anfordern erfolgreich

- - - -
- -
-
- - -
- - - fetch_assoc(); -$maximalmail = $row["maximalmailprostunde"]; - -$today =Date("Y-m-d"); -$yesteryesterday = Date('Y-m-d', strtotime('-14 days')); -$querytermin = mysqli_query($con, "SELECT warteid FROM warteliste WHERE checked = '1' AND mailtime <='". $yesteryesterday . "' OR checked = '1' AND (impfstoff= '1' OR impfstoff= '2' OR impfstoff= '3' OR impfstoff= '4' OR impfstoff= '6') AND mailtime IS NULL LIMIT ". $maximalmail . " "); -while ($rowtermin = $querytermin->fetch_assoc()) { - $warteid = $rowtermin["warteid"]; - $queryupdate = mysqli_query($con, "UPDATE warteliste SET mailtime='" . date("Y-m-d h:i:s") . "' WHERE warteid ='". $warteid . "' "); - SendMailMessageVorlage($pdo, "2", $warteid , "24" ); - -} - - - - ?> - - - Impftermin sichern -

- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
- Elektronische Nachrichten können von Dritten gelesen werden. Bei Bedenken nutzen Sie unsere Rezepthotline für alle Serviceleistungen: 05156 99 03 77 - - -
- -
- - -
- - - - -
- - - - - + + + + + + Praxis Creutzburg - Corona wateliste info mail + + + + + + + + +
+
+ Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 +

Impftermin online anfordern erfolgreich

+ + + +
+ +
+
+ + +
+ + + fetch_assoc(); +$maximalmail = $row["maximalmailprostunde"]; + +$today =Date("Y-m-d"); +$yesteryesterday = Date('Y-m-d', strtotime('-14 days')); +$querytermin = mysqli_query($con, "SELECT warteid FROM warteliste WHERE checked = '1' AND mailtime <='". $yesteryesterday . "' OR checked = '1' AND (impfstoff= '1' OR impfstoff= '2' OR impfstoff= '3' OR impfstoff= '4' OR impfstoff= '6') AND mailtime IS NULL LIMIT ". $maximalmail . " "); +while ($rowtermin = $querytermin->fetch_assoc()) { + $warteid = $rowtermin["warteid"]; + $queryupdate = mysqli_query($con, "UPDATE warteliste SET mailtime='" . date("Y-m-d h:i:s") . "' WHERE warteid ='". $warteid . "' "); + SendMailMessageVorlage($pdo, "2", $warteid , "24" ); + +} + + + + ?> + + + Impftermin sichern +

+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
+ Elektronische Nachrichten können von Dritten gelesen werden. Bei Bedenken nutzen Sie unsere Rezepthotline für alle Serviceleistungen: 05156 99 03 77 + + +
+ +
+ + +
+ + + + +
+ + + + + \ No newline at end of file diff --git a/impfwartelistekinder.php b/impfwartelistekinder.php index fe309f7..8da8d06 100644 --- a/impfwartelistekinder.php +++ b/impfwartelistekinder.php @@ -1,2 +1,2 @@  - - - - - Praxis Creutzburg - corona warteliste loeschung - - - - - - - - -
-
- Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 -

Impftermin online anfordern erfolgreich

- - - -
- -
-
- - -
- - - fetch_assoc()) { - $warteid = $rowtermin["warteid"]; - $queryloeschen = mysqli_query($con, "DELETE FROM warteliste WHERE warteid = '". $warteid . "' "); - - - - if($queryloeschen){ - SendMailMessageVorlage($pdo, "2", $warteid , "23" ); - } - } - } -} - - ?> - - - Impftermin sichern -

- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
- Elektronische Nachrichten können von Dritten gelesen werden. Bei Bedenken nutzen Sie unsere Rezepthotline für alle Serviceleistungen: 05156 99 03 77 - - -
- -
- - -
- - - - -
- - - - - + + + + + + Praxis Creutzburg - corona warteliste loeschung + + + + + + + + +
+
+ Praxis Logo Creutzburg, Facharzt für innere Medizin, Schloßstr. 18, 31863 Coppenbrügge, Sprechzeit 8-11:00 Uhr, Tel. 05156 8125 +

Impftermin online anfordern erfolgreich

+ + + +
+ +
+
+ + +
+ + + fetch_assoc()) { + $warteid = $rowtermin["warteid"]; + $queryloeschen = mysqli_query($con, "DELETE FROM warteliste WHERE warteid = '". $warteid . "' "); + + + + if($queryloeschen){ + SendMailMessageVorlage($pdo, "2", $warteid , "23" ); + } + } + } +} + + ?> + + + Impftermin sichern +

+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
+ Elektronische Nachrichten können von Dritten gelesen werden. Bei Bedenken nutzen Sie unsere Rezepthotline für alle Serviceleistungen: 05156 99 03 77 + + +
+ +
+ + +
+ + + + +
+ + + + + \ No newline at end of file diff --git a/inc/functions.anfragen.inc.php b/inc/functions.anfragen.inc.php index eeebad4..3aa2939 100644 --- a/inc/functions.anfragen.inc.php +++ b/inc/functions.anfragen.inc.php @@ -1,164 +1,164 @@ -prepare("SELECT * FROM togo_terminvorgaben"); - $statementtermin->execute(); - foreach ($statementtermin as $row) { - $togovorgabenid = $row["vorgabenid"]; - $togodate = $row["date"]; - $togostart = $row["start"]; - $togoende = $row["ende"]; - $standort = $row["standort"]; - $error = $row["error"]; - $warning = $row["warning"]; - $date = new DateTime(); - if($togodate == "Mo"){ - $date->modify('next monday'); - - }elseif($togodate == "Di"){ - $$date->modify('next tuesday'); - #$nextday = date('Y-m-d', $nextTuesday); - }elseif($togodate == "Mi"){ - $date->modify('next wednesday'); - #$nextday = date('Y-m-d', $nextTuesday); - }elseif($togodate == "Do"){ - $date->modify('next thursday'); - #$nextday = date('Y-m-d', $nextTuesday); - }elseif($togodate == "Fr"){ - $date->modify('next friday'); - #$nextday = date('Y-m-d', $nextTuesday); - }elseif($togodate == "Sa"){ - $date->modify('next saturday'); - #$nextday = date('Y-m-d', $nextTuesday); - }elseif($togodate == "so"){ - $date->modify('next sunday'); - #$nextday = date('Y-m-d', $nextTuesday); - }else{ - $ausgabedate = "error"; - } - $nextday = $date->format('Y-m-d'); - - $i=0; - while($i < 4){ - - if($i!=0){ - #$nextday = date('Y-m-d', strtotime($nextday .' +7 day')); - // Create a new DateTime object - $currentDate = new DateTime($nextday); - $datetempz = $currentDate->add(new DateInterval('P7D')); - //Get yesterday date - $nextday = $datetempz->format('Y-m-d'); - - - } - $statementuser = $pdo->prepare("SELECT terminid FROM togo_termin WHERE date=:date AND start=:start AND end=:end AND standort=:standort"); - $statementuser->execute(array('date' => $nextday , 'start' => $togostart, 'end' => $togoende , 'standort' => $standort )); - - $count = $statementuser->rowCount(); - if($count == 0){ - $insert = $pdo->prepare("INSERT INTO togo_termin (date, start, end,standort,error,warning) VALUES (:date, :start, :end,:standort, :error, :warning)"); - $insert->execute(array('date' => $nextday , 'start' => $togostart, 'end' => $togoende , 'standort' => $standort, 'error' => $error , 'warning' => $warning )); - $userid = $pdo->lastInsertId(); - } - - $i++; - } - - - - } - - -} - - - - -function SendMailMessageSilent($con, $empfaenger, $betreff, $body){ - - // LOGIN CONFIG AUSLESEN - $queryconfig = mysqli_query($con, "Select * FROM config"); - $rowconfig = mysqli_fetch_assoc($queryconfig); - - if($queryconfig->num_rows == 1){ - $row = mysqli_fetch_assoc($queryconfig); - $userid = $row["mailserver"]; - echo $userid; - } - $mailserver = $rowconfig["mailserver"]; - $mailUsername = $rowconfig["mailUsername"]; - $mailPassword = $rowconfig["mailPassword"]; - $mailPort = $rowconfig["mailPort"]; - $mailFrom = $rowconfig["mailFrom"]; - $mailFromName = $rowconfig["mailFromName"]; - $mailSMTPSecure = $rowconfig["mailSMTPSecure"]; - - - $body = iconv('UTF-8', 'CP1252//IGNORE', $body); - $betreff = iconv('UTF-8', 'CP1252//IGNORE', $betreff); - //$mail = new PHPMailer(true); - - - $mail = new PHPMailer(true); - try { - //Server settings - $mail->SMTPDebug = 0; // Enable verbose debug output - $mail->isSMTP(); // Set mailer to use SMTP - //$mail->Host = 'vwp0583.webpack.hosteurope.de'; // Specify main and backup SMTP servers - $mail->Host = $mailserver; - $mail->SMTPAuth = true; // Enable SMTP authentication - //$mail->Username = 'wp1085322-creutzburg'; // SMTP username - //$mail->Password = 'praxis.cr'; // SMTP password - $mail->Username = $mailUsername; - $mail->Password = $mailPassword; - $mail->SMTPSecure = $mailSMTPSecure; // Enable TLS encryption, `ssl` also accepted - //$mail->Port = 587; // TCP port to connect to - $mail->Port = $mailPort; - //Recipients - $mail->setFrom($mailFrom , $mailFromName); - #$mail->addAddress('ccreutzburg@live.de', 'Joe User'); // Add a recipient - $mail->addAddress($empfaenger); // Name is optional - //$mail->addReplyTo('kontakt@praxis-creutzburg.de', 'Praxis Creutzburg'); - //$mail->addBCC('Arzt@praxis-creutzburg.de'); - //$mail->addBCC("praxis@balanceacademie.de"); - //Attachments - #$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments - #$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name - - //Content - $mail->isHTML(true); // Set email format to HTML - $mail->Subject = $betreff; - $mail->Body = $body; - $mail->AltBody = $body; - //$mail->charSet = "UTF-8"; - //$mail->Encoding = 'base64'; - - $mail->send(); - - } catch (Exception $e) { - - } - - - -} - - - - - -?> - +prepare("SELECT * FROM togo_terminvorgaben"); + $statementtermin->execute(); + foreach ($statementtermin as $row) { + $togovorgabenid = $row["vorgabenid"]; + $togodate = $row["date"]; + $togostart = $row["start"]; + $togoende = $row["ende"]; + $standort = $row["standort"]; + $error = $row["error"]; + $warning = $row["warning"]; + $date = new DateTime(); + if($togodate == "Mo"){ + $date->modify('next monday'); + + }elseif($togodate == "Di"){ + $$date->modify('next tuesday'); + #$nextday = date('Y-m-d', $nextTuesday); + }elseif($togodate == "Mi"){ + $date->modify('next wednesday'); + #$nextday = date('Y-m-d', $nextTuesday); + }elseif($togodate == "Do"){ + $date->modify('next thursday'); + #$nextday = date('Y-m-d', $nextTuesday); + }elseif($togodate == "Fr"){ + $date->modify('next friday'); + #$nextday = date('Y-m-d', $nextTuesday); + }elseif($togodate == "Sa"){ + $date->modify('next saturday'); + #$nextday = date('Y-m-d', $nextTuesday); + }elseif($togodate == "so"){ + $date->modify('next sunday'); + #$nextday = date('Y-m-d', $nextTuesday); + }else{ + $ausgabedate = "error"; + } + $nextday = $date->format('Y-m-d'); + + $i=0; + while($i < 4){ + + if($i!=0){ + #$nextday = date('Y-m-d', strtotime($nextday .' +7 day')); + // Create a new DateTime object + $currentDate = new DateTime($nextday); + $datetempz = $currentDate->add(new DateInterval('P7D')); + //Get yesterday date + $nextday = $datetempz->format('Y-m-d'); + + + } + $statementuser = $pdo->prepare("SELECT terminid FROM togo_termin WHERE date=:date AND start=:start AND end=:end AND standort=:standort"); + $statementuser->execute(array('date' => $nextday , 'start' => $togostart, 'end' => $togoende , 'standort' => $standort )); + + $count = $statementuser->rowCount(); + if($count == 0){ + $insert = $pdo->prepare("INSERT INTO togo_termin (date, start, end,standort,error,warning) VALUES (:date, :start, :end,:standort, :error, :warning)"); + $insert->execute(array('date' => $nextday , 'start' => $togostart, 'end' => $togoende , 'standort' => $standort, 'error' => $error , 'warning' => $warning )); + $userid = $pdo->lastInsertId(); + } + + $i++; + } + + + + } + + +} + + + + +function SendMailMessageSilent($con, $empfaenger, $betreff, $body){ + + // LOGIN CONFIG AUSLESEN + $queryconfig = mysqli_query($con, "Select * FROM config"); + $rowconfig = mysqli_fetch_assoc($queryconfig); + + if($queryconfig->num_rows == 1){ + $row = mysqli_fetch_assoc($queryconfig); + $userid = $row["mailserver"]; + echo $userid; + } + $mailserver = $rowconfig["mailserver"]; + $mailUsername = $rowconfig["mailUsername"]; + $mailPassword = $rowconfig["mailPassword"]; + $mailPort = $rowconfig["mailPort"]; + $mailFrom = $rowconfig["mailFrom"]; + $mailFromName = $rowconfig["mailFromName"]; + $mailSMTPSecure = $rowconfig["mailSMTPSecure"]; + + + $body = iconv('UTF-8', 'CP1252//IGNORE', $body); + $betreff = iconv('UTF-8', 'CP1252//IGNORE', $betreff); + //$mail = new PHPMailer(true); + + + $mail = new PHPMailer(true); + try { + //Server settings + $mail->SMTPDebug = 0; // Enable verbose debug output + $mail->isSMTP(); // Set mailer to use SMTP + //$mail->Host = 'vwp0583.webpack.hosteurope.de'; // Specify main and backup SMTP servers + $mail->Host = $mailserver; + $mail->SMTPAuth = true; // Enable SMTP authentication + //$mail->Username = 'wp1085322-creutzburg'; // SMTP username + //$mail->Password = 'praxis.cr'; // SMTP password + $mail->Username = $mailUsername; + $mail->Password = $mailPassword; + $mail->SMTPSecure = $mailSMTPSecure; // Enable TLS encryption, `ssl` also accepted + //$mail->Port = 587; // TCP port to connect to + $mail->Port = $mailPort; + //Recipients + $mail->setFrom($mailFrom , $mailFromName); + #$mail->addAddress('ccreutzburg@live.de', 'Joe User'); // Add a recipient + $mail->addAddress($empfaenger); // Name is optional + //$mail->addReplyTo('kontakt@praxis-creutzburg.de', 'Praxis Creutzburg'); + //$mail->addBCC('Arzt@praxis-creutzburg.de'); + //$mail->addBCC("praxis@balanceacademie.de"); + //Attachments + #$mail->addAttachment('/var/tmp/file.tar.gz'); // Add attachments + #$mail->addAttachment('/tmp/image.jpg', 'new.jpg'); // Optional name + + //Content + $mail->isHTML(true); // Set email format to HTML + $mail->Subject = $betreff; + $mail->Body = $body; + $mail->AltBody = $body; + //$mail->charSet = "UTF-8"; + //$mail->Encoding = 'base64'; + + $mail->send(); + + } catch (Exception $e) { + + } + + + +} + + + + + +?> + diff --git a/inc/functions.formulare.inc.php b/inc/functions.formulare.inc.php index 176c8a7..f80a574 100644 --- a/inc/functions.formulare.inc.php +++ b/inc/functions.formulare.inc.php @@ -1,6 +1,6 @@ - \ No newline at end of file diff --git a/inc/suchepatient.php b/inc/suchepatient.php index 6f1d561..c3f1bfa 100644 --- a/inc/suchepatient.php +++ b/inc/suchepatient.php @@ -1,37 +1,37 @@ -query($sql) as $row) { - - $userid = stripslashes($row['person_id']); - $name = stripslashes($row['nachname']); - $vorname = stripslashes($row['vorname']); - $geburtstag = stripslashes($row['geburtstag']); - $email = htmlentities(stripslashes($row['email'])); - $tele = htmlentities(stripslashes($row['tele'])); - $a_json_row["id"] = $userid; - $a_json_row["value"] = $vorname.' '.$name.' - '.$geburtstag.' - '.$email.' - '.$tele; - $a_json_row["label"] = $vorname.' '.$name.' - '.$geburtstag.' - '.$email.' - '.$tele; - array_push($a_json, $a_json_row); - -} -// jQuery wants JSON data -echo json_encode($a_json); - +query($sql) as $row) { + + $userid = stripslashes($row['person_id']); + $name = stripslashes($row['nachname']); + $vorname = stripslashes($row['vorname']); + $geburtstag = stripslashes($row['geburtstag']); + $email = htmlentities(stripslashes($row['email'])); + $tele = htmlentities(stripslashes($row['tele'])); + $a_json_row["id"] = $userid; + $a_json_row["value"] = $vorname.' '.$name.' - '.$geburtstag.' - '.$email.' - '.$tele; + $a_json_row["label"] = $vorname.' '.$name.' - '.$geburtstag.' - '.$email.' - '.$tele; + array_push($a_json, $a_json_row); + +} +// jQuery wants JSON data +echo json_encode($a_json); + ?> \ No newline at end of file diff --git a/inc/zweittermin.php b/inc/zweittermin.php index 75ec632..3bc8cc6 100644 --- a/inc/zweittermin.php +++ b/inc/zweittermin.php @@ -1,120 +1,120 @@ -prepare("SELECT impfstoff, date,terminart, ZIminimal, ZImaximal, ZIaktiv, ZIbiontech, ZIastra, ZImoderna FROM timeslots INNER JOIN impfstoff ON timeslots.impfstoff = impfstoff.impfid WHERE timeid = :timeid"); - $statementtermin->execute(array('timeid' => $timeid)); - $rowtime = $statementtermin->fetch(PDO::FETCH_ASSOC); - $ZIaktiv = $rowtime["ZIaktiv"]; - $ZIminimal = $rowtime["ZIminimal"]; - $ZImaximal = $rowtime["ZImaximal"]; - $ZIbiontech = $rowtime["ZIbiontech"]; - $ZIastra = $rowtime["ZIastra"]; - $ZImoderna = $rowtime["ZImoderna"]; - $impfname = $rowtime["impfname"]; - $terminart = $rowtime["terminart"]; - - $minimaldate = date_create($rowtime["date"]); - date_add($minimaldate, date_interval_create_from_date_string($ZIminimal . ' days')); - $minimaldate = date_format($minimaldate, 'Y-m-d'); - $maximaldate = date_create($rowtime["date"]); - date_add($maximaldate, date_interval_create_from_date_string($ZImaximal . ' days')); - $maximaldate = date_format($maximaldate, 'Y-m-d'); - $impfstoffstring = ""; - $terminartstring = ""; - - if($ZIaktiv && ($terminart == 1 || $terminart == 0) ){ - if($ZIbiontech){ - if($impfstoffstring == ""){ - $impfstoffstring = $impfstoffstring . "(impfstoff='3'"; - }else{ - $impfstoffstring = $impfstoffstring . " OR impfstoff='3'"; - } - } - if($ZIastra){ - if($impfstoffstring == ""){ - $impfstoffstring = $impfstoffstring . "(impfstoff='2'"; - }else{ - $impfstoffstring = $impfstoffstring . " OR impfstoff='2'"; - } - - - } - if($ZImoderna){ - if($impfstoffstring == ""){ - $impfstoffstring = $impfstoffstring . "(impfstoff='5'"; - }else{ - $impfstoffstring = $impfstoffstring . " OR impfstoff='5'"; - } - - } - - $impfstoffstring = $impfstoffstring . ")"; - $terminartstring = " AND (terminart='1' OR terminart='3' OR terminart='5')"; - - - - $statement = $pdo->prepare("SELECT date,start,ende,impfdosen,timeid,impfstoff FROM timeslots WHERE date>= '$minimaldate' AND date<='$maximaldate' AND $impfstoffstring $terminartstring AND impfdosen > 0"); - $statement->execute(); - $count = $statement->rowCount(); - - if($count == 0){ - echo"

Zweitimpfung

Aktuell stehen bei uns keine Termine für die Zweitimpfung zur Verfügung.
Bitte kümmern Sie sich selbstständig, um einen Termin für die Zweitimpfung.
Sobald wir Termine für die Zweitimpfung zur Verfügung haben, finden Sie diese auch auf dieser Webseite.

Sehen Sie von weiteren telefonischen Anfragen ab!


"; - }else{ - ?> -
- - -

- - prepare("SELECT impfstoff, date,terminart, ZIminimal, ZImaximal, ZIaktiv, ZIbiontech, ZIastra, ZImoderna FROM timeslots INNER JOIN impfstoff ON timeslots.impfstoff = impfstoff.impfid WHERE timeid = :timeid"); + $statementtermin->execute(array('timeid' => $timeid)); + $rowtime = $statementtermin->fetch(PDO::FETCH_ASSOC); + $ZIaktiv = $rowtime["ZIaktiv"]; + $ZIminimal = $rowtime["ZIminimal"]; + $ZImaximal = $rowtime["ZImaximal"]; + $ZIbiontech = $rowtime["ZIbiontech"]; + $ZIastra = $rowtime["ZIastra"]; + $ZImoderna = $rowtime["ZImoderna"]; + $impfname = $rowtime["impfname"]; + $terminart = $rowtime["terminart"]; + + $minimaldate = date_create($rowtime["date"]); + date_add($minimaldate, date_interval_create_from_date_string($ZIminimal . ' days')); + $minimaldate = date_format($minimaldate, 'Y-m-d'); + $maximaldate = date_create($rowtime["date"]); + date_add($maximaldate, date_interval_create_from_date_string($ZImaximal . ' days')); + $maximaldate = date_format($maximaldate, 'Y-m-d'); + $impfstoffstring = ""; + $terminartstring = ""; + + if($ZIaktiv && ($terminart == 1 || $terminart == 0) ){ + if($ZIbiontech){ + if($impfstoffstring == ""){ + $impfstoffstring = $impfstoffstring . "(impfstoff='3'"; + }else{ + $impfstoffstring = $impfstoffstring . " OR impfstoff='3'"; + } + } + if($ZIastra){ + if($impfstoffstring == ""){ + $impfstoffstring = $impfstoffstring . "(impfstoff='2'"; + }else{ + $impfstoffstring = $impfstoffstring . " OR impfstoff='2'"; + } + + + } + if($ZImoderna){ + if($impfstoffstring == ""){ + $impfstoffstring = $impfstoffstring . "(impfstoff='5'"; + }else{ + $impfstoffstring = $impfstoffstring . " OR impfstoff='5'"; + } + + } + + $impfstoffstring = $impfstoffstring . ")"; + $terminartstring = " AND (terminart='1' OR terminart='3' OR terminart='5')"; + + + + $statement = $pdo->prepare("SELECT date,start,ende,impfdosen,timeid,impfstoff FROM timeslots WHERE date>= '$minimaldate' AND date<='$maximaldate' AND $impfstoffstring $terminartstring AND impfdosen > 0"); + $statement->execute(); + $count = $statement->rowCount(); + + if($count == 0){ + echo"

Zweitimpfung

Aktuell stehen bei uns keine Termine für die Zweitimpfung zur Verfügung.
Bitte kümmern Sie sich selbstständig, um einen Termin für die Zweitimpfung.
Sobald wir Termine für die Zweitimpfung zur Verfügung haben, finden Sie diese auch auf dieser Webseite.

Sehen Sie von weiteren telefonischen Anfragen ab!


"; + }else{ + ?> +
+ + +

+ + \ No newline at end of file diff --git a/index.php b/index.php index de19f3c..f649e10 100644 --- a/index.php +++ b/index.php @@ -1,179 +1,179 @@ - - - - - - - - - Praxis Creutzburg - Startseite - - - - - - - - - - - - -
- -
- -
-"; -?> - -

Aktuelle Informationen

- -
-
- - ++++++    ++++++    ++++++    ++++++    ++++++    ++++++ - -
- -
-
-

Wir impfen gegen Gürtelrose, Grippe, Corona und andere Erkrankungen! Anmeldung online! Derzeit Beratung auch in der normalen Sprechstunde.

- Impftermin sichern -
- Warteliste Grippeschutzimpfung -

-
-

Haben Sie Fragen?

- Nutzen Sie unsere Formulare für eine Anfrage an unser Praxisteam.

- Frage stellen -

-
- - - -
- - ++++++    ++++++    ++++++    ++++++    ++++++    ++++++ - -
- - - - - - - - - - Termine/absagen - - Rezepte - - Anfrage - -
- - - - -
- - - - + + + + + + + + + Praxis Creutzburg - Startseite + + + + + + + + + + + + +
+ +
+ +
+"; +?> + +

Aktuelle Informationen

+ +
+
+ + ++++++    ++++++    ++++++    ++++++    ++++++    ++++++ + +
+ +
+
+

Wir impfen gegen Gürtelrose, Grippe, Corona und andere Erkrankungen! Anmeldung online! Derzeit Beratung auch in der normalen Sprechstunde.

+ Impftermin sichern +
+ Warteliste Grippeschutzimpfung +

+
+

Haben Sie Fragen?

+ Nutzen Sie unsere Formulare für eine Anfrage an unser Praxisteam.

+ Frage stellen +

+
+ + + +
+ + ++++++    ++++++    ++++++    ++++++    ++++++    ++++++ + +
+ + + + + + + + + + Termine/absagen + + Rezepte + + Anfrage + +
+ + + + +
+ + + + \ No newline at end of file diff --git a/intern/admin.php b/intern/admin.php index de7984f..cc7f83f 100644 --- a/intern/admin.php +++ b/intern/admin.php @@ -1,30 +1,30 @@ - - - - - - - - + + + + + + + + diff --git a/intern/index.php b/intern/index.php index f314fa3..8ac5a24 100644 --- a/intern/index.php +++ b/intern/index.php @@ -1,56 +1,56 @@ - - - - - - -
-
- -

Interner Bereich

- -

Hallo ,
- Herzlich Willkommen im internen Bereich von !

- - -
"; - echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail! Bitte authentifizieren Sie Ihre E-Mail-Adresse.
"; - echo "
"; - echo ""; - echo "
"; - echo '
'; - - - } - if(!check_userdatenvorhanden()){ - - echo "

"; - echo "Es fehlen noch Informationen in Ihrem Stammdaten. Bitte pflegen Sie die Daten nach, damit
"; - echo "
"; - echo ""; - echo "
"; - echo '
'; - - - } - - - - if(check_mailreg() && check_userdatenvorhanden() ){ - ?> + + + + + + +
+
+ +

Interner Bereich

+ +

Hallo ,
+ Herzlich Willkommen im internen Bereich von !

+ + +
"; + echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail! Bitte authentifizieren Sie Ihre E-Mail-Adresse.
"; + echo "
"; + echo ""; + echo "
"; + echo '
'; + + + } + if(!check_userdatenvorhanden()){ + + echo "

"; + echo "Es fehlen noch Informationen in Ihrem Stammdaten. Bitte pflegen Sie die Daten nach, damit
"; + echo "
"; + echo ""; + echo "
"; + echo '
'; + + + } + + + + if(check_mailreg() && check_userdatenvorhanden() ){ + ?>

Neue Anfragen können Sie über diesen Button einreichen:

Neue Anfragen erstellen



@@ -58,69 +58,69 @@ if( is_checked_in_index() ){

Zur Impfwarteliste



Hier können Sie Ihre Anfragen einsehen. Die Antwort erhalten Sie per E-Mail.

-

Meine Anfragen einsehen



- - - - - - - - - -

Interner Bereich

- -

Nach der Anmeldung können Sie Ihre Anfragen an einsehen oder neue Anfragen erstellen.
- Bevor Sie sich anmelden können, müssen Sie sich registieren.

-
- - - - - - - -
- -
-
- -

- Passwort vergessen -
- -



- -

Jetzt registrieren

- - - - - - - - -
-
-Meine Anfragen einsehen



+ + + + + + + + + +

Interner Bereich

+ +

Nach der Anmeldung können Sie Ihre Anfragen an einsehen oder neue Anfragen erstellen.
+ Bevor Sie sich anmelden können, müssen Sie sich registieren.

+
+ + + + + + + +
+ +
+
+ +

+ Passwort vergessen +
+ +



+ +

Jetzt registrieren

+ + + + + + + + +
+
+ diff --git a/intern/js/ajax.js b/intern/js/ajax.js index 4093979..a2692fa 100644 --- a/intern/js/ajax.js +++ b/intern/js/ajax.js @@ -1,47 +1,47 @@ -var http = createRequestObject(); -var objectId = ''; - - -function createRequestObject(htmlObjectId){ - var obj; - var browser = navigator.appName; - - objectId = htmlObjectId; - - if(browser == "Microsoft Internet Explorer"){ - obj = new ActiveXObject("Microsoft.XMLHTTP"); - } - else{ - obj = new XMLHttpRequest(); - } - return obj; -} - -function sendReq(serverFileName, variableNames, variableValues) { - var paramString = ''; - - variableNames = variableNames.split(','); - variableValues = variableValues.split(','); - - for(i=0; i+~]|"+M+")"+M+"*"),U=new RegExp(M+"|>"),X=new RegExp(F),V=new RegExp("^"+I+"$"),G={ID:new RegExp("^#("+I+")"),CLASS:new RegExp("^\\.("+I+")"),TAG:new RegExp("^("+I+"|[*])"),ATTR:new RegExp("^"+W),PSEUDO:new RegExp("^"+F),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+M+"*(even|odd|(([+-]|)(\\d*)n|)"+M+"*(?:([+-]|)"+M+"*(\\d+)|))"+M+"*\\)|)","i"),bool:new RegExp("^(?:"+R+")$","i"),needsContext:new RegExp("^"+M+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+M+"*((?:-\\d)?\\d*)"+M+"*\\)|)(?=[^-]|$)","i")},Y=/HTML$/i,Q=/^(?:input|select|textarea|button)$/i,J=/^h\d$/i,K=/^[^{]+\{\s*\[native \w/,Z=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,ee=/[+~]/,te=new RegExp("\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\([^\\r\\n\\f])","g"),ne=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},re=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\0-\x1f\x7f-\uFFFF\w-]/g,ie=function(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e},oe=function(){T()},ae=be(function(e){return!0===e.disabled&&"fieldset"===e.nodeName.toLowerCase()},{dir:"parentNode",next:"legend"});try{H.apply(t=O.call(p.childNodes),p.childNodes),t[p.childNodes.length].nodeType}catch(e){H={apply:t.length?function(e,t){L.apply(e,O.call(t))}:function(e,t){var n=e.length,r=0;while(e[n++]=t[r++]);e.length=n-1}}}function se(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(T(e),e=e||C,E)){if(11!==p&&(u=Z.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return n.push(a),n}else if(f&&(a=f.getElementById(i))&&y(e,a)&&a.id===i)return n.push(a),n}else{if(u[2])return H.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&d.getElementsByClassName&&e.getElementsByClassName)return H.apply(n,e.getElementsByClassName(i)),n}if(d.qsa&&!N[t+" "]&&(!v||!v.test(t))&&(1!==p||"object"!==e.nodeName.toLowerCase())){if(c=t,f=e,1===p&&(U.test(t)||z.test(t))){(f=ee.test(t)&&ye(e.parentNode)||e)===e&&d.scope||((s=e.getAttribute("id"))?s=s.replace(re,ie):e.setAttribute("id",s=S)),o=(l=h(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+xe(l[o]);c=l.join(",")}try{return H.apply(n,f.querySelectorAll(c)),n}catch(e){N(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return g(t.replace($,"$1"),e,n,r)}function ue(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function le(e){return e[S]=!0,e}function ce(e){var t=C.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function fe(e,t){var n=e.split("|"),r=n.length;while(r--)b.attrHandle[n[r]]=t}function pe(e,t){var n=t&&e,r=n&&1===e.nodeType&&1===t.nodeType&&e.sourceIndex-t.sourceIndex;if(r)return r;if(n)while(n=n.nextSibling)if(n===t)return-1;return e?1:-1}function de(t){return function(e){return"input"===e.nodeName.toLowerCase()&&e.type===t}}function he(n){return function(e){var t=e.nodeName.toLowerCase();return("input"===t||"button"===t)&&e.type===n}}function ge(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&ae(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function ve(a){return le(function(o){return o=+o,le(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function ye(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}for(e in d=se.support={},i=se.isXML=function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!Y.test(t||n&&n.nodeName||"HTML")},T=se.setDocument=function(e){var t,n,r=e?e.ownerDocument||e:p;return r!=C&&9===r.nodeType&&r.documentElement&&(a=(C=r).documentElement,E=!i(C),p!=C&&(n=C.defaultView)&&n.top!==n&&(n.addEventListener?n.addEventListener("unload",oe,!1):n.attachEvent&&n.attachEvent("onunload",oe)),d.scope=ce(function(e){return a.appendChild(e).appendChild(C.createElement("div")),"undefined"!=typeof e.querySelectorAll&&!e.querySelectorAll(":scope fieldset div").length}),d.attributes=ce(function(e){return e.className="i",!e.getAttribute("className")}),d.getElementsByTagName=ce(function(e){return e.appendChild(C.createComment("")),!e.getElementsByTagName("*").length}),d.getElementsByClassName=K.test(C.getElementsByClassName),d.getById=ce(function(e){return a.appendChild(e).id=S,!C.getElementsByName||!C.getElementsByName(S).length}),d.getById?(b.filter.ID=function(e){var t=e.replace(te,ne);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(te,ne);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&E){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=d.getElementsByTagName?function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):d.qsa?t.querySelectorAll(e):void 0}:function(e,t){var n,r=[],i=0,o=t.getElementsByTagName(e);if("*"===e){while(n=o[i++])1===n.nodeType&&r.push(n);return r}return o},b.find.CLASS=d.getElementsByClassName&&function(e,t){if("undefined"!=typeof t.getElementsByClassName&&E)return t.getElementsByClassName(e)},s=[],v=[],(d.qsa=K.test(C.querySelectorAll))&&(ce(function(e){var t;a.appendChild(e).innerHTML="",e.querySelectorAll("[msallowcapture^='']").length&&v.push("[*^$]="+M+"*(?:''|\"\")"),e.querySelectorAll("[selected]").length||v.push("\\["+M+"*(?:value|"+R+")"),e.querySelectorAll("[id~="+S+"-]").length||v.push("~="),(t=C.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||v.push("\\["+M+"*name"+M+"*="+M+"*(?:''|\"\")"),e.querySelectorAll(":checked").length||v.push(":checked"),e.querySelectorAll("a#"+S+"+*").length||v.push(".#.+[+~]"),e.querySelectorAll("\\\f"),v.push("[\\r\\n\\f]")}),ce(function(e){e.innerHTML="";var t=C.createElement("input");t.setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),e.querySelectorAll("[name=d]").length&&v.push("name"+M+"*[*^$|!~]?="),2!==e.querySelectorAll(":enabled").length&&v.push(":enabled",":disabled"),a.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&v.push(":enabled",":disabled"),e.querySelectorAll("*,:x"),v.push(",.*:")})),(d.matchesSelector=K.test(c=a.matches||a.webkitMatchesSelector||a.mozMatchesSelector||a.oMatchesSelector||a.msMatchesSelector))&&ce(function(e){d.disconnectedMatch=c.call(e,"*"),c.call(e,"[s!='']:x"),s.push("!=",F)}),v=v.length&&new RegExp(v.join("|")),s=s.length&&new RegExp(s.join("|")),t=K.test(a.compareDocumentPosition),y=t||K.test(a.contains)?function(e,t){var n=9===e.nodeType?e.documentElement:e,r=t&&t.parentNode;return e===r||!(!r||1!==r.nodeType||!(n.contains?n.contains(r):e.compareDocumentPosition&&16&e.compareDocumentPosition(r)))}:function(e,t){if(t)while(t=t.parentNode)if(t===e)return!0;return!1},j=t?function(e,t){if(e===t)return l=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!d.sortDetached&&t.compareDocumentPosition(e)===n?e==C||e.ownerDocument==p&&y(p,e)?-1:t==C||t.ownerDocument==p&&y(p,t)?1:u?P(u,e)-P(u,t):0:4&n?-1:1)}:function(e,t){if(e===t)return l=!0,0;var n,r=0,i=e.parentNode,o=t.parentNode,a=[e],s=[t];if(!i||!o)return e==C?-1:t==C?1:i?-1:o?1:u?P(u,e)-P(u,t):0;if(i===o)return pe(e,t);n=e;while(n=n.parentNode)a.unshift(n);n=t;while(n=n.parentNode)s.unshift(n);while(a[r]===s[r])r++;return r?pe(a[r],s[r]):a[r]==p?-1:s[r]==p?1:0}),C},se.matches=function(e,t){return se(e,null,null,t)},se.matchesSelector=function(e,t){if(T(e),d.matchesSelector&&E&&!N[t+" "]&&(!s||!s.test(t))&&(!v||!v.test(t)))try{var n=c.call(e,t);if(n||d.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){N(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(te,ne),e[3]=(e[3]||e[4]||e[5]||"").replace(te,ne),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||se.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&se.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return G.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&X.test(n)&&(t=h(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(te,ne).toLowerCase();return"*"===e?function(){return!0}:function(e){return e.nodeName&&e.nodeName.toLowerCase()===t}},CLASS:function(e){var t=m[e+" "];return t||(t=new RegExp("(^|"+M+")"+e+"("+M+"|$)"))&&m(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=se.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function j(e,n,r){return m(n)?S.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?S.grep(e,function(e){return e===n!==r}):"string"!=typeof n?S.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(S.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||D,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:q.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof S?t[0]:t,S.merge(this,S.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:E,!0)),N.test(r[1])&&S.isPlainObject(t))for(r in t)m(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=E.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):m(e)?void 0!==n.ready?n.ready(e):e(S):S.makeArray(e,this)}).prototype=S.fn,D=S(E);var L=/^(?:parents|prev(?:Until|All))/,H={children:!0,contents:!0,next:!0,prev:!0};function O(e,t){while((e=e[t])&&1!==e.nodeType);return e}S.fn.extend({has:function(e){var t=S(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,he=/^$|^module$|\/(?:java|ecma)script/i;ce=E.createDocumentFragment().appendChild(E.createElement("div")),(fe=E.createElement("input")).setAttribute("type","radio"),fe.setAttribute("checked","checked"),fe.setAttribute("name","t"),ce.appendChild(fe),y.checkClone=ce.cloneNode(!0).cloneNode(!0).lastChild.checked,ce.innerHTML="",y.noCloneChecked=!!ce.cloneNode(!0).lastChild.defaultValue,ce.innerHTML="",y.option=!!ce.lastChild;var ge={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function ve(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&A(e,t)?S.merge([e],n):n}function ye(e,t){for(var n=0,r=e.length;n",""]);var me=/<|&#?\w+;/;function xe(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function je(e,t){return A(e,"table")&&A(11!==t.nodeType?t:t.firstChild,"tr")&&S(e).children("tbody")[0]||e}function De(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function qe(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Le(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(Y.hasData(e)&&(s=Y.get(e).events))for(i in Y.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),E.head.appendChild(r[0])},abort:function(){i&&i()}}});var _t,zt=[],Ut=/(=)\?(?=&|$)|\?\?/;S.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=zt.pop()||S.expando+"_"+wt.guid++;return this[e]=!0,e}}),S.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Ut.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Ut.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=m(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Ut,"$1"+r):!1!==e.jsonp&&(e.url+=(Tt.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||S.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=C[r],C[r]=function(){o=arguments},n.always(function(){void 0===i?S(C).removeProp(r):C[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,zt.push(r)),o&&m(i)&&i(o[0]),o=i=void 0}),"script"}),y.createHTMLDocument=((_t=E.implementation.createHTMLDocument("").body).innerHTML="
",2===_t.childNodes.length),S.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(y.createHTMLDocument?((r=(t=E.implementation.createHTMLDocument("")).createElement("base")).href=E.location.href,t.head.appendChild(r)):t=E),o=!n&&[],(i=N.exec(e))?[t.createElement(i[1])]:(i=xe([e],t,o),o&&o.length&&S(o).remove(),S.merge([],i.childNodes)));var r,i,o},S.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(S.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},S.expr.pseudos.animated=function(t){return S.grep(S.timers,function(e){return t===e.elem}).length},S.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=S.css(e,"position"),c=S(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=S.css(e,"top"),u=S.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),m(t)&&(t=t.call(e,n,S.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},S.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){S.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===S.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===S.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=S(e).offset()).top+=S.css(e,"borderTopWidth",!0),i.left+=S.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-S.css(r,"marginTop",!0),left:t.left-i.left-S.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===S.css(e,"position"))e=e.offsetParent;return e||re})}}),S.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;S.fn[t]=function(e){return $(this,function(e,t,n){var r;if(x(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),S.each(["top","left"],function(e,n){S.cssHooks[n]=Fe(y.pixelPosition,function(e,t){if(t)return t=We(e,n),Pe.test(t)?S(e).position()[n]+"px":t})}),S.each({Height:"height",Width:"width"},function(a,s){S.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){S.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return $(this,function(e,t,n){var r;return x(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?S.css(e,t,i):S.style(e,t,n,i)},s,n?e:void 0,n)}})}),S.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){S.fn[t]=function(e){return this.on(t,e)}}),S.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),S.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){S.fn[n]=function(e,t){return 0 - - - - - - - - - - Sticky Footer Navbar Template for Bootstrap - - - - - - - - - - - - - - -
- - - - - -
- - - - - -
-
- - - - - - - - - - - - + + + + + + + + + + + Sticky Footer Navbar Template for Bootstrap + + + + + + + + + + + + + + +
+ + + + + +
+ + + + + +
+
+ + + + + + + + + + + + \ No newline at end of file diff --git a/intern/mailtemplatebetreff.php b/intern/mailtemplatebetreff.php index f73b746..aaa44d8 100644 --- a/intern/mailtemplatebetreff.php +++ b/intern/mailtemplatebetreff.php @@ -1,19 +1,19 @@ - \ No newline at end of file diff --git a/intern/mailtemplatebody.php b/intern/mailtemplatebody.php index f523597..d9d4aab 100644 --- a/intern/mailtemplatebody.php +++ b/intern/mailtemplatebody.php @@ -1,60 +1,60 @@ - \ No newline at end of file diff --git a/intern/meineanfragen.php b/intern/meineanfragen.php index df61efd..9f50bb7 100644 --- a/intern/meineanfragen.php +++ b/intern/meineanfragen.php @@ -1,265 +1,265 @@ - - - - - - -
-
- -

Interner Bereich

- - Hallo ,
- Herzlich Willkommen im internen Bereich von !

- - -
"; - echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail! Bitte authentifizieren Sie Ihre E-Mail-Adresse.
"; - echo "
"; - echo ""; - echo "
"; - echo '
'; - - - } - if(!check_userdatenvorhanden()){ - - echo "

"; - echo "Es fehlen noch Informationen in Ihrem Stammdaten. Bitte pflegen Sie die Daten nach, damit
"; - echo "
"; - echo ""; - echo "
"; - echo '
'; - - - } - - - - if(check_mailreg() && check_userdatenvorhanden() ){ - if($_POST["aktion"] == "11"){ - - $sqlstring = "SELECT * FROM anfragen INNER JOIN persons ON anfragen.requester_person_id = persons.person_id INNER JOIN anfrageart ON anfragen.anforderungart = anfrageart.artid WHERE anfrageid='" . $_POST["anfrageid"] . "'"; - $query = mysqli_query($con,$sqlstring); - // Ticket und Antwort ansehen. - while ($row = $query->fetch_assoc()) { - - - $anfrageid = $row["anfrageid"]; - $Zeitanzeige = $datum . " " . $start . "-" . $ende ; - $userid = $row["userid"]; - $checked = $row["checked"]; - $workerid = $row["workerid"]; - $antwortid = $row["antwortid"]; - $date_created = $row["create_time"]; - - $vorname = $row["vorname"]; - $nachname = $row["nachname"]; - $mail = $row["mail"]; - $tel = $row["tele"]; - - $geburtstag = $row["geburtstag"]; - $ausgabegeburstag = $geburtstag; - - $ort = $row["ort"]; - $plz = $row["plz"]; - $strasse = $row["strasse"]; - $ordnungsid = $row["ordnungsid"]; - $ordnungsstring = GetOrdnungsid($ordnungsid); - $nachricht = $row["nachricht"]; - $medikamenteins = $row["medikament1"]; - $medikamentzwei = $row["medikament2"]; - $medikamentdrei = $row["medikament3"]; - $medikamentvier = $row["medikament4"]; - $medikamentfuenf = $row["medikament5"]; - $medikamentsechs = $row["medikament6"]; - $anfrageart = $row["artname"]; - #$anfrageart = iconv('UTF-8' ,'CP1252//IGNORE', $anfrageart); - $antworttext = $row["antworttext"]; - $WeitereInfos= ""; - if($medikamenteins){ - $WeitereInfos .= "Medikament1: $medikamenteins
"; - } - if($medikamentzwei){ - $WeitereInfos .= "Medikament2: $medikamentzwei
"; - } - if($medikamentdrei){ - $WeitereInfos .= "Medikament3: $medikamentdrei
"; - } - if($medikamentvier){ - $WeitereInfos .= "Medikament4: $medikamentvier
"; - } - if($medikamentfuenf){ - $WeitereInfos .= "Medikament5: $medikamentfuenf
"; - } - if($medikamentsechs){ - $WeitereInfos .= "Medikament6: $medikamentsechs
"; - } - if($nachricht){ - $WeitereInfos .= "Nachricht: $nachricht"; - } - - $datumausgabe= date("d.m.Y H:i", strtotime($date_created )); - - $ausgabeworker = GetWorkerName($workerid); - $farbe = GetStatusFarbe($checked); - $checkausgabe = GetStatus($checked); - - $userausgabe = $vorname . " " . $nachname; - $adresse = $plz . " " . $ort . ", " . $strasse ; - /* - $queryconfig = mysqli_query($con, "Select betreff,body,name FROM mailtemplates WHERE templetid='$antwortid' "); - $rowconfig = mysqli_fetch_assoc($queryconfig); - $body = $rowconfig["body"]; - $betreff = $rowconfig["betreff"]; - */ - //$name = $rowconfig["name"]; - //$betreff = iconv('CP1252//IGNORE', 'UTF-8' , $betreff); - $body = iconv('CP1252//IGNORE', 'UTF-8' , $antworttext); - - - echo "Person:
$userausgabe
$mail

Anfrageinformationen:
$ordnungsstring - $anfrageart
$WeitereInfos

Status der Anfrage:
$checkausgabe - $datumausgabe

"; - - echo "Antwortnachricht:

"; - echo "$body
"; - - echo "
"; - echo ""; - echo "
"; - echo '
'; - - } - - - }else{ - - - ?> -

Hier finden Sie die letzten 100 Anfragen für die E-Mail-Adresse ''.
Die Antworten können Sie auf dieser Webseite datenschutzkonform einsehen.

- - - - prepare("SELECT * FROM anfragen INNER JOIN persons ON anfragen.requester_person_id = persons.person_id INNER JOIN anfrageart ON anfragen.anforderungart = anfrageart.artid WHERE persons.email = :email ORDER by create_time DESC LIMIT 100 "); - $statement->execute(array('email' => $user["email"])); - - - echo ' '; - echo ''; - echo ""; - while($row = $statement->fetch(PDO::FETCH_ASSOC)){ - #echo $row["anfrageid"]; - #echo "
"; - $anfrageid = $row["anfrageid"]; - $Zeitanzeige = $datum . " " . $start . "-" . $ende ; - $userid = $row["userid"]; - $checked = $row["checked"]; - $workerid = $row["workerid"]; - $date_created = $row["create_time"]; - $mailtime = $row["update_time"]; - - $vorname = $row["vorname"]; - $nachname = $row["nachname"]; - $mail = $row["mail"]; - $tel = $row["tele"]; - - $geburtstag = $row["geburtstag"]; - $ausgabegeburstag = $geburtstag; - - $ort = $row["ort"]; - $plz = $row["plz"]; - $strasse = $row["strasse"]; - - $nachricht = $row["nachricht"]; - $medikamenteins = $row["medikament1"]; - $medikamentzwei = $row["medikament2"]; - $medikamentdrei = $row["medikament3"]; - $medikamentvier = $row["medikament4"]; - $medikamentfuenf = $row["medikament5"]; - $medikamentsechs = $row["medikament6"]; - $anfrageart = $row["artname"]; - $ordnungsid = $row["ordnungsid"]; - $ordnungsstring = GetOrdnungsid($ordnungsid); - $WeitereInfos= ""; - if($medikamenteins){ - $WeitereInfos .= "Medikament1: $medikamenteins
"; - } - if($medikamentzwei){ - $WeitereInfos .= "Medikament2: $medikamentzwei
"; - } - if($medikamentdrei){ - $WeitereInfos .= "Medikament3: $medikamentdrei
"; - } - if($medikamentvier){ - $WeitereInfos .= "Medikament4: $medikamentvier
"; - } - if($medikamentfuenf){ - $WeitereInfos .= "Medikament5: $medikamentfuenf
"; - } - if($nachricht){ - $WeitereInfos .= "Nachricht: $nachricht"; - } - - $datumausgabe= date("d.m.Y H:i", strtotime($date_created )); - $antwortzeit = date("d.m.Y H:i", strtotime($mailtime )); - - $farbe = GetStatusFarbe($checked); - $checkausgabe = GetStatus($checked); - - $userausgabe = $vorname . " " . $nachname . "
" . $ausgabegeburstag; - $adresse = $plz . " " . $ort . "
" . $strasse ; - - echo ""; - echo ""; - } - - echo "
Person/AdressecreatedateAnfragedatumAnfrage/StatusAktion
$userausgabe
$adresse
$date_created$datumausgabe$ordnungsstring - $anfrageart
$WeitereInfos

Status:
$checkausgabe
$antwortzeit
"; - if($checked == "10"){ - echo " -
-
- - - -
-
- "; - }else{ - - echo "Keine Antwort einsehbar."; - - } - echo "
"; - //echo "
"; - echo "

"; - echo "

"; - echo "

"; - echo "

"; - - } - } - -?> -
-
- + + + + + +
+
+ +

Interner Bereich

+ + Hallo ,
+ Herzlich Willkommen im internen Bereich von !

+ + +
"; + echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail! Bitte authentifizieren Sie Ihre E-Mail-Adresse.
"; + echo "
"; + echo ""; + echo "
"; + echo '
'; + + + } + if(!check_userdatenvorhanden()){ + + echo "

"; + echo "Es fehlen noch Informationen in Ihrem Stammdaten. Bitte pflegen Sie die Daten nach, damit
"; + echo "
"; + echo ""; + echo "
"; + echo '
'; + + + } + + + + if(check_mailreg() && check_userdatenvorhanden() ){ + if($_POST["aktion"] == "11"){ + + $sqlstring = "SELECT * FROM anfragen INNER JOIN persons ON anfragen.requester_person_id = persons.person_id INNER JOIN anfrageart ON anfragen.anforderungart = anfrageart.artid WHERE anfrageid='" . $_POST["anfrageid"] . "'"; + $query = mysqli_query($con,$sqlstring); + // Ticket und Antwort ansehen. + while ($row = $query->fetch_assoc()) { + + + $anfrageid = $row["anfrageid"]; + $Zeitanzeige = $datum . " " . $start . "-" . $ende ; + $userid = $row["userid"]; + $checked = $row["checked"]; + $workerid = $row["workerid"]; + $antwortid = $row["antwortid"]; + $date_created = $row["create_time"]; + + $vorname = $row["vorname"]; + $nachname = $row["nachname"]; + $mail = $row["mail"]; + $tel = $row["tele"]; + + $geburtstag = $row["geburtstag"]; + $ausgabegeburstag = $geburtstag; + + $ort = $row["ort"]; + $plz = $row["plz"]; + $strasse = $row["strasse"]; + $ordnungsid = $row["ordnungsid"]; + $ordnungsstring = GetOrdnungsid($ordnungsid); + $nachricht = $row["nachricht"]; + $medikamenteins = $row["medikament1"]; + $medikamentzwei = $row["medikament2"]; + $medikamentdrei = $row["medikament3"]; + $medikamentvier = $row["medikament4"]; + $medikamentfuenf = $row["medikament5"]; + $medikamentsechs = $row["medikament6"]; + $anfrageart = $row["artname"]; + #$anfrageart = iconv('UTF-8' ,'CP1252//IGNORE', $anfrageart); + $antworttext = $row["antworttext"]; + $WeitereInfos= ""; + if($medikamenteins){ + $WeitereInfos .= "Medikament1: $medikamenteins
"; + } + if($medikamentzwei){ + $WeitereInfos .= "Medikament2: $medikamentzwei
"; + } + if($medikamentdrei){ + $WeitereInfos .= "Medikament3: $medikamentdrei
"; + } + if($medikamentvier){ + $WeitereInfos .= "Medikament4: $medikamentvier
"; + } + if($medikamentfuenf){ + $WeitereInfos .= "Medikament5: $medikamentfuenf
"; + } + if($medikamentsechs){ + $WeitereInfos .= "Medikament6: $medikamentsechs
"; + } + if($nachricht){ + $WeitereInfos .= "Nachricht: $nachricht"; + } + + $datumausgabe= date("d.m.Y H:i", strtotime($date_created )); + + $ausgabeworker = GetWorkerName($workerid); + $farbe = GetStatusFarbe($checked); + $checkausgabe = GetStatus($checked); + + $userausgabe = $vorname . " " . $nachname; + $adresse = $plz . " " . $ort . ", " . $strasse ; + /* + $queryconfig = mysqli_query($con, "Select betreff,body,name FROM mailtemplates WHERE templetid='$antwortid' "); + $rowconfig = mysqli_fetch_assoc($queryconfig); + $body = $rowconfig["body"]; + $betreff = $rowconfig["betreff"]; + */ + //$name = $rowconfig["name"]; + //$betreff = iconv('CP1252//IGNORE', 'UTF-8' , $betreff); + $body = iconv('CP1252//IGNORE', 'UTF-8' , $antworttext); + + + echo "Person:
$userausgabe
$mail

Anfrageinformationen:
$ordnungsstring - $anfrageart
$WeitereInfos

Status der Anfrage:
$checkausgabe - $datumausgabe

"; + + echo "Antwortnachricht:

"; + echo "$body
"; + + echo "
"; + echo ""; + echo "
"; + echo '
'; + + } + + + }else{ + + + ?> +

Hier finden Sie die letzten 100 Anfragen für die E-Mail-Adresse ''.
Die Antworten können Sie auf dieser Webseite datenschutzkonform einsehen.

+ + + + prepare("SELECT * FROM anfragen INNER JOIN persons ON anfragen.requester_person_id = persons.person_id INNER JOIN anfrageart ON anfragen.anforderungart = anfrageart.artid WHERE persons.email = :email ORDER by create_time DESC LIMIT 100 "); + $statement->execute(array('email' => $user["email"])); + + + echo ' '; + echo ''; + echo ""; + while($row = $statement->fetch(PDO::FETCH_ASSOC)){ + #echo $row["anfrageid"]; + #echo "
"; + $anfrageid = $row["anfrageid"]; + $Zeitanzeige = $datum . " " . $start . "-" . $ende ; + $userid = $row["userid"]; + $checked = $row["checked"]; + $workerid = $row["workerid"]; + $date_created = $row["create_time"]; + $mailtime = $row["update_time"]; + + $vorname = $row["vorname"]; + $nachname = $row["nachname"]; + $mail = $row["mail"]; + $tel = $row["tele"]; + + $geburtstag = $row["geburtstag"]; + $ausgabegeburstag = $geburtstag; + + $ort = $row["ort"]; + $plz = $row["plz"]; + $strasse = $row["strasse"]; + + $nachricht = $row["nachricht"]; + $medikamenteins = $row["medikament1"]; + $medikamentzwei = $row["medikament2"]; + $medikamentdrei = $row["medikament3"]; + $medikamentvier = $row["medikament4"]; + $medikamentfuenf = $row["medikament5"]; + $medikamentsechs = $row["medikament6"]; + $anfrageart = $row["artname"]; + $ordnungsid = $row["ordnungsid"]; + $ordnungsstring = GetOrdnungsid($ordnungsid); + $WeitereInfos= ""; + if($medikamenteins){ + $WeitereInfos .= "Medikament1: $medikamenteins
"; + } + if($medikamentzwei){ + $WeitereInfos .= "Medikament2: $medikamentzwei
"; + } + if($medikamentdrei){ + $WeitereInfos .= "Medikament3: $medikamentdrei
"; + } + if($medikamentvier){ + $WeitereInfos .= "Medikament4: $medikamentvier
"; + } + if($medikamentfuenf){ + $WeitereInfos .= "Medikament5: $medikamentfuenf
"; + } + if($nachricht){ + $WeitereInfos .= "Nachricht: $nachricht"; + } + + $datumausgabe= date("d.m.Y H:i", strtotime($date_created )); + $antwortzeit = date("d.m.Y H:i", strtotime($mailtime )); + + $farbe = GetStatusFarbe($checked); + $checkausgabe = GetStatus($checked); + + $userausgabe = $vorname . " " . $nachname . "
" . $ausgabegeburstag; + $adresse = $plz . " " . $ort . "
" . $strasse ; + + echo ""; + echo ""; + } + + echo "
Person/AdressecreatedateAnfragedatumAnfrage/StatusAktion
$userausgabe
$adresse
$date_created$datumausgabe$ordnungsstring - $anfrageart
$WeitereInfos

Status:
$checkausgabe
$antwortzeit
"; + if($checked == "10"){ + echo " +
+
+ + + +
+
+ "; + }else{ + + echo "Keine Antwort einsehbar."; + + } + echo "
"; + //echo "
"; + echo "

"; + echo "

"; + echo "

"; + echo "

"; + + } + } + +?> +
+
+ \ No newline at end of file diff --git a/intern/neueanfrage-old1.php b/intern/neueanfrage-old1.php index 5d4f4ed..9e5d9ad 100644 --- a/intern/neueanfrage-old1.php +++ b/intern/neueanfrage-old1.php @@ -1,811 +1,811 @@ - - - - - - -
-
- -

Neue Anfrage

- -

Hallo ,

- - -
"; - echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail! Bitte authentifizieren Sie Ihre E-Mail-Adresse.
"; - echo "
"; - echo ""; - echo "
"; - echo '
'; - - - } - if(!check_userdatenvorhanden()){ - echo "

"; - echo "Es fehlen noch Informationen in Ihrem Stammdaten. Bitte pflegen Sie die Daten nach, damit
"; - echo "
"; - echo ""; - - echo "
"; - echo '
'; - - - - } - - - if(check_mailreg() && check_userdatenvorhanden() ){ - ?> -

Hier können Sie eine neue Anfrage erstellen.

- - Kontrollieren Sie Ihre Angaben!
'; - echo '
'; - echo ''; - // Schleife durch Clemens 15.10.2018 - foreach ($_POST as $key => $value) { - if(!($value == "" || $key == "submit" || $key == "aktion" )){ - if($key == "category"){ - $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $anfragearttext = $rowimpf["artname"]; - - - echo "\n"; - echo"\n"; - }else{ - echo "\n"; - echo"\n"; - } - } - - } - - - echo '
$key:$anfragearttext
$key:$value

'; - echo ''; - echo ''; - echo '
'; - - - }else if($_POST["aktion"] == "2"){ - - $vorname = $user["vorname"]; - $nachname = $user["nachname"]; - $Email = $user["email"]; - $userid = $_POST["anfragender"]; - - $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); - $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); - $medikament3 = mysqli_real_escape_string($con, $_POST["Medikament3"]); - $medikament4 = mysqli_real_escape_string($con, $_POST["Medikament4"]); - $medikament5 = mysqli_real_escape_string($con, $_POST["Medikament5"]); - $medikament6 = mysqli_real_escape_string($con, $_POST["Medikament6"]); - $nachricht = mysqli_real_escape_string($con, $_POST["message"]); - $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); - $abholung = $_POST["abholung"]; - - - if($abholung == "Praxis"){ - $abholungnr="1"; - }elseif($abholung == "Apotheke"){ - $abholungnr="2"; - } - $karte = $_POST["karte"]; - if($karte == "Privat"){ - $karte = "Privatrezept (Selbstzahler)"; - } - - - $nachricht = "Karte eingelesen: " . $karte . "
"."Abholungsort: " . $abholung . "
". $nachricht ; - - // Impfstoff - //$impfstoff = $rowtime["impfstoff"]; - $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $impfstofftext = $rowimpf["impfname"]; - - $sendmail = false; - - // Check connection - if ($con -> connect_errno) { - echo "Failed to connect to MySQL: " . $con -> connect_error; - exit(); - }else{ - - if(!$userid){ - echo "

Keine eindeutige Kennung


Leider konnte unser System Ihnen keine eindeutige Benutzerkennung anlegen. Bitte wenden Sie sich an info@praxis-creutzburg.de.
Unser Team versucht dann schnellstmöglich das Problem zu lösen.
"; - }else{ - - $hashvorher = $vorname . $nachname . $Email; - $hash = md5($hashvorher) . date("YmdHs"); - $query = mysqli_query($con, "SELECT * FROM anfragen WHERE personid='".$userid."' AND anforderungart='".$anforderungart."' AND nachricht='".$nachricht."' AND create_time >= '" . date('Y-m-d', strtotime('-7 days')) ."'"); - if($query->num_rows == 0){ - $sendmail = true; - //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; - $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, medikament1, medikament2,medikament3, medikament4,medikament5, medikament6, nachricht, hash, create_time, ordnungsid, abholort, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."', '".$medikament1."', '".$medikament2."','".$medikament3."', '".$medikament4."','".$medikament5."', '".$medikament6."', '".$nachricht."', '".$hash."', now(), '1', '".$abholungnr ."', '1', '1')"); - - if($query){ - //echo "$hash"; - $anfrageid = mysqli_insert_id($con); - - SendMailMessageVorlage($con, "3", $anfrageid , "26" ); - - - - echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; - - - }else{ - echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; - - } - }else{ - echo "

Doppelte Anfrage


Ihre Anfrage wurde schon in unserem System gespeichert.
Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.
Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.

"; - - } - } - - - - - } - - - }else if($_POST["aktion"] == "4"){ - - // Urlaubsabfrage - $query = mysqli_query($con, "SELECT urlaubid FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."'"); - - if (!$query) - { - die('Error: ' . mysqli_error($con)); - } - - if($query->num_rows != 0){ - - - echo "

Praxis im Urlaub

"; - echo "Wir befinden uns aktuell im Urlaub.
Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.

"; - $query = mysqli_query($con, "SELECT ende,vertretung,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."' ORDER BY ende DESC"); - $row = mysqli_fetch_assoc($query); - $vertreter = $row["vertretung"]; - $vertretertelefon = $row["vertretertelefon"]; - $vertreteradresse = $row["vertreteradresse"]; - $vertreterurl = $row["vertreterurl"]; - $ende = $row["ende"]; - $endeausgabe= date("d.m.Y", strtotime("+1 day", strtotime($ende ))); - if($vertreter){ - echo "Unsere Vertretung: $vertreter
"; - } - if($vertreterurl){ - echo "Webseite Vertretung: $vertreterurl
"; - } - if($vertretertelefon){ - echo "Telefonischer Kontakt Vertretung: $vertretertelefon
"; - } - if($vertreteradresse){ - echo "Adresse Vertretung: $vertreteradresse
"; - } - echo "
Wir stehen Ihnen ab dem ". $endeausgabe . " wieder zur Verfügung.


"; - ?> -
- -
- - - - -

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

- - - '; - echo ''; - ?> -
- - - Benutzer"; - echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; - echo "Geburtstag: " . $user["geburtstag"] . "
"; - echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; - echo ''; - ?> - - -
-
-
-
-
- - - -
-
- - -
- Aktuell befinden wir uns im . Quartal von .
- Dieses geht vom bis
- Heute ist der .
Diese Angaben werden bei der Bearbeitung von unserem Praxisteam überprüft.
- War die Chipkarte dieses Quartal noch nicht eingelesen, ist die Abholung nur in der Praxis möglich. -
- -
-
-
-
- -
- -
-
- - - -
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
- -
-
- -
-
- -
- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
- - - -
- -
-
-
- -




- - -
- - - - - - -
- - - - - - - -
- - - - - -

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

- - - '; - echo ''; - ?> - - - Benutzer"; - echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; - echo "Geburtstag: " . $user["geburtstag"] . "
"; - echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; - echo ''; - ?> - - - -
-
-
-
-
- - - -
- -
- -
- - -
-
- - - -
-
- -
- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
- - - -
- -
-
-
- -




- - -
- -
- - -
- - - - - -

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

- - - '; - echo ''; - ?> - - Benutzer"; - echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; - echo "Geburtstag: " . $user["geburtstag"] . "
"; - echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; - echo ''; - ?> - - -
-
-
-
- -
- - -
-
- -
- - -
-
- - - -
-
- -
- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
- - - -
- -
-
-
- -




- - -
- -
- Kontrollieren Sie Ihre Angaben!
'; - echo '
'; - echo ''; - // Schleife durch Clemens 15.10.2018 - foreach ($_POST as $key => $value) { - if(!($value == "" || $key == "submit" || $key == "aktion" )){ - if($key == "category"){ - $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $anfragearttext = $rowimpf["artname"]; - - - echo "\n"; - echo"\n"; - }else{ - echo "\n"; - echo"\n"; - } - } - - } - - - echo '
$key:$anfragearttext
$key:$value

'; - echo ''; - echo ''; - echo '
'; - - - }else if($_POST["aktion"] == "6"){ - - $userid = $_POST["anfragender"]; - $vorname = $user["vorname"]; - $nachname = $user["nachname"]; - $Email = $user["email"]; - - $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); - $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); - $nachricht = mysqli_real_escape_string($con, $_POST["message"]); - $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); - - // Impfstoff - //$impfstoff = $rowtime["impfstoff"]; - $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $impfstofftext = $rowimpf["impfname"]; - - $sendmail = false; - - // Check connection - if ($con -> connect_errno) { - echo "Failed to connect to MySQL: " . $con -> connect_error; - exit(); - }else{ - - - $hashvorher = $vorname . $nachname . $Email; - $hash = md5($hashvorher) . date("YmdHs"); - - - $sendmail = true; - //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; - $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, nachricht, create_time, hash, ordnungsid, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."','".$nachricht."', now(), '".$hash."', '2', '1', '1')"); - - if($query){ - //echo "$hash"; - $anfrageid = mysqli_insert_id($con); - SendMailMessageVorlage($con, "3", $anfrageid , "19" ); - - - - echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; - - - }else{ - echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; - - } - - - - - - - } - - - }elseif($_POST["aktion"] == "7"){ - - - echo '

Kontrollieren Sie Ihre Angaben!


'; - echo '
'; - echo ''; - // Schleife durch Clemens 15.10.2018 - foreach ($_POST as $key => $value) { - if(!($value == "" || $key == "submit" || $key == "aktion" )){ - if($key == "category"){ - $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $anfragearttext = $rowimpf["artname"]; - - - echo "\n"; - echo"\n"; - }else{ - echo "\n"; - echo"\n"; - } - } - - } - - - echo '
$key:$anfragearttext
$key:$value

'; - echo ''; - echo ''; - echo '
'; - - - }else if($_POST["aktion"] == "8"){ - - $userid = $_POST["anfragender"]; - $vorname = $user["vorname"]; - $nachname = $user["nachname"]; - $Email = $user["email"]; - - $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); - $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); - $nachricht = mysqli_real_escape_string($con, $_POST["message"]); - $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); - - // Impfstoff - //$impfstoff = $rowtime["impfstoff"]; - $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $impfstofftext = $rowimpf["impfname"]; - - $sendmail = false; - - // Check connection - if ($con -> connect_errno) { - echo "Failed to connect to MySQL: " . $con -> connect_error; - exit(); - }else{ - - - $hashvorher = $vorname . $nachname . $Email; - $hash = md5($hashvorher) . date("YmdHs"); - - - $sendmail = true; - //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; - $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, nachricht, create_time, hash, ordnungsid, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."','".$nachricht."', now(), '".$hash."', '2', '1', '1')"); - - if($query){ - //echo "$hash"; - $anfrageid = mysqli_insert_id($con); - SendMailMessageVorlage($con, "3", $anfrageid , "19" ); - - - - echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; - - - }else{ - echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; - - } - - - - - - - } - - - }else{ - - echo "

Wählen Sie die Anfragenart aus:

"; - echo "
"; - echo ''; - - echo "

Benutzer

"; - echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; - echo "Geburtstag: " . $user["geburtstag"] . "
"; - echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; - - $userid = ensureUserFromInternUsersByEmail($pdo, $user["email"]); - - - echo ''; - - - - echo "

"; - - echo ''; - echo ' '; - echo "

"; - echo "
"; - echo '
'; - - } - - } - - echo "




- -
- -
- - "; - }else{ - - echo InfoAusgeloggtePerson(); - - ?> - - - - - - - - - -
-
- + + + + + +
+
+ +

Neue Anfrage

+ +

Hallo ,

+ + +
"; + echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail! Bitte authentifizieren Sie Ihre E-Mail-Adresse.
"; + echo "
"; + echo ""; + echo "
"; + echo '
'; + + + } + if(!check_userdatenvorhanden()){ + echo "

"; + echo "Es fehlen noch Informationen in Ihrem Stammdaten. Bitte pflegen Sie die Daten nach, damit
"; + echo "
"; + echo ""; + + echo "
"; + echo '
'; + + + + } + + + if(check_mailreg() && check_userdatenvorhanden() ){ + ?> +

Hier können Sie eine neue Anfrage erstellen.

+ + Kontrollieren Sie Ihre Angaben!
'; + echo '
'; + echo ''; + // Schleife durch Clemens 15.10.2018 + foreach ($_POST as $key => $value) { + if(!($value == "" || $key == "submit" || $key == "aktion" )){ + if($key == "category"){ + $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $anfragearttext = $rowimpf["artname"]; + + + echo "\n"; + echo"\n"; + }else{ + echo "\n"; + echo"\n"; + } + } + + } + + + echo '
$key:$anfragearttext
$key:$value

'; + echo ''; + echo ''; + echo '
'; + + + }else if($_POST["aktion"] == "2"){ + + $vorname = $user["vorname"]; + $nachname = $user["nachname"]; + $Email = $user["email"]; + $userid = $_POST["anfragender"]; + + $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); + $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); + $medikament3 = mysqli_real_escape_string($con, $_POST["Medikament3"]); + $medikament4 = mysqli_real_escape_string($con, $_POST["Medikament4"]); + $medikament5 = mysqli_real_escape_string($con, $_POST["Medikament5"]); + $medikament6 = mysqli_real_escape_string($con, $_POST["Medikament6"]); + $nachricht = mysqli_real_escape_string($con, $_POST["message"]); + $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); + $abholung = $_POST["abholung"]; + + + if($abholung == "Praxis"){ + $abholungnr="1"; + }elseif($abholung == "Apotheke"){ + $abholungnr="2"; + } + $karte = $_POST["karte"]; + if($karte == "Privat"){ + $karte = "Privatrezept (Selbstzahler)"; + } + + + $nachricht = "Karte eingelesen: " . $karte . "
"."Abholungsort: " . $abholung . "
". $nachricht ; + + // Impfstoff + //$impfstoff = $rowtime["impfstoff"]; + $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $impfstofftext = $rowimpf["impfname"]; + + $sendmail = false; + + // Check connection + if ($con -> connect_errno) { + echo "Failed to connect to MySQL: " . $con -> connect_error; + exit(); + }else{ + + if(!$userid){ + echo "

Keine eindeutige Kennung


Leider konnte unser System Ihnen keine eindeutige Benutzerkennung anlegen. Bitte wenden Sie sich an info@praxis-creutzburg.de.
Unser Team versucht dann schnellstmöglich das Problem zu lösen.
"; + }else{ + + $hashvorher = $vorname . $nachname . $Email; + $hash = md5($hashvorher) . date("YmdHs"); + $query = mysqli_query($con, "SELECT * FROM anfragen WHERE personid='".$userid."' AND anforderungart='".$anforderungart."' AND nachricht='".$nachricht."' AND create_time >= '" . date('Y-m-d', strtotime('-7 days')) ."'"); + if($query->num_rows == 0){ + $sendmail = true; + //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; + $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, medikament1, medikament2,medikament3, medikament4,medikament5, medikament6, nachricht, hash, create_time, ordnungsid, abholort, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."', '".$medikament1."', '".$medikament2."','".$medikament3."', '".$medikament4."','".$medikament5."', '".$medikament6."', '".$nachricht."', '".$hash."', now(), '1', '".$abholungnr ."', '1', '1')"); + + if($query){ + //echo "$hash"; + $anfrageid = mysqli_insert_id($con); + + SendMailMessageVorlage($con, "3", $anfrageid , "26" ); + + + + echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; + + + }else{ + echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; + + } + }else{ + echo "

Doppelte Anfrage


Ihre Anfrage wurde schon in unserem System gespeichert.
Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.
Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.

"; + + } + } + + + + + } + + + }else if($_POST["aktion"] == "4"){ + + // Urlaubsabfrage + $query = mysqli_query($con, "SELECT urlaubid FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."'"); + + if (!$query) + { + die('Error: ' . mysqli_error($con)); + } + + if($query->num_rows != 0){ + + + echo "

Praxis im Urlaub

"; + echo "Wir befinden uns aktuell im Urlaub.
Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.

"; + $query = mysqli_query($con, "SELECT ende,vertretung,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."' ORDER BY ende DESC"); + $row = mysqli_fetch_assoc($query); + $vertreter = $row["vertretung"]; + $vertretertelefon = $row["vertretertelefon"]; + $vertreteradresse = $row["vertreteradresse"]; + $vertreterurl = $row["vertreterurl"]; + $ende = $row["ende"]; + $endeausgabe= date("d.m.Y", strtotime("+1 day", strtotime($ende ))); + if($vertreter){ + echo "Unsere Vertretung: $vertreter
"; + } + if($vertreterurl){ + echo "Webseite Vertretung: $vertreterurl
"; + } + if($vertretertelefon){ + echo "Telefonischer Kontakt Vertretung: $vertretertelefon
"; + } + if($vertreteradresse){ + echo "Adresse Vertretung: $vertreteradresse
"; + } + echo "
Wir stehen Ihnen ab dem ". $endeausgabe . " wieder zur Verfügung.


"; + ?> +
+ +
+ + + + +

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

+ + + '; + echo ''; + ?> +
+ + + Benutzer"; + echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; + echo "Geburtstag: " . $user["geburtstag"] . "
"; + echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; + echo ''; + ?> + + +
+
+
+
+
+ + + +
+
+ + +
+ Aktuell befinden wir uns im . Quartal von .
+ Dieses geht vom bis
+ Heute ist der .
Diese Angaben werden bei der Bearbeitung von unserem Praxisteam überprüft.
+ War die Chipkarte dieses Quartal noch nicht eingelesen, ist die Abholung nur in der Praxis möglich. +
+ +
+
+
+
+ +
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
+ + + +
+ +
+
+
+ +




+ + +
+ + + + + + +
+ + + + + + + +
+ + + + + +

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

+ + + '; + echo ''; + ?> + + + Benutzer"; + echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; + echo "Geburtstag: " . $user["geburtstag"] . "
"; + echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; + echo ''; + ?> + + + +
+
+
+
+
+ + + +
+ +
+ +
+ + +
+
+ + + +
+
+ +
+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
+ + + +
+ +
+
+
+ +




+ + +
+ +
+ + +
+ + + + + +

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

+ + + '; + echo ''; + ?> + + Benutzer"; + echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; + echo "Geburtstag: " . $user["geburtstag"] . "
"; + echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; + echo ''; + ?> + + +
+
+
+
+ +
+ + +
+
+ +
+ + +
+
+ + + +
+
+ +
+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
+ + + +
+ +
+
+
+ +




+ + +
+ +
+ Kontrollieren Sie Ihre Angaben!
'; + echo '
'; + echo ''; + // Schleife durch Clemens 15.10.2018 + foreach ($_POST as $key => $value) { + if(!($value == "" || $key == "submit" || $key == "aktion" )){ + if($key == "category"){ + $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $anfragearttext = $rowimpf["artname"]; + + + echo "\n"; + echo"\n"; + }else{ + echo "\n"; + echo"\n"; + } + } + + } + + + echo '
$key:$anfragearttext
$key:$value

'; + echo ''; + echo ''; + echo '
'; + + + }else if($_POST["aktion"] == "6"){ + + $userid = $_POST["anfragender"]; + $vorname = $user["vorname"]; + $nachname = $user["nachname"]; + $Email = $user["email"]; + + $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); + $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); + $nachricht = mysqli_real_escape_string($con, $_POST["message"]); + $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); + + // Impfstoff + //$impfstoff = $rowtime["impfstoff"]; + $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $impfstofftext = $rowimpf["impfname"]; + + $sendmail = false; + + // Check connection + if ($con -> connect_errno) { + echo "Failed to connect to MySQL: " . $con -> connect_error; + exit(); + }else{ + + + $hashvorher = $vorname . $nachname . $Email; + $hash = md5($hashvorher) . date("YmdHs"); + + + $sendmail = true; + //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; + $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, nachricht, create_time, hash, ordnungsid, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."','".$nachricht."', now(), '".$hash."', '2', '1', '1')"); + + if($query){ + //echo "$hash"; + $anfrageid = mysqli_insert_id($con); + SendMailMessageVorlage($con, "3", $anfrageid , "19" ); + + + + echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; + + + }else{ + echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; + + } + + + + + + + } + + + }elseif($_POST["aktion"] == "7"){ + + + echo '

Kontrollieren Sie Ihre Angaben!


'; + echo '
'; + echo ''; + // Schleife durch Clemens 15.10.2018 + foreach ($_POST as $key => $value) { + if(!($value == "" || $key == "submit" || $key == "aktion" )){ + if($key == "category"){ + $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $anfragearttext = $rowimpf["artname"]; + + + echo "\n"; + echo"\n"; + }else{ + echo "\n"; + echo"\n"; + } + } + + } + + + echo '
$key:$anfragearttext
$key:$value

'; + echo ''; + echo ''; + echo '
'; + + + }else if($_POST["aktion"] == "8"){ + + $userid = $_POST["anfragender"]; + $vorname = $user["vorname"]; + $nachname = $user["nachname"]; + $Email = $user["email"]; + + $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); + $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); + $nachricht = mysqli_real_escape_string($con, $_POST["message"]); + $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); + + // Impfstoff + //$impfstoff = $rowtime["impfstoff"]; + $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $impfstofftext = $rowimpf["impfname"]; + + $sendmail = false; + + // Check connection + if ($con -> connect_errno) { + echo "Failed to connect to MySQL: " . $con -> connect_error; + exit(); + }else{ + + + $hashvorher = $vorname . $nachname . $Email; + $hash = md5($hashvorher) . date("YmdHs"); + + + $sendmail = true; + //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; + $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, nachricht, create_time, hash, ordnungsid, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."','".$nachricht."', now(), '".$hash."', '2', '1', '1')"); + + if($query){ + //echo "$hash"; + $anfrageid = mysqli_insert_id($con); + SendMailMessageVorlage($con, "3", $anfrageid , "19" ); + + + + echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; + + + }else{ + echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; + + } + + + + + + + } + + + }else{ + + echo "

Wählen Sie die Anfragenart aus:

"; + echo "
"; + echo ''; + + echo "

Benutzer

"; + echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; + echo "Geburtstag: " . $user["geburtstag"] . "
"; + echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; + + $userid = ensureUserFromInternUsersByEmail($pdo, $user["email"]); + + + echo ''; + + + + echo "

"; + + echo ''; + echo ' '; + echo "

"; + echo "
"; + echo '
'; + + } + + } + + echo "




+ +
+ +
+ + "; + }else{ + + echo InfoAusgeloggtePerson(); + + ?> + + + + + + + + + +
+
+ \ No newline at end of file diff --git a/intern/neueanfrage-old2.php b/intern/neueanfrage-old2.php index 5d4f4ed..9e5d9ad 100644 --- a/intern/neueanfrage-old2.php +++ b/intern/neueanfrage-old2.php @@ -1,811 +1,811 @@ - - - - - - -
-
- -

Neue Anfrage

- -

Hallo ,

- - -
"; - echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail! Bitte authentifizieren Sie Ihre E-Mail-Adresse.
"; - echo "
"; - echo ""; - echo "
"; - echo '
'; - - - } - if(!check_userdatenvorhanden()){ - echo "

"; - echo "Es fehlen noch Informationen in Ihrem Stammdaten. Bitte pflegen Sie die Daten nach, damit
"; - echo "
"; - echo ""; - - echo "
"; - echo '
'; - - - - } - - - if(check_mailreg() && check_userdatenvorhanden() ){ - ?> -

Hier können Sie eine neue Anfrage erstellen.

- - Kontrollieren Sie Ihre Angaben!
'; - echo '
'; - echo ''; - // Schleife durch Clemens 15.10.2018 - foreach ($_POST as $key => $value) { - if(!($value == "" || $key == "submit" || $key == "aktion" )){ - if($key == "category"){ - $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $anfragearttext = $rowimpf["artname"]; - - - echo "\n"; - echo"\n"; - }else{ - echo "\n"; - echo"\n"; - } - } - - } - - - echo '
$key:$anfragearttext
$key:$value

'; - echo ''; - echo ''; - echo '
'; - - - }else if($_POST["aktion"] == "2"){ - - $vorname = $user["vorname"]; - $nachname = $user["nachname"]; - $Email = $user["email"]; - $userid = $_POST["anfragender"]; - - $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); - $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); - $medikament3 = mysqli_real_escape_string($con, $_POST["Medikament3"]); - $medikament4 = mysqli_real_escape_string($con, $_POST["Medikament4"]); - $medikament5 = mysqli_real_escape_string($con, $_POST["Medikament5"]); - $medikament6 = mysqli_real_escape_string($con, $_POST["Medikament6"]); - $nachricht = mysqli_real_escape_string($con, $_POST["message"]); - $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); - $abholung = $_POST["abholung"]; - - - if($abholung == "Praxis"){ - $abholungnr="1"; - }elseif($abholung == "Apotheke"){ - $abholungnr="2"; - } - $karte = $_POST["karte"]; - if($karte == "Privat"){ - $karte = "Privatrezept (Selbstzahler)"; - } - - - $nachricht = "Karte eingelesen: " . $karte . "
"."Abholungsort: " . $abholung . "
". $nachricht ; - - // Impfstoff - //$impfstoff = $rowtime["impfstoff"]; - $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $impfstofftext = $rowimpf["impfname"]; - - $sendmail = false; - - // Check connection - if ($con -> connect_errno) { - echo "Failed to connect to MySQL: " . $con -> connect_error; - exit(); - }else{ - - if(!$userid){ - echo "

Keine eindeutige Kennung


Leider konnte unser System Ihnen keine eindeutige Benutzerkennung anlegen. Bitte wenden Sie sich an info@praxis-creutzburg.de.
Unser Team versucht dann schnellstmöglich das Problem zu lösen.
"; - }else{ - - $hashvorher = $vorname . $nachname . $Email; - $hash = md5($hashvorher) . date("YmdHs"); - $query = mysqli_query($con, "SELECT * FROM anfragen WHERE personid='".$userid."' AND anforderungart='".$anforderungart."' AND nachricht='".$nachricht."' AND create_time >= '" . date('Y-m-d', strtotime('-7 days')) ."'"); - if($query->num_rows == 0){ - $sendmail = true; - //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; - $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, medikament1, medikament2,medikament3, medikament4,medikament5, medikament6, nachricht, hash, create_time, ordnungsid, abholort, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."', '".$medikament1."', '".$medikament2."','".$medikament3."', '".$medikament4."','".$medikament5."', '".$medikament6."', '".$nachricht."', '".$hash."', now(), '1', '".$abholungnr ."', '1', '1')"); - - if($query){ - //echo "$hash"; - $anfrageid = mysqli_insert_id($con); - - SendMailMessageVorlage($con, "3", $anfrageid , "26" ); - - - - echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; - - - }else{ - echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; - - } - }else{ - echo "

Doppelte Anfrage


Ihre Anfrage wurde schon in unserem System gespeichert.
Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.
Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.

"; - - } - } - - - - - } - - - }else if($_POST["aktion"] == "4"){ - - // Urlaubsabfrage - $query = mysqli_query($con, "SELECT urlaubid FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."'"); - - if (!$query) - { - die('Error: ' . mysqli_error($con)); - } - - if($query->num_rows != 0){ - - - echo "

Praxis im Urlaub

"; - echo "Wir befinden uns aktuell im Urlaub.
Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.

"; - $query = mysqli_query($con, "SELECT ende,vertretung,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."' ORDER BY ende DESC"); - $row = mysqli_fetch_assoc($query); - $vertreter = $row["vertretung"]; - $vertretertelefon = $row["vertretertelefon"]; - $vertreteradresse = $row["vertreteradresse"]; - $vertreterurl = $row["vertreterurl"]; - $ende = $row["ende"]; - $endeausgabe= date("d.m.Y", strtotime("+1 day", strtotime($ende ))); - if($vertreter){ - echo "Unsere Vertretung: $vertreter
"; - } - if($vertreterurl){ - echo "Webseite Vertretung: $vertreterurl
"; - } - if($vertretertelefon){ - echo "Telefonischer Kontakt Vertretung: $vertretertelefon
"; - } - if($vertreteradresse){ - echo "Adresse Vertretung: $vertreteradresse
"; - } - echo "
Wir stehen Ihnen ab dem ". $endeausgabe . " wieder zur Verfügung.


"; - ?> -
- -
- - - - -

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

- - - '; - echo ''; - ?> -
- - - Benutzer"; - echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; - echo "Geburtstag: " . $user["geburtstag"] . "
"; - echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; - echo ''; - ?> - - -
-
-
-
-
- - - -
-
- - -
- Aktuell befinden wir uns im . Quartal von .
- Dieses geht vom bis
- Heute ist der .
Diese Angaben werden bei der Bearbeitung von unserem Praxisteam überprüft.
- War die Chipkarte dieses Quartal noch nicht eingelesen, ist die Abholung nur in der Praxis möglich. -
- -
-
-
-
- -
- -
-
- - - -
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
-
-
- -
- -
-
- -
-
- -
- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
- - - -
- -
-
-
- -




- - -
- - - - - - -
- - - - - - - -
- - - - - -

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

- - - '; - echo ''; - ?> - - - Benutzer"; - echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; - echo "Geburtstag: " . $user["geburtstag"] . "
"; - echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; - echo ''; - ?> - - - -
-
-
-
-
- - - -
- -
- -
- - -
-
- - - -
-
- -
- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
- - - -
- -
-
-
- -




- - -
- -
- - -
- - - - - -

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

- - - '; - echo ''; - ?> - - Benutzer"; - echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; - echo "Geburtstag: " . $user["geburtstag"] . "
"; - echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; - echo ''; - ?> - - -
-
-
-
- -
- - -
-
- -
- - -
-
- - - -
-
- -
- Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
- - - -
- -
-
-
- -




- - -
- -
- Kontrollieren Sie Ihre Angaben!
'; - echo '
'; - echo ''; - // Schleife durch Clemens 15.10.2018 - foreach ($_POST as $key => $value) { - if(!($value == "" || $key == "submit" || $key == "aktion" )){ - if($key == "category"){ - $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $anfragearttext = $rowimpf["artname"]; - - - echo "\n"; - echo"\n"; - }else{ - echo "\n"; - echo"\n"; - } - } - - } - - - echo '
$key:$anfragearttext
$key:$value

'; - echo ''; - echo ''; - echo '
'; - - - }else if($_POST["aktion"] == "6"){ - - $userid = $_POST["anfragender"]; - $vorname = $user["vorname"]; - $nachname = $user["nachname"]; - $Email = $user["email"]; - - $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); - $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); - $nachricht = mysqli_real_escape_string($con, $_POST["message"]); - $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); - - // Impfstoff - //$impfstoff = $rowtime["impfstoff"]; - $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $impfstofftext = $rowimpf["impfname"]; - - $sendmail = false; - - // Check connection - if ($con -> connect_errno) { - echo "Failed to connect to MySQL: " . $con -> connect_error; - exit(); - }else{ - - - $hashvorher = $vorname . $nachname . $Email; - $hash = md5($hashvorher) . date("YmdHs"); - - - $sendmail = true; - //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; - $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, nachricht, create_time, hash, ordnungsid, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."','".$nachricht."', now(), '".$hash."', '2', '1', '1')"); - - if($query){ - //echo "$hash"; - $anfrageid = mysqli_insert_id($con); - SendMailMessageVorlage($con, "3", $anfrageid , "19" ); - - - - echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; - - - }else{ - echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; - - } - - - - - - - } - - - }elseif($_POST["aktion"] == "7"){ - - - echo '

Kontrollieren Sie Ihre Angaben!


'; - echo '
'; - echo ''; - // Schleife durch Clemens 15.10.2018 - foreach ($_POST as $key => $value) { - if(!($value == "" || $key == "submit" || $key == "aktion" )){ - if($key == "category"){ - $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $anfragearttext = $rowimpf["artname"]; - - - echo "\n"; - echo"\n"; - }else{ - echo "\n"; - echo"\n"; - } - } - - } - - - echo '
$key:$anfragearttext
$key:$value

'; - echo ''; - echo ''; - echo '
'; - - - }else if($_POST["aktion"] == "8"){ - - $userid = $_POST["anfragender"]; - $vorname = $user["vorname"]; - $nachname = $user["nachname"]; - $Email = $user["email"]; - - $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); - $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); - $nachricht = mysqli_real_escape_string($con, $_POST["message"]); - $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); - - // Impfstoff - //$impfstoff = $rowtime["impfstoff"]; - $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; - $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); - $rowimpf = mysqli_fetch_assoc($queryimpfstoff); - $impfstofftext = $rowimpf["impfname"]; - - $sendmail = false; - - // Check connection - if ($con -> connect_errno) { - echo "Failed to connect to MySQL: " . $con -> connect_error; - exit(); - }else{ - - - $hashvorher = $vorname . $nachname . $Email; - $hash = md5($hashvorher) . date("YmdHs"); - - - $sendmail = true; - //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; - $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, nachricht, create_time, hash, ordnungsid, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."','".$nachricht."', now(), '".$hash."', '2', '1', '1')"); - - if($query){ - //echo "$hash"; - $anfrageid = mysqli_insert_id($con); - SendMailMessageVorlage($con, "3", $anfrageid , "19" ); - - - - echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; - - - }else{ - echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; - - } - - - - - - - } - - - }else{ - - echo "

Wählen Sie die Anfragenart aus:

"; - echo "
"; - echo ''; - - echo "

Benutzer

"; - echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; - echo "Geburtstag: " . $user["geburtstag"] . "
"; - echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; - - $userid = ensureUserFromInternUsersByEmail($pdo, $user["email"]); - - - echo ''; - - - - echo "

"; - - echo ''; - echo ' '; - echo "

"; - echo "
"; - echo '
'; - - } - - } - - echo "




- -
- -
- - "; - }else{ - - echo InfoAusgeloggtePerson(); - - ?> - - - - - - - - - -
-
- + + + + + +
+
+ +

Neue Anfrage

+ +

Hallo ,

+ + +
"; + echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail! Bitte authentifizieren Sie Ihre E-Mail-Adresse.
"; + echo "
"; + echo ""; + echo "
"; + echo '
'; + + + } + if(!check_userdatenvorhanden()){ + echo "

"; + echo "Es fehlen noch Informationen in Ihrem Stammdaten. Bitte pflegen Sie die Daten nach, damit
"; + echo "
"; + echo ""; + + echo "
"; + echo '
'; + + + + } + + + if(check_mailreg() && check_userdatenvorhanden() ){ + ?> +

Hier können Sie eine neue Anfrage erstellen.

+ + Kontrollieren Sie Ihre Angaben!
'; + echo '
'; + echo ''; + // Schleife durch Clemens 15.10.2018 + foreach ($_POST as $key => $value) { + if(!($value == "" || $key == "submit" || $key == "aktion" )){ + if($key == "category"){ + $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $anfragearttext = $rowimpf["artname"]; + + + echo "\n"; + echo"\n"; + }else{ + echo "\n"; + echo"\n"; + } + } + + } + + + echo '
$key:$anfragearttext
$key:$value

'; + echo ''; + echo ''; + echo '
'; + + + }else if($_POST["aktion"] == "2"){ + + $vorname = $user["vorname"]; + $nachname = $user["nachname"]; + $Email = $user["email"]; + $userid = $_POST["anfragender"]; + + $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); + $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); + $medikament3 = mysqli_real_escape_string($con, $_POST["Medikament3"]); + $medikament4 = mysqli_real_escape_string($con, $_POST["Medikament4"]); + $medikament5 = mysqli_real_escape_string($con, $_POST["Medikament5"]); + $medikament6 = mysqli_real_escape_string($con, $_POST["Medikament6"]); + $nachricht = mysqli_real_escape_string($con, $_POST["message"]); + $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); + $abholung = $_POST["abholung"]; + + + if($abholung == "Praxis"){ + $abholungnr="1"; + }elseif($abholung == "Apotheke"){ + $abholungnr="2"; + } + $karte = $_POST["karte"]; + if($karte == "Privat"){ + $karte = "Privatrezept (Selbstzahler)"; + } + + + $nachricht = "Karte eingelesen: " . $karte . "
"."Abholungsort: " . $abholung . "
". $nachricht ; + + // Impfstoff + //$impfstoff = $rowtime["impfstoff"]; + $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $impfstofftext = $rowimpf["impfname"]; + + $sendmail = false; + + // Check connection + if ($con -> connect_errno) { + echo "Failed to connect to MySQL: " . $con -> connect_error; + exit(); + }else{ + + if(!$userid){ + echo "

Keine eindeutige Kennung


Leider konnte unser System Ihnen keine eindeutige Benutzerkennung anlegen. Bitte wenden Sie sich an info@praxis-creutzburg.de.
Unser Team versucht dann schnellstmöglich das Problem zu lösen.
"; + }else{ + + $hashvorher = $vorname . $nachname . $Email; + $hash = md5($hashvorher) . date("YmdHs"); + $query = mysqli_query($con, "SELECT * FROM anfragen WHERE personid='".$userid."' AND anforderungart='".$anforderungart."' AND nachricht='".$nachricht."' AND create_time >= '" . date('Y-m-d', strtotime('-7 days')) ."'"); + if($query->num_rows == 0){ + $sendmail = true; + //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; + $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, medikament1, medikament2,medikament3, medikament4,medikament5, medikament6, nachricht, hash, create_time, ordnungsid, abholort, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."', '".$medikament1."', '".$medikament2."','".$medikament3."', '".$medikament4."','".$medikament5."', '".$medikament6."', '".$nachricht."', '".$hash."', now(), '1', '".$abholungnr ."', '1', '1')"); + + if($query){ + //echo "$hash"; + $anfrageid = mysqli_insert_id($con); + + SendMailMessageVorlage($con, "3", $anfrageid , "26" ); + + + + echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; + + + }else{ + echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; + + } + }else{ + echo "

Doppelte Anfrage


Ihre Anfrage wurde schon in unserem System gespeichert.
Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.
Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.

"; + + } + } + + + + + } + + + }else if($_POST["aktion"] == "4"){ + + // Urlaubsabfrage + $query = mysqli_query($con, "SELECT urlaubid FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."'"); + + if (!$query) + { + die('Error: ' . mysqli_error($con)); + } + + if($query->num_rows != 0){ + + + echo "

Praxis im Urlaub

"; + echo "Wir befinden uns aktuell im Urlaub.
Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.

"; + $query = mysqli_query($con, "SELECT ende,vertretung,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."' ORDER BY ende DESC"); + $row = mysqli_fetch_assoc($query); + $vertreter = $row["vertretung"]; + $vertretertelefon = $row["vertretertelefon"]; + $vertreteradresse = $row["vertreteradresse"]; + $vertreterurl = $row["vertreterurl"]; + $ende = $row["ende"]; + $endeausgabe= date("d.m.Y", strtotime("+1 day", strtotime($ende ))); + if($vertreter){ + echo "Unsere Vertretung: $vertreter
"; + } + if($vertreterurl){ + echo "Webseite Vertretung: $vertreterurl
"; + } + if($vertretertelefon){ + echo "Telefonischer Kontakt Vertretung: $vertretertelefon
"; + } + if($vertreteradresse){ + echo "Adresse Vertretung: $vertreteradresse
"; + } + echo "
Wir stehen Ihnen ab dem ". $endeausgabe . " wieder zur Verfügung.


"; + ?> +
+ +
+ + + + +

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

+ + + '; + echo ''; + ?> +
+ + + Benutzer"; + echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; + echo "Geburtstag: " . $user["geburtstag"] . "
"; + echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; + echo ''; + ?> + + +
+
+
+
+
+ + + +
+
+ + +
+ Aktuell befinden wir uns im . Quartal von .
+ Dieses geht vom bis
+ Heute ist der .
Diese Angaben werden bei der Bearbeitung von unserem Praxisteam überprüft.
+ War die Chipkarte dieses Quartal noch nicht eingelesen, ist die Abholung nur in der Praxis möglich. +
+ +
+
+
+
+ +
+ +
+
+ + + +
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+
+
+ +
+ +
+
+ +
+
+ +
+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
+ + + +
+ +
+
+
+ +




+ + +
+ + + + + + +
+ + + + + + + +
+ + + + + +

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

+ + + '; + echo ''; + ?> + + + Benutzer"; + echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; + echo "Geburtstag: " . $user["geburtstag"] . "
"; + echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; + echo ''; + ?> + + + +
+
+
+
+
+ + + +
+ +
+ +
+ + +
+
+ + + +
+
+ +
+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
+ + + +
+ +
+
+
+ +




+ + +
+ +
+ + +
+ + + + + +

Gehen Sie nach unten zum Formular und füllen Sie es aus. Sollte es nötig sein, können Sie Daten auch anpassen.

+ + + '; + echo ''; + ?> + + Benutzer"; + echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; + echo "Geburtstag: " . $user["geburtstag"] . "
"; + echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; + echo ''; + ?> + + +
+
+
+
+ +
+ + +
+
+ +
+ + +
+
+ + + +
+
+ +
+ Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich. Kassenleistungen sind an die gesetzlichen Regelungen gebunden. Fragen Sie Ihre Krankenkasse.
+ + + +
+ +
+
+
+ +




+ + +
+ +
+ Kontrollieren Sie Ihre Angaben!
'; + echo '
'; + echo ''; + // Schleife durch Clemens 15.10.2018 + foreach ($_POST as $key => $value) { + if(!($value == "" || $key == "submit" || $key == "aktion" )){ + if($key == "category"){ + $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $anfragearttext = $rowimpf["artname"]; + + + echo "\n"; + echo"\n"; + }else{ + echo "\n"; + echo"\n"; + } + } + + } + + + echo '
$key:$anfragearttext
$key:$value

'; + echo ''; + echo ''; + echo '
'; + + + }else if($_POST["aktion"] == "6"){ + + $userid = $_POST["anfragender"]; + $vorname = $user["vorname"]; + $nachname = $user["nachname"]; + $Email = $user["email"]; + + $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); + $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); + $nachricht = mysqli_real_escape_string($con, $_POST["message"]); + $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); + + // Impfstoff + //$impfstoff = $rowtime["impfstoff"]; + $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $impfstofftext = $rowimpf["impfname"]; + + $sendmail = false; + + // Check connection + if ($con -> connect_errno) { + echo "Failed to connect to MySQL: " . $con -> connect_error; + exit(); + }else{ + + + $hashvorher = $vorname . $nachname . $Email; + $hash = md5($hashvorher) . date("YmdHs"); + + + $sendmail = true; + //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; + $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, nachricht, create_time, hash, ordnungsid, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."','".$nachricht."', now(), '".$hash."', '2', '1', '1')"); + + if($query){ + //echo "$hash"; + $anfrageid = mysqli_insert_id($con); + SendMailMessageVorlage($con, "3", $anfrageid , "19" ); + + + + echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; + + + }else{ + echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; + + } + + + + + + + } + + + }elseif($_POST["aktion"] == "7"){ + + + echo '

Kontrollieren Sie Ihre Angaben!


'; + echo '
'; + echo ''; + // Schleife durch Clemens 15.10.2018 + foreach ($_POST as $key => $value) { + if(!($value == "" || $key == "submit" || $key == "aktion" )){ + if($key == "category"){ + $sqlimpfstoffstring = "SELECT * FROM anfrageart WHERE artid ='" . $value . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $anfragearttext = $rowimpf["artname"]; + + + echo "\n"; + echo"\n"; + }else{ + echo "\n"; + echo"\n"; + } + } + + } + + + echo '
$key:$anfragearttext
$key:$value

'; + echo ''; + echo ''; + echo '
'; + + + }else if($_POST["aktion"] == "8"){ + + $userid = $_POST["anfragender"]; + $vorname = $user["vorname"]; + $nachname = $user["nachname"]; + $Email = $user["email"]; + + $medikament1 = mysqli_real_escape_string($con, $_POST["Medikament1"]); + $medikament2 = mysqli_real_escape_string($con, $_POST["Medikament2"]); + $nachricht = mysqli_real_escape_string($con, $_POST["message"]); + $anforderungart = mysqli_real_escape_string($con, $_POST["category"]); + + // Impfstoff + //$impfstoff = $rowtime["impfstoff"]; + $sqlimpfstoffstring = "SELECT * FROM impfstoff WHERE impfid ='" . $impfstoff . "'"; + $queryimpfstoff = mysqli_query($con,$sqlimpfstoffstring); + $rowimpf = mysqli_fetch_assoc($queryimpfstoff); + $impfstofftext = $rowimpf["impfname"]; + + $sendmail = false; + + // Check connection + if ($con -> connect_errno) { + echo "Failed to connect to MySQL: " . $con -> connect_error; + exit(); + }else{ + + + $hashvorher = $vorname . $nachname . $Email; + $hash = md5($hashvorher) . date("YmdHs"); + + + $sendmail = true; + //echo "INSERT INTO warteliste (userid, hash, impfenangebot, impfstoff, Patientenart,Impfaufklaerung, WeitereFragen, date_created, impfenmit) VALUES ('".$userid."', '".$hash."', '".$impfenangebot."', '".$impfstoff."', '".$Patientenart."', '".$Impfaufklaerung."', '".$WeitereFragen."', now()), '".$impfenmit."'"; + $query = mysqli_query($con, "INSERT INTO anfragen (personid, anforderungart, nachricht, create_time, hash, ordnungsid, sicherenachricht, checked) VALUES ( '".$userid."', '".$anforderungart."','".$nachricht."', now(), '".$hash."', '2', '1', '1')"); + + if($query){ + //echo "$hash"; + $anfrageid = mysqli_insert_id($con); + SendMailMessageVorlage($con, "3", $anfrageid , "19" ); + + + + echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
Überprüfen Sie auch Ihren Spam-Filter!

"; + + + }else{ + echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
Nutzen Sie das Formular erneut.

"; + + } + + + + + + + } + + + }else{ + + echo "

Wählen Sie die Anfragenart aus:

"; + echo "
"; + echo ''; + + echo "

Benutzer

"; + echo "Name: " . $user["vorname"] . " " . $user["nachname"] . "
"; + echo "Geburtstag: " . $user["geburtstag"] . "
"; + echo "Adresse: " . $user["strasse"] . ", " . $user["plz"] . ", " . $user["ort"] . "
"; + + $userid = ensureUserFromInternUsersByEmail($pdo, $user["email"]); + + + echo ''; + + + + echo "

"; + + echo ''; + echo ' '; + echo "

"; + echo "
"; + echo '
'; + + } + + } + + echo "




+ +
+ +
+ + "; + }else{ + + echo InfoAusgeloggtePerson(); + + ?> + + + + + + + + + +
+
+ \ No newline at end of file diff --git a/intern/neueanfrage.php b/intern/neueanfrage.php index 86a4436..5128f28 100644 --- a/intern/neueanfrage.php +++ b/intern/neueanfrage.php @@ -1,443 +1,443 @@ -"; -echo "
"; - -$user = check_intern_user(); // intern session user - -if (!$user) { - header("Location: login.php"); - exit; -} - - - -echo "

Neue Anfrage

"; -echo "

Hallo " . e((string)($user['vorname'] ?? '')) . ",

"; - -// Preconditions -if (!check_mailreg()) { - echo "

"; - echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail! Bitte authentifizieren Sie Ihre E-Mail-Adresse.
"; - echo "
"; - echo ""; - echo "
"; - echo "
"; -} - -if (!check_userdatenvorhanden()) { - echo "

"; - echo "Es fehlen noch Informationen in Ihren Stammdaten. Bitte pflegen Sie die Daten nach.
"; - echo "
"; - echo ""; - echo "
"; - echo "
"; -} - -if (!(check_mailreg() && check_userdatenvorhanden())) { - echo "


- -
"; - echo "
"; - include(__DIR__ . "/templates/footer.inc.php"); - exit; -} - -// action routing -$aktion = $_POST['aktion'] ?? ''; // '', choose, confirm, submit - -// Ensure persons id early -try { - $internUserId = isset($_SESSION['userid']) ? (int)$_SESSION['userid'] : null; - $personId = ensurePersonFromInternUsersByEmail($pdo, (string)($user['email'] ?? ''), $internUserId); -} catch (Throwable $t) { - echo "
Fehler: " . e($t->getMessage()) . "
"; - echo "
"; - include(__DIR__ . "/templates/footer.inc.php"); - exit; -} - -// Vacation check -if ($aktion === 'choose' || $aktion === 'confirm' || $aktion === 'submit' || $aktion === '') { - if (isPraxisImUrlaub($pdo)) { - $info = loadAktuelleUrlaubsInfo($pdo); - echo "

Praxis im Urlaub

"; - echo "Wir befinden uns aktuell im Urlaub.
Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.

"; - - if ($info) { - $ende = (string)$info['ende']; - $endeausgabe = date("d.m.Y", strtotime("+1 day", strtotime($ende))); - - if (!empty($info['vertretung'])) echo "Unsere Vertretung: " . e($info['vertretung']) . "
"; - if (!empty($info['vertreterurl'])) echo "Webseite Vertretung: " . e($info['vertreterurl']) . "
"; - if (!empty($info['vertretertelefon'])) echo "Telefonischer Kontakt Vertretung: " . e($info['vertretertelefon']) . "
"; - if (!empty($info['vertreteradresse'])) echo "Adresse Vertretung: " . e($info['vertreteradresse']) . "
"; - - echo "
Wir stehen Ihnen ab dem " . e($endeausgabe) . " wieder zur Verfügung.


"; - } - - echo "
"; - echo "
"; - include(__DIR__ . "/templates/footer.inc.php"); - exit; - } -} - -// default: show selection -if ($aktion === '') { - echo "

Wählen Sie die Anfragenart aus:

"; - echo "
"; - echo ""; - - echo "

Benutzer

"; - echo "Name: " . e((string)$user["vorname"]) . " " . e((string)$user["nachname"]) . "
"; - echo "Geburtstag: " . e((string)$user["geburtstag"]) . "
"; - echo "Adresse: " . e((string)$user["strasse"]) . ", " . e((string)$user["plz"]) . ", " . e((string)$user["ort"]) . "
"; - - echo ""; - - echo "

"; - echo ""; - echo ""; - echo "

"; - echo "
"; - echo "
"; - - echo "


- -
"; - - echo ""; - include(__DIR__ . "/templates/footer.inc.php"); - exit; -} - -// choose -> show form -if ($aktion === 'choose') { - $anfrageart = (int)($_POST['anfrageart'] ?? 0); - $requester_person_id = (int)($_POST['requester_person_id'] ?? $personId); - - $mode = match ($anfrageart) { - 1 => 'rezept', - 2 => 'allgemein', - 3 => 'terminabsage', - default => '' - }; - if ($mode === '') { - echo "
Unbekannte Anfrageart.
"; - echo ""; - include(__DIR__ . "/templates/footer.inc.php"); - exit; - } - - $arten = loadAnfragearten($pdo, $mode); - - echo "

Füllen Sie das Formular aus.

"; - echo "
"; - echo ""; - echo ""; - echo ""; - - // User block - echo "

Benutzer

"; - echo "Name: " . e((string)$user["vorname"]) . " " . e((string)$user["nachname"]) . "
"; - echo "Geburtstag: " . e((string)$user["geburtstag"]) . "
"; - echo "Adresse: " . e((string)$user["strasse"]) . ", " . e((string)$user["plz"]) . ", " . e((string)$user["ort"]) . "
"; - - echo "

"; - echo ""; - echo "
"; - - // Special fields for rezept - if ($mode === 'rezept') { - $curdate = date('d.m.Y'); - $curyear = date('Y'); - $curMonth = (int)date('m'); - $curQuarter = (int)ceil($curMonth / 3); - $current_quarter = (int)ceil(date('n') / 3); - $first_date = date('d.m.Y', strtotime(date('Y') . '-' . (($current_quarter * 3) - 2) . '-1')); - $last_date = date('t.m.Y', strtotime(date('Y') . '-' . (($current_quarter * 3)) . '-1')); - - echo "

"; - echo "
"; - echo "Aktuell befinden wir uns im {$curQuarter}. Quartal von {$curyear}.
"; - echo "Dieses geht vom {$first_date} bis {$last_date}
"; - echo "Heute ist der {$curdate}.
"; - echo "War die Chipkarte dieses Quartal noch nicht eingelesen, ist die Abholung nur in der Praxis möglich.

"; - echo ""; - echo "
"; - - echo "

"; - echo ""; - echo ""; - echo "
"; - - for ($i = 1; $i <= 6; $i++) { - echo "

"; - echo ""; - echo "
"; - } - } - - echo "

"; - echo ""; - echo "
"; - - echo "

"; - echo "Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
"; - echo "
"; - - echo "


"; - echo ""; - echo "


"; - - echo "
"; - - echo ""; - - echo ""; - include(__DIR__ . "/templates/footer.inc.php"); - exit; -} - -// confirm -> summary -if ($aktion === 'confirm') { - $mode = (string)($_POST['mode'] ?? ''); - $requester_person_id = (int)($_POST['requester_person_id'] ?? 0); - $category = (int)($_POST['category'] ?? 0); - - if ($requester_person_id <= 0 || $category <= 0 || $mode === '') { - echo "
Ungültige Eingaben.
"; - echo ""; - include(__DIR__ . "/templates/footer.inc.php"); - exit; - } - - $anfrageartText = loadAnfrageartName($pdo, $category); - - echo "

Kontrollieren Sie Ihre Angaben!


"; - echo "
"; - echo ""; - echo ""; - echo ""; - echo ""; - - echo ""; - echo ""; - - if ($mode === 'rezept') { - $karte = (string)($_POST['karte'] ?? ''); - $abholung = (string)($_POST['abholung'] ?? ''); - echo ""; - echo ""; - echo ""; - echo ""; - - for ($i = 1; $i <= 6; $i++) { - $med = (string)($_POST["Medikament{$i}"] ?? ''); - echo ""; - if ($med !== '') { - echo ""; - } - } - } - - $message = (string)($_POST['message'] ?? ''); - echo ""; - echo ""; - echo "
Thema" . e($anfrageartText) . "
Karte" . e($karte) . "
Abholung" . e($abholung) . "
Medikament{$i}" . e($med) . "
Nachricht" . nl2br(e($message)) . "
"; - - echo ""; - echo "
"; - - echo ""; - include(__DIR__ . "/templates/footer.inc.php"); - exit; -} - -// submit -> insert + mail -if ($aktion === 'submit') { - $mode = (string)($_POST['mode'] ?? ''); - $requester_person_id = (int)($_POST['requester_person_id'] ?? 0); - $anforderungart = (int)($_POST['category'] ?? 0); - $message = (string)($_POST['message'] ?? ''); - - if ($requester_person_id <= 0 || $anforderungart <= 0) { - echo "
Ungültige Eingaben.
"; - echo ""; - include(__DIR__ . "/templates/footer.inc.php"); - exit; - } - - $nachricht = $message; - - $abholungnr = 0; - if ($mode === 'rezept') { - $karte = (string)($_POST['karte'] ?? ''); - $abholung = (string)($_POST['abholung'] ?? ''); - - $abholungnr = ($abholung === 'Praxis') ? 1 : (($abholung === 'Apotheke') ? 2 : 0); - if ($karte === 'Privat') { - $karte = 'Privatrezept (Selbstzahler)'; - } - $nachricht = "Karte eingelesen: {$karte}
Abholungsort: {$abholung}
" . $nachricht; - } - - $med = []; - for ($i = 1; $i <= 6; $i++) { - $med[$i] = trim((string)($_POST["Medikament{$i}"] ?? '')); - } - - // duplicate check (best effort) - $exists = false; - try { - $stmtDup = $pdo->prepare(" - SELECT * - FROM anfragen - WHERE requester_person_id = :pid - AND anforderungart = :art - AND nachricht = :nachricht - AND create_time >= DATE_SUB(NOW(), INTERVAL 7 DAY) - "); - $stmtDup->execute([ - ':pid' => $requester_person_id, - ':art' => $anforderungart, - ':nachricht' => $nachricht, - ]); - $rows = $stmtDup->fetchAll(PDO::FETCH_ASSOC); - - $medFieldAliases = [ - 1 => ['med1', 'medikament1', 'med_1'], - 2 => ['med2', 'medikament2', 'med_2'], - 3 => ['med3', 'medikament3', 'med_3'], - 4 => ['med4', 'medikament4', 'med_4'], - 5 => ['med5', 'medikament5', 'med_5'], - 6 => ['med6', 'medikament6', 'med_6'], - ]; - - foreach ($rows as $row) { - $allMedsEqual = true; - for ($i = 1; $i <= 6; $i++) { - $dbValue = ''; - foreach ($medFieldAliases[$i] as $fieldName) { - if (array_key_exists($fieldName, $row)) { - $dbValue = trim((string)($row[$fieldName] ?? '')); - break; - } - } - if ($dbValue !== $med[$i]) { - $allMedsEqual = false; - break; - } - } - if ($allMedsEqual) { - $exists = true; - break; - } - } - } catch (Throwable $t) { - error_log('Duplicate check failed: ' . $t->getMessage()); - $exists = false; - } - - if ($exists) { - echo "

Doppelte Anfrage


Ihre Anfrage wurde schon in unserem System gespeichert.
- Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.
- Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.

"; - echo "
- -
"; - echo ""; - include(__DIR__ . "/templates/footer.inc.php"); - exit; - } - - $hash = bin2hex(random_bytes(16)); - $ordnungsid = ($mode === 'rezept') ? 1 : 2; - - try { - $anfrageid = insertAnfrage($pdo, [ - 'person_id' => $requester_person_id, - 'anforderungart' => $anforderungart, - 'med1' => $med[1], - 'med2' => $med[2], - 'med3' => $med[3], - 'med4' => $med[4], - 'med5' => $med[5], - 'med6' => $med[6], - 'nachricht' => $nachricht, - 'hash' => $hash, - 'ordnungsid' => $ordnungsid, - 'abholort' => $abholungnr, - 'sicherenachricht' => 1, - 'checked' => 1, - ]); - - $templateId = ($mode === 'rezept') ? 26 : 19; - - // IMPORTANT: Your SendMailMessageVorlage() must accept PDO after your migration. - SendMailMessageVorlage($pdo, "3", $anfrageid, (string)$templateId); - - echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
- Überprüfen Sie auch Ihren Spam-Filter!

"; - - } catch (Throwable $t) { - echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
"; - echo "
Fehler: " . e($t->getMessage()) . "
"; - } - - echo "


- -
"; - - echo ""; - include(__DIR__ . "/templates/footer.inc.php"); - exit; -} - -// fallback -echo "
Unbekannte Aktion.
"; -echo ""; -include(__DIR__ . "/templates/footer.inc.php"); +"; +echo "
"; + +$user = check_intern_user(); // intern session user + +if (!$user) { + header("Location: login.php"); + exit; +} + + + +echo "

Neue Anfrage

"; +echo "

Hallo " . e((string)($user['vorname'] ?? '')) . ",

"; + +// Preconditions +if (!check_mailreg()) { + echo "

"; + echo "Es fehlt die Authentifizierung Ihres Kontos per E-Mail! Bitte authentifizieren Sie Ihre E-Mail-Adresse.
"; + echo "
"; + echo ""; + echo "
"; + echo "
"; +} + +if (!check_userdatenvorhanden()) { + echo "

"; + echo "Es fehlen noch Informationen in Ihren Stammdaten. Bitte pflegen Sie die Daten nach.
"; + echo "
"; + echo ""; + echo "
"; + echo "
"; +} + +if (!(check_mailreg() && check_userdatenvorhanden())) { + echo "


+ +
"; + echo "
"; + include(__DIR__ . "/templates/footer.inc.php"); + exit; +} + +// action routing +$aktion = $_POST['aktion'] ?? ''; // '', choose, confirm, submit + +// Ensure persons id early +try { + $internUserId = isset($_SESSION['userid']) ? (int)$_SESSION['userid'] : null; + $personId = ensurePersonFromInternUsersByEmail($pdo, (string)($user['email'] ?? ''), $internUserId); +} catch (Throwable $t) { + echo "
Fehler: " . e($t->getMessage()) . "
"; + echo ""; + include(__DIR__ . "/templates/footer.inc.php"); + exit; +} + +// Vacation check +if ($aktion === 'choose' || $aktion === 'confirm' || $aktion === 'submit' || $aktion === '') { + if (isPraxisImUrlaub($pdo)) { + $info = loadAktuelleUrlaubsInfo($pdo); + echo "

Praxis im Urlaub

"; + echo "Wir befinden uns aktuell im Urlaub.
Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.

"; + + if ($info) { + $ende = (string)$info['ende']; + $endeausgabe = date("d.m.Y", strtotime("+1 day", strtotime($ende))); + + if (!empty($info['vertretung'])) echo "Unsere Vertretung: " . e($info['vertretung']) . "
"; + if (!empty($info['vertreterurl'])) echo "Webseite Vertretung: " . e($info['vertreterurl']) . "
"; + if (!empty($info['vertretertelefon'])) echo "Telefonischer Kontakt Vertretung: " . e($info['vertretertelefon']) . "
"; + if (!empty($info['vertreteradresse'])) echo "Adresse Vertretung: " . e($info['vertreteradresse']) . "
"; + + echo "
Wir stehen Ihnen ab dem " . e($endeausgabe) . " wieder zur Verfügung.


"; + } + + echo "
"; + echo ""; + include(__DIR__ . "/templates/footer.inc.php"); + exit; + } +} + +// default: show selection +if ($aktion === '') { + echo "

Wählen Sie die Anfragenart aus:

"; + echo "
"; + echo ""; + + echo "

Benutzer

"; + echo "Name: " . e((string)$user["vorname"]) . " " . e((string)$user["nachname"]) . "
"; + echo "Geburtstag: " . e((string)$user["geburtstag"]) . "
"; + echo "Adresse: " . e((string)$user["strasse"]) . ", " . e((string)$user["plz"]) . ", " . e((string)$user["ort"]) . "
"; + + echo ""; + + echo "

"; + echo ""; + echo ""; + echo "

"; + echo "
"; + echo "
"; + + echo "


+ +
"; + + echo ""; + include(__DIR__ . "/templates/footer.inc.php"); + exit; +} + +// choose -> show form +if ($aktion === 'choose') { + $anfrageart = (int)($_POST['anfrageart'] ?? 0); + $requester_person_id = (int)($_POST['requester_person_id'] ?? $personId); + + $mode = match ($anfrageart) { + 1 => 'rezept', + 2 => 'allgemein', + 3 => 'terminabsage', + default => '' + }; + if ($mode === '') { + echo "
Unbekannte Anfrageart.
"; + echo ""; + include(__DIR__ . "/templates/footer.inc.php"); + exit; + } + + $arten = loadAnfragearten($pdo, $mode); + + echo "

Füllen Sie das Formular aus.

"; + echo "
"; + echo ""; + echo ""; + echo ""; + + // User block + echo "

Benutzer

"; + echo "Name: " . e((string)$user["vorname"]) . " " . e((string)$user["nachname"]) . "
"; + echo "Geburtstag: " . e((string)$user["geburtstag"]) . "
"; + echo "Adresse: " . e((string)$user["strasse"]) . ", " . e((string)$user["plz"]) . ", " . e((string)$user["ort"]) . "
"; + + echo "

"; + echo ""; + echo "
"; + + // Special fields for rezept + if ($mode === 'rezept') { + $curdate = date('d.m.Y'); + $curyear = date('Y'); + $curMonth = (int)date('m'); + $curQuarter = (int)ceil($curMonth / 3); + $current_quarter = (int)ceil(date('n') / 3); + $first_date = date('d.m.Y', strtotime(date('Y') . '-' . (($current_quarter * 3) - 2) . '-1')); + $last_date = date('t.m.Y', strtotime(date('Y') . '-' . (($current_quarter * 3)) . '-1')); + + echo "

"; + echo "
"; + echo "Aktuell befinden wir uns im {$curQuarter}. Quartal von {$curyear}.
"; + echo "Dieses geht vom {$first_date} bis {$last_date}
"; + echo "Heute ist der {$curdate}.
"; + echo "War die Chipkarte dieses Quartal noch nicht eingelesen, ist die Abholung nur in der Praxis möglich.

"; + echo ""; + echo "
"; + + echo "

"; + echo ""; + echo ""; + echo "
"; + + for ($i = 1; $i <= 6; $i++) { + echo "

"; + echo ""; + echo "
"; + } + } + + echo "

"; + echo ""; + echo "
"; + + echo "

"; + echo "Bedenken Sie bitte, dass wir einmal im Quartal Ihre Chipkarte benötigen. Ohne Chipkarte sind seit 1.1.2016 keine Kassendienstleistungen mehr möglich.
"; + echo "
"; + + echo "


"; + echo ""; + echo "


"; + + echo "
"; + + echo ""; + + echo ""; + include(__DIR__ . "/templates/footer.inc.php"); + exit; +} + +// confirm -> summary +if ($aktion === 'confirm') { + $mode = (string)($_POST['mode'] ?? ''); + $requester_person_id = (int)($_POST['requester_person_id'] ?? 0); + $category = (int)($_POST['category'] ?? 0); + + if ($requester_person_id <= 0 || $category <= 0 || $mode === '') { + echo "
Ungültige Eingaben.
"; + echo ""; + include(__DIR__ . "/templates/footer.inc.php"); + exit; + } + + $anfrageartText = loadAnfrageartName($pdo, $category); + + echo "

Kontrollieren Sie Ihre Angaben!


"; + echo "
"; + echo ""; + echo ""; + echo ""; + echo ""; + + echo ""; + echo ""; + + if ($mode === 'rezept') { + $karte = (string)($_POST['karte'] ?? ''); + $abholung = (string)($_POST['abholung'] ?? ''); + echo ""; + echo ""; + echo ""; + echo ""; + + for ($i = 1; $i <= 6; $i++) { + $med = (string)($_POST["Medikament{$i}"] ?? ''); + echo ""; + if ($med !== '') { + echo ""; + } + } + } + + $message = (string)($_POST['message'] ?? ''); + echo ""; + echo ""; + echo "
Thema" . e($anfrageartText) . "
Karte" . e($karte) . "
Abholung" . e($abholung) . "
Medikament{$i}" . e($med) . "
Nachricht" . nl2br(e($message)) . "
"; + + echo ""; + echo "
"; + + echo ""; + include(__DIR__ . "/templates/footer.inc.php"); + exit; +} + +// submit -> insert + mail +if ($aktion === 'submit') { + $mode = (string)($_POST['mode'] ?? ''); + $requester_person_id = (int)($_POST['requester_person_id'] ?? 0); + $anforderungart = (int)($_POST['category'] ?? 0); + $message = (string)($_POST['message'] ?? ''); + + if ($requester_person_id <= 0 || $anforderungart <= 0) { + echo "
Ungültige Eingaben.
"; + echo ""; + include(__DIR__ . "/templates/footer.inc.php"); + exit; + } + + $nachricht = $message; + + $abholungnr = 0; + if ($mode === 'rezept') { + $karte = (string)($_POST['karte'] ?? ''); + $abholung = (string)($_POST['abholung'] ?? ''); + + $abholungnr = ($abholung === 'Praxis') ? 1 : (($abholung === 'Apotheke') ? 2 : 0); + if ($karte === 'Privat') { + $karte = 'Privatrezept (Selbstzahler)'; + } + $nachricht = "Karte eingelesen: {$karte}
Abholungsort: {$abholung}
" . $nachricht; + } + + $med = []; + for ($i = 1; $i <= 6; $i++) { + $med[$i] = trim((string)($_POST["Medikament{$i}"] ?? '')); + } + + // duplicate check (best effort) + $exists = false; + try { + $stmtDup = $pdo->prepare(" + SELECT * + FROM anfragen + WHERE requester_person_id = :pid + AND anforderungart = :art + AND nachricht = :nachricht + AND create_time >= DATE_SUB(NOW(), INTERVAL 7 DAY) + "); + $stmtDup->execute([ + ':pid' => $requester_person_id, + ':art' => $anforderungart, + ':nachricht' => $nachricht, + ]); + $rows = $stmtDup->fetchAll(PDO::FETCH_ASSOC); + + $medFieldAliases = [ + 1 => ['med1', 'medikament1', 'med_1'], + 2 => ['med2', 'medikament2', 'med_2'], + 3 => ['med3', 'medikament3', 'med_3'], + 4 => ['med4', 'medikament4', 'med_4'], + 5 => ['med5', 'medikament5', 'med_5'], + 6 => ['med6', 'medikament6', 'med_6'], + ]; + + foreach ($rows as $row) { + $allMedsEqual = true; + for ($i = 1; $i <= 6; $i++) { + $dbValue = ''; + foreach ($medFieldAliases[$i] as $fieldName) { + if (array_key_exists($fieldName, $row)) { + $dbValue = trim((string)($row[$fieldName] ?? '')); + break; + } + } + if ($dbValue !== $med[$i]) { + $allMedsEqual = false; + break; + } + } + if ($allMedsEqual) { + $exists = true; + break; + } + } + } catch (Throwable $t) { + error_log('Duplicate check failed: ' . $t->getMessage()); + $exists = false; + } + + if ($exists) { + echo "

Doppelte Anfrage


Ihre Anfrage wurde schon in unserem System gespeichert.
+ Sie haben die identische Anfrage schon in den letzten sieben Tagen eingereicht.
+ Bitte warten Sie auf die Verarbeitung Ihrer Anfrage.

"; + echo "
+ +
"; + echo ""; + include(__DIR__ . "/templates/footer.inc.php"); + exit; + } + + $hash = bin2hex(random_bytes(16)); + $ordnungsid = ($mode === 'rezept') ? 1 : 2; + + try { + $anfrageid = insertAnfrage($pdo, [ + 'person_id' => $requester_person_id, + 'anforderungart' => $anforderungart, + 'med1' => $med[1], + 'med2' => $med[2], + 'med3' => $med[3], + 'med4' => $med[4], + 'med5' => $med[5], + 'med6' => $med[6], + 'nachricht' => $nachricht, + 'hash' => $hash, + 'ordnungsid' => $ordnungsid, + 'abholort' => $abholungnr, + 'sicherenachricht' => 1, + 'checked' => 1, + ]); + + $templateId = ($mode === 'rezept') ? 26 : 19; + + // IMPORTANT: Your SendMailMessageVorlage() must accept PDO after your migration. + SendMailMessageVorlage($pdo, "3", $anfrageid, (string)$templateId); + + echo "

Nachricht abgeschickt!


Sie bekommen eine Bestätigung per E-Mail!
+ Überprüfen Sie auch Ihren Spam-Filter!

"; + + } catch (Throwable $t) { + echo "

Speicherung nicht erfolgreich


Ihre Anfrage konnte nicht gespeichert werden.
"; + echo "
Fehler: " . e($t->getMessage()) . "
"; + } + + echo "


+ +
"; + + echo ""; + include(__DIR__ . "/templates/footer.inc.php"); + exit; +} + +// fallback +echo "
Unbekannte Aktion.
"; +echo ""; +include(__DIR__ . "/templates/footer.inc.php"); diff --git a/intern/verify_2fa.php b/intern/verify_2fa.php index 9320e51..d8728af 100644 --- a/intern/verify_2fa.php +++ b/intern/verify_2fa.php @@ -1,111 +1,111 @@ -prepare(" - SELECT id - FROM intern_2fa_codes - WHERE user_id = :uid - AND code = :code - AND expires_at > NOW() - LIMIT 1 - "); - $stmt->execute([ - 'uid' => $userId, - 'code' => $codeHash - ]); - - $row = $stmt->fetch(PDO::FETCH_ASSOC); - - if ($row) { - - // Code löschen (Einmalverwendung) - $pdo->prepare("DELETE FROM intern_2fa_codes WHERE user_id = :uid") - ->execute(['uid' => $userId]); - - session_regenerate_id(true); - - $_SESSION['userid'] = $userId; - $_SESSION['2fa_verified'] = true; - unset($_SESSION['2fa_userid']); - - /* ---------- Gerät merken ---------- */ - if (!empty($_POST['remember_device'])) { - - $identifier = bin2hex(random_bytes(32)); - $token = bin2hex(random_bytes(32)); - - $pdo->prepare(" - INSERT INTO intern_securitytokens - (user_id, identifier, securitytoken, expires_at) - VALUES (:uid, :identifier, :token, :expires) - ")->execute([ - 'uid' => $userId, - 'identifier' => $identifier, - 'token' => hash('sha256', $token), - 'expires' => date('Y-m-d H:i:s', time() + 30 * 24 * 3600) - ]); - - $opts = [ - 'expires' => time() + 30 * 24 * 3600, - 'path' => '/', - 'secure' => true, - 'httponly' => true, - 'samesite' => 'Lax' - ]; - - setcookie('remember_device', $identifier, $opts); - setcookie('remember_device_token', $token, $opts); - } - - header('Location: index.php'); - exit; - } - - $error_msg = 'Falscher oder abgelaufener Code.'; -} - -include("templates/header.inc.php"); -?> - - - - +prepare(" + SELECT id + FROM intern_2fa_codes + WHERE user_id = :uid + AND code = :code + AND expires_at > NOW() + LIMIT 1 + "); + $stmt->execute([ + 'uid' => $userId, + 'code' => $codeHash + ]); + + $row = $stmt->fetch(PDO::FETCH_ASSOC); + + if ($row) { + + // Code löschen (Einmalverwendung) + $pdo->prepare("DELETE FROM intern_2fa_codes WHERE user_id = :uid") + ->execute(['uid' => $userId]); + + session_regenerate_id(true); + + $_SESSION['userid'] = $userId; + $_SESSION['2fa_verified'] = true; + unset($_SESSION['2fa_userid']); + + /* ---------- Gerät merken ---------- */ + if (!empty($_POST['remember_device'])) { + + $identifier = bin2hex(random_bytes(32)); + $token = bin2hex(random_bytes(32)); + + $pdo->prepare(" + INSERT INTO intern_securitytokens + (user_id, identifier, securitytoken, expires_at) + VALUES (:uid, :identifier, :token, :expires) + ")->execute([ + 'uid' => $userId, + 'identifier' => $identifier, + 'token' => hash('sha256', $token), + 'expires' => date('Y-m-d H:i:s', time() + 30 * 24 * 3600) + ]); + + $opts = [ + 'expires' => time() + 30 * 24 * 3600, + 'path' => '/', + 'secure' => true, + 'httponly' => true, + 'samesite' => 'Lax' + ]; + + setcookie('remember_device', $identifier, $opts); + setcookie('remember_device_token', $token, $opts); + } + + header('Location: index.php'); + exit; + } + + $error_msg = 'Falscher oder abgelaufener Code.'; +} + +include("templates/header.inc.php"); +?> + + + + diff --git a/jobs-mfaazubi.php b/jobs-mfaazubi.php index 2387efb..70940dd 100644 --- a/jobs-mfaazubi.php +++ b/jobs-mfaazubi.php @@ -1,209 +1,209 @@ - - - - - - Praxis Creutzburg - Stellenangebote - - - - - - - - - - - - - - - + + + + + + Praxis Creutzburg - Stellenangebote + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/jobs-mfateilzeit.php b/jobs-mfateilzeit.php index 0545732..610f170 100644 --- a/jobs-mfateilzeit.php +++ b/jobs-mfateilzeit.php @@ -1,217 +1,217 @@ - - - - - - Praxis Creutzburg - Stellenangebote - - - - - - - - - - - - - - - -
- - -
-
- - - - + + + + + + Praxis Creutzburg - Stellenangebote + + + + + + + + + + + + + + + +
+ + +
+
+ + + + \ No newline at end of file diff --git a/jobs/css/formulare.css b/jobs/css/formulare.css index aed8dc5..29d5da0 100644 --- a/jobs/css/formulare.css +++ b/jobs/css/formulare.css @@ -1,17 +1,17 @@ -input[type="number"],input[type="date"] { - -moz-appearance: none; - -webkit-appearance: none; - -o-appearance: none; - -ms-appearance: none; - appearance: none; - background: #f8f8f8; - border-radius: 6px; - border: solid 1px #e5e5e5; - color: inherit; - display: block; - outline: 0; - padding: 0 1em; - text-decoration: none; - width: 100%; - height: 3em; +input[type="number"],input[type="date"] { + -moz-appearance: none; + -webkit-appearance: none; + -o-appearance: none; + -ms-appearance: none; + appearance: none; + background: #f8f8f8; + border-radius: 6px; + border: solid 1px #e5e5e5; + color: inherit; + display: block; + outline: 0; + padding: 0 1em; + text-decoration: none; + width: 100%; + height: 3em; } \ No newline at end of file diff --git a/jobs/css/ticker.css b/jobs/css/ticker.css index a2ba75c..1dc951a 100644 --- a/jobs/css/ticker.css +++ b/jobs/css/ticker.css @@ -1,22 +1,22 @@ -#marquee-cont { - background: #ff6363; - margin-top:10px; -} -#marquee-cont marquee { - margin-top: 5px; - background: #ff6363; -} -#marquee-news { - - background: #1174A8; - padding: 5px; -} -#ticker-title{ - border:none; - padding:5px 20px; - background:#1174A8; - color:white; -} -#ticker-title:focus{ - outline:none; +#marquee-cont { + background: #ff6363; + margin-top:10px; +} +#marquee-cont marquee { + margin-top: 5px; + background: #ff6363; +} +#marquee-news { + + background: #1174A8; + padding: 5px; +} +#ticker-title{ + border:none; + padding:5px 20px; + background:#1174A8; + color:white; +} +#ticker-title:focus{ + outline:none; } \ No newline at end of file diff --git a/jobs/js/googlea.js b/jobs/js/googlea.js index 8fbd1cb..54c9c6f 100644 --- a/jobs/js/googlea.js +++ b/jobs/js/googlea.js @@ -1,447 +1,447 @@ - -// Copyright 2012 Google Inc. All rights reserved. -(function(){ - -var data = { -"resource": { - "version":"1", - - "macros":[{"function":"__e"},{"function":"__c","vtp_value":"google.de"},{"function":"__c","vtp_value":0},{"vtp_signal":1,"function":"__c","vtp_value":1}], - "tags":[{"function":"__gct","vtp_trackingId":"G-BN6YJH3MKR","vtp_sessionDuration":0,"tag_id":1},{"function":"__ccd_em_outbound_click","priority":0,"vtp_includeParams":true,"vtp_instanceDestinationId":"G-BN6YJH3MKR","tag_id":3},{"function":"__ccd_em_download","vtp_includeParams":true,"vtp_instanceDestinationId":"G-BN6YJH3MKR","tag_id":5},{"function":"__ccd_em_video","vtp_includeParams":true,"vtp_instanceDestinationId":"G-BN6YJH3MKR","tag_id":6},{"function":"__ccd_em_site_search","vtp_searchQueryParams":"q,s,search,query,keyword","vtp_includeParams":true,"vtp_instanceDestinationId":"G-BN6YJH3MKR","tag_id":7},{"function":"__ccd_em_scroll","vtp_includeParams":true,"vtp_instanceDestinationId":"G-BN6YJH3MKR","tag_id":8},{"function":"__ccd_em_page_view","vtp_historyEvents":true,"vtp_includeParams":true,"vtp_instanceDestinationId":"G-BN6YJH3MKR","tag_id":9},{"function":"__ccd_conversion_marking","vtp_conversionRules":["list",["map","matchingRules","{\"type\":5,\"args\":[{\"stringValue\":\"purchase\"},{\"contextValue\":{\"namespaceType\":1,\"keyParts\":[\"eventName\"]}}]}"]],"vtp_instanceDestinationId":"G-BN6YJH3MKR","tag_id":10},{"function":"__set_product_settings","vtp_instanceDestinationId":"G-BN6YJH3MKR","vtp_foreignTldMacroResult":["macro",1],"vtp_isChinaVipRegionMacroResult":["macro",2],"tag_id":11},{"function":"__ogt_google_signals","vtp_googleSignals":"ENABLED","vtp_instanceDestinationId":"G-BN6YJH3MKR","vtp_serverMacroResult":["macro",3],"tag_id":12}], - "predicates":[{"function":"_eq","arg0":["macro",0],"arg1":"gtm.js"},{"function":"_eq","arg0":["macro",0],"arg1":"gtm.init"}], - "rules":[[["if",0],["add",0]],[["if",1],["add",1,2,3,4,5,6,7,8,9]]] -}, -"runtime":[[50,"__ogt_google_signals",[46,"a"],[52,"b",["require","internal.setProductSettingsParameter"]],[52,"c",["require","getContainerVersion"]],[52,"d",[13,[41,"$0"],[3,"$0",["require","internal.getFlags"]],["$0"]]],[52,"e",[30,[17,[15,"a"],"instanceDestinationId"],[17,["c"],"containerId"]]],["b",[15,"e"],"google_signals",[20,[17,[15,"a"],"serverMacroResult"],1]],[22,[17,[15,"d"],"enableGa4OnoRemarketing"],[46,["b",[15,"e"],"google_ono",[20,[17,[15,"a"],"serverMacroResult"],2]]]],[2,[15,"a"],"gtmOnSuccess",[7]]],[50,"__ccd_em_site_search",[46,"a"],[50,"e",[46,"i"],[52,"j",[2,[30,[15,"i"],""],"split",[7,","]]],[53,[41,"k"],[3,"k",0],[63,[7,"k"],[23,[15,"k"],[17,[15,"j"],"length"]],[33,[15,"k"],[3,"k",[0,[15,"k"],1]]],[46,[53,[52,"l",["b",[2,[16,[15,"j"],[15,"k"]],"trim",[7]]]],[22,[21,[15,"l"],[44]],[46,[36,[15,"l"]]]]]]]]],[50,"f",[46,"i","j"],[52,"k",[8,"search_term",[15,"i"]]],[52,"l",[2,[30,[15,"j"],""],"split",[7,","]]],[53,[41,"m"],[3,"m",0],[63,[7,"m"],[23,[15,"m"],[17,[15,"l"],"length"]],[33,[15,"m"],[3,"m",[0,[15,"m"],1]]],[46,[53,[52,"n",[2,[16,[15,"l"],[15,"m"]],"trim",[7]]],[52,"o",["b",[15,"n"]]],[22,[21,[15,"o"],[44]],[46,[43,[15,"k"],[0,"q_",[15,"n"]],[15,"o"]]]]]]]],[36,[15,"k"]]],[52,"b",["require","getQueryParameters"]],[52,"c",["require","internal.sendGtagEvent"]],[52,"d",["require","getContainerVersion"]],[52,"g",["e",[17,[15,"a"],"searchQueryParams"]]],[52,"h",[30,[17,[15,"a"],"instanceDestinationId"],[17,["d"],"containerId"]]],[22,[15,"g"],[46,[53,[52,"i",[39,[28,[28,[17,[15,"a"],"includeParams"]]],["f",[15,"g"],[17,[15,"a"],"additionalQueryParams"]],[8]]],["c",[15,"h"],"view_search_results",[15,"i"],[8,"deferrable",true]]]]],[2,[15,"a"],"gtmOnSuccess",[7]]],[50,"__ccd_em_download",[46,"a"],[50,"i",[46,"o"],[36,[1,[15,"o"],[21,[2,[2,[15,"o"],"toLowerCase",[7]],"match",[7,[15,"h"]]],[45]]]]],[50,"j",[46,"o"],[52,"p",[2,[17,[15,"o"],"pathname"],"split",[7,"."]]],[52,"q",[39,[18,[17,[15,"p"],"length"],1],[16,[15,"p"],[37,[17,[15,"p"],"length"],1]],""]],[36,[16,[2,[15,"q"],"split",[7,"/"]],0]]],[50,"k",[46,"o"],[36,[39,[12,[2,[17,[15,"o"],"pathname"],"substring",[7,0,1]],"/"],[17,[15,"o"],"pathname"],[0,"/",[17,[15,"o"],"pathname"]]]]],[50,"l",[46,"o"],[41,"p"],[3,"p",""],[22,[1,[15,"o"],[17,[15,"o"],"href"]],[46,[53,[41,"q"],[3,"q",[2,[17,[15,"o"],"href"],"indexOf",[7,"#"]]],[3,"p",[39,[23,[15,"q"],0],[17,[15,"o"],"href"],[2,[17,[15,"o"],"href"],"substring",[7,0,[15,"q"]]]]]]]],[36,[15,"p"]]],[52,"b",["require","internal.addDataLayerEventListener"]],[52,"c",["require","internal.enableAutoEventOnLinkClick"]],[52,"d",["require","getContainerVersion"]],[52,"e",["require","internal.getProductSettingsParameter"]],[52,"f",["require","parseUrl"]],[52,"g",["require","internal.sendGtagEvent"]],[52,"h",[0,"pdf|xlsx?|docx?|txt|rtf|csv|exe|key|pp(s|t|tx)|7z|pkg|rar|gz|zip|avi|","mov|mp4|mpe?g|wmv|midi?|mp3|wav|wma"]],[52,"m",[30,[17,[15,"a"],"instanceDestinationId"],[17,["d"],"containerId"]]],[22,["e",[15,"m"],"ae_block_downloads"],[46,[2,[15,"a"],"gtmOnSuccess",[7]],[36]]],[52,"n",["c",[8,"checkValidation",true]]],[22,[28,[15,"n"]],[46,[2,[15,"a"],"gtmOnFailure",[7]],[36]]],["b","gtm.linkClick",[51,"",[7,"o","p"],["p"],[52,"q",[16,[15,"o"],"gtm.elementUrl"]],[52,"r",["f",[15,"q"]]],[22,[28,[15,"r"]],[46,[36]]],[52,"s",["j",[15,"r"]]],[22,["i",[15,"s"]],[46,[53,[52,"t",[39,[28,[28,[17,[15,"a"],"includeParams"]]],[8,"link_id",[16,[15,"o"],"gtm.elementId"],"link_url",["l",[15,"r"]],"link_text",[16,[15,"o"],"gtm.elementText"],"file_name",["k",[15,"r"]],"file_extension",[15,"s"]],[8]]],["g",[15,"m"],"file_download",[15,"t"]]]]]],[15,"n"]],[2,[15,"a"],"gtmOnSuccess",[7]]],[50,"__ccd_em_video",[46,"a"],[52,"b",["require","internal.addDataLayerEventListener"]],[52,"c",["require","internal.enableAutoEventOnYouTubeActivity"]],[52,"d",["require","getContainerVersion"]],[52,"e",["require","internal.getProductSettingsParameter"]],[52,"f",["require","internal.sendGtagEvent"]],[52,"g",[30,[17,[15,"a"],"instanceDestinationId"],[17,["d"],"containerId"]]],[22,["e",[15,"g"],"ae_block_video"],[46,[2,[15,"a"],"gtmOnSuccess",[7]],[36]]],[52,"h",["c",[8,"captureComplete",true,"captureStart",true,"progressThresholdsPercent",[7,10,25,50,75]]]],[22,[28,[15,"h"]],[46,[2,[15,"a"],"gtmOnFailure",[7]],[36]]],["b","gtm.video",[51,"",[7,"i","j"],["j"],[52,"k",[16,[15,"i"],"gtm.videoStatus"]],[41,"l"],[22,[20,[15,"k"],"start"],[46,[3,"l","video_start"]],[46,[22,[20,[15,"k"],"progress"],[46,[3,"l","video_progress"]],[46,[22,[20,[15,"k"],"complete"],[46,[3,"l","video_complete"]]]]]]],[52,"m",[39,[28,[28,[17,[15,"a"],"includeParams"]]],[8,"video_current_time",[16,[15,"i"],"gtm.videoCurrentTime"],"video_duration",[16,[15,"i"],"gtm.videoDuration"],"video_percent",[16,[15,"i"],"gtm.videoPercent"],"video_provider",[16,[15,"i"],"gtm.videoProvider"],"video_title",[16,[15,"i"],"gtm.videoTitle"],"video_url",[16,[15,"i"],"gtm.videoUrl"],"visible",[16,[15,"i"],"gtm.videoVisible"]],[8]]],[22,[21,[15,"l"],[44]],[46,["f",[15,"g"],[15,"l"],[15,"m"]]]]],[15,"h"]],[2,[15,"a"],"gtmOnSuccess",[7]]],[50,"__ccd_conversion_marking",[46,"a"],[50,"m",[46,"n"],[52,"o",[2,[15,"j"],"parse",[7,[15,"n"]]]],[22,[30,[30,[28,[15,"o"]],[28,[16,[15,"o"],"args"]]],[21,[17,[16,[15,"o"],"args"],"length"],2]],[46,[36]]],[52,"p",[16,[16,[16,[15,"o"],"args"],1],"contextValue"]],[22,[30,[30,[30,[28,[15,"p"]],[21,[16,[15,"p"],"namespaceType"],1]],[21,[17,[16,[15,"p"],"keyParts"],"length"],1]],[21,[16,[16,[15,"p"],"keyParts"],0],"eventName"]],[46,[36,[44]]]],[52,"q",[16,[16,[15,"o"],"args"],0]],[36,[1,[15,"q"],[16,[15,"q"],"stringValue"]]]],[22,[30,[28,[17,[15,"a"],"conversionRules"]],[20,[17,[17,[15,"a"],"conversionRules"],"length"],0]],[46,[2,[15,"a"],"gtmOnSuccess",[7]],[36]]],[52,"b",["require","internal.evaluateBooleanExpression"]],[52,"c",[13,[41,"$0"],[3,"$0",["require","internal.getFlags"]],["$0"]]],[52,"d",["require","internal.registerCcdCallback"]],[52,"e","is_conversion"],[52,"f","syn_or_mod"],[22,[16,[15,"c"],"enableCcdConversions"],[46,["d",[17,[15,"a"],"instanceDestinationId"],[51,"",[7,"n"],[22,[2,[15,"n"],"getMetadata",[7,[15,"f"]]],[46,[36]]],[52,"o",[8,"preHit",[15,"n"]]],[65,"p",[17,[15,"a"],"conversionRules"],[46,[22,["b",[17,[15,"p"],"matchingRules"],[15,"o"]],[46,[2,[15,"n"],"setMetadata",[7,[15,"e"],true]],[4]]]]]]],[2,[15,"a"],"gtmOnSuccess",[7]],[36]]],[52,"g",["require","internal.setProductSettingsParameter"]],[52,"h",["require","internal.getProductSettingsParameter"]],[52,"i",["require","getContainerVersion"]],[52,"j",["require","JSON"]],[52,"k",[30,[17,[15,"a"],"instanceDestinationId"],[17,["i"],"containerId"]]],[52,"l",[30,["h",[15,"k"],"event_settings"],[8]]],[53,[41,"n"],[3,"n",0],[63,[7,"n"],[23,[15,"n"],[17,[17,[15,"a"],"conversionRules"],"length"]],[33,[15,"n"],[3,"n",[0,[15,"n"],1]]],[46,[53,[52,"o",["m",[16,[16,[17,[15,"a"],"conversionRules"],[15,"n"]],"matchingRules"]]],[22,[28,[15,"o"]],[46,[6]]],[41,"p"],[3,"p",[16,[15,"l"],[15,"o"]]],[22,[28,[15,"p"]],[46,[3,"p",[8]],[43,[15,"l"],[15,"o"],[15,"p"]]]],[43,[15,"p"],"conversion",true]]]]],["g",[15,"k"],"event_settings",[15,"l"]],[2,[15,"a"],"gtmOnSuccess",[7]]],[50,"__ccd_em_outbound_click",[46,"a"],[50,"j",[46,"p"],[22,[28,[15,"p"]],[46,[36,[44]]]],[41,"q"],[3,"q",""],[22,[1,[15,"p"],[17,[15,"p"],"href"]],[46,[53,[41,"r"],[3,"r",[2,[17,[15,"p"],"href"],"indexOf",[7,"#"]]],[3,"q",[39,[23,[15,"r"],0],[17,[15,"p"],"href"],[2,[17,[15,"p"],"href"],"substring",[7,0,[15,"r"]]]]]]]],[36,[15,"q"]]],[50,"k",[46,"p"],[22,[28,[15,"p"]],[46,[36,[44]]]],[41,"q"],[3,"q",[17,[15,"p"],"hostname"]],[52,"r",[2,[15,"q"],"match",[7,"^www\\d*\\."]]],[22,[1,[15,"r"],[16,[15,"r"],0]],[46,[3,"q",[2,[15,"q"],"substring",[7,[17,[16,[15,"r"],0],"length"]]]]]],[36,[15,"q"]]],[50,"l",[46,"p"],[22,[28,[15,"p"]],[46,[36,false]]],[52,"q",[2,[17,[15,"p"],"hostname"],"toLowerCase",[7]]],[41,"r"],[3,"r",[2,["k",["h",["g"]]],"toLowerCase",[7]]],[41,"s"],[3,"s",[37,[17,[15,"q"],"length"],[17,[15,"r"],"length"]]],[22,[1,[18,[15,"s"],0],[29,[2,[15,"r"],"charAt",[7,0]],"."]],[46,[32,[15,"s"],[3,"s",[37,[15,"s"],1]]],[3,"r",[0,".",[15,"r"]]]]],[22,[1,[19,[15,"s"],0],[12,[2,[15,"q"],"indexOf",[7,[15,"r"],[15,"s"]]],[15,"s"]]],[46,[36,false]]],[36,true]],[52,"b",["require","internal.addDataLayerEventListener"]],[52,"c",["require","internal.enableAutoEventOnLinkClick"]],[52,"d",["require","getContainerVersion"]],[52,"e",["require","internal.getProductSettingsParameter"]],[52,"f",["require","internal.getRemoteConfigParameter"]],[52,"g",["require","getUrl"]],[52,"h",["require","parseUrl"]],[52,"i",["require","internal.sendGtagEvent"]],[52,"m",[30,[17,[15,"a"],"instanceDestinationId"],[17,["d"],"containerId"]]],[52,"n",["f",[15,"m"],"cross_domain_conditions"]],[22,["e",[15,"m"],"ae_block_outbound_click"],[46,[2,[15,"a"],"gtmOnSuccess",[7]],[36]]],[52,"o",["c",[8,"affiliateDomains",[15,"n"],"checkValidation",true,"waitForTags",false]]],[22,[28,[15,"o"]],[46,[2,[15,"a"],"gtmOnFailure",[7]],[36]]],["b","gtm.linkClick",[51,"",[7,"p","q"],[52,"r",["h",[16,[15,"p"],"gtm.elementUrl"]]],[22,["l",[15,"r"]],[46,[53,[52,"s",[39,[28,[28,[17,[15,"a"],"includeParams"]]],[8,"link_id",[16,[15,"p"],"gtm.elementId"],"link_classes",[16,[15,"p"],"gtm.elementClasses"],"link_url",["j",[15,"r"]],"link_domain",["k",[15,"r"]],"outbound",true],[8]]],[43,[15,"s"],"event_callback",[15,"q"]],["i",[15,"m"],"click",[15,"s"]]]],[46,["q"]]]],[15,"o"]],[2,[15,"a"],"gtmOnSuccess",[7]]],[50,"__ccd_em_scroll",[46,"a"],[52,"b",["require","internal.addDataLayerEventListener"]],[52,"c",["require","internal.enableAutoEventOnScroll"]],[52,"d",["require","getContainerVersion"]],[52,"e",["require","internal.getProductSettingsParameter"]],[52,"f",["require","internal.sendGtagEvent"]],[52,"g",[30,[17,[15,"a"],"instanceDestinationId"],[17,["d"],"containerId"]]],[22,["e",[15,"g"],"ae_block_scroll"],[46,[2,[15,"a"],"gtmOnSuccess",[7]],[36]]],[52,"h",["c",[8,"verticalThresholdUnits","PERCENT","verticalThresholds",90]]],[22,[28,[15,"h"]],[46,[2,[15,"a"],"gtmOnFailure",[7]],[36]]],["b","gtm.scrollDepth",[51,"",[7,"i","j"],["j"],[52,"k",[39,[28,[28,[17,[15,"a"],"includeParams"]]],[8,"percent_scrolled",[16,[15,"i"],"gtm.scrollThreshold"]],[8]]],["f",[15,"g"],"scroll",[15,"k"]]],[15,"h"]],[2,[15,"a"],"gtmOnSuccess",[7]]],[50,"__ccd_em_page_view",[46,"a"],[22,[28,[17,[15,"a"],"historyEvents"]],[46,[2,[15,"a"],"gtmOnSuccess",[7]],[36]]],[52,"b",["require","internal.addDataLayerEventListener"]],[52,"c",["require","internal.enableAutoEventOnHistoryChange"]],[52,"d",["require","getContainerVersion"]],[52,"e",["require","internal.getProductSettingsParameter"]],[52,"f",["require","internal.sendGtagEvent"]],[52,"g",["require","internal.setRemoteConfigParameter"]],[52,"h",[30,[17,[15,"a"],"instanceDestinationId"],[17,["d"],"containerId"]]],[22,["e",[15,"h"],"ae_block_history"],[46,[2,[15,"a"],"gtmOnSuccess",[7]],[36]]],[52,"i",["c",[8,"interval",1000]]],[22,[28,[15,"i"]],[46,[2,[15,"a"],"gtmOnFailure",[7]],[36]]],["b","gtm.historyChange-v2",[51,"",[7,"j","k"],["k"],[52,"l",[16,[15,"j"],"gtm.oldUrl"]],[22,[20,[16,[15,"j"],"gtm.newUrl"],[15,"l"]],[46,[36]]],[52,"m",[16,[15,"j"],"gtm.historyChangeSource"]],[22,[1,[1,[21,[15,"m"],"pushState"],[21,[15,"m"],"popstate"]],[21,[15,"m"],"replaceState"]],[46,[36]]],[52,"n",[39,[28,[28,[17,[15,"a"],"includeParams"]]],[8,"page_location",[16,[15,"j"],"gtm.newUrl"],"page_referrer",[15,"l"]],[8]]],["f",[15,"h"],"page_view",[15,"n"]],["g",[15,"h"],"page_referrer",[15,"l"]]],[15,"i"]],[2,[15,"a"],"gtmOnSuccess",[7]]],[50,"__set_product_settings",[46,"a"],[52,"b",["require","internal.setProductSettingsParameter"]],[52,"c",["require","getContainerVersion"]],[52,"d",[30,[17,[15,"a"],"instanceDestinationId"],[17,["c"],"containerId"]]],["b",[15,"d"],"google_tld",[17,[15,"a"],"foreignTldMacroResult"]],["b",[15,"d"],"ga_restrict_domain",[20,[17,[15,"a"],"isChinaVipRegionMacroResult"],1]],[2,[15,"a"],"gtmOnSuccess",[7]]]] -,"permissions":{"__ogt_google_signals":{"read_container_data":{}},"__ccd_em_site_search":{"get_url":{"urlParts":"any","queriesAllowed":"any"},"read_container_data":{}},"__ccd_em_download":{"listen_data_layer":{"accessType":"specific","allowedEvents":["gtm.linkClick"]},"process_dom_events":{"targets":[{"targetType":"document","eventName":"click"},{"targetType":"document","eventName":"auxclick"}]},"read_container_data":{}},"__ccd_em_video":{"listen_data_layer":{"accessType":"specific","allowedEvents":["gtm.video"]},"process_dom_events":{"targets":[{"targetType":"element","eventName":"onStateChange"},{"targetType":"element","eventName":"onPlaybackRateChange"}]},"read_container_data":{}},"__ccd_conversion_marking":{"read_container_data":{}},"__ccd_em_outbound_click":{"get_url":{"urlParts":"any","queriesAllowed":"any"},"listen_data_layer":{"accessType":"specific","allowedEvents":["gtm.linkClick"]},"process_dom_events":{"targets":[{"targetType":"document","eventName":"click"},{"targetType":"document","eventName":"auxclick"}]},"read_container_data":{}},"__ccd_em_scroll":{"listen_data_layer":{"accessType":"specific","allowedEvents":["gtm.scrollDepth"]},"process_dom_events":{"targets":[{"targetType":"window","eventName":"resize"},{"targetType":"window","eventName":"scroll"}]},"read_container_data":{}},"__ccd_em_page_view":{"listen_data_layer":{"accessType":"specific","allowedEvents":["gtm.historyChange-v2"]},"process_dom_events":{"targets":[{"targetType":"window","eventName":"pushstate"},{"targetType":"window","eventName":"popstate"}]},"read_container_data":{}},"__set_product_settings":{"read_container_data":{}}} - -,"security_groups":{ -"google":["__ogt_google_signals","__ccd_em_site_search","__ccd_em_download","__ccd_em_video","__ccd_conversion_marking","__ccd_em_outbound_click","__ccd_em_scroll","__ccd_em_page_view","__set_product_settings"]} - -}; - - -/* - - Copyright The Closure Library Authors. - SPDX-License-Identifier: Apache-2.0 -*/ -var l,ca=function(a){var b=0;return function(){return bb[f].max)throw Error("Quota exceeded");b[f].we+=g}}var b={},c=void 0,d=void 0,e={hk:function(f){c=f},Dh:function(){c&&a(c,1)},jk:function(f){d=f},Mb:function(f){d&&a(d,f)},Gk:function(f,g){b[f]=b[f]||{we:0};b[f].max=g},Fj:function(f){return b[f]&&b[f].we||0},reset:function(){b={}},sj:a};e.onFnConsume=e.hk;e.consumeFn=e.Dh;e.onStorageConsume=e.jk;e.consumeStorage=e.Mb;e.setMax=e.Gk;e.getConsumed=e.Fj;e.reset=e.reset;e.consume=e.sj;return e};var xa=function(a,b){this.D=a;this.W=function(c,d,e){return c.apply(d,e)};this.F=b;this.s=new ra;this.h=this.N=void 0};xa.prototype.add=function(a,b){ya(this,a,b,!1)};var ya=function(a,b,c,d){if(!a.s.Ge())if(a.D.Mb(("string"===typeof b?b.length:1)+("string"===typeof c?c.length:1)),d){var e=a.s;e.set(b,c);e.N["dust."+b]=!0}else a.s.set(b,c)}; -xa.prototype.set=function(a,b){this.s.Ge()||(!this.s.has(a)&&this.F&&this.F.has(a)?this.F.set(a,b):(this.D.Mb(("string"===typeof a?a.length:1)+("string"===typeof b?b.length:1)),this.s.set(a,b)))};xa.prototype.get=function(a){return this.s.has(a)?this.s.get(a):this.F?this.F.get(a):void 0};xa.prototype.has=function(a){return!!this.s.has(a)||!(!this.F||!this.F.has(a))};var za=function(a){var b=new xa(a.D,a);a.N&&(b.N=a.N);b.W=a.W;b.h=a.h;return b};var Aa=function(){},Ba=function(a){return"function"===typeof a},m=function(a){return"string"===typeof a},Ca=function(a){return"number"===typeof a&&!isNaN(a)},Da=Array.isArray,Fa=function(a,b){if(a&&Da(a))for(var c=0;cb)a=0,b=2147483647;return Math.floor(Math.random()*(b-a+1)+a)},Ja=function(a,b){for(var c=new Ia,d=0;d"+a+"
");void 0!==c.tagName&&Gb(c);c.innerHTML=zb(d);b=b.lastChild;for(var e=[];b.firstChild;)e.push(b.removeChild(b.firstChild));return e},Xb=function(a,b,c){c=c||100;for(var d={},e=0;ee&&(e=Math.max(d+e,0));for(var f=e;fc?d+c:Math.min(c,e));for(var f=e;0<=f;f--)if(this.has(f)&&this.get(f)===b)return f;return-1},map:function(a,b){for(var c=this.length(),d=[],e=0;ed)throw Error("TypeError: ReduceRight on List with no elements.");}for(var h=f;0<=h;h--)this.has(h)&&(e=b.h(a,e,this.get(h),h,this));return e},reverse:function(){for(var a=sc(this),b=a.length-1,c=0;0<=b;b--,c++)a.hasOwnProperty(b)?this.set(c,a[b]):va(this,c);return this},shift:function(){return this.shift()},slice:function(a,b,c){var d=this.length();void 0===b&&(b=0);b=0>b?Math.max(d+b,0):Math.min(b,d);c=void 0===c?d:0>c? -Math.max(d+c,0):Math.min(c,d);c=Math.max(b,c);for(var e=[],f=b;fE(this, -b)},Zc=function(a,b){return E(this,a)>=E(this,b)},$c=function(a,b){a=E(this,a);b=E(this,b);a instanceof ic&&(a=a.Ta);b instanceof ic&&(b=b.Ta);return a===b},ad=function(a,b){return!$c.call(this,a,b)},bd=function(a,b,c){var d=[];E(this,a)?d=E(this,b):c&&(d=E(this,c));var e=gb(this.h,d);if(e instanceof pa)return e},ed=function(a,b){return E(this,a)>Number(E(this,b))},Bd=function(a,b){return Number(E(this,a))>>>Number(E(this,b))},Cd=function(a,b){return Number(E(this,a))&Number(E(this,b))},Ed=function(a,b){return Number(E(this,a))^Number(E(this,b))},Fd=function(a,b){return Number(E(this,a))|Number(E(this,b))};var Hd=function(){this.h=new jb;Gd(this)};Hd.prototype.execute=function(a){return Id(this.h.s(a))}; -var Jd=function(a,b,c){return Id(a.h.F(b,c))},Gd=function(a){var b=function(d,e){lb(a.h,d,String(e))};b("control",49);b("fn",51);b("list",7);b("map",8);b("undefined",44);var c=function(d,e){kb(a.h,String(d),e)};c(0,yc);c(1,zc);c(2,Ac);c(3,Bc);c(53,Cc);c(4,Dc);c(5,Fc);c(52,Gc);c(6,Hc);c(9,Fc);c(50,Ic);c(10,Jc);c(12,Kc);c(13,Lc);c(47,Oc);c(54,Pc);c(55,Qc);c(63,Vc);c(64,Sc);c(65,Tc);c(66,Uc);c(15,Wc);c(16,Xc);c(17,Xc);c(18,Yc);c(19,Zc);c(20,$c);c(21,ad);c(22,bd);c(23,ed);c(24,fd);c(25,gd);c(26,hd);c(27, -id);c(28,jd);c(29,kd);c(45,ld);c(30,md);c(32,nd);c(33,nd);c(34,od);c(35,od);c(46,pd);c(36,qd);c(43,rd);c(37,sd);c(38,td);c(39,ud);c(40,vd);c(41,wd);c(42,xd);c(58,yd);c(57,zd);c(60,Ad);c(61,Bd);c(56,Cd);c(62,Ed);c(59,Fd)};function Id(a){if(a instanceof pa||a instanceof db||a instanceof ua||a instanceof hb||a instanceof ic||null===a||void 0===a||"string"===typeof a||"number"===typeof a||"boolean"===typeof a)return a};var Kd=function(){var a=function(b){return{toString:function(){return b}}};return{li:a("consent"),Me:a("consent_always_fire"),mg:a("convert_case_to"),ng:a("convert_false_to"),og:a("convert_null_to"),pg:a("convert_true_to"),qg:a("convert_undefined_to"),Pk:a("debug_mode_metadata"),Ib:a("function"),rf:a("instance_name"),Yi:a("live_only"),Zi:a("malware_disabled"),aj:a("metadata"),dj:a("original_activity_id"),Sk:a("original_vendor_template_id"),Rk:a("once_on_load"),cj:a("once_per_event"),rh:a("once_per_load"), -Tk:a("priority_override"),Uk:a("respected_consent_types"),vh:a("setup_tags"),wh:a("tag_id"),xh:a("teardown_tags")}}();var fe; -var ge=[],he=[],ie=[],je=[],ke=[],le={},me,ne,oe,pe=function(a,b){var c={};c["function"]="__"+a;for(var d in b)b.hasOwnProperty(d)&&(c["vtp_"+d]=b[d]);return c},qe=function(a,b){var c=a["function"],d=b&&b.event;if(!c)throw Error("Error: No function name given for function call.");var e=le[c],f={},g;for(g in a)if(a.hasOwnProperty(g))if(0===g.indexOf("vtp_"))e&&d&&d.Ch&&d.Ch(a[g]),f[void 0!==e?g:g.substr(4)]=a[g];else if(g===Kd.Me.toString()&&a[g]){}e&&d&&d.Bh&&(f.vtp_gtmCachedValues=d.Bh);if(b){if(null==b.name){var h;a:{var k=b.index;if(null==k)h="";else{var n;switch(b.type){case 2:n=ge[k];break;case 1:n=je[k];break;default:h="";break a}var p=n&&n[Kd.rf];h=p?String(p):""}}b.name=h}e&&(f.vtp_gtmEntityIndex=b.index,f.vtp_gtmEntityName=b.name)}return void 0!==e?e(f):fe(c,f,b)},se=function(a,b,c){c=c||[];var d={},e;for(e in a)a.hasOwnProperty(e)&&(d[e]=re(a[e],b,c));return d},re=function(a, -b,c){if(Da(a)){var d;switch(a[0]){case "function_id":return a[1];case "list":d=[];for(var e=1;ec&&(b["k"+c]=Ue(Se(e,40)),b["v"+c]=Ue(f),c++)});var d=[];Ka(b,function(e,f){d.push(""+e+f)});return d.join("~")},Ue=function(a){return(""+a).replace(/~/g,function(){return"~~"})}, -Te={item_id:"id",item_name:"nm",item_brand:"br",item_category:"ca",item_category2:"c2",item_category3:"c3",item_category4:"c4",item_category5:"c5",item_variant:"va",price:"pr",quantity:"qt",coupon:"cp",item_list_name:"ln",index:"lp",item_list_id:"li",discount:"ds",affiliation:"af",promotion_id:"pi",promotion_name:"pn",creative_name:"cn",creative_slot:"cs",location_id:"lo"},Ve={id:"id",name:"nm",brand:"br",variant:"va",list_name:"ln",list_position:"lp",list:"ln",position:"lp",creative:"cn"},We=["ca", -"c2","c3","c4","c5"];var Ye=function(a){var b=[];Ka(a,function(c,d){null!=d&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(String(d)))});return b.join("&")},Ze=function(a,b,c,d){this.Da=a.Da;this.Rb=a.Rb;this.yb=a.yb;this.h=b;this.F=c;this.D=Ye(a.Da);this.s=Ye(a.yb);this.N=this.s.length;if(d&&16384this.events.length&&16384>a.N+this.D,c=this.Da===a.D&&this.h===a.h&&this.s===a.F;return 0==this.events.length||b&&c}; -var af=function(a,b){Ka(a,function(c,d){null!=d&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(d))})},bf=function(a,b){var c=[];a.D&&c.push(a.D);b&&c.push("_s="+b);af(a.Rb,c);var d=!1;a.s&&(c.push(a.s),d=!0);var e=c.join("&"),f="",g=e.length+a.h.length+1;d&&2048y&&(v=w,y=B)});x==c.length&&(g[t]=v)});af(g,d);b&&d.push("_s="+b);for(var h=d.join("&"),k=[],n={},p=0;pe?c.push(e):2048>e?c.push(192|e>>6,128|e&63):55296>e||57344<=e?c.push(224|e>>12,128|e>>6&63,128|e&63):(e=65536+((e&1023)<<10|a.charCodeAt(++d)&1023),c.push(240|e>>18,128|e>>12&63,128|e>>6&63,128|e&63))}b=new Uint8Array(c)}return b},mg=/[0-9`~!@#$%^&*()_\-+=:;<>,.?|/\\[\]]/g,pg=/^\S+@\S+\.\S+$/,ng=/^\+\d{10,15}$/,ig=/[.~]/g,vg={},wg=(vg.email="em",vg.phone_number= -"pn",vg.first_name="fn",vg.last_name="ln",vg.street="sa",vg.city="ct",vg.region="rg",vg.country="co",vg.postal_code="pc",vg.error_code="ec",vg),xg=function(a,b){function c(q,r,t,u){var v=null==q?"":m(q)?Qa(String(q)):"e0";""!==v&&g.push({name:r,value:t(v),index:u})}function d(q,r,t){var u=q[r];Da(u)||(u=[u]);for(var v=0;v=f)return!0;(d=d.parentElement)&&(e=z.getComputedStyle(d,null))}return!1}; -var uh=function(){var a=I.body,b=I.documentElement||a&&a.parentElement,c,d;if(I.compatMode&&"BackCompat"!==I.compatMode)c=b?b.clientHeight:0,d=b?b.clientWidth:0;else{var e=function(f,g){return f&&g?Math.min(f,g):Math.max(f,g)};S(7);c=e(b?b.clientHeight:0,a?a.clientHeight:0);d=e(b?b.clientWidth:0,a?a.clientWidth:0)}return{width:d,height:c}},vh=function(a){var b=uh(),c=b.height,d=b.width,e=a.getBoundingClientRect(),f=e.bottom-e.top,g=e.right-e.left;return f&&g?(1-Math.min((Math.max(0-e.left,0)+Math.max(e.right- -d,0))/g,1))*(1-Math.min((Math.max(0-e.top,0)+Math.max(e.bottom-c,0))/f,1)):0};var wh=[],xh=!(!z.IntersectionObserver||!z.IntersectionObserverEntry),yh=function(a,b,c){for(var d=new z.IntersectionObserver(a,{threshold:c}),e=0;ee[h])for(;f[h]=c[f[h]+1];)d(b[h],k),f[h]++;else if(kc[d]&&(c[d]=0);if(xh){var e=!1;J(function(){e|| -Jh(a,b,c)()});return yh(function(f){e=!0;for(var g={xc:0};g.xcc?a.href:a.href.substr(0,c)}return b},Sh=function(a){var b=I.createElement("a");a&&(b.href=a);var c=b.pathname;"/"!==c[0]&&(a||fg("TAGGING",1),c="/"+c);var d=b.hostname.replace(Mh,"");return{href:b.href,protocol:b.protocol,host:b.host,hostname:d,pathname:c,search:b.search,hash:b.hash,port:b.port}},Th=function(a){function b(n){var p=n.split("=")[0];return 0>d.indexOf(p)?n:p+"=0"}function c(n){return n.split("&").map(b).filter(function(p){return void 0!== -p}).join("&")}var d="gclid dclid gbraid wbraid gclaw gcldc gclha gclgf gclgb _gl".split(" "),e=Sh(a),f=a.split(/[?#]/)[0],g=e.search,h=e.hash;"?"===g[0]&&(g=g.substring(1));"#"===h[0]&&(h=h.substring(1));g=c(g);h=c(h);""!==g&&(g="?"+g);""!==h&&(h="#"+h);var k=""+f+g+h;"/"===k[k.length-1]&&(k=k.substring(0,k.length-1));return k};var Uh={}; -var Wh=function(a,b,c){if(a){var d=a.element,e={Sa:a.Sa,tagName:d.tagName,type:1};b&&(e.querySelector=Vh(d));c&&(e.isVisible=!th(d));return e}},Zh=function(a){if(0!=a.length){var b;b=Xh(a,function(c){return!Yh.test(c.Sa)});b=Xh(b,function(c){return"INPUT"===c.element.tagName.toUpperCase()});b=Xh(b,function(c){return!th(c.element)});return b[0]}},Xh=function(a,b){if(1>=a.length)return a;var c=a.filter(b);return 0==c.length?a:c},Vh=function(a){var b;if(a===I.body)b="body";else{var c;if(a.id)c="#"+a.id; -else{var d;if(a.parentElement){var e;a:{var f=a.parentElement;if(f){for(var g=0;g:nth-child("+e+")"}else d="";c=d}b=c}return b},$h=!0,ai=!1;Uh.ji="false"; -var bi=function(a){if("false"===Uh.ji||!$h)return!1;if(ai)return!0;var b=rh("AW-"+a);return!!b&&!!b.preAutoPii},ci=new RegExp(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i),di=new RegExp(/@(gmail|googlemail)\./i),Yh=new RegExp(/support|noreply/i),ei="SCRIPT STYLE IMG SVG PATH BR NOSCRIPT TEXTAREA".split(" "),fi=["BR"],gi={},hi=function(a){a=a||{Nb:!0,Ob:!0};a.zb=a.zb||{email:!0,phone:!0,address:!0};var b,c=a,d=!!c.Nb+"."+!!c.Ob;c&&c.kd&&c.kd.length&&(d+="."+c.kd.join("."));c&&c.zb&&(d+="."+c.zb.email+ -"."+c.zb.phone+"."+c.zb.address);b=d;var e=gi[b];if(e&&200>Sa()-e.timestamp)return e.result;var f;var g=[],h=I.body;if(h){for(var k=h.querySelectorAll("*"),n=0;nn;n++){var p=k[n];if(!(0<=ei.indexOf(p.tagName.toUpperCase()))&&p.children instanceof HTMLCollection){for(var q=!1,r=0;rr;r++)if(!(0<=fi.indexOf(p.children[r].tagName.toUpperCase()))){q=!0;break}q||g.push(p)}}f={elements:g,status:1E4d&&S(66);Yi=c},$i=function(a){var b=Ki(a);return void 0!=b?b:!0},aj=function(){return"G1"+Vi(Ki)},bj=function(a, -b){Pi(a,b)},cj=function(a,b){Si(a,b)},dj=function(a,b){Ri(a,b)};var ej=function(a){var b=1,c,d,e;if(a)for(b=0,d=a.length-1;0<=d;d--)e=a.charCodeAt(d),b=(b<<6&268435455)+e+(e<<14),c=b&266338304,b=0!==c?b^c>>21:b;return b};var fj=function(a,b,c){for(var d=[],e=b.split(";"),f=0;fd)return null;var e=a.indexOf("&",d);if(0>e||e>c)e=c;d+=b.length+1;return decodeURIComponent(a.slice(d,-1!==e?e:0).replace(/\+/g," "))},Xj=/[?&]($|#)/,Yj=function(a,b,c){for(var d,e=a.search(Vj),f=0,g,h=[];0<=(g=Uj(a,f,b,e));)h.push(a.substring(f, -g)),f=Math.min(a.indexOf("&",g)+1||e,e);h.push(a.slice(f));d=h.join("").replace(Xj,"$1");var k,n=null!=c?"="+encodeURIComponent(String(c)):"";var p=b+n;if(p){var q,r=d.indexOf("#");0>r&&(r=d.length);var t=d.indexOf("?"),u;0>t||t>r?(t=r,u=""):u=d.substring(t+1,r);q=[d.slice(0,t),u,d.slice(r)];var v=q[1];q[1]=p?v?v+"&"+p:p:v;k=q[0]+(q[1]?"?"+q[1]:"")+q[2]}else k=d;return k};function Zj(a){if(!a||!I.head)return null;var b,c;c=void 0===c?document:c;b=c.createElement("meta");I.head.appendChild(b);b.httpEquiv="origin-trial";b.content=a;return b}var ak=function(){var a=z;if(a.top==a)return 0;var b=a.location.ancestorOrigins;if(b)return b[b.length-1]==a.location.origin?1:2;var c;var d=a.top;try{var e;if(e=!!d&&null!=d.location.href)b:{try{zi(d.foo);e=!0;break b}catch(f){}e=!1}c=e}catch(f){c=!1}return c?1:2};var bk=function(){};var ck=function(a){void 0!==a.addtlConsent&&"string"!==typeof a.addtlConsent&&(a.addtlConsent=void 0);void 0!==a.gdprApplies&&"boolean"!==typeof a.gdprApplies&&(a.gdprApplies=void 0);return void 0!==a.tcString&&"string"!==typeof a.tcString||void 0!==a.listenerId&&"number"!==typeof a.listenerId?2:a.cmpStatus&&"error"!==a.cmpStatus?0:3},dk=function(a,b,c){this.s=a;this.h=null;this.N={};this.Ua=0;this.W=void 0===b?500:b;this.F=void 0===c?!1:c;this.D=null};la(dk,bk); -dk.prototype.addEventListener=function(a){var b=this,c={internalBlockOnErrors:this.F},d=hj(function(){return a(c)}),e=0;-1!==this.W&&(e=setTimeout(function(){c.tcString="tcunavailable";c.internalErrorState=1;d()},this.W));var f=function(g,h){clearTimeout(e);g?(c=g,c.internalErrorState=ck(c),c.internalBlockOnErrors=b.F,h&&0===c.internalErrorState||(c.tcString="tcunavailable",h||(c.internalErrorState=3))):(c.tcString="tcunavailable",c.internalErrorState=3);a(c)};try{ek(this,"addEventListener",f)}catch(g){c.tcString= -"tcunavailable",c.internalErrorState=3,e&&(clearTimeout(e),e=0),d()}};dk.prototype.removeEventListener=function(a){a&&a.listenerId&&ek(this,"removeEventListener",null,a.listenerId)}; -var gk=function(a,b,c){var d;d=void 0===d?"755":d;var e;a:{if(a.publisher&&a.publisher.restrictions){var f=a.publisher.restrictions[b];if(void 0!==f){e=f[void 0===d?"755":d];break a}}e=void 0}var g=e;if(0===g)return!1;var h=c;2===c?(h=0,2===g&&(h=1)):3===c&&(h=1,1===g&&(h=0));var k;if(0===h)if(a.purpose&&a.vendor){var n=fk(a.vendor.consents,void 0===d?"755":d);k=n&&"1"===b&&a.purposeOneTreatment&&"CH"===a.publisherCC?!0:n&&fk(a.purpose.consents,b)}else k=!0;else k=1===h?a.purpose&&a.vendor?fk(a.purpose.legitimateInterests, -b)&&fk(a.vendor.legitimateInterests,void 0===d?"755":d):!0:!0;return k},fk=function(a,b){return!(!a||!a[b])},ek=function(a,b,c,d){c||(c=function(){});if("function"===typeof a.s.__tcfapi){var e=a.s.__tcfapi;e(b,2,c,d)}else if(hk(a)){ik(a);var f=++a.Ua;a.N[f]=c;if(a.h){var g={};a.h.postMessage((g.__tcfapiCall={command:b,version:2,callId:f,parameter:d},g),"*")}}else c({},!1)},hk=function(a){if(a.h)return a.h;var b;a:{for(var c=a.s,d=0;50>d;++d){var e;try{e=!(!c.frames||!c.frames.__tcfapiLocator)}catch(h){e= -!1}if(e){b=c;break a}var f;b:{try{var g=c.parent;if(g&&g!=c){f=g;break b}}catch(h){}f=null}if(!(c=f))break}b=null}a.h=b;return a.h},ik=function(a){a.D||(a.D=function(b){try{var c;c=("string"===typeof b.data?JSON.parse(b.data):b.data).__tcfapiReturn;a.N[c.callId](c.returnValue,c.success)}catch(d){}},Qj(a.s,a.D))};var jk=!0;jk=!1;var kk={1:0,3:0,4:0,7:3,9:3,10:3},lk=Pj("",550),mk=Pj("",500);function nk(){var a=Qg.tcf||{};return Qg.tcf=a} -var sk=function(){var a=nk(),b=new dk(z,jk?3E3:-1);if(!0===z.gtag_enable_tcf_support&&!a.active&&("function"===typeof z.__tcfapi||"function"===typeof b.s.__tcfapi||null!=hk(b))){a.active=!0;a.Bd={};ok();var c=null;jk?c=z.setTimeout(function(){pk(a);qk(a);c=null},mk):a.tcString="tcunavailable";try{b.addEventListener(function(d){c&&(clearTimeout(c),c=null);if(0!==d.internalErrorState)pk(a),qk(a);else{var e;a.gdprApplies=d.gdprApplies;if(!1===d.gdprApplies)e=rk(),b.removeEventListener(d);else if("tcloaded"=== -d.eventStatus||"useractioncomplete"===d.eventStatus||"cmpuishown"===d.eventStatus){var f={},g;for(g in kk)if(kk.hasOwnProperty(g))if("1"===g){var h=d,k=!0;k=void 0===k?!1:k;var n;var p=h;!1===p.gdprApplies?n=!0:(void 0===p.internalErrorState&&(p.internalErrorState=ck(p)),n="error"===p.cmpStatus||0!==p.internalErrorState?!p.internalBlockOnErrors:"loaded"!==p.cmpStatus||"tcloaded"!==p.eventStatus&&"useractioncomplete"!==p.eventStatus?!1:!0);f["1"]=n?!1===h.gdprApplies||"tcunavailable"===h.tcString|| -void 0===h.gdprApplies&&!k||"string"!==typeof h.tcString||!h.tcString.length?!0:gk(h,"1",0):!1}else f[g]=gk(d,g,kk[g]);e=f}e&&(a.tcString=d.tcString||"tcempty",a.Bd=e,qk(a))}})}catch(d){c&&(clearTimeout(c),c=null),pk(a),qk(a)}}};function pk(a){a.type="e";a.tcString="tcunavailable";jk&&(a.Bd=rk())}function ok(){var a={},b=(a.ad_storage="denied",a.wait_for_update=lk,a);Xi(b)}function rk(){var a={},b;for(b in kk)kk.hasOwnProperty(b)&&(a[b]=!0);return a} -function qk(a){var b={},c=(b.ad_storage=a.Bd["1"]?"granted":"denied",b);Zi(c,{eventId:0},{gdprApplies:a?a.gdprApplies:void 0,tcString:tk()})}var tk=function(){var a=nk();return a.active?a.tcString||"":""},uk=function(){var a=nk();return a.active&&void 0!==a.gdprApplies?a.gdprApplies?"1":"0":""},vk=function(a){if(!kk.hasOwnProperty(String(a)))return!0;var b=nk();return b.active&&b.Bd?!!b.Bd[String(a)]:!0};function wk(a,b,c,d){var e,f=Number(null!=a.Za?a.Za:void 0);0!==f&&(e=new Date((b||Sa())+1E3*(f||7776E3)));return{path:a.path,domain:a.domain,flags:a.flags,encode:!!c,expires:e,ab:d}};var xk=["1"],yk={},zk={},Bk=function(a){return yk[Ak(a)]},Ek=function(a,b){b=void 0===b?!0:b;var c=Ak(a.prefix);if(!yk[c]&&!Ck(c,a.path,a.domain)&&b){var d=Ak(a.prefix),e=yj();if(0===Dk(d,e,a)){var f=Jb("google_tag_data",{});f._gcl_au?fg("GTM",57):f._gcl_au=e}Ck(c,a.path,a.domain)}};function Dk(a,b,c,d){var e=Cj(b,"1",c.domain,c.path),f=wk(c,d);f.ab="ad_storage";return uj(a,e,f)} -function Ck(a,b,c){var d=Bj(a,b,c,xk,"ad_storage");if(!d)return!1;var e=d.split(".");5===e.length?(yk[a]=e.slice(0,2).join("."),zk[a]={id:e.slice(2,4).join("."),Nh:Number(e[4])||0}):3===e.length?zk[a]={id:e.slice(0,2).join("."),Nh:Number(e[2])||0}:yk[a]=d;return!0}function Ak(a){return(a||"_gcl")+"_au"};function Fk(){for(var a=Gk,b={},c=0;c>4);64!=g&&(c+=String.fromCharCode(f<<4&240|g>>2),64!=h&&(c+=String.fromCharCode(g<<6&192|h)))}};var Kk;var Ok=function(){var a=Lk,b=Mk,c=Nk(),d=function(g){a(g.target||g.srcElement||{})},e=function(g){b(g.target||g.srcElement||{})};if(!c.init){Sb(I,"mousedown",d);Sb(I,"keyup",d);Sb(I,"submit",e);var f=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){b(this);f.call(this)};c.init=!0}},Pk=function(a,b,c,d,e){var f={callback:a,domains:b,fragment:2===c,placement:c,forms:d,sameHost:e};Nk().decorators.push(f)},Qk=function(a,b,c){for(var d=Nk().decorators,e={},f=0;f>2,y=(r&3)<<4|t>>4,x=(t&15)<<2|u>>6,w=u&63;q||(w=64,p||(x=64));k.push(Gk[v],Gk[y],Gk[x],Gk[w])}g=k.join("");f.call(e,g)}}var A=b.join("*");return["1",Wk(A), -A].join("*")};function Wk(a,b){var c=[z.navigator.userAgent,(new Date).getTimezoneOffset(),Hb.userLanguage||Hb.language,Math.floor(Sa()/60/1E3)-(void 0===b?0:b),a].join("*"),d;if(!(d=Kk)){for(var e=Array(256),f=0;256>f;f++){for(var g=f,h=0;8>h;h++)g=g&1?g>>>1^3988292384:g>>>1;e[f]=g}d=e}Kk=d;for(var k=4294967295,n=0;n>>8^Kk[(k^c.charCodeAt(n))&255];return((k^-1)>>>0).toString(36)} -function Yk(){return function(a){var b=Sh(z.location.href),c=b.search.replace("?",""),d=Nh(c,"_gl",!1,!0)||"";a.query=Zk(d)||{};var e=Qh(b,"fragment").match(Vk("_gl"));a.fragment=Zk(e&&e[3]||"")||{}}}function $k(a,b){var c=Vk(a).exec(b),d=b;if(c){var e=c[2],f=c[4];d=c[1];f&&(d=d+e+f)}return d} -var al=function(a,b){b||(b="_gl");var c=Uk.exec(a);if(!c)return"";var d=c[1],e=$k(b,(c[2]||"").slice(1)),f=$k(b,(c[3]||"").slice(1));e.length&&(e="?"+e);f.length&&(f="#"+f);return""+d+e+f},bl=function(a){var b=Yk(),c=Nk();c.data||(c.data={query:{},fragment:{}},b(c.data));var d={},e=c.data;e&&(Va(d,e.query),a&&Va(d,e.fragment));return d},Zk=function(a){try{var b=cl(a,3);if(void 0!==b){for(var c={},d=b?b.split("*"):[],e=0;e+1e;++e){var f=Rk.exec(d);if(f){c=f;break a}d=decodeURIComponent(d)}c=void 0}var g=c;if(g&&"1"===g[1]){var h=g[3],k;a:{for(var n=g[2],p=0;pf.length||!b&&3!==f.length)&&Number(f[1])){d[c[e].hg]||(d[c[e].hg]=[]);var g={version:f[0],timestamp:1E3*Number(f[1]),la:f[2]};b&&3p){n=!0;break b}n=!1}if(!n){var t=wk(b,k,!0);t.ab="ad_storage";uj(g,h,t)}}}}Rl(Pl(c.gclid,c.gclsrc),!1,b)})},Tl=function(a,b){var c=ql[a];if(void 0!==c)return b+c},Ul=function(a){return 0!==Wl(a.split(".")).length?1E3*(Number(a.split(".")[1])|| -0):0};function Ll(a){var b=Wl(a.split("."));return 0===b.length?null:{version:b[0],la:b[2],timestamp:1E3*(Number(b[1])||0),labels:b.slice(3)}}function Wl(a){return 3>a.length||"GCL"!==a[0]&&"1"!==a[0]||!/^\d+$/.test(a[1])||!pl.test(a[2])?[]:a} -var Xl=function(a,b,c,d,e){if(Da(b)&&ij(z)){var f=Ol(e),g=function(){for(var h={},k=0;kb};var im=/[A-Z]+/,jm=/\s/,km=function(a){if(m(a)){a=Qa(a);var b=a.indexOf("-");if(!(0>b)){var c=a.substring(0,b);if(im.test(c)){for(var d=a.substring(b+1).split("/"),e=0;eh;h++){var k=g[h].src;if(k){k=k.toLowerCase();if(0===k.indexOf(e)){b=3;break a}1===f&&0===k.indexOf(d)&&(f=2)}}b=f}else b=a;return b};var Am=function(a,b,c){this.target=a;this.eventName=b;this.B=c;this.C={};this.metadata=L(c.eventMetadata||{});this.T=!1},Bm=function(a,b,c){var d=a.B.getWithConfig(b);void 0!==d?a.C[b]=d:void 0!==c&&(a.C[b]=c)},Cm=function(a,b,c){var d=rh(a.target.R);return d&&d.hasOwnProperty(b)?d[b]:c};function Dm(a){return{getDestinationId:function(){return a.target.R},getEventName:function(){return a.eventName},setEventName:function(b){return void(a.eventName=b)},getHitData:function(b){return a.C[b]},setHitData:function(b,c){return void(a.C[b]=c)},setHitDataIfNotDefined:function(b,c){void 0===a.C[b]&&(a.C[b]=c)},copyToHitData:function(b,c){Bm(a,b,c)},getMetadata:function(b){return a.metadata[b]},setMetadata:function(b,c){return void(a.metadata[b]=c)},abort:function(){return void(a.T=!0)},getProcessedEvent:function(){return a}}} -;var Fm=function(a){var b=Em[a.target.R];if(!a.T&&b)for(var c=Dm(a),d=0;de?b[c++]=e:(2048>e?b[c++]=e>>6|192:(55296==(e&64512)&&d+1>18|240,b[c++]=e>>12&63|128):b[c++]=e>>12|224,b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b};vb();Rj()||ub("iPod");ub("iPad");!ub("Android")||wb()||vb()||ub("Opera")||ub("Silk");wb();!ub("Safari")||wb()||ub("Coast")||ub("Opera")||ub("Edge")||ub("Edg/")||ub("OPR")||vb()||ub("Silk")||ub("Android")||Sj();var an={},bn=null,cn=function(a){for(var b=[],c=0,d=0;d>=8);b[c++]=e}var f=4;void 0===f&&(f=0);if(!bn){bn={};for(var g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),h=["+/=","+/","-_=","-_.","-_"],k=0;5>k;k++){var n=g.concat(h[k].split(""));an[k]=n;for(var p=0;p>2],C=r[(x&3)<<4|w>>4],D=r[(w&15)<<2|A>>6],G=r[A&63];t[y++]=""+B+C+D+G}var F=0,Q=u;switch(b.length-v){case 2:F=b[v+1],Q=r[(F&15)<<2]||u;case 1:var N=b[v];t[y]=""+r[N>>2]+r[(N&3)<<4|F>>4]+Q+u}return t.join("")};var dn="platform platformVersion architecture model uaFullVersion bitness fullVersionList wow64".split(" ");function en(a){var b;return null!=(b=a.google_tag_data)?b:a.google_tag_data={}}function fn(){var a=z.google_tag_data,b;if(null!=a&&a.uach){var c=a.uach,d=Object.assign({},c);c.fullVersionList&&(d.fullVersionList=c.fullVersionList.slice(0));b=d}else b=null;return b} -function gn(){var a=z,b,c;if("function"!==typeof(null==(b=a.navigator)?void 0:null==(c=b.userAgentData)?void 0:c.getHighEntropyValues))return null;var d=en(a);if(d.uach_promise)return d.uach_promise;var e=a.navigator.userAgentData.getHighEntropyValues(dn).then(function(f){null!=d.uach||(d.uach=f);return f});return d.uach_promise=e};var hn=!1,jn=function(a,b,c){c=void 0===c?!1:c;b.C[T.g.ef]=a.architecture;b.C[T.g.ff]=a.bitness;a.fullVersionList&&(b.C[T.g.hf]=a.fullVersionList.map(function(d){return encodeURIComponent(d.brand||"")+";"+encodeURIComponent(d.version||"")}).join("|"));c&&(b.C[T.g.dh]=a.mobile?"1":"0");b.C[T.g.jf]=a.model;b.C[T.g.kf]=a.platform;b.C[T.g.lf]=a.platformVersion;b.C[T.g.nf]=a.wow64?"1":"0"};function kn(){return"attribution-reporting"}function ln(a){var b;b=void 0===b?document:b;var c;return!(null==(c=b.featurePolicy)||!c.allowedFeatures().includes(a))};var mn=!1;function nn(){if(ln("join-ad-interest-group")&&Ba(Hb.joinAdInterestGroup))return!0;mn||(Zj('A7bG5hJ4XpMV5a3V1wwAR0PalkFSxLOZeL9D/YBYdupYUIgUgGhfVJ1zBFOqGybb7gRhswfJ+AmO7S2rNK2IOwkAAAB7eyJvcmlnaW4iOiJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbTo0NDMiLCJmZWF0dXJlIjoiUHJpdmFjeVNhbmRib3hBZHNBUElzIiwiZXhwaXJ5IjoxNjY5NzY2Mzk5LCJpc1RoaXJkUGFydHkiOnRydWV9'),mn=!0);return ln("join-ad-interest-group")&&Ba(Hb.joinAdInterestGroup)} -function on(a,b){var c=void 0;try{c=I.querySelector('iframe[data-tagging-id="'+b+'"]')}catch(e){}if(c){var d=Number(c.dataset.loadTime);if(d&&6E4>Sa()-d){fg("TAGGING",9);return}}else try{if(50<=I.querySelectorAll('iframe[allow="join-ad-interest-group"][data-tagging-id*="-"]').length){fg("TAGGING",10);return}}catch(e){}Qb(a,void 0,{allow:"join-ad-interest-group"},{taggingId:b,loadTime:Sa()},c)};var pn=RegExp("^UA-\\d+-\\d+%3A[\\w-]+(?:%2C[\\w-]+)*(?:%3BUA-\\d+-\\d+%3A[\\w-]+(?:%2C[\\w-]+)*)*$"),qn=/^~?[\w-]+(?:\.~?[\w-]+)*$/,rn=/^\d+\.fls\.doubleclick\.net$/,sn=/;gac=([^;?]+)/,tn=/;gacgb=([^;?]+)/,un=/;gclaw=([^;?]+)/,vn=/;gclgb=([^;?]+)/; -function wn(a,b){if(rn.test(I.location.host)){var c=I.location.href.match(b);return c&&2==c.length&&c[1].match(pn)?decodeURIComponent(c[1]):""}var d=[],e;for(e in a){for(var f=[],g=a[e],h=0;h=Jo--))S(1),Ho[ko]=!0;else{void 0===oo[ko]&&Io.uk();var b=yo(!0,a);a?Yb(b):Rb(b);if(Ko||Lo&&0c.indexOf(h))if(k&&0c.indexOf(k[q])){S(11);p=!1;break a}}else{p=!1;break a}p=!0}n=p}var r=!1;if(d){var t=0<=e.indexOf(h);if(t)r=t;else{var u=Ja(e,k||[]);u&&S(10);r=u}}var v=!n||r;v||!(0<=k.indexOf("sandboxedScripts"))||c&&-1!==c.indexOf("sandboxedScripts")||(v=Ja(e,Sp));return f[h]=v}},Up=function(){return Pp.test(z.location&&z.location.hostname)};var Wp={initialized:11,complete:12,interactive:13},Xp={},Yp=Object.freeze((Xp[T.g.za]=!0,Xp)),Zp=0<=I.location.search.indexOf("?gtm_diagnostics=")||0<=I.location.search.indexOf(">m_diagnostics="),aq=function(a,b,c){if("config"!==a||1dq){dq++;try{I.documentElement.doScroll("left"),fq()}catch(a){z.setTimeout(gq,50)}}}var hq=function(a){cq?a():eq.push(a)};var iq=function(){this.N=0;this.h={}};iq.prototype.s=function(a,b,c){var d=++this.N;this.h[a]=this.h[a]||{};this.h[a][String(d)]={listener:b,cb:c};return d};iq.prototype.D=function(a,b){var c=this.h[a],d=String(b);if(!c||!c[d])return!1;delete c[d];return!0};iq.prototype.F=function(a,b){var c=[];Ka(this.h[a],function(d,e){0>c.indexOf(e.listener)&&(void 0===e.cb||0<=b.indexOf(e.cb))&&c.push(e.listener)});return c};var jq=function(a,b,c){return{entityType:a,indexInOriginContainer:b,nameInOriginContainer:c,originContainerId:He.O}};var lq=function(a,b){this.h=!1;this.F=[];this.N={tags:[]};this.W=!1;this.s=this.D=0;kq(this,a,b)},mq=function(a,b,c,d){if(Tg.hasOwnProperty(b)||"__zone"===b)return-1;var e={};pc(d)&&(e=L(d,e));e.id=c;e.status="timeout";return a.N.tags.push(e)-1},nq=function(a,b,c,d){var e=a.N.tags[b];e&&(e.status=c,e.executionTime=d)},oq=function(a){if(!a.h){for(var b=a.F,c=0;c=a.D&&oq(a)})},qq=function(a){a.W=!0;a.s>=a.D&&oq(a)};var rq=function(){function a(d){return!Ca(d)||0>d?0:d}if(!Qg._li&&z.performance&&z.performance.timing){var b=z.performance.timing.navigationStart,c=Ca(jh.get("gtm.start"))?jh.get("gtm.start"):0;Qg._li={cst:a(c-b),cbt:a($g-b)}}},sq=function(a){z.performance&&z.performance.mark(He.O+"_"+a+"_start")},tq=function(a){if(z.performance){var b=He.O+"_"+a+"_start",c=He.O+"_"+a+"_duration";z.performance.measure(c,b);var d=z.performance.getEntriesByName(c)[0];z.performance.clearMarks(b);z.performance.clearMeasures(c); -var e=Qg._p||{};void 0===e[a]&&(e[a]=d.duration,Qg._p=e);return d.duration}},uq=function(){if(z.performance&&z.performance.now){var a=Qg._p||{};a.PAGEVIEW=z.performance.now();Qg._p=a}};var vq={},wq=function(){return z.GoogleAnalyticsObject&&z[z.GoogleAnalyticsObject]},xq=!1; -function Aq(){return z.GoogleAnalyticsObject||"ga"} -var Bq=function(a){},Cq=function(a,b){return function(){var c=wq(),d=c&&c.getByName&&c.getByName(a);if(d){var e=d.get("sendHitTask");d.set("sendHitTask",function(f){var g=f.get("hitPayload"),h=f.get("hitCallback"),k=0>g.indexOf("&tid="+b);k&&(f.set("hitPayload",g.replace(/&tid=UA-[0-9]+-[0-9]+/,"&tid="+b),!0),f.set("hitCallback",void 0,!0));e(f);k&&(f.set("hitPayload", -g,!0),f.set("hitCallback",h,!0),f.set("_x_19",void 0,!0),e(f))})}}};function Hq(a,b,c,d){var e=je[a],f=Iq(a,b,c,d);if(!f)return null;var g=re(e[Kd.vh],c,[]);if(g&&g.length){var h=g[0];f=Hq(h.index,{onSuccess:f,onFailure:1===h.Ih?b.terminate:f,terminate:b.terminate},c,d)}return f} -function Iq(a,b,c,d){function e(){if(f[Kd.Zi])h();else{var y=se(f,c,[]),x=y[Kd.li];if(null!=x)for(var w=0;we?1:dh?1:gd.indexOf(a)&&d.push(a)}},vu=function(a,b){b=String(b).split(",");for(var c=0;cd.indexOf(a)&&d.push(a)}},wu=function(a){for(var b=[],c=[],d={},e=0;ea.length)&&m(a[1])){var d={};if(2a.length)&&m(c)){var d;if(2n)for(S(4),c.pruned=!0;this.length>n;)this.shift();var p="boolean"!==typeof k||k;return ov()&&p};var e=b.slice(0).map(function(f){return a(f)});dv.push.apply(dv,e);if(rv()){J(qv)}},rv=function(){var a=!0;return a};function tv(a){if(null==a||0===a.length)return!1;var b=Number(a),c=Sa();return bc-9E5};var uv={};uv.je=new String("undefined"); -var xv=function(a,b,c){var d={event:b,"gtm.element":a,"gtm.elementClasses":Zb(a,"className"),"gtm.elementId":a["for"]||Ub(a,"id")||"","gtm.elementTarget":a.formTarget||Zb(a,"target")||""};c&&(d["gtm.triggers"]=c.join(","));d["gtm.elementUrl"]=(a.attributes&&a.attributes.formaction?a.formAction:"")||a.action||Zb(a,"href")||a.src||a.code||a.codebase||"";return d},yv=function(a){Qg.hasOwnProperty("autoEventsSettings")||(Qg.autoEventsSettings={});var b=Qg.autoEventsSettings;b.hasOwnProperty(a)||(b[a]= -{});return b[a]},zv=function(a,b,c){yv(a)[b]=c},Av=function(a,b,c,d){var e=yv(a),f=Ta(e,b,d);e[b]=c(f)},Bv=function(a,b,c){var d=yv(a);return Ta(d,b,c)},Cv=function(a){return"string"===typeof a?a:String(ch())};var Iv=!!z.MutationObserver,Jv=void 0,Kv=function(a){if(!Jv){var b=function(){var c=I.body;if(c)if(Iv)(new MutationObserver(function(){for(var e=0;e=p?0:Math.round(q/p*100),t=I.hidden?!1:.5<=vh(c);d();var u=void 0;void 0!==b&&(u=[b]);var v=xv(c,"gtm.video",u);v["gtm.videoProvider"]="youtube";v["gtm.videoStatus"]=g;v["gtm.videoUrl"]=n.url;v["gtm.videoTitle"]=n.title;v["gtm.videoDuration"]= -Math.round(p);v["gtm.videoCurrentTime"]=Math.round(q);v["gtm.videoElapsedTime"]=Math.round(f);v["gtm.videoPercent"]=r;v["gtm.videoVisible"]=t;return v},Yh:function(){e=Sa()},nc:function(){d()}}};var Wv=z.clearTimeout,Xv=z.setTimeout,V=function(a,b,c,d){if(Ej()){b&&J(b)}else return Ob(a,b,c,d)},Yv=function(){return new Date},Zv=function(){return z.location.href},$v=function(a){return Qh(Sh(a),"fragment")},aw=function(a){return Rh(Sh(a))},bw=function(a,b){return ih(a,b||2)},cw=function(a,b,c){return b?jv(a,b,c):iv(a)},dw=function(a,b){z[a]=b},W=function(a,b,c){b&&(void 0===z[a]||c&&!z[a])&&(z[a]=b);return z[a]}, -ew=function(a,b,c){return lj(a,b,void 0===c?!0:!!c)},fw=function(a,b,c){return 0===uj(a,b,c)},gw=function(a,b){if(Ej()){b&&J(b)}else Qb(a,b)},hw=function(a){return!!Bv(a,"init",!1)},iw=function(a){zv(a,"init",!0)},jw=function(a,b,c){Zo&&(tc(a)||mp(c,b,a))};var Hw=["matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector"];function Iw(a,b){a=String(a);b=String(b);var c=a.length-b.length;return 0<=c&&a.indexOf(b,c)===c}var Jw=new Ia;function Kw(a,b,c){var d=c?"i":void 0;try{var e=String(b)+d,f=Jw.get(e);f||(f=new RegExp(b,d),Jw.set(e,f));return f.test(a)}catch(g){return!1}} -function Lw(a,b){function c(g){var h=Sh(g),k=Qh(h,"protocol"),n=Qh(h,"host",!0),p=Qh(h,"port"),q=Qh(h,"path").toLowerCase().replace(/\/$/,"");if(void 0===k||"http"===k&&"80"===p||"https"===k&&"443"===p)k="web",p="default";return[k,n,p,q]}for(var d=c(String(a)),e=c(String(b)),f=0;f=Number(b)} -function Pw(a,b){return Number(a)<=Number(b)}function Qw(a,b){return Number(a)>Number(b)}function Rw(a,b){return Number(a)a[c]||b.push(a[c]);b.sort(function(d,e){return d-e});return b},Xy=function(a){a=void 0===a?[]:a;for(var b=[],c=0;ca[c]||(b[c]=a[c]/100);b.sort(function(d,e){return d- -e});return b},Yy=function(a,b){var c,d;function e(){t=Vv(function(){return{url:y,title:x,Ef:v,Gh:a.getCurrentTime(),playbackRate:w}},b.cb,a.getIframe());v=0;x=y="";w=1;return f}function f(D){switch(D){case 1:v=Math.round(a.getDuration());y=a.getVideoUrl();if(a.getVideoData){var G=a.getVideoData();x=G?G.title:""}w=a.getPlaybackRate();b.xf?iv(t.createEvent("start")):t.nc();u=Vy(b.ag,b.Zf,a.getDuration());return g(D);default:return f}}function g(){A=a.getCurrentTime();B=Ra().getTime();t.Yh();r();return h} -function h(D){var G;switch(D){case 0:return n(D);case 2:G="pause";case 3:var F=a.getCurrentTime()-A;G=1a.getDuration())return;D=(G.ra-a.getCurrentTime())/w;if(0>D&&(u.shift(),0===u.length))return}while(0>D);c=function(){d=0;c=p;0d.length?void 0:gz(c.getHitData(d[1]),d.slice(2));case "metadata":return 2>d.length?void 0:gz(c.getMetadata(d[1]),d.slice(2));case "eventName":return c.getEventName();case "destinationId":return c.getDestinationId();default:throw Error(e+" is not a valid field that can be accessed\n from PreHit data."); -}}throw Error("Unknown Namespace Type used:\n "+a.namespace_type);},iz=function(a,b){if(a){if(void 0!==a.context_value)return hz(a.context_value,b);if(void 0!==a.boolean_expression_value)return fz(a.boolean_expression_value,b);if(void 0!==a.boolean_value)return!!a.boolean_value;if(void 0!==a.string_value)return String(a.string_value);if(void 0!==a.integer_value)return Number(a.integer_value);if(void 0!==a.double_value)return Number(a.double_value);throw Error("Unknown field used for variable of type ExpressionValue:"+ -a);}},fz=function(a,b){var c=a.args;if(!Da(c)||0===c.length)throw Error('Invalid boolean expression format. Expected "args":'+c+" property to\n be non-empty array.");var d=function(g){return iz(g,b)};switch(a.type){case 1:for(var e=0;ed.vd+60*e))return a;var f=AA(b);if(!f)return a;f.vc=d.vc+1;var g;return null!=(g=BA(f.sessionId,f.vc,f.Dd,f.vd,f.Pf,f.Pb,f.jd))?g:b},FA=function(a,b){var c=b.metadata.cookie_options,d=DA(b,c),e=Cj(a,EA[0],c.domain,c.path);return 1!==uj(d,e,{ab:T.g.U,domain:c.domain,path:c.path,expires:c.Za?new Date(Sa()+1E3*c.Za):void 0,flags:c.flags})},GA=function(a){var b=a.metadata.cookie_options;return Bj(DA(a, -b),b.domain,b.path,EA,T.g.U)},BA=function(a,b,c,d,e,f,g){if(a&&b){var h=[a,b,Ma(c),d,e];h.push(f?"1":"0");h.push(g||"0");return h.join(".")}},EA=["GS1"],DA=function(a,b){return b.prefix+"_ga_"+a.target.I[0]},AA=function(a){if(a){var b=a.split(".");if(!(5>b.length||7b.length&&S(67),{sessionId:b[0],vc:Number(b[1]),Dd:!!Number(b[2]),vd:Number(b[3]),Pf:Number(b[4]||0),Pb:"1"===b[5],jd:"0"!==b[6]?b[6]:void 0}}},HA=function(a){return BA(a.C[T.g.Hb],a.C[T.g.cf],a.C[T.g.af],a.s,a.metadata.join_timer_sec|| -0,!!a.metadata[T.g.Ue],a.C[T.g.Uc])}; -var IA=function(a){var b=a.h(T.g.va),c=a.getRemoteConfig(T.g.va);if(c===b)return c;var d=L(b);c&&c[T.g.V]&&(d[T.g.V]=(d[T.g.V]||[]).concat(c[T.g.V]));return d},JA=function(a,b){var c=bl(!0);return"1"!==c._up?{}:{clientId:c[a],ai:c[b]}},KA=function(a,b,c){var d=bl(!0),e=d[b];e&&(wA(a,e,2),zA(e,a));var f=d[c];f&&FA(f,a);return!(!e||!f)},LA=!1,MA=function(a){var b=IA(a)||{},c=a.metadata.cookie_options,d=c.prefix+"_ga",e=DA(a,c);kl(b[T.g.cc],!!b[T.g.V])&&KA(a,d,e)&&(LA=!0);b[T.g.V]&&hl(function(){var f= -{},g=xA(a);g&&(f[d]=g);var h=GA(a);h&&(f[e]=h);var k=lj("FPLC",void 0,void 0,T.g.U);k.length&&(f._fplc=k[0]);return f},b[T.g.V],b[T.g.Yc],!!b[T.g.fc])},OA=function(a){if(!a.h(T.g.nb))return{};var b=a.metadata.cookie_options,c=b.prefix+"_ga",d=DA(a,b);il(function(){var e;if($i("analytics_storage"))e={};else{var f={};e=(f._up="1",f[c]=a.C[T.g.tb],f[d]=HA(a),f)}return e},1);return!$i("analytics_storage")&&NA()?JA(c,d):{}},NA=function(){var a=Ph(z.location,"host"),b=Ph(Sh(I.referrer),"host");return a&& -b?a===b||0<=a.indexOf("."+b)||0<=b.indexOf("."+a)?!0:!1:!1},PA=function(a){if(!a)return a;var b=String(a);b=al(b);return b=al(b,"_ga")};var QA=function(){var a=Sa(),b=a+864E5,c=20,d=5E3;return function(){var e=Sa();e>=b&&(b=e+864E5,d=5E3);if(1>d)return!1;c=Math.min(c+(e-a)/1E3*5,20);a=e;if(1>c)return!1;d--;c--;return!0}};var RA=function(a){return Qh(Sh(a.C[T.g.Wa]),"host",!0)},SA=!1;SA=!0;var TA=""+Ga(),UA=!1,VA=void 0; -var WA=function(a,b){if(iA(b)){var c=Cn();c&&(a.us_privacy=c);var d=uk();d&&(a.gdpr=d);var e=tk();e&&(a.gdpr_consent=e)}},XA=function(a,b){if(Ni()){a.gcs=aj();var c=b.metadata.is_consent_update;c&&(a.gcu="1");if(iA(b)){Oi()&&(a.gcd="G1"+Vi(Li));var d=b.h(T.g.ja);a.adr=void 0!==d&&!1!==d?"1":"0";c&&(a.gcut=Mg[b.metadata.consent_update_type||""])}}},YA=function(a,b,c){void 0===c&&(c={});if("object"===typeof b)for(var d in b)YA(a+"."+d,b[d],c);else c[a]=b;return c},aB=function(a){if(a.metadata.is_merchant_center)return"https://www.merchant-center-analytics.goog/mc/collect"; -var b=Nq(a.h(T.g.fa),"/g/collect");if(b)return b;var c=Cm(a,T.g.ub,a.h(T.g.ub));return c&&!Cm(a,T.g.Xc,!1)&&!1!==a.h(T.g.Jc)&&Is()&&$i(T.g.H)&&$i(T.g.U)?ZA():$A()},bB="region1",cB=!1;cB=!0;var dB={};dB[T.g.Si]="tid";dB[T.g.tb]= -"cid";dB[T.g.Ma]="ul";dB[T.g.Ve]="_fid";dB[T.g.df]="tt";dB[T.g.ee]="ir";dB[T.g.Fb]="sr";dB[T.g.bc]="gdid";dB[T.g.fe]="_rdi";dB[T.g.Lg]="_geo";dB[T.g.ph]="gtm_up";dB[T.g.oh]="_glv";var eB={};eB[T.g.Hb]="sid";eB[T.g.cf]="sct";eB[T.g.af]="seg";eB[T.g.Na]="dl";eB[T.g.Wa]="dr";eB[T.g.ic]="dt";eB[T.g.qa]="cu";eB[T.g.Ba]="uid";eB[T.g.Qd]="cc";eB[T.g.Rd]="ci";eB[T.g.Sd]="cm";eB[T.g.Td]="cn";eB[T.g.Ud]="cs";eB[T.g.Vd]="ck";var fB={};fB[T.g.Wd]="_et";fB[T.g.ac]="edid";var gB={};gB[T.g.Qd]="cc";gB[T.g.Rd]="ci";gB[T.g.Sd]="cm";gB[T.g.Td]= -"cn";gB[T.g.Ud]="cs";gB[T.g.Vd]="ck";var $A=function(){var a="www";cB&&bB&&(a=bB);return"https://"+a+".google-analytics.com/g/collect"},ZA=function(){var a;cB&&bB&&(a=bB);return"https://"+(a?a+".":"")+"analytics.google.com/g/collect"},hB=function(a,b,c){function d(x,w){if(void 0!==w&&!Bg.hasOwnProperty(x)){null===w&&(w="");var A;x!==T.g.Uc?A=!1:a.metadata.euid_mode_enabled?(e.ecid=w,A=!0):A=void 0;if(!A&&x!==T.g.Ue){var B=w;!0===w&&(B="1");!1===w&&(B="0");var C;if(dB[x])C=dB[x],e[C]=Se(B,420);else if(eB[x])C= -eB[x],g[C]=Se(B,420);else if(fB[x])C=fB[x],f[C]=Se(B,420);else if("_"===x.charAt(0))e[x]=Se(B,420);else{var D;(D=r(x,w))||(gB[x]?D=!0:x!==T.g.Oc?D=!1:("object"!==typeof w&&q(x,w),D=!0));D||q(x,w)}}}}var e={},f={},g={};e.v="2";e.tid=a.target.R;e.gtm=Oj();e._p=uA();c&&(e.em=c);a.metadata.create_google_join&&(e._gaz=1);XA(e,a);WA(e,a);var h=a.C[T.g.bc];h&&(e.gdid=h);f.en=Se(a.eventName,40);a.metadata.is_first_visit&&(f._fv=a.metadata.is_first_visit_conversion?2:1);a.metadata.is_new_to_site&&(f._nsi=1);a.metadata.is_session_start&&(f._ss=a.metadata.is_session_start_conversion?2:1);a.metadata.is_conversion&&(f._c=1);a.metadata.is_external_event&&(f._ee=1);if(a.metadata.is_ecommerce){var k=a.C[T.g.ca]|| -a.h(T.g.ca);if(Da(k))for(var n=0;nn;n++)f["pr"+(n+1)]=Xe(k[n])}var p=a.C[T.g.ac];p&&(f.edid=p);for(var q=function(x,w){x=Se(x,40);var A="ep."+x,B="epn."+x;x=Ca(w)?B:A;var C=Ca(w)?A:B;f.hasOwnProperty(C)&&delete f[C];f[x]=Se(w,100)},r=function(x,w){var A=x.split(".");if(x===T.g.Aa&&"object"!==typeof w)return q(x,w),!0;if(A[0]===T.g.Aa){if((1this.s){var f=z,g=f.setTimeout,h;iA(a)?sB?(sB=!1,h=tB):h=uB:h=5E3;this.s=g.call(f,function(){return c.flush()},h)}}else{var k=bf(d,this.F++); -oB(d.h,k.Xf,k.body,d.F);var n=a.metadata.create_dc_join,p=a.metadata.create_google_join,q=!1!==a.h(T.g.ya),r=!1!==a.h(T.g.ba),t={eventId:a.B.eventId,priorityId:a.B.priorityId},u={Ck:n,Dk:p,Mj:String(Cm(a,T.g.ce,a.h(T.g.ce))),lj:q,kj:r,Sj:Cm(a,T.g.Xc,!1),Rj:a.metadata.euid_mode_enabled,Wk:t};qB(d,u)}};rB.prototype.add=function(a){a.metadata.euid_mode_enabled&& -!lA?this.W(a):this.D(a)};rB.prototype.flush=function(){if(this.h.events.length){var a=cf(this.h,this.F++);oB(this.h.h,a.Xf,a.body,this.h.s);this.h=new $e;0<=this.s&&(z.clearTimeout(this.s),this.s=-1)}};rB.prototype.W=function(a){var b=this,c=jA(a);c?yg(c,function(d){b.D(a,1===d.split("~").length?void 0:d)}):this.D(a)};var nB=function(a,b,c){var d=a+"?"+b;c?Hb.sendBeacon&&Hb.sendBeacon(d,c):Yb(d)},tB=Pj('',500),uB=Pj('', -5E3),sB=!0;var vB=window,wB=document,xB=function(a){var b=vB._gaUserPrefs;if(b&&b.ioo&&b.ioo()||a&&!0===vB["ga-disable-"+a])return!0;try{var c=vB.external;if(c&&c._gaUserPrefs&&"oo"==c._gaUserPrefs)return!0}catch(f){}for(var d=fj("AMP_TOKEN",String(wB.cookie),!0),e=0;eO.vd+60*F&&(aa=!0,O.sessionId=String(a.s),O.vc++,O.Dd=!1,O.jd=void 0);if(aa)a.metadata.is_session_start=!0,C.Nj(a);else if(C.Kj()>N||a.eventName==T.g.Hc)O.Dd=!0;a.metadata.euid_mode_enabled?a.h(T.g.Ba)?O.Pb=!0:(O.Pb&&(O.jd=void 0),O.Pb=!1):O.Pb=!1;var R=O.jd;if(a.metadata.euid_mode_enabled){var K=a.h(T.g.Uc),Z=K? -1:8;K||(K=R,Z=4);K||(K=xj(),Z=7);var ba=Z,U=a.metadata.enhanced_client_id_source;if(void 0===U||ba<=U)a.C[T.g.Uc]=K.toString(),a.metadata.enhanced_client_id_source=ba}Bm(a,T.g.Hb,O.sessionId);Bm(a,T.g.cf,O.vc);Bm(a,T.g.af,O.Dd?1:0);a.metadata[T.g.Ue]=O.Pb?1:0;var na=a.h(T.g.tb),Ha=na?1:8;a.metadata.is_new_to_site=!1;na||(na=xA(a),Ha=3);na||(na=A,Ha=5);if(!na){var Ea=$i(T.g.U),Pa=tA();na=!Pa.from_cookie||Ea?Pa.vid:void 0;Ha=6}na?na=""+na:(na=yj(),Ha=7,a.metadata.is_first_visit=a.metadata.is_new_to_site= -!0);wA(a,na,Ha);JB(a);var bb="",bc=I.location;if(bc){var mc=bc.pathname||"";"/"!=mc.charAt(0)&&(mc="/"+mc);bb=bc.protocol+"//"+bc.hostname+mc+bc.search}Bm(a,T.g.Na,bb);var zf=T.g.Wa,zh;a:{var ot=lj("_opt_expid",void 0,void 0,T.g.U)[0];if(ot){var pt=decodeURIComponent(ot).split("$");if(3===pt.length){zh=pt[2];break a}}if(void 0!==Qg.ga4_referrer_override)zh=Qg.ga4_referrer_override;else{var qt=ih("gtm.gtagReferrer."+a.target.R);zh=qt?""+qt:I.referrer}}Bm(a,zf,zh||void 0);Bm(a,T.g.ic,I.title);Bm(a, -T.g.Ma,(Hb.language||"").toLowerCase());var rt=sh();Bm(a,T.g.Fb,rt.width+"x"+rt.height);a.metadata.create_dc_join=!1;a.metadata.create_google_join=!1;if(!a.metadata.is_merchant_center&&!1!==a.h(T.g.Jc)&&Is()&&$i(T.g.H)){var Ah=Cm(a,T.g.ub,a.h(T.g.ub));if(a.metadata.is_session_start||a.h(T.g.We)){a.metadata.create_dc_join=!!Ah;}var st;st=a.metadata.join_timer_sec;Ah&&0===(st||0)&&(a.metadata.join_timer_sec=60,a.metadata.create_google_join=!0)}KB(a);Gg.hasOwnProperty(a.eventName)&&(a.metadata.is_ecommerce=!0,Bm(a,T.g.ca),Bm(a,T.g.qa));Bm(a,T.g.df);for(var tt=a.h(T.g.Xe)||[],vl=0;vlc.indexOf(g))throw e(f,{},"Prohibited URL component: "+g);if("query"===g&&d){if(!h)throw e(f,{},"Prohibited from getting entire URL query when query keys are specified.");if(!m(h))throw e(f,{},"Query key must be a string.");if(0>d.indexOf(h))throw e(f,{},"Prohibited query key: "+h);}}else if(c)throw e(f,{},"Prohibited from getting entire URL when components are specified."); -},Z:a}})}(); - - -Y.m.gct=["google"],function(){function a(d){for(var e=[],f=0;fD.length){if(0===D.length)continue;break}w&&w[C]&&w[C].length&&we(D,w[C]);qC.execute(D)}if(void 0!==v)for(var G=["sandboxedScripts"],F=0;Fb[f].max)throw Error("Quota exceeded");b[f].we+=g}}var b={},c=void 0,d=void 0,e={hk:function(f){c=f},Dh:function(){c&&a(c,1)},jk:function(f){d=f},Mb:function(f){d&&a(d,f)},Gk:function(f,g){b[f]=b[f]||{we:0};b[f].max=g},Fj:function(f){return b[f]&&b[f].we||0},reset:function(){b={}},sj:a};e.onFnConsume=e.hk;e.consumeFn=e.Dh;e.onStorageConsume=e.jk;e.consumeStorage=e.Mb;e.setMax=e.Gk;e.getConsumed=e.Fj;e.reset=e.reset;e.consume=e.sj;return e};var xa=function(a,b){this.D=a;this.W=function(c,d,e){return c.apply(d,e)};this.F=b;this.s=new ra;this.h=this.N=void 0};xa.prototype.add=function(a,b){ya(this,a,b,!1)};var ya=function(a,b,c,d){if(!a.s.Ge())if(a.D.Mb(("string"===typeof b?b.length:1)+("string"===typeof c?c.length:1)),d){var e=a.s;e.set(b,c);e.N["dust."+b]=!0}else a.s.set(b,c)}; +xa.prototype.set=function(a,b){this.s.Ge()||(!this.s.has(a)&&this.F&&this.F.has(a)?this.F.set(a,b):(this.D.Mb(("string"===typeof a?a.length:1)+("string"===typeof b?b.length:1)),this.s.set(a,b)))};xa.prototype.get=function(a){return this.s.has(a)?this.s.get(a):this.F?this.F.get(a):void 0};xa.prototype.has=function(a){return!!this.s.has(a)||!(!this.F||!this.F.has(a))};var za=function(a){var b=new xa(a.D,a);a.N&&(b.N=a.N);b.W=a.W;b.h=a.h;return b};var Aa=function(){},Ba=function(a){return"function"===typeof a},m=function(a){return"string"===typeof a},Ca=function(a){return"number"===typeof a&&!isNaN(a)},Da=Array.isArray,Fa=function(a,b){if(a&&Da(a))for(var c=0;cb)a=0,b=2147483647;return Math.floor(Math.random()*(b-a+1)+a)},Ja=function(a,b){for(var c=new Ia,d=0;d"+a+"
");void 0!==c.tagName&&Gb(c);c.innerHTML=zb(d);b=b.lastChild;for(var e=[];b.firstChild;)e.push(b.removeChild(b.firstChild));return e},Xb=function(a,b,c){c=c||100;for(var d={},e=0;ee&&(e=Math.max(d+e,0));for(var f=e;fc?d+c:Math.min(c,e));for(var f=e;0<=f;f--)if(this.has(f)&&this.get(f)===b)return f;return-1},map:function(a,b){for(var c=this.length(),d=[],e=0;ed)throw Error("TypeError: ReduceRight on List with no elements.");}for(var h=f;0<=h;h--)this.has(h)&&(e=b.h(a,e,this.get(h),h,this));return e},reverse:function(){for(var a=sc(this),b=a.length-1,c=0;0<=b;b--,c++)a.hasOwnProperty(b)?this.set(c,a[b]):va(this,c);return this},shift:function(){return this.shift()},slice:function(a,b,c){var d=this.length();void 0===b&&(b=0);b=0>b?Math.max(d+b,0):Math.min(b,d);c=void 0===c?d:0>c? +Math.max(d+c,0):Math.min(c,d);c=Math.max(b,c);for(var e=[],f=b;fE(this, +b)},Zc=function(a,b){return E(this,a)>=E(this,b)},$c=function(a,b){a=E(this,a);b=E(this,b);a instanceof ic&&(a=a.Ta);b instanceof ic&&(b=b.Ta);return a===b},ad=function(a,b){return!$c.call(this,a,b)},bd=function(a,b,c){var d=[];E(this,a)?d=E(this,b):c&&(d=E(this,c));var e=gb(this.h,d);if(e instanceof pa)return e},ed=function(a,b){return E(this,a)>Number(E(this,b))},Bd=function(a,b){return Number(E(this,a))>>>Number(E(this,b))},Cd=function(a,b){return Number(E(this,a))&Number(E(this,b))},Ed=function(a,b){return Number(E(this,a))^Number(E(this,b))},Fd=function(a,b){return Number(E(this,a))|Number(E(this,b))};var Hd=function(){this.h=new jb;Gd(this)};Hd.prototype.execute=function(a){return Id(this.h.s(a))}; +var Jd=function(a,b,c){return Id(a.h.F(b,c))},Gd=function(a){var b=function(d,e){lb(a.h,d,String(e))};b("control",49);b("fn",51);b("list",7);b("map",8);b("undefined",44);var c=function(d,e){kb(a.h,String(d),e)};c(0,yc);c(1,zc);c(2,Ac);c(3,Bc);c(53,Cc);c(4,Dc);c(5,Fc);c(52,Gc);c(6,Hc);c(9,Fc);c(50,Ic);c(10,Jc);c(12,Kc);c(13,Lc);c(47,Oc);c(54,Pc);c(55,Qc);c(63,Vc);c(64,Sc);c(65,Tc);c(66,Uc);c(15,Wc);c(16,Xc);c(17,Xc);c(18,Yc);c(19,Zc);c(20,$c);c(21,ad);c(22,bd);c(23,ed);c(24,fd);c(25,gd);c(26,hd);c(27, +id);c(28,jd);c(29,kd);c(45,ld);c(30,md);c(32,nd);c(33,nd);c(34,od);c(35,od);c(46,pd);c(36,qd);c(43,rd);c(37,sd);c(38,td);c(39,ud);c(40,vd);c(41,wd);c(42,xd);c(58,yd);c(57,zd);c(60,Ad);c(61,Bd);c(56,Cd);c(62,Ed);c(59,Fd)};function Id(a){if(a instanceof pa||a instanceof db||a instanceof ua||a instanceof hb||a instanceof ic||null===a||void 0===a||"string"===typeof a||"number"===typeof a||"boolean"===typeof a)return a};var Kd=function(){var a=function(b){return{toString:function(){return b}}};return{li:a("consent"),Me:a("consent_always_fire"),mg:a("convert_case_to"),ng:a("convert_false_to"),og:a("convert_null_to"),pg:a("convert_true_to"),qg:a("convert_undefined_to"),Pk:a("debug_mode_metadata"),Ib:a("function"),rf:a("instance_name"),Yi:a("live_only"),Zi:a("malware_disabled"),aj:a("metadata"),dj:a("original_activity_id"),Sk:a("original_vendor_template_id"),Rk:a("once_on_load"),cj:a("once_per_event"),rh:a("once_per_load"), +Tk:a("priority_override"),Uk:a("respected_consent_types"),vh:a("setup_tags"),wh:a("tag_id"),xh:a("teardown_tags")}}();var fe; +var ge=[],he=[],ie=[],je=[],ke=[],le={},me,ne,oe,pe=function(a,b){var c={};c["function"]="__"+a;for(var d in b)b.hasOwnProperty(d)&&(c["vtp_"+d]=b[d]);return c},qe=function(a,b){var c=a["function"],d=b&&b.event;if(!c)throw Error("Error: No function name given for function call.");var e=le[c],f={},g;for(g in a)if(a.hasOwnProperty(g))if(0===g.indexOf("vtp_"))e&&d&&d.Ch&&d.Ch(a[g]),f[void 0!==e?g:g.substr(4)]=a[g];else if(g===Kd.Me.toString()&&a[g]){}e&&d&&d.Bh&&(f.vtp_gtmCachedValues=d.Bh);if(b){if(null==b.name){var h;a:{var k=b.index;if(null==k)h="";else{var n;switch(b.type){case 2:n=ge[k];break;case 1:n=je[k];break;default:h="";break a}var p=n&&n[Kd.rf];h=p?String(p):""}}b.name=h}e&&(f.vtp_gtmEntityIndex=b.index,f.vtp_gtmEntityName=b.name)}return void 0!==e?e(f):fe(c,f,b)},se=function(a,b,c){c=c||[];var d={},e;for(e in a)a.hasOwnProperty(e)&&(d[e]=re(a[e],b,c));return d},re=function(a, +b,c){if(Da(a)){var d;switch(a[0]){case "function_id":return a[1];case "list":d=[];for(var e=1;ec&&(b["k"+c]=Ue(Se(e,40)),b["v"+c]=Ue(f),c++)});var d=[];Ka(b,function(e,f){d.push(""+e+f)});return d.join("~")},Ue=function(a){return(""+a).replace(/~/g,function(){return"~~"})}, +Te={item_id:"id",item_name:"nm",item_brand:"br",item_category:"ca",item_category2:"c2",item_category3:"c3",item_category4:"c4",item_category5:"c5",item_variant:"va",price:"pr",quantity:"qt",coupon:"cp",item_list_name:"ln",index:"lp",item_list_id:"li",discount:"ds",affiliation:"af",promotion_id:"pi",promotion_name:"pn",creative_name:"cn",creative_slot:"cs",location_id:"lo"},Ve={id:"id",name:"nm",brand:"br",variant:"va",list_name:"ln",list_position:"lp",list:"ln",position:"lp",creative:"cn"},We=["ca", +"c2","c3","c4","c5"];var Ye=function(a){var b=[];Ka(a,function(c,d){null!=d&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(String(d)))});return b.join("&")},Ze=function(a,b,c,d){this.Da=a.Da;this.Rb=a.Rb;this.yb=a.yb;this.h=b;this.F=c;this.D=Ye(a.Da);this.s=Ye(a.yb);this.N=this.s.length;if(d&&16384this.events.length&&16384>a.N+this.D,c=this.Da===a.D&&this.h===a.h&&this.s===a.F;return 0==this.events.length||b&&c}; +var af=function(a,b){Ka(a,function(c,d){null!=d&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(d))})},bf=function(a,b){var c=[];a.D&&c.push(a.D);b&&c.push("_s="+b);af(a.Rb,c);var d=!1;a.s&&(c.push(a.s),d=!0);var e=c.join("&"),f="",g=e.length+a.h.length+1;d&&2048y&&(v=w,y=B)});x==c.length&&(g[t]=v)});af(g,d);b&&d.push("_s="+b);for(var h=d.join("&"),k=[],n={},p=0;pe?c.push(e):2048>e?c.push(192|e>>6,128|e&63):55296>e||57344<=e?c.push(224|e>>12,128|e>>6&63,128|e&63):(e=65536+((e&1023)<<10|a.charCodeAt(++d)&1023),c.push(240|e>>18,128|e>>12&63,128|e>>6&63,128|e&63))}b=new Uint8Array(c)}return b},mg=/[0-9`~!@#$%^&*()_\-+=:;<>,.?|/\\[\]]/g,pg=/^\S+@\S+\.\S+$/,ng=/^\+\d{10,15}$/,ig=/[.~]/g,vg={},wg=(vg.email="em",vg.phone_number= +"pn",vg.first_name="fn",vg.last_name="ln",vg.street="sa",vg.city="ct",vg.region="rg",vg.country="co",vg.postal_code="pc",vg.error_code="ec",vg),xg=function(a,b){function c(q,r,t,u){var v=null==q?"":m(q)?Qa(String(q)):"e0";""!==v&&g.push({name:r,value:t(v),index:u})}function d(q,r,t){var u=q[r];Da(u)||(u=[u]);for(var v=0;v=f)return!0;(d=d.parentElement)&&(e=z.getComputedStyle(d,null))}return!1}; +var uh=function(){var a=I.body,b=I.documentElement||a&&a.parentElement,c,d;if(I.compatMode&&"BackCompat"!==I.compatMode)c=b?b.clientHeight:0,d=b?b.clientWidth:0;else{var e=function(f,g){return f&&g?Math.min(f,g):Math.max(f,g)};S(7);c=e(b?b.clientHeight:0,a?a.clientHeight:0);d=e(b?b.clientWidth:0,a?a.clientWidth:0)}return{width:d,height:c}},vh=function(a){var b=uh(),c=b.height,d=b.width,e=a.getBoundingClientRect(),f=e.bottom-e.top,g=e.right-e.left;return f&&g?(1-Math.min((Math.max(0-e.left,0)+Math.max(e.right- +d,0))/g,1))*(1-Math.min((Math.max(0-e.top,0)+Math.max(e.bottom-c,0))/f,1)):0};var wh=[],xh=!(!z.IntersectionObserver||!z.IntersectionObserverEntry),yh=function(a,b,c){for(var d=new z.IntersectionObserver(a,{threshold:c}),e=0;ee[h])for(;f[h]=c[f[h]+1];)d(b[h],k),f[h]++;else if(kc[d]&&(c[d]=0);if(xh){var e=!1;J(function(){e|| +Jh(a,b,c)()});return yh(function(f){e=!0;for(var g={xc:0};g.xcc?a.href:a.href.substr(0,c)}return b},Sh=function(a){var b=I.createElement("a");a&&(b.href=a);var c=b.pathname;"/"!==c[0]&&(a||fg("TAGGING",1),c="/"+c);var d=b.hostname.replace(Mh,"");return{href:b.href,protocol:b.protocol,host:b.host,hostname:d,pathname:c,search:b.search,hash:b.hash,port:b.port}},Th=function(a){function b(n){var p=n.split("=")[0];return 0>d.indexOf(p)?n:p+"=0"}function c(n){return n.split("&").map(b).filter(function(p){return void 0!== +p}).join("&")}var d="gclid dclid gbraid wbraid gclaw gcldc gclha gclgf gclgb _gl".split(" "),e=Sh(a),f=a.split(/[?#]/)[0],g=e.search,h=e.hash;"?"===g[0]&&(g=g.substring(1));"#"===h[0]&&(h=h.substring(1));g=c(g);h=c(h);""!==g&&(g="?"+g);""!==h&&(h="#"+h);var k=""+f+g+h;"/"===k[k.length-1]&&(k=k.substring(0,k.length-1));return k};var Uh={}; +var Wh=function(a,b,c){if(a){var d=a.element,e={Sa:a.Sa,tagName:d.tagName,type:1};b&&(e.querySelector=Vh(d));c&&(e.isVisible=!th(d));return e}},Zh=function(a){if(0!=a.length){var b;b=Xh(a,function(c){return!Yh.test(c.Sa)});b=Xh(b,function(c){return"INPUT"===c.element.tagName.toUpperCase()});b=Xh(b,function(c){return!th(c.element)});return b[0]}},Xh=function(a,b){if(1>=a.length)return a;var c=a.filter(b);return 0==c.length?a:c},Vh=function(a){var b;if(a===I.body)b="body";else{var c;if(a.id)c="#"+a.id; +else{var d;if(a.parentElement){var e;a:{var f=a.parentElement;if(f){for(var g=0;g:nth-child("+e+")"}else d="";c=d}b=c}return b},$h=!0,ai=!1;Uh.ji="false"; +var bi=function(a){if("false"===Uh.ji||!$h)return!1;if(ai)return!0;var b=rh("AW-"+a);return!!b&&!!b.preAutoPii},ci=new RegExp(/[A-Z0-9._%+-]+@[A-Z0-9.-]+\.[A-Z]{2,}/i),di=new RegExp(/@(gmail|googlemail)\./i),Yh=new RegExp(/support|noreply/i),ei="SCRIPT STYLE IMG SVG PATH BR NOSCRIPT TEXTAREA".split(" "),fi=["BR"],gi={},hi=function(a){a=a||{Nb:!0,Ob:!0};a.zb=a.zb||{email:!0,phone:!0,address:!0};var b,c=a,d=!!c.Nb+"."+!!c.Ob;c&&c.kd&&c.kd.length&&(d+="."+c.kd.join("."));c&&c.zb&&(d+="."+c.zb.email+ +"."+c.zb.phone+"."+c.zb.address);b=d;var e=gi[b];if(e&&200>Sa()-e.timestamp)return e.result;var f;var g=[],h=I.body;if(h){for(var k=h.querySelectorAll("*"),n=0;nn;n++){var p=k[n];if(!(0<=ei.indexOf(p.tagName.toUpperCase()))&&p.children instanceof HTMLCollection){for(var q=!1,r=0;rr;r++)if(!(0<=fi.indexOf(p.children[r].tagName.toUpperCase()))){q=!0;break}q||g.push(p)}}f={elements:g,status:1E4d&&S(66);Yi=c},$i=function(a){var b=Ki(a);return void 0!=b?b:!0},aj=function(){return"G1"+Vi(Ki)},bj=function(a, +b){Pi(a,b)},cj=function(a,b){Si(a,b)},dj=function(a,b){Ri(a,b)};var ej=function(a){var b=1,c,d,e;if(a)for(b=0,d=a.length-1;0<=d;d--)e=a.charCodeAt(d),b=(b<<6&268435455)+e+(e<<14),c=b&266338304,b=0!==c?b^c>>21:b;return b};var fj=function(a,b,c){for(var d=[],e=b.split(";"),f=0;fd)return null;var e=a.indexOf("&",d);if(0>e||e>c)e=c;d+=b.length+1;return decodeURIComponent(a.slice(d,-1!==e?e:0).replace(/\+/g," "))},Xj=/[?&]($|#)/,Yj=function(a,b,c){for(var d,e=a.search(Vj),f=0,g,h=[];0<=(g=Uj(a,f,b,e));)h.push(a.substring(f, +g)),f=Math.min(a.indexOf("&",g)+1||e,e);h.push(a.slice(f));d=h.join("").replace(Xj,"$1");var k,n=null!=c?"="+encodeURIComponent(String(c)):"";var p=b+n;if(p){var q,r=d.indexOf("#");0>r&&(r=d.length);var t=d.indexOf("?"),u;0>t||t>r?(t=r,u=""):u=d.substring(t+1,r);q=[d.slice(0,t),u,d.slice(r)];var v=q[1];q[1]=p?v?v+"&"+p:p:v;k=q[0]+(q[1]?"?"+q[1]:"")+q[2]}else k=d;return k};function Zj(a){if(!a||!I.head)return null;var b,c;c=void 0===c?document:c;b=c.createElement("meta");I.head.appendChild(b);b.httpEquiv="origin-trial";b.content=a;return b}var ak=function(){var a=z;if(a.top==a)return 0;var b=a.location.ancestorOrigins;if(b)return b[b.length-1]==a.location.origin?1:2;var c;var d=a.top;try{var e;if(e=!!d&&null!=d.location.href)b:{try{zi(d.foo);e=!0;break b}catch(f){}e=!1}c=e}catch(f){c=!1}return c?1:2};var bk=function(){};var ck=function(a){void 0!==a.addtlConsent&&"string"!==typeof a.addtlConsent&&(a.addtlConsent=void 0);void 0!==a.gdprApplies&&"boolean"!==typeof a.gdprApplies&&(a.gdprApplies=void 0);return void 0!==a.tcString&&"string"!==typeof a.tcString||void 0!==a.listenerId&&"number"!==typeof a.listenerId?2:a.cmpStatus&&"error"!==a.cmpStatus?0:3},dk=function(a,b,c){this.s=a;this.h=null;this.N={};this.Ua=0;this.W=void 0===b?500:b;this.F=void 0===c?!1:c;this.D=null};la(dk,bk); +dk.prototype.addEventListener=function(a){var b=this,c={internalBlockOnErrors:this.F},d=hj(function(){return a(c)}),e=0;-1!==this.W&&(e=setTimeout(function(){c.tcString="tcunavailable";c.internalErrorState=1;d()},this.W));var f=function(g,h){clearTimeout(e);g?(c=g,c.internalErrorState=ck(c),c.internalBlockOnErrors=b.F,h&&0===c.internalErrorState||(c.tcString="tcunavailable",h||(c.internalErrorState=3))):(c.tcString="tcunavailable",c.internalErrorState=3);a(c)};try{ek(this,"addEventListener",f)}catch(g){c.tcString= +"tcunavailable",c.internalErrorState=3,e&&(clearTimeout(e),e=0),d()}};dk.prototype.removeEventListener=function(a){a&&a.listenerId&&ek(this,"removeEventListener",null,a.listenerId)}; +var gk=function(a,b,c){var d;d=void 0===d?"755":d;var e;a:{if(a.publisher&&a.publisher.restrictions){var f=a.publisher.restrictions[b];if(void 0!==f){e=f[void 0===d?"755":d];break a}}e=void 0}var g=e;if(0===g)return!1;var h=c;2===c?(h=0,2===g&&(h=1)):3===c&&(h=1,1===g&&(h=0));var k;if(0===h)if(a.purpose&&a.vendor){var n=fk(a.vendor.consents,void 0===d?"755":d);k=n&&"1"===b&&a.purposeOneTreatment&&"CH"===a.publisherCC?!0:n&&fk(a.purpose.consents,b)}else k=!0;else k=1===h?a.purpose&&a.vendor?fk(a.purpose.legitimateInterests, +b)&&fk(a.vendor.legitimateInterests,void 0===d?"755":d):!0:!0;return k},fk=function(a,b){return!(!a||!a[b])},ek=function(a,b,c,d){c||(c=function(){});if("function"===typeof a.s.__tcfapi){var e=a.s.__tcfapi;e(b,2,c,d)}else if(hk(a)){ik(a);var f=++a.Ua;a.N[f]=c;if(a.h){var g={};a.h.postMessage((g.__tcfapiCall={command:b,version:2,callId:f,parameter:d},g),"*")}}else c({},!1)},hk=function(a){if(a.h)return a.h;var b;a:{for(var c=a.s,d=0;50>d;++d){var e;try{e=!(!c.frames||!c.frames.__tcfapiLocator)}catch(h){e= +!1}if(e){b=c;break a}var f;b:{try{var g=c.parent;if(g&&g!=c){f=g;break b}}catch(h){}f=null}if(!(c=f))break}b=null}a.h=b;return a.h},ik=function(a){a.D||(a.D=function(b){try{var c;c=("string"===typeof b.data?JSON.parse(b.data):b.data).__tcfapiReturn;a.N[c.callId](c.returnValue,c.success)}catch(d){}},Qj(a.s,a.D))};var jk=!0;jk=!1;var kk={1:0,3:0,4:0,7:3,9:3,10:3},lk=Pj("",550),mk=Pj("",500);function nk(){var a=Qg.tcf||{};return Qg.tcf=a} +var sk=function(){var a=nk(),b=new dk(z,jk?3E3:-1);if(!0===z.gtag_enable_tcf_support&&!a.active&&("function"===typeof z.__tcfapi||"function"===typeof b.s.__tcfapi||null!=hk(b))){a.active=!0;a.Bd={};ok();var c=null;jk?c=z.setTimeout(function(){pk(a);qk(a);c=null},mk):a.tcString="tcunavailable";try{b.addEventListener(function(d){c&&(clearTimeout(c),c=null);if(0!==d.internalErrorState)pk(a),qk(a);else{var e;a.gdprApplies=d.gdprApplies;if(!1===d.gdprApplies)e=rk(),b.removeEventListener(d);else if("tcloaded"=== +d.eventStatus||"useractioncomplete"===d.eventStatus||"cmpuishown"===d.eventStatus){var f={},g;for(g in kk)if(kk.hasOwnProperty(g))if("1"===g){var h=d,k=!0;k=void 0===k?!1:k;var n;var p=h;!1===p.gdprApplies?n=!0:(void 0===p.internalErrorState&&(p.internalErrorState=ck(p)),n="error"===p.cmpStatus||0!==p.internalErrorState?!p.internalBlockOnErrors:"loaded"!==p.cmpStatus||"tcloaded"!==p.eventStatus&&"useractioncomplete"!==p.eventStatus?!1:!0);f["1"]=n?!1===h.gdprApplies||"tcunavailable"===h.tcString|| +void 0===h.gdprApplies&&!k||"string"!==typeof h.tcString||!h.tcString.length?!0:gk(h,"1",0):!1}else f[g]=gk(d,g,kk[g]);e=f}e&&(a.tcString=d.tcString||"tcempty",a.Bd=e,qk(a))}})}catch(d){c&&(clearTimeout(c),c=null),pk(a),qk(a)}}};function pk(a){a.type="e";a.tcString="tcunavailable";jk&&(a.Bd=rk())}function ok(){var a={},b=(a.ad_storage="denied",a.wait_for_update=lk,a);Xi(b)}function rk(){var a={},b;for(b in kk)kk.hasOwnProperty(b)&&(a[b]=!0);return a} +function qk(a){var b={},c=(b.ad_storage=a.Bd["1"]?"granted":"denied",b);Zi(c,{eventId:0},{gdprApplies:a?a.gdprApplies:void 0,tcString:tk()})}var tk=function(){var a=nk();return a.active?a.tcString||"":""},uk=function(){var a=nk();return a.active&&void 0!==a.gdprApplies?a.gdprApplies?"1":"0":""},vk=function(a){if(!kk.hasOwnProperty(String(a)))return!0;var b=nk();return b.active&&b.Bd?!!b.Bd[String(a)]:!0};function wk(a,b,c,d){var e,f=Number(null!=a.Za?a.Za:void 0);0!==f&&(e=new Date((b||Sa())+1E3*(f||7776E3)));return{path:a.path,domain:a.domain,flags:a.flags,encode:!!c,expires:e,ab:d}};var xk=["1"],yk={},zk={},Bk=function(a){return yk[Ak(a)]},Ek=function(a,b){b=void 0===b?!0:b;var c=Ak(a.prefix);if(!yk[c]&&!Ck(c,a.path,a.domain)&&b){var d=Ak(a.prefix),e=yj();if(0===Dk(d,e,a)){var f=Jb("google_tag_data",{});f._gcl_au?fg("GTM",57):f._gcl_au=e}Ck(c,a.path,a.domain)}};function Dk(a,b,c,d){var e=Cj(b,"1",c.domain,c.path),f=wk(c,d);f.ab="ad_storage";return uj(a,e,f)} +function Ck(a,b,c){var d=Bj(a,b,c,xk,"ad_storage");if(!d)return!1;var e=d.split(".");5===e.length?(yk[a]=e.slice(0,2).join("."),zk[a]={id:e.slice(2,4).join("."),Nh:Number(e[4])||0}):3===e.length?zk[a]={id:e.slice(0,2).join("."),Nh:Number(e[2])||0}:yk[a]=d;return!0}function Ak(a){return(a||"_gcl")+"_au"};function Fk(){for(var a=Gk,b={},c=0;c>4);64!=g&&(c+=String.fromCharCode(f<<4&240|g>>2),64!=h&&(c+=String.fromCharCode(g<<6&192|h)))}};var Kk;var Ok=function(){var a=Lk,b=Mk,c=Nk(),d=function(g){a(g.target||g.srcElement||{})},e=function(g){b(g.target||g.srcElement||{})};if(!c.init){Sb(I,"mousedown",d);Sb(I,"keyup",d);Sb(I,"submit",e);var f=HTMLFormElement.prototype.submit;HTMLFormElement.prototype.submit=function(){b(this);f.call(this)};c.init=!0}},Pk=function(a,b,c,d,e){var f={callback:a,domains:b,fragment:2===c,placement:c,forms:d,sameHost:e};Nk().decorators.push(f)},Qk=function(a,b,c){for(var d=Nk().decorators,e={},f=0;f>2,y=(r&3)<<4|t>>4,x=(t&15)<<2|u>>6,w=u&63;q||(w=64,p||(x=64));k.push(Gk[v],Gk[y],Gk[x],Gk[w])}g=k.join("");f.call(e,g)}}var A=b.join("*");return["1",Wk(A), +A].join("*")};function Wk(a,b){var c=[z.navigator.userAgent,(new Date).getTimezoneOffset(),Hb.userLanguage||Hb.language,Math.floor(Sa()/60/1E3)-(void 0===b?0:b),a].join("*"),d;if(!(d=Kk)){for(var e=Array(256),f=0;256>f;f++){for(var g=f,h=0;8>h;h++)g=g&1?g>>>1^3988292384:g>>>1;e[f]=g}d=e}Kk=d;for(var k=4294967295,n=0;n>>8^Kk[(k^c.charCodeAt(n))&255];return((k^-1)>>>0).toString(36)} +function Yk(){return function(a){var b=Sh(z.location.href),c=b.search.replace("?",""),d=Nh(c,"_gl",!1,!0)||"";a.query=Zk(d)||{};var e=Qh(b,"fragment").match(Vk("_gl"));a.fragment=Zk(e&&e[3]||"")||{}}}function $k(a,b){var c=Vk(a).exec(b),d=b;if(c){var e=c[2],f=c[4];d=c[1];f&&(d=d+e+f)}return d} +var al=function(a,b){b||(b="_gl");var c=Uk.exec(a);if(!c)return"";var d=c[1],e=$k(b,(c[2]||"").slice(1)),f=$k(b,(c[3]||"").slice(1));e.length&&(e="?"+e);f.length&&(f="#"+f);return""+d+e+f},bl=function(a){var b=Yk(),c=Nk();c.data||(c.data={query:{},fragment:{}},b(c.data));var d={},e=c.data;e&&(Va(d,e.query),a&&Va(d,e.fragment));return d},Zk=function(a){try{var b=cl(a,3);if(void 0!==b){for(var c={},d=b?b.split("*"):[],e=0;e+1e;++e){var f=Rk.exec(d);if(f){c=f;break a}d=decodeURIComponent(d)}c=void 0}var g=c;if(g&&"1"===g[1]){var h=g[3],k;a:{for(var n=g[2],p=0;pf.length||!b&&3!==f.length)&&Number(f[1])){d[c[e].hg]||(d[c[e].hg]=[]);var g={version:f[0],timestamp:1E3*Number(f[1]),la:f[2]};b&&3p){n=!0;break b}n=!1}if(!n){var t=wk(b,k,!0);t.ab="ad_storage";uj(g,h,t)}}}}Rl(Pl(c.gclid,c.gclsrc),!1,b)})},Tl=function(a,b){var c=ql[a];if(void 0!==c)return b+c},Ul=function(a){return 0!==Wl(a.split(".")).length?1E3*(Number(a.split(".")[1])|| +0):0};function Ll(a){var b=Wl(a.split("."));return 0===b.length?null:{version:b[0],la:b[2],timestamp:1E3*(Number(b[1])||0),labels:b.slice(3)}}function Wl(a){return 3>a.length||"GCL"!==a[0]&&"1"!==a[0]||!/^\d+$/.test(a[1])||!pl.test(a[2])?[]:a} +var Xl=function(a,b,c,d,e){if(Da(b)&&ij(z)){var f=Ol(e),g=function(){for(var h={},k=0;kb};var im=/[A-Z]+/,jm=/\s/,km=function(a){if(m(a)){a=Qa(a);var b=a.indexOf("-");if(!(0>b)){var c=a.substring(0,b);if(im.test(c)){for(var d=a.substring(b+1).split("/"),e=0;eh;h++){var k=g[h].src;if(k){k=k.toLowerCase();if(0===k.indexOf(e)){b=3;break a}1===f&&0===k.indexOf(d)&&(f=2)}}b=f}else b=a;return b};var Am=function(a,b,c){this.target=a;this.eventName=b;this.B=c;this.C={};this.metadata=L(c.eventMetadata||{});this.T=!1},Bm=function(a,b,c){var d=a.B.getWithConfig(b);void 0!==d?a.C[b]=d:void 0!==c&&(a.C[b]=c)},Cm=function(a,b,c){var d=rh(a.target.R);return d&&d.hasOwnProperty(b)?d[b]:c};function Dm(a){return{getDestinationId:function(){return a.target.R},getEventName:function(){return a.eventName},setEventName:function(b){return void(a.eventName=b)},getHitData:function(b){return a.C[b]},setHitData:function(b,c){return void(a.C[b]=c)},setHitDataIfNotDefined:function(b,c){void 0===a.C[b]&&(a.C[b]=c)},copyToHitData:function(b,c){Bm(a,b,c)},getMetadata:function(b){return a.metadata[b]},setMetadata:function(b,c){return void(a.metadata[b]=c)},abort:function(){return void(a.T=!0)},getProcessedEvent:function(){return a}}} +;var Fm=function(a){var b=Em[a.target.R];if(!a.T&&b)for(var c=Dm(a),d=0;de?b[c++]=e:(2048>e?b[c++]=e>>6|192:(55296==(e&64512)&&d+1>18|240,b[c++]=e>>12&63|128):b[c++]=e>>12|224,b[c++]=e>>6&63|128),b[c++]=e&63|128)}return b};vb();Rj()||ub("iPod");ub("iPad");!ub("Android")||wb()||vb()||ub("Opera")||ub("Silk");wb();!ub("Safari")||wb()||ub("Coast")||ub("Opera")||ub("Edge")||ub("Edg/")||ub("OPR")||vb()||ub("Silk")||ub("Android")||Sj();var an={},bn=null,cn=function(a){for(var b=[],c=0,d=0;d>=8);b[c++]=e}var f=4;void 0===f&&(f=0);if(!bn){bn={};for(var g="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789".split(""),h=["+/=","+/","-_=","-_.","-_"],k=0;5>k;k++){var n=g.concat(h[k].split(""));an[k]=n;for(var p=0;p>2],C=r[(x&3)<<4|w>>4],D=r[(w&15)<<2|A>>6],G=r[A&63];t[y++]=""+B+C+D+G}var F=0,Q=u;switch(b.length-v){case 2:F=b[v+1],Q=r[(F&15)<<2]||u;case 1:var N=b[v];t[y]=""+r[N>>2]+r[(N&3)<<4|F>>4]+Q+u}return t.join("")};var dn="platform platformVersion architecture model uaFullVersion bitness fullVersionList wow64".split(" ");function en(a){var b;return null!=(b=a.google_tag_data)?b:a.google_tag_data={}}function fn(){var a=z.google_tag_data,b;if(null!=a&&a.uach){var c=a.uach,d=Object.assign({},c);c.fullVersionList&&(d.fullVersionList=c.fullVersionList.slice(0));b=d}else b=null;return b} +function gn(){var a=z,b,c;if("function"!==typeof(null==(b=a.navigator)?void 0:null==(c=b.userAgentData)?void 0:c.getHighEntropyValues))return null;var d=en(a);if(d.uach_promise)return d.uach_promise;var e=a.navigator.userAgentData.getHighEntropyValues(dn).then(function(f){null!=d.uach||(d.uach=f);return f});return d.uach_promise=e};var hn=!1,jn=function(a,b,c){c=void 0===c?!1:c;b.C[T.g.ef]=a.architecture;b.C[T.g.ff]=a.bitness;a.fullVersionList&&(b.C[T.g.hf]=a.fullVersionList.map(function(d){return encodeURIComponent(d.brand||"")+";"+encodeURIComponent(d.version||"")}).join("|"));c&&(b.C[T.g.dh]=a.mobile?"1":"0");b.C[T.g.jf]=a.model;b.C[T.g.kf]=a.platform;b.C[T.g.lf]=a.platformVersion;b.C[T.g.nf]=a.wow64?"1":"0"};function kn(){return"attribution-reporting"}function ln(a){var b;b=void 0===b?document:b;var c;return!(null==(c=b.featurePolicy)||!c.allowedFeatures().includes(a))};var mn=!1;function nn(){if(ln("join-ad-interest-group")&&Ba(Hb.joinAdInterestGroup))return!0;mn||(Zj('A7bG5hJ4XpMV5a3V1wwAR0PalkFSxLOZeL9D/YBYdupYUIgUgGhfVJ1zBFOqGybb7gRhswfJ+AmO7S2rNK2IOwkAAAB7eyJvcmlnaW4iOiJodHRwczovL3d3dy5nb29nbGV0YWdtYW5hZ2VyLmNvbTo0NDMiLCJmZWF0dXJlIjoiUHJpdmFjeVNhbmRib3hBZHNBUElzIiwiZXhwaXJ5IjoxNjY5NzY2Mzk5LCJpc1RoaXJkUGFydHkiOnRydWV9'),mn=!0);return ln("join-ad-interest-group")&&Ba(Hb.joinAdInterestGroup)} +function on(a,b){var c=void 0;try{c=I.querySelector('iframe[data-tagging-id="'+b+'"]')}catch(e){}if(c){var d=Number(c.dataset.loadTime);if(d&&6E4>Sa()-d){fg("TAGGING",9);return}}else try{if(50<=I.querySelectorAll('iframe[allow="join-ad-interest-group"][data-tagging-id*="-"]').length){fg("TAGGING",10);return}}catch(e){}Qb(a,void 0,{allow:"join-ad-interest-group"},{taggingId:b,loadTime:Sa()},c)};var pn=RegExp("^UA-\\d+-\\d+%3A[\\w-]+(?:%2C[\\w-]+)*(?:%3BUA-\\d+-\\d+%3A[\\w-]+(?:%2C[\\w-]+)*)*$"),qn=/^~?[\w-]+(?:\.~?[\w-]+)*$/,rn=/^\d+\.fls\.doubleclick\.net$/,sn=/;gac=([^;?]+)/,tn=/;gacgb=([^;?]+)/,un=/;gclaw=([^;?]+)/,vn=/;gclgb=([^;?]+)/; +function wn(a,b){if(rn.test(I.location.host)){var c=I.location.href.match(b);return c&&2==c.length&&c[1].match(pn)?decodeURIComponent(c[1]):""}var d=[],e;for(e in a){for(var f=[],g=a[e],h=0;h=Jo--))S(1),Ho[ko]=!0;else{void 0===oo[ko]&&Io.uk();var b=yo(!0,a);a?Yb(b):Rb(b);if(Ko||Lo&&0c.indexOf(h))if(k&&0c.indexOf(k[q])){S(11);p=!1;break a}}else{p=!1;break a}p=!0}n=p}var r=!1;if(d){var t=0<=e.indexOf(h);if(t)r=t;else{var u=Ja(e,k||[]);u&&S(10);r=u}}var v=!n||r;v||!(0<=k.indexOf("sandboxedScripts"))||c&&-1!==c.indexOf("sandboxedScripts")||(v=Ja(e,Sp));return f[h]=v}},Up=function(){return Pp.test(z.location&&z.location.hostname)};var Wp={initialized:11,complete:12,interactive:13},Xp={},Yp=Object.freeze((Xp[T.g.za]=!0,Xp)),Zp=0<=I.location.search.indexOf("?gtm_diagnostics=")||0<=I.location.search.indexOf(">m_diagnostics="),aq=function(a,b,c){if("config"!==a||1dq){dq++;try{I.documentElement.doScroll("left"),fq()}catch(a){z.setTimeout(gq,50)}}}var hq=function(a){cq?a():eq.push(a)};var iq=function(){this.N=0;this.h={}};iq.prototype.s=function(a,b,c){var d=++this.N;this.h[a]=this.h[a]||{};this.h[a][String(d)]={listener:b,cb:c};return d};iq.prototype.D=function(a,b){var c=this.h[a],d=String(b);if(!c||!c[d])return!1;delete c[d];return!0};iq.prototype.F=function(a,b){var c=[];Ka(this.h[a],function(d,e){0>c.indexOf(e.listener)&&(void 0===e.cb||0<=b.indexOf(e.cb))&&c.push(e.listener)});return c};var jq=function(a,b,c){return{entityType:a,indexInOriginContainer:b,nameInOriginContainer:c,originContainerId:He.O}};var lq=function(a,b){this.h=!1;this.F=[];this.N={tags:[]};this.W=!1;this.s=this.D=0;kq(this,a,b)},mq=function(a,b,c,d){if(Tg.hasOwnProperty(b)||"__zone"===b)return-1;var e={};pc(d)&&(e=L(d,e));e.id=c;e.status="timeout";return a.N.tags.push(e)-1},nq=function(a,b,c,d){var e=a.N.tags[b];e&&(e.status=c,e.executionTime=d)},oq=function(a){if(!a.h){for(var b=a.F,c=0;c=a.D&&oq(a)})},qq=function(a){a.W=!0;a.s>=a.D&&oq(a)};var rq=function(){function a(d){return!Ca(d)||0>d?0:d}if(!Qg._li&&z.performance&&z.performance.timing){var b=z.performance.timing.navigationStart,c=Ca(jh.get("gtm.start"))?jh.get("gtm.start"):0;Qg._li={cst:a(c-b),cbt:a($g-b)}}},sq=function(a){z.performance&&z.performance.mark(He.O+"_"+a+"_start")},tq=function(a){if(z.performance){var b=He.O+"_"+a+"_start",c=He.O+"_"+a+"_duration";z.performance.measure(c,b);var d=z.performance.getEntriesByName(c)[0];z.performance.clearMarks(b);z.performance.clearMeasures(c); +var e=Qg._p||{};void 0===e[a]&&(e[a]=d.duration,Qg._p=e);return d.duration}},uq=function(){if(z.performance&&z.performance.now){var a=Qg._p||{};a.PAGEVIEW=z.performance.now();Qg._p=a}};var vq={},wq=function(){return z.GoogleAnalyticsObject&&z[z.GoogleAnalyticsObject]},xq=!1; +function Aq(){return z.GoogleAnalyticsObject||"ga"} +var Bq=function(a){},Cq=function(a,b){return function(){var c=wq(),d=c&&c.getByName&&c.getByName(a);if(d){var e=d.get("sendHitTask");d.set("sendHitTask",function(f){var g=f.get("hitPayload"),h=f.get("hitCallback"),k=0>g.indexOf("&tid="+b);k&&(f.set("hitPayload",g.replace(/&tid=UA-[0-9]+-[0-9]+/,"&tid="+b),!0),f.set("hitCallback",void 0,!0));e(f);k&&(f.set("hitPayload", +g,!0),f.set("hitCallback",h,!0),f.set("_x_19",void 0,!0),e(f))})}}};function Hq(a,b,c,d){var e=je[a],f=Iq(a,b,c,d);if(!f)return null;var g=re(e[Kd.vh],c,[]);if(g&&g.length){var h=g[0];f=Hq(h.index,{onSuccess:f,onFailure:1===h.Ih?b.terminate:f,terminate:b.terminate},c,d)}return f} +function Iq(a,b,c,d){function e(){if(f[Kd.Zi])h();else{var y=se(f,c,[]),x=y[Kd.li];if(null!=x)for(var w=0;we?1:dh?1:gd.indexOf(a)&&d.push(a)}},vu=function(a,b){b=String(b).split(",");for(var c=0;cd.indexOf(a)&&d.push(a)}},wu=function(a){for(var b=[],c=[],d={},e=0;ea.length)&&m(a[1])){var d={};if(2a.length)&&m(c)){var d;if(2n)for(S(4),c.pruned=!0;this.length>n;)this.shift();var p="boolean"!==typeof k||k;return ov()&&p};var e=b.slice(0).map(function(f){return a(f)});dv.push.apply(dv,e);if(rv()){J(qv)}},rv=function(){var a=!0;return a};function tv(a){if(null==a||0===a.length)return!1;var b=Number(a),c=Sa();return bc-9E5};var uv={};uv.je=new String("undefined"); +var xv=function(a,b,c){var d={event:b,"gtm.element":a,"gtm.elementClasses":Zb(a,"className"),"gtm.elementId":a["for"]||Ub(a,"id")||"","gtm.elementTarget":a.formTarget||Zb(a,"target")||""};c&&(d["gtm.triggers"]=c.join(","));d["gtm.elementUrl"]=(a.attributes&&a.attributes.formaction?a.formAction:"")||a.action||Zb(a,"href")||a.src||a.code||a.codebase||"";return d},yv=function(a){Qg.hasOwnProperty("autoEventsSettings")||(Qg.autoEventsSettings={});var b=Qg.autoEventsSettings;b.hasOwnProperty(a)||(b[a]= +{});return b[a]},zv=function(a,b,c){yv(a)[b]=c},Av=function(a,b,c,d){var e=yv(a),f=Ta(e,b,d);e[b]=c(f)},Bv=function(a,b,c){var d=yv(a);return Ta(d,b,c)},Cv=function(a){return"string"===typeof a?a:String(ch())};var Iv=!!z.MutationObserver,Jv=void 0,Kv=function(a){if(!Jv){var b=function(){var c=I.body;if(c)if(Iv)(new MutationObserver(function(){for(var e=0;e=p?0:Math.round(q/p*100),t=I.hidden?!1:.5<=vh(c);d();var u=void 0;void 0!==b&&(u=[b]);var v=xv(c,"gtm.video",u);v["gtm.videoProvider"]="youtube";v["gtm.videoStatus"]=g;v["gtm.videoUrl"]=n.url;v["gtm.videoTitle"]=n.title;v["gtm.videoDuration"]= +Math.round(p);v["gtm.videoCurrentTime"]=Math.round(q);v["gtm.videoElapsedTime"]=Math.round(f);v["gtm.videoPercent"]=r;v["gtm.videoVisible"]=t;return v},Yh:function(){e=Sa()},nc:function(){d()}}};var Wv=z.clearTimeout,Xv=z.setTimeout,V=function(a,b,c,d){if(Ej()){b&&J(b)}else return Ob(a,b,c,d)},Yv=function(){return new Date},Zv=function(){return z.location.href},$v=function(a){return Qh(Sh(a),"fragment")},aw=function(a){return Rh(Sh(a))},bw=function(a,b){return ih(a,b||2)},cw=function(a,b,c){return b?jv(a,b,c):iv(a)},dw=function(a,b){z[a]=b},W=function(a,b,c){b&&(void 0===z[a]||c&&!z[a])&&(z[a]=b);return z[a]}, +ew=function(a,b,c){return lj(a,b,void 0===c?!0:!!c)},fw=function(a,b,c){return 0===uj(a,b,c)},gw=function(a,b){if(Ej()){b&&J(b)}else Qb(a,b)},hw=function(a){return!!Bv(a,"init",!1)},iw=function(a){zv(a,"init",!0)},jw=function(a,b,c){Zo&&(tc(a)||mp(c,b,a))};var Hw=["matches","webkitMatchesSelector","mozMatchesSelector","msMatchesSelector","oMatchesSelector"];function Iw(a,b){a=String(a);b=String(b);var c=a.length-b.length;return 0<=c&&a.indexOf(b,c)===c}var Jw=new Ia;function Kw(a,b,c){var d=c?"i":void 0;try{var e=String(b)+d,f=Jw.get(e);f||(f=new RegExp(b,d),Jw.set(e,f));return f.test(a)}catch(g){return!1}} +function Lw(a,b){function c(g){var h=Sh(g),k=Qh(h,"protocol"),n=Qh(h,"host",!0),p=Qh(h,"port"),q=Qh(h,"path").toLowerCase().replace(/\/$/,"");if(void 0===k||"http"===k&&"80"===p||"https"===k&&"443"===p)k="web",p="default";return[k,n,p,q]}for(var d=c(String(a)),e=c(String(b)),f=0;f=Number(b)} +function Pw(a,b){return Number(a)<=Number(b)}function Qw(a,b){return Number(a)>Number(b)}function Rw(a,b){return Number(a)a[c]||b.push(a[c]);b.sort(function(d,e){return d-e});return b},Xy=function(a){a=void 0===a?[]:a;for(var b=[],c=0;ca[c]||(b[c]=a[c]/100);b.sort(function(d,e){return d- +e});return b},Yy=function(a,b){var c,d;function e(){t=Vv(function(){return{url:y,title:x,Ef:v,Gh:a.getCurrentTime(),playbackRate:w}},b.cb,a.getIframe());v=0;x=y="";w=1;return f}function f(D){switch(D){case 1:v=Math.round(a.getDuration());y=a.getVideoUrl();if(a.getVideoData){var G=a.getVideoData();x=G?G.title:""}w=a.getPlaybackRate();b.xf?iv(t.createEvent("start")):t.nc();u=Vy(b.ag,b.Zf,a.getDuration());return g(D);default:return f}}function g(){A=a.getCurrentTime();B=Ra().getTime();t.Yh();r();return h} +function h(D){var G;switch(D){case 0:return n(D);case 2:G="pause";case 3:var F=a.getCurrentTime()-A;G=1a.getDuration())return;D=(G.ra-a.getCurrentTime())/w;if(0>D&&(u.shift(),0===u.length))return}while(0>D);c=function(){d=0;c=p;0d.length?void 0:gz(c.getHitData(d[1]),d.slice(2));case "metadata":return 2>d.length?void 0:gz(c.getMetadata(d[1]),d.slice(2));case "eventName":return c.getEventName();case "destinationId":return c.getDestinationId();default:throw Error(e+" is not a valid field that can be accessed\n from PreHit data."); +}}throw Error("Unknown Namespace Type used:\n "+a.namespace_type);},iz=function(a,b){if(a){if(void 0!==a.context_value)return hz(a.context_value,b);if(void 0!==a.boolean_expression_value)return fz(a.boolean_expression_value,b);if(void 0!==a.boolean_value)return!!a.boolean_value;if(void 0!==a.string_value)return String(a.string_value);if(void 0!==a.integer_value)return Number(a.integer_value);if(void 0!==a.double_value)return Number(a.double_value);throw Error("Unknown field used for variable of type ExpressionValue:"+ +a);}},fz=function(a,b){var c=a.args;if(!Da(c)||0===c.length)throw Error('Invalid boolean expression format. Expected "args":'+c+" property to\n be non-empty array.");var d=function(g){return iz(g,b)};switch(a.type){case 1:for(var e=0;ed.vd+60*e))return a;var f=AA(b);if(!f)return a;f.vc=d.vc+1;var g;return null!=(g=BA(f.sessionId,f.vc,f.Dd,f.vd,f.Pf,f.Pb,f.jd))?g:b},FA=function(a,b){var c=b.metadata.cookie_options,d=DA(b,c),e=Cj(a,EA[0],c.domain,c.path);return 1!==uj(d,e,{ab:T.g.U,domain:c.domain,path:c.path,expires:c.Za?new Date(Sa()+1E3*c.Za):void 0,flags:c.flags})},GA=function(a){var b=a.metadata.cookie_options;return Bj(DA(a, +b),b.domain,b.path,EA,T.g.U)},BA=function(a,b,c,d,e,f,g){if(a&&b){var h=[a,b,Ma(c),d,e];h.push(f?"1":"0");h.push(g||"0");return h.join(".")}},EA=["GS1"],DA=function(a,b){return b.prefix+"_ga_"+a.target.I[0]},AA=function(a){if(a){var b=a.split(".");if(!(5>b.length||7b.length&&S(67),{sessionId:b[0],vc:Number(b[1]),Dd:!!Number(b[2]),vd:Number(b[3]),Pf:Number(b[4]||0),Pb:"1"===b[5],jd:"0"!==b[6]?b[6]:void 0}}},HA=function(a){return BA(a.C[T.g.Hb],a.C[T.g.cf],a.C[T.g.af],a.s,a.metadata.join_timer_sec|| +0,!!a.metadata[T.g.Ue],a.C[T.g.Uc])}; +var IA=function(a){var b=a.h(T.g.va),c=a.getRemoteConfig(T.g.va);if(c===b)return c;var d=L(b);c&&c[T.g.V]&&(d[T.g.V]=(d[T.g.V]||[]).concat(c[T.g.V]));return d},JA=function(a,b){var c=bl(!0);return"1"!==c._up?{}:{clientId:c[a],ai:c[b]}},KA=function(a,b,c){var d=bl(!0),e=d[b];e&&(wA(a,e,2),zA(e,a));var f=d[c];f&&FA(f,a);return!(!e||!f)},LA=!1,MA=function(a){var b=IA(a)||{},c=a.metadata.cookie_options,d=c.prefix+"_ga",e=DA(a,c);kl(b[T.g.cc],!!b[T.g.V])&&KA(a,d,e)&&(LA=!0);b[T.g.V]&&hl(function(){var f= +{},g=xA(a);g&&(f[d]=g);var h=GA(a);h&&(f[e]=h);var k=lj("FPLC",void 0,void 0,T.g.U);k.length&&(f._fplc=k[0]);return f},b[T.g.V],b[T.g.Yc],!!b[T.g.fc])},OA=function(a){if(!a.h(T.g.nb))return{};var b=a.metadata.cookie_options,c=b.prefix+"_ga",d=DA(a,b);il(function(){var e;if($i("analytics_storage"))e={};else{var f={};e=(f._up="1",f[c]=a.C[T.g.tb],f[d]=HA(a),f)}return e},1);return!$i("analytics_storage")&&NA()?JA(c,d):{}},NA=function(){var a=Ph(z.location,"host"),b=Ph(Sh(I.referrer),"host");return a&& +b?a===b||0<=a.indexOf("."+b)||0<=b.indexOf("."+a)?!0:!1:!1},PA=function(a){if(!a)return a;var b=String(a);b=al(b);return b=al(b,"_ga")};var QA=function(){var a=Sa(),b=a+864E5,c=20,d=5E3;return function(){var e=Sa();e>=b&&(b=e+864E5,d=5E3);if(1>d)return!1;c=Math.min(c+(e-a)/1E3*5,20);a=e;if(1>c)return!1;d--;c--;return!0}};var RA=function(a){return Qh(Sh(a.C[T.g.Wa]),"host",!0)},SA=!1;SA=!0;var TA=""+Ga(),UA=!1,VA=void 0; +var WA=function(a,b){if(iA(b)){var c=Cn();c&&(a.us_privacy=c);var d=uk();d&&(a.gdpr=d);var e=tk();e&&(a.gdpr_consent=e)}},XA=function(a,b){if(Ni()){a.gcs=aj();var c=b.metadata.is_consent_update;c&&(a.gcu="1");if(iA(b)){Oi()&&(a.gcd="G1"+Vi(Li));var d=b.h(T.g.ja);a.adr=void 0!==d&&!1!==d?"1":"0";c&&(a.gcut=Mg[b.metadata.consent_update_type||""])}}},YA=function(a,b,c){void 0===c&&(c={});if("object"===typeof b)for(var d in b)YA(a+"."+d,b[d],c);else c[a]=b;return c},aB=function(a){if(a.metadata.is_merchant_center)return"https://www.merchant-center-analytics.goog/mc/collect"; +var b=Nq(a.h(T.g.fa),"/g/collect");if(b)return b;var c=Cm(a,T.g.ub,a.h(T.g.ub));return c&&!Cm(a,T.g.Xc,!1)&&!1!==a.h(T.g.Jc)&&Is()&&$i(T.g.H)&&$i(T.g.U)?ZA():$A()},bB="region1",cB=!1;cB=!0;var dB={};dB[T.g.Si]="tid";dB[T.g.tb]= +"cid";dB[T.g.Ma]="ul";dB[T.g.Ve]="_fid";dB[T.g.df]="tt";dB[T.g.ee]="ir";dB[T.g.Fb]="sr";dB[T.g.bc]="gdid";dB[T.g.fe]="_rdi";dB[T.g.Lg]="_geo";dB[T.g.ph]="gtm_up";dB[T.g.oh]="_glv";var eB={};eB[T.g.Hb]="sid";eB[T.g.cf]="sct";eB[T.g.af]="seg";eB[T.g.Na]="dl";eB[T.g.Wa]="dr";eB[T.g.ic]="dt";eB[T.g.qa]="cu";eB[T.g.Ba]="uid";eB[T.g.Qd]="cc";eB[T.g.Rd]="ci";eB[T.g.Sd]="cm";eB[T.g.Td]="cn";eB[T.g.Ud]="cs";eB[T.g.Vd]="ck";var fB={};fB[T.g.Wd]="_et";fB[T.g.ac]="edid";var gB={};gB[T.g.Qd]="cc";gB[T.g.Rd]="ci";gB[T.g.Sd]="cm";gB[T.g.Td]= +"cn";gB[T.g.Ud]="cs";gB[T.g.Vd]="ck";var $A=function(){var a="www";cB&&bB&&(a=bB);return"https://"+a+".google-analytics.com/g/collect"},ZA=function(){var a;cB&&bB&&(a=bB);return"https://"+(a?a+".":"")+"analytics.google.com/g/collect"},hB=function(a,b,c){function d(x,w){if(void 0!==w&&!Bg.hasOwnProperty(x)){null===w&&(w="");var A;x!==T.g.Uc?A=!1:a.metadata.euid_mode_enabled?(e.ecid=w,A=!0):A=void 0;if(!A&&x!==T.g.Ue){var B=w;!0===w&&(B="1");!1===w&&(B="0");var C;if(dB[x])C=dB[x],e[C]=Se(B,420);else if(eB[x])C= +eB[x],g[C]=Se(B,420);else if(fB[x])C=fB[x],f[C]=Se(B,420);else if("_"===x.charAt(0))e[x]=Se(B,420);else{var D;(D=r(x,w))||(gB[x]?D=!0:x!==T.g.Oc?D=!1:("object"!==typeof w&&q(x,w),D=!0));D||q(x,w)}}}}var e={},f={},g={};e.v="2";e.tid=a.target.R;e.gtm=Oj();e._p=uA();c&&(e.em=c);a.metadata.create_google_join&&(e._gaz=1);XA(e,a);WA(e,a);var h=a.C[T.g.bc];h&&(e.gdid=h);f.en=Se(a.eventName,40);a.metadata.is_first_visit&&(f._fv=a.metadata.is_first_visit_conversion?2:1);a.metadata.is_new_to_site&&(f._nsi=1);a.metadata.is_session_start&&(f._ss=a.metadata.is_session_start_conversion?2:1);a.metadata.is_conversion&&(f._c=1);a.metadata.is_external_event&&(f._ee=1);if(a.metadata.is_ecommerce){var k=a.C[T.g.ca]|| +a.h(T.g.ca);if(Da(k))for(var n=0;nn;n++)f["pr"+(n+1)]=Xe(k[n])}var p=a.C[T.g.ac];p&&(f.edid=p);for(var q=function(x,w){x=Se(x,40);var A="ep."+x,B="epn."+x;x=Ca(w)?B:A;var C=Ca(w)?A:B;f.hasOwnProperty(C)&&delete f[C];f[x]=Se(w,100)},r=function(x,w){var A=x.split(".");if(x===T.g.Aa&&"object"!==typeof w)return q(x,w),!0;if(A[0]===T.g.Aa){if((1this.s){var f=z,g=f.setTimeout,h;iA(a)?sB?(sB=!1,h=tB):h=uB:h=5E3;this.s=g.call(f,function(){return c.flush()},h)}}else{var k=bf(d,this.F++); +oB(d.h,k.Xf,k.body,d.F);var n=a.metadata.create_dc_join,p=a.metadata.create_google_join,q=!1!==a.h(T.g.ya),r=!1!==a.h(T.g.ba),t={eventId:a.B.eventId,priorityId:a.B.priorityId},u={Ck:n,Dk:p,Mj:String(Cm(a,T.g.ce,a.h(T.g.ce))),lj:q,kj:r,Sj:Cm(a,T.g.Xc,!1),Rj:a.metadata.euid_mode_enabled,Wk:t};qB(d,u)}};rB.prototype.add=function(a){a.metadata.euid_mode_enabled&& +!lA?this.W(a):this.D(a)};rB.prototype.flush=function(){if(this.h.events.length){var a=cf(this.h,this.F++);oB(this.h.h,a.Xf,a.body,this.h.s);this.h=new $e;0<=this.s&&(z.clearTimeout(this.s),this.s=-1)}};rB.prototype.W=function(a){var b=this,c=jA(a);c?yg(c,function(d){b.D(a,1===d.split("~").length?void 0:d)}):this.D(a)};var nB=function(a,b,c){var d=a+"?"+b;c?Hb.sendBeacon&&Hb.sendBeacon(d,c):Yb(d)},tB=Pj('',500),uB=Pj('', +5E3),sB=!0;var vB=window,wB=document,xB=function(a){var b=vB._gaUserPrefs;if(b&&b.ioo&&b.ioo()||a&&!0===vB["ga-disable-"+a])return!0;try{var c=vB.external;if(c&&c._gaUserPrefs&&"oo"==c._gaUserPrefs)return!0}catch(f){}for(var d=fj("AMP_TOKEN",String(wB.cookie),!0),e=0;eO.vd+60*F&&(aa=!0,O.sessionId=String(a.s),O.vc++,O.Dd=!1,O.jd=void 0);if(aa)a.metadata.is_session_start=!0,C.Nj(a);else if(C.Kj()>N||a.eventName==T.g.Hc)O.Dd=!0;a.metadata.euid_mode_enabled?a.h(T.g.Ba)?O.Pb=!0:(O.Pb&&(O.jd=void 0),O.Pb=!1):O.Pb=!1;var R=O.jd;if(a.metadata.euid_mode_enabled){var K=a.h(T.g.Uc),Z=K? +1:8;K||(K=R,Z=4);K||(K=xj(),Z=7);var ba=Z,U=a.metadata.enhanced_client_id_source;if(void 0===U||ba<=U)a.C[T.g.Uc]=K.toString(),a.metadata.enhanced_client_id_source=ba}Bm(a,T.g.Hb,O.sessionId);Bm(a,T.g.cf,O.vc);Bm(a,T.g.af,O.Dd?1:0);a.metadata[T.g.Ue]=O.Pb?1:0;var na=a.h(T.g.tb),Ha=na?1:8;a.metadata.is_new_to_site=!1;na||(na=xA(a),Ha=3);na||(na=A,Ha=5);if(!na){var Ea=$i(T.g.U),Pa=tA();na=!Pa.from_cookie||Ea?Pa.vid:void 0;Ha=6}na?na=""+na:(na=yj(),Ha=7,a.metadata.is_first_visit=a.metadata.is_new_to_site= +!0);wA(a,na,Ha);JB(a);var bb="",bc=I.location;if(bc){var mc=bc.pathname||"";"/"!=mc.charAt(0)&&(mc="/"+mc);bb=bc.protocol+"//"+bc.hostname+mc+bc.search}Bm(a,T.g.Na,bb);var zf=T.g.Wa,zh;a:{var ot=lj("_opt_expid",void 0,void 0,T.g.U)[0];if(ot){var pt=decodeURIComponent(ot).split("$");if(3===pt.length){zh=pt[2];break a}}if(void 0!==Qg.ga4_referrer_override)zh=Qg.ga4_referrer_override;else{var qt=ih("gtm.gtagReferrer."+a.target.R);zh=qt?""+qt:I.referrer}}Bm(a,zf,zh||void 0);Bm(a,T.g.ic,I.title);Bm(a, +T.g.Ma,(Hb.language||"").toLowerCase());var rt=sh();Bm(a,T.g.Fb,rt.width+"x"+rt.height);a.metadata.create_dc_join=!1;a.metadata.create_google_join=!1;if(!a.metadata.is_merchant_center&&!1!==a.h(T.g.Jc)&&Is()&&$i(T.g.H)){var Ah=Cm(a,T.g.ub,a.h(T.g.ub));if(a.metadata.is_session_start||a.h(T.g.We)){a.metadata.create_dc_join=!!Ah;}var st;st=a.metadata.join_timer_sec;Ah&&0===(st||0)&&(a.metadata.join_timer_sec=60,a.metadata.create_google_join=!0)}KB(a);Gg.hasOwnProperty(a.eventName)&&(a.metadata.is_ecommerce=!0,Bm(a,T.g.ca),Bm(a,T.g.qa));Bm(a,T.g.df);for(var tt=a.h(T.g.Xe)||[],vl=0;vlc.indexOf(g))throw e(f,{},"Prohibited URL component: "+g);if("query"===g&&d){if(!h)throw e(f,{},"Prohibited from getting entire URL query when query keys are specified.");if(!m(h))throw e(f,{},"Query key must be a string.");if(0>d.indexOf(h))throw e(f,{},"Prohibited query key: "+h);}}else if(c)throw e(f,{},"Prohibited from getting entire URL when components are specified."); +},Z:a}})}(); + + +Y.m.gct=["google"],function(){function a(d){for(var e=[],f=0;fD.length){if(0===D.length)continue;break}w&&w[C]&&w[C].length&&we(D,w[C]);qC.execute(D)}if(void 0!==v)for(var G=["sandboxedScripts"],F=0;F -var klaroConfig = { - // With the 0.7.0 release we introduce a 'version' paramter that will make - // if easier for us to keep configuration files backwards-compatible in the future. - version: 1, - - // You can customize the ID of the DIV element that Klaro will create - // when starting up. If undefined, Klaro will use 'klaro'. - elementID: 'klaro', - - // You can override CSS style variables here. For IE11, Klaro will - // dynamically inject the variables into the CSS. If you still consider - // supporting IE9-10 (which you probably shouldn't) you need to use Klaro - // with an external stylesheet as the dynamic replacement won't work there. - styling: { - theme: ['light', 'top', 'wide'], - }, - - // Setting this to true will keep Klaro from automatically loading itself - // when the page is being loaded. - noAutoLoad: false, - - // Setting this to true will render the descriptions of the consent - // modal and consent notice are HTML. Use with care. - htmlTexts: true, - - // Setting 'embedded' to true will render the Klaro modal and notice without - // the modal background, allowing you to e.g. embed them into a specific element - // of your website, such as your privacy notice. - embedded: false, - - // You can group services by their purpose in the modal. This is advisable - // if you have a large number of services. Users can then enable or disable - // entire groups of services instead of having to enable or disable every service. - groupByPurpose: true, - - // How Klaro should store the user's preferences. It can be either 'cookie' - // (the default) or 'localStorage'. - storageMethod: 'cookie', - - // You can customize the name of the cookie that Klaro uses for storing - // user consent decisions. If undefined, Klaro will use 'klaro'. - cookieName: 'klaro', - - // You can also set a custom expiration time for the Klaro cookie. - // By default, it will expire after 120 days. - cookieExpiresAfterDays: 365, - - // You can change to cookie domain for the consent manager itself. - // Use this if you want to get consent once for multiple matching domains. - // If undefined, Klaro will use the current domain. - //cookieDomain: '.github.com', - - // You can change to cookie path for the consent manager itself. - // Use this to restrict the cookie visibility to a specific path. - // If undefined, Klaro will use '/' as cookie path. - //cookiePath: '/', - - // Defines the default state for services (true=enabled by default). - default: false, - - // If "mustConsent" is set to true, Klaro will directly display the consent - // manager modal and not allow the user to close it before having actively - // consented or declines the use of third-party services. - mustConsent: false, - - // Show "accept all" to accept all services instead of "ok" that only accepts - // required and "default: true" services - acceptAll: true, - - // replace "decline" with cookie manager modal - hideDeclineAll: false, - - // hide "learnMore" link - hideLearnMore: false, - - // show cookie notice as modal - noticeAsModal: false, - - // You can also remove the 'Realized with Klaro!' text in the consent modal. - // Please don't do this! We provide Klaro as a free open source tool. - // Placing a link to our website helps us spread the word about it, - // which ultimately enables us to make Klaro! better for everyone. - // So please be fair and keep the link enabled. Thanks :) - //disablePoweredBy: true, - - // you can specify an additional class (or classes) that will be added to the Klaro `div` - //additionalClass: 'my-klaro', - - // You can define the UI language directly here. If undefined, Klaro will - // use the value given in the global "lang" variable. If that does - // not exist, it will use the value given in the "lang" attribute of your - // HTML tag. If that also doesn't exist, it will use 'en'. - //lang: 'en', - - // You can overwrite existing translations and add translations for your - // service descriptions and purposes. See `src/translations/` for a full - // list of translations that can be overwritten: - // https://github.com/KIProtect/klaro/tree/master/src/translations - - // Example config that shows how to overwrite translations: - // https://github.com/KIProtect/klaro/blob/master/src/configs/i18n.js - translations: { - // translationsed defined under the 'zz' language code act as default - // translations. - zz: { - privacyPolicyUrl: '/#privacy', - }, - // If you erase the "consentModal" translations, Klaro will use the - // bundled translations. - de: { - privacyPolicyUrl: '/#datenschutz', - consentModal: { - description: - 'Hier können Sie einsehen und anpassen, welche Information wir über Sie sammeln. Einträge die als "Beispiel" gekennzeichnet sind dienen lediglich zu Demonstrationszwecken und werden nicht wirklich verwendet.', - }, - adsense: { - description: 'Anzeigen von Werbeanzeigen (Beispiel)', - title: 'Google AdSense Werbezeugs', - }, - matomo: { - description: 'Sammeln von Besucherstatistiken', - }, - camera: { - description: - 'Eine Überwachungskamera (nur ein Beispiel zu IMG-Tags)', - }, - cloudflare: { - description: 'Schutz gegen DDoS-Angriffe', - }, - intercom: { - description: - 'Chat Widget & Sammeln von Besucherstatistiken (nur ein Beispiel)', - }, - mouseflow: { - description: 'Echtzeit-Benutzeranalyse (nur ein Beispiel)', - }, - googleFonts: { - description: 'Web-Schriftarten von Google gehostet', - }, - purposes: { - analytics: 'Besucher-Statistiken', - security: 'Sicherheit', - livechat: 'Live Chat', - advertising: 'Anzeigen von Werbung', - styling: 'Styling', - }, - }, - en: { - consentModal: { - title: 'test', - description: - 'Here you can see and customize the information that we collect about you. Entries marked as "Example" are just for demonstration purposes and are not really used on this website.', - }, - adsense: { - description: 'Displaying of advertisements (just an example)', - title: 'Google Adsense Advertisement', - }, - matomo: { - description: 'Collecting of visitor statistics', - }, - camera: { - description: - 'A surveillance camera (just an example for an IMG tag)', - }, - cloudflare: { - description: 'Protection against DDoS attacks', - }, - intercom: { - description: - 'Chat widget & collecting of visitor statistics (just an example)', - }, - mouseflow: { - description: 'Real-Time user analytics (just an example)', - }, - googleFonts: { - description: 'Web fonts hosted by Google', - }, - purposes: { - analytics: 'Analytics', - security: 'Security', - livechat: 'Livechat', - advertising: 'Advertising', - styling: 'Styling', - }, - }, - }, - - // This is a list of third-party services that Klaro will manage for you. - services: [ - { - name: 'twitter', - default: false, - contextualConsentOnly: true, - purposes: ['marketing'], - }, - { - name: 'youtube', - default: true, - purposes: ['marketing'], - }, - { - // Each service should have a unique (and short) name. - name: 'matomo', - - // If "default" is set to true, the service will be enabled by default - // Overwrites global "default" setting. - // We recommend leaving this to "false" for services that collect - // personal information. - default: true, - - // The title of you service as listed in the consent modal. - title: 'Matomo/Piwik', - - // The purpose(s) of this service. Will be listed on the consent notice. - // Do not forget to add translations for all purposes you list here. - purposes: ['analytics'], - - // A list of regex expressions or strings giving the names of - // cookies set by this service. If the user withdraws consent for a - // given service, Klaro will then automatically delete all matching - // cookies. - cookies: [ - // you can also explicitly provide a path and a domain for - // a given cookie. This is necessary if you have services that - // set cookies for a path that is not "/" or a domain that - // is not the current domain. If you do not set these values - // properly, the cookie can't be deleted by Klaro - // (there is no way to access the path or domain of a cookie in JS) - // Notice that it is not possible to delete cookies that were set - // on a third-party domain! See the note at mdn: - // https://developer.mozilla.org/en-US/docs/Web/API/Document/cookie#new-cookie_domain - [/^_pk_.*$/, '/', 'klaro.kiprotect.com'], //for the production version - [/^_pk_.*$/, '/', 'localhost'], //for the local version - 'piwik_ignore', - ], - - // An optional callback function that will be called each time - // the consent state for the service changes (true=consented). Passes - // the `service` config as the second parameter as well. - callback: function(consent, service) { - // This is an example callback function. - console.log( - 'User consent for service ' + service.name + ': consent=' + consent - ); - // To be used in conjunction with Matomo 'requireCookieConsent' Feature, Matomo 3.14.0 or newer - // For further Information see https://matomo.org/faq/new-to-piwik/how-can-i-still-track-a-visitor-without-cookies-even-if-they-decline-the-cookie-consent/ - /* - if(consent==true){ - _paq.push(['rememberCookieConsentGiven']); - } else { - _paq.push(['forgetCookieConsentGiven']); - } - */ - }, - - // If "required" is set to true, Klaro will not allow this service to - // be disabled by the user. - required: false, - - // If "optOut" is set to true, Klaro will load this service even before - // the user gave explicit consent. - // We recommend always leaving this "false". - optOut: false, - - // If "onlyOnce" is set to true, the service will only be executed - // once regardless how often the user toggles it on and off. - onlyOnce: true, - }, - - // The services will appear in the modal in the same order as defined here. - { - name: 'inlineTracker', - title: 'Inline Tracker', - purposes: ['analytics'], - cookies: ['inline-tracker'], - optOut: false, - }, - { - name: 'externalTracker', - title: 'External Tracker', - purposes: ['analytics', 'security'], - cookies: ['external-tracker'], - }, - { - name: 'intercom', - title: 'Intercom', - default: true, - purposes: ['livechat'], - }, - { - name: 'mouseflow', - title: 'Mouseflow', - purposes: ['analytics'], - }, - { - name: 'adsense', - // if you omit the title here Klaro will try to look it up in the - // translations - //title: 'Google AdSense', - purposes: ['advertising'], - }, - { - name: 'camera', - title: 'Surveillance Camera', - purposes: ['security'], - }, -/* { - name: 'googleFonts', - title: 'Google Fonts', - purposes: ['styling'], - },*/ - { - name: 'cloudflare', - title: 'Cloudflare', - purposes: ['security'], - required: true, - }, - { - name: 'google-tag-manager', - purposes: ['marketing'], - onAccept: ` - // we notify the tag manager about all services that were accepted. You can define - // a custom event in GTM to load the service if consent was given. - for(let k of Object.keys(opts.consents)){ - if (opts.consents[k]){ - let eventName = 'klaro-'+k+'-accepted' - dataLayer.push({'event': eventName}) - } - } - // if consent for Google Analytics was granted we enable analytics storage - if (opts.consents[opts.vars.googleAnalyticsName || 'google-analytics']){ - console.log("Google analytics usage was granted") - gtag('consent', 'update', {'analytics_storage': 'granted'}) - } - // if consent for Google Ads was granted we enable ad storage - if (opts.consents[opts.vars.adStorageName || 'google-ads']){ - console.log("Google ads usage was granted") - gtag('consent', 'update', {'ad_storage': 'granted'}) - } - `, - onInit: ` - // initialization code here (will be executed only once per page-load) - window.dataLayer = window.dataLayer || []; - window.gtag = function(){dataLayer.push(arguments)} - gtag('consent', 'default', {'ad_storage': 'denied', 'analytics_storage': 'denied'}) - gtag('set', 'ads_data_redaction', true) - `, - onDecline: ` - // initialization code here (will be executed only once per page-load) - window.dataLayer = window.dataLayer || []; - window.gtag = function(){dataLayer.push(arguments)} - gtag('consent', 'default', {'ad_storage': 'denied', 'analytics_storage': 'denied'}) - gtag('set', 'ads_data_redaction', true) - `, - vars: { - googleAnalytics: 'google-analytics' - } - }, - { - // In GTM, you should define a custom event trigger named `klaro-google-analytics-accepted` which should trigger the Google Analytics integration. - name: 'google-analytics', - purposes: ['marketing'], - cookies: [ - /^_ga(_.*)?/ // we delete the Google Analytics cookies if the user declines its use - ], - } - ], +// By default, Klaro will load the config from a global "klaroConfig" variable. +// You can change this by specifying the "data-config" attribute on your +// script take, e.g. like this: +// - - - - - - - - - - - - -
- - - - -
-

Anamnesebogen

- -connect_error) { - die("Verbindung fehlgeschlagen: " . $con->connect_error); - } - - if ($_SERVER["REQUEST_METHOD"] == "POST") { - $stmt = $con->prepare("INSERT INTO patientenaufnahme (name, geburtsdatum, beruf, telefon, handy, email, strasse, ort, krankheiten, raucher, alkohol, allergien, medikamente, groesse, gewicht, bemerkungen) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); - - $name = htmlspecialchars($_POST['name']); - $geburtsdatum = htmlspecialchars($_POST['geburtsdatum']); - $beruf = htmlspecialchars($_POST['beruf']); - $telefon = htmlspecialchars($_POST['telefon']); - $handy = htmlspecialchars($_POST['handy']); - $email = htmlspecialchars($_POST['email']); - $strasse = htmlspecialchars($_POST['strasse']); - $ort = htmlspecialchars($_POST['ort']); - - // Erkrankungen speichern - $krankheiten = []; - foreach ($_POST['krankheiten'] as $krankheit => $details) { - $krankheiten[] = "$krankheit: " . ($details['ja_nein'] === 'ja' ? "Ja, seit " . htmlspecialchars($details['seit']) : "Nein"); - } - $krankheiten_json = json_encode($krankheiten); - - $raucher = htmlspecialchars($_POST['raucher']); - $alkohol = htmlspecialchars($_POST['alkohol']); - $allergien = htmlspecialchars($_POST['allergien']); - $medikamente = htmlspecialchars($_POST['medikamente']); - $groesse = htmlspecialchars($_POST['groesse']); - $gewicht = htmlspecialchars($_POST['gewicht']); - $bemerkungen = htmlspecialchars($_POST['bemerkungen']); - - $stmt->bind_param("ssssssssssssssss", $name, $geburtsdatum, $beruf, $telefon, $handy, $email, $strasse, $ort, $krankheiten_json, $raucher, $alkohol, $allergien, $medikamente, $groesse, $gewicht, $bemerkungen); - - if ($stmt->execute()) { - echo "Daten erfolgreich gespeichert!"; - } else { - echo "Fehler: " . $stmt->error; - } - $stmt->close(); - } - $con->close(); - - -}else{ - - -?> - - - - - -
-
- - -
- - - ='" . date("Y-m-d") ."'"); - - if (!$query) - { - die('Error: ' . mysqli_error($con)); - } - - #if($query->num_rows == 0){ - if($true = 1){ - ?> -

Bitte füllen Sie das Formular aus und senden Sie es ab.

- - - - '; - echo ''; - ?> -
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -

Erkrankungen:

- $frage) { - $dateInputId = 'date_' . $index; - echo "
"; - echo ""; - echo "
"; - echo "

"; - } - ?> -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
- - -
-
- -
- - -
-
-
    -
  • - -
-
-
- - -
- - - - -Praxis im Urlaub"; - echo "Wir befinden uns aktuell im Urlaub.
Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.

"; - $query = mysqli_query($con, "SELECT ende,vertretung,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."' ORDER BY ende DESC"); - $row = mysqli_fetch_assoc($query); - $vertreter = $row["vertretung"]; - $vertretertelefon = $row["vertretertelefon"]; - $vertreteradresse = $row["vertreteradresse"]; - $vertreterurl = $row["vertreterurl"]; - $ende = $row["ende"]; - $endeausgabe= date("d.m.Y", strtotime("+1 day", strtotime($ende ))); - if($vertreter){ - echo "Unsere Vertretung: $vertreter
"; - } - if($vertreterurl){ - echo "Webseite Vertretung: $vertreterurl
"; - } - if($vertretertelefon){ - echo "Telefonischer Kontakt Vertretung: $vertretertelefon
"; - } - if($vertreteradresse){ - echo "Adresse Vertretung: $vertreteradresse
"; - } - echo "
Wir stehen Ihnen ab dem ". $endeausgabe . " wieder zur Verfügung.


"; - ?> -
- -
- - -
-
-
- - - - - + + + + + + Praxis Creutzburg - Anamnesebogen + + + + + + + + + + + + + + + +
+ + + + +
+

Anamnesebogen

+ +connect_error) { + die("Verbindung fehlgeschlagen: " . $con->connect_error); + } + + if ($_SERVER["REQUEST_METHOD"] == "POST") { + $stmt = $con->prepare("INSERT INTO patientenaufnahme (name, geburtsdatum, beruf, telefon, handy, email, strasse, ort, krankheiten, raucher, alkohol, allergien, medikamente, groesse, gewicht, bemerkungen) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)"); + + $name = htmlspecialchars($_POST['name']); + $geburtsdatum = htmlspecialchars($_POST['geburtsdatum']); + $beruf = htmlspecialchars($_POST['beruf']); + $telefon = htmlspecialchars($_POST['telefon']); + $handy = htmlspecialchars($_POST['handy']); + $email = htmlspecialchars($_POST['email']); + $strasse = htmlspecialchars($_POST['strasse']); + $ort = htmlspecialchars($_POST['ort']); + + // Erkrankungen speichern + $krankheiten = []; + foreach ($_POST['krankheiten'] as $krankheit => $details) { + $krankheiten[] = "$krankheit: " . ($details['ja_nein'] === 'ja' ? "Ja, seit " . htmlspecialchars($details['seit']) : "Nein"); + } + $krankheiten_json = json_encode($krankheiten); + + $raucher = htmlspecialchars($_POST['raucher']); + $alkohol = htmlspecialchars($_POST['alkohol']); + $allergien = htmlspecialchars($_POST['allergien']); + $medikamente = htmlspecialchars($_POST['medikamente']); + $groesse = htmlspecialchars($_POST['groesse']); + $gewicht = htmlspecialchars($_POST['gewicht']); + $bemerkungen = htmlspecialchars($_POST['bemerkungen']); + + $stmt->bind_param("ssssssssssssssss", $name, $geburtsdatum, $beruf, $telefon, $handy, $email, $strasse, $ort, $krankheiten_json, $raucher, $alkohol, $allergien, $medikamente, $groesse, $gewicht, $bemerkungen); + + if ($stmt->execute()) { + echo "Daten erfolgreich gespeichert!"; + } else { + echo "Fehler: " . $stmt->error; + } + $stmt->close(); + } + $con->close(); + + +}else{ + + +?> + + + + + +
+
+ + +
+ + + ='" . date("Y-m-d") ."'"); + + if (!$query) + { + die('Error: ' . mysqli_error($con)); + } + + #if($query->num_rows == 0){ + if($true = 1){ + ?> +

Bitte füllen Sie das Formular aus und senden Sie es ab.

+ + + + '; + echo ''; + ?> +
+ +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +

Erkrankungen:

+ $frage) { + $dateInputId = 'date_' . $index; + echo "
"; + echo ""; + echo "
"; + echo "

"; + } + ?> +
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ +
+ + +
+
+ +
+ + +
+
+
    +
  • + +
+
+
+ + +
+ + + + +Praxis im Urlaub"; + echo "Wir befinden uns aktuell im Urlaub.
Wenden Sie sich an unsere Vertretung oder warten Sie bis nach unserem Urlaub mit Ihrer Anfrage.

"; + $query = mysqli_query($con, "SELECT ende,vertretung,vertretertelefon,vertreteradresse,vertreterurl FROM urlaub WHERE start<='" . date("Y-m-d") ."' AND ende>='" . date("Y-m-d") ."' ORDER BY ende DESC"); + $row = mysqli_fetch_assoc($query); + $vertreter = $row["vertretung"]; + $vertretertelefon = $row["vertretertelefon"]; + $vertreteradresse = $row["vertreteradresse"]; + $vertreterurl = $row["vertreterurl"]; + $ende = $row["ende"]; + $endeausgabe= date("d.m.Y", strtotime("+1 day", strtotime($ende ))); + if($vertreter){ + echo "Unsere Vertretung: $vertreter
"; + } + if($vertreterurl){ + echo "Webseite Vertretung: $vertreterurl
"; + } + if($vertretertelefon){ + echo "Telefonischer Kontakt Vertretung: $vertretertelefon
"; + } + if($vertreteradresse){ + echo "Adresse Vertretung: $vertreteradresse
"; + } + echo "
Wir stehen Ihnen ab dem ". $endeausgabe . " wieder zur Verfügung.


"; + ?> +
+ +
+ + +
+
+
+ + + + + \ No newline at end of file diff --git a/rezepte2.php b/rezepte2.php new file mode 100644 index 0000000..e69de29 diff --git a/stellenangebote.php b/stellenangebote.php index 7b08e40..2b432cd 100644 --- a/stellenangebote.php +++ b/stellenangebote.php @@ -1,134 +1,134 @@ - - - - - - Praxis Creutzburg - Stellenangebote - - - - - - - - - - - - - -
- - -
-
- - -
-

Ihre Hausarztpraxis in Coppenbrügge und Bisperode

- - Die Praxis Creutzburg hat aktuell die folgende Stellausschreibungen.
- -
- -
-
- - -
- - + + + + + + Praxis Creutzburg - Stellenangebote + + + + + + + + + + + + + +
+ + +
+
+ + +
+

Ihre Hausarztpraxis in Coppenbrügge und Bisperode

+ + Die Praxis Creutzburg hat aktuell die folgende Stellausschreibungen.
+ +
+ +
+
+ + +
+ + \ No newline at end of file diff --git a/submit_survey.php b/submit_survey.php index ba6dc08..a56e61a 100644 --- a/submit_survey.php +++ b/submit_survey.php @@ -1,70 +1,70 @@ -connect_error) { - die("Verbindung fehlgeschlagen: " . $con->connect_error); -} -// Umfrageantworten speichern -// Vorbereiten der SQL-Anfrage -$stmt = $con->prepare("INSERT INTO survey_responses - (question_1, question_2, question_3, question_4, question_5, question_6, question_7, question_8, question_9, question_10, message) -VALUES - ('". $question_1 . "', '". $question_2 . "', '". $question_3 . "', '". $question_4 . "', '". $question_5 . "', '". $question_6 . "', '". $question_7 . "', '". $question_8 . "', '". $question_9 . "', '". $question_10 . "', '". $message . "');"); -if ($stmt === false) { - die('Fehler bei der Vorbereitung der SQL-Abfrage: ' . $con->error); -} -// Bindung der Parameter -#$stmt->bind_param("ssssssssss", $question_1, $question_2, $question_3, $question_4, $question_5, $question_6, $question_7, $question_8, $question_9, $question_10); - -// Ausführen der SQL-Anfrage -if (!$stmt->execute()) { - die('Fehler bei der Ausführung der SQL-Abfrage: ' . $stmt->error); -} - - - -// Letzte Umfrage-Teilnahme aktualisieren -$stmt = $con->prepare("UPDATE survey_patients SET survey_last_taken = NOW() WHERE id = ?"); -$stmt->bind_param("i", $_SESSION['patient_id']); -$stmt->execute(); - - -// Lösche alle Session-Variablen -session_unset(); - -// Zerstöre die Session -session_destroy(); - -// Lösche das Session-Cookie, wenn du es auch am Client löschen möchtest -if (ini_get("session.use_cookies")) { - $params = session_get_cookie_params(); - setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]); -} - -// Weiterleitung auf eine andere Seite (optional) -header("Location: umfrage_danke.php"); -exit(); -?> - -?> +connect_error) { + die("Verbindung fehlgeschlagen: " . $con->connect_error); +} +// Umfrageantworten speichern +// Vorbereiten der SQL-Anfrage +$stmt = $con->prepare("INSERT INTO survey_responses + (question_1, question_2, question_3, question_4, question_5, question_6, question_7, question_8, question_9, question_10, message) +VALUES + ('". $question_1 . "', '". $question_2 . "', '". $question_3 . "', '". $question_4 . "', '". $question_5 . "', '". $question_6 . "', '". $question_7 . "', '". $question_8 . "', '". $question_9 . "', '". $question_10 . "', '". $message . "');"); +if ($stmt === false) { + die('Fehler bei der Vorbereitung der SQL-Abfrage: ' . $con->error); +} +// Bindung der Parameter +#$stmt->bind_param("ssssssssss", $question_1, $question_2, $question_3, $question_4, $question_5, $question_6, $question_7, $question_8, $question_9, $question_10); + +// Ausführen der SQL-Anfrage +if (!$stmt->execute()) { + die('Fehler bei der Ausführung der SQL-Abfrage: ' . $stmt->error); +} + + + +// Letzte Umfrage-Teilnahme aktualisieren +$stmt = $con->prepare("UPDATE survey_patients SET survey_last_taken = NOW() WHERE id = ?"); +$stmt->bind_param("i", $_SESSION['patient_id']); +$stmt->execute(); + + +// Lösche alle Session-Variablen +session_unset(); + +// Zerstöre die Session +session_destroy(); + +// Lösche das Session-Cookie, wenn du es auch am Client löschen möchtest +if (ini_get("session.use_cookies")) { + $params = session_get_cookie_params(); + setcookie(session_name(), '', time() - 42000, $params["path"], $params["domain"], $params["secure"], $params["httponly"]); +} + +// Weiterleitung auf eine andere Seite (optional) +header("Location: umfrage_danke.php"); +exit(); +?> + +?> diff --git a/survey_form.php b/survey_form.php index 8414c09..700ffe9 100644 --- a/survey_form.php +++ b/survey_form.php @@ -1,165 +1,165 @@ - - - - - - - Praxis Creutzburg - Formulare - - - - - - - - - -
- - - - -
- -prepare("SELECT * FROM survey_patients WHERE id = ?"); - $stmt->bind_param("i", $patient_id); - $stmt->execute(); - $result = $stmt->get_result(); - $patient = $result->fetch_assoc(); - ?> - -
-

Patientenbefragung

-
- - -
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
- - -
-
-
-
-
- - -
- -
-
- Ihre Daten werden HTTPS-verschlüsselt an unser System übertragen. -
-
    -
  • -
-
- -
- - - - - - - + + + + + + + Praxis Creutzburg - Formulare + + + + + + + + + +
+ + + + +
+ +prepare("SELECT * FROM survey_patients WHERE id = ?"); + $stmt->bind_param("i", $patient_id); + $stmt->execute(); + $result = $stmt->get_result(); + $patient = $result->fetch_assoc(); + ?> + +
+

Patientenbefragung

+
+ + +
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+ + +
+
+
+
+
+ + +
+ +
+
+ Ihre Daten werden HTTPS-verschlüsselt an unser System übertragen. +
+
    +
  • +
+
+ +
+ + + + + + + \ No newline at end of file diff --git a/umfrage.php b/umfrage.php index c93de45..3899e27 100644 --- a/umfrage.php +++ b/umfrage.php @@ -1,162 +1,162 @@ -prepare("SELECT * FROM survey_patients WHERE unique_key = ?"); - $stmt->bind_param("s", $unique_key); - $stmt->execute(); - $result = $stmt->get_result(); - - // Wenn der Patient existiert - if ($result->num_rows > 0) { - $patient = $result->fetch_assoc(); - // Überprüfen, ob der Patient bereits im aktuellen Jahr an der Umfrage teilgenommen hat - $last_taken = $patient['survey_last_taken']; - if (strtotime($last_taken) >= strtotime("last year")) { - echo "Sie haben bereits in diesem Jahr an der Umfrage teilgenommen."; - exit; - } else { - // Authentifizierung erfolgreich, Fragen anzeigen - $_SESSION['patient_id'] = $patient['id']; // ID speichern, um später auf die Antworten zuzugreifen - header("Location: survey_form.php"); - exit; - } - } else { - echo "Ungültige Eingaben. Bitte überprüfen Sie Ihre Daten."; - } - - - -}else{ - -include_once("inc/functions.inc.php"); -include_once('inc/functions.impfen.inc.php'); -include_once('inc/functions.formulare.inc.php'); - - ?> - - - - - - - Praxis Creutzburg - Umfrage - - - - - - - - - -
- - - - -
-

Patientenbefragung

- -
-
- - - -
- -

Authentifizierung

-

Die Umfrage erfolgt anoym!
- - Da nur Patienten der Praxis Creutzburg zur Teilnahme berechtigt sind, muss im Vorfeld eine Authentifizierung erfolgen.
- Eine Zuordnung der Umfrage zu einem Patienten ist technisch ausgeschlossen.

- - Das Praxis Team freut sich auf Ihr Feedback und Verbesserungsvorschläge, um das Serviceerlebnis für unsere Patienten und unser Personal zu verbessern.

- Bitte geben Sie Ihre Daten ein, um an der Umfrage teilzunehmen.
- Bei Vor- und Nachname reichen die ersten beiden Buchstaben.
-

- - - '; - echo ''; - - - ?> - - - - -
- - - - - - - - - - - -
    -
  • - -
- - - - - - -
- - -
- - -
-
-
- - - - - +prepare("SELECT * FROM survey_patients WHERE unique_key = ?"); + $stmt->bind_param("s", $unique_key); + $stmt->execute(); + $result = $stmt->get_result(); + + // Wenn der Patient existiert + if ($result->num_rows > 0) { + $patient = $result->fetch_assoc(); + // Überprüfen, ob der Patient bereits im aktuellen Jahr an der Umfrage teilgenommen hat + $last_taken = $patient['survey_last_taken']; + if (strtotime($last_taken) >= strtotime("last year")) { + echo "Sie haben bereits in diesem Jahr an der Umfrage teilgenommen."; + exit; + } else { + // Authentifizierung erfolgreich, Fragen anzeigen + $_SESSION['patient_id'] = $patient['id']; // ID speichern, um später auf die Antworten zuzugreifen + header("Location: survey_form.php"); + exit; + } + } else { + echo "Ungültige Eingaben. Bitte überprüfen Sie Ihre Daten."; + } + + + +}else{ + +include_once("inc/functions.inc.php"); +include_once('inc/functions.impfen.inc.php'); +include_once('inc/functions.formulare.inc.php'); + + ?> + + + + + + + Praxis Creutzburg - Umfrage + + + + + + + + + +
+ + + + +
+

Patientenbefragung

+ +
+
+ + + +
+ +

Authentifizierung

+

Die Umfrage erfolgt anoym!
+ + Da nur Patienten der Praxis Creutzburg zur Teilnahme berechtigt sind, muss im Vorfeld eine Authentifizierung erfolgen.
+ Eine Zuordnung der Umfrage zu einem Patienten ist technisch ausgeschlossen.

+ + Das Praxis Team freut sich auf Ihr Feedback und Verbesserungsvorschläge, um das Serviceerlebnis für unsere Patienten und unser Personal zu verbessern.

+ Bitte geben Sie Ihre Daten ein, um an der Umfrage teilzunehmen.
+ Bei Vor- und Nachname reichen die ersten beiden Buchstaben.
+

+ + + '; + echo ''; + + + ?> + + + + +
+ + + + + + + + + + + +
    +
  • + +
+ + + + + + +
+ + +
+ + +
+
+
+ + + + + \ No newline at end of file diff --git a/umfrage/index.html b/umfrage/index.html index 9531add..de47296 100644 --- a/umfrage/index.html +++ b/umfrage/index.html @@ -1,12 +1,12 @@ - - - - - - - Weiterleitung - - -

Du wirst weitergeleitet. Falls die Weiterleitung nicht funktioniert, klicke hier.

- + + + + + + + Weiterleitung + + +

Du wirst weitergeleitet. Falls die Weiterleitung nicht funktioniert, klicke hier.

+ \ No newline at end of file diff --git a/umfrage_danke.php b/umfrage_danke.php index 18dfcc3..227a673 100644 --- a/umfrage_danke.php +++ b/umfrage_danke.php @@ -1,62 +1,62 @@ - - - - - - - Praxis Creutzburg - DateiUpload - - - - - - - - - -
- - - - -
-

Patientenumfrage

- -Vielen Dank für Ihre Teilnahme an der Umfrage!
Sie unterstützen uns dabei unseren Service stätig zu verbessern!
"; -?> - -
-
-
- - - - - + + + + + + + Praxis Creutzburg - DateiUpload + + + + + + + + + +
+ + + + +
+

Patientenumfrage

+ +Vielen Dank für Ihre Teilnahme an der Umfrage!
Sie unterstützen uns dabei unseren Service stätig zu verbessern!
"; +?> + +
+
+
+ + + + + \ No newline at end of file diff --git a/upload/aufraeumen.php b/upload/aufraeumen.php index c7aedae..7ca9ed3 100644 --- a/upload/aufraeumen.php +++ b/upload/aufraeumen.php @@ -1,53 +1,53 @@ - 86400) { // 86400 Sekunden = 24 Stunden - if (ftp_delete($conn_id, $file)) { - echo "Gelöscht: \n"; - } else { - echo "Fehler beim Löschen: \n"; - } - } -} - -// Verbindung schließen -ftp_close($conn_id); -?> + 86400) { // 86400 Sekunden = 24 Stunden + if (ftp_delete($conn_id, $file)) { + echo "Gelöscht: \n"; + } else { + echo "Fehler beim Löschen: \n"; + } + } +} + +// Verbindung schließen +ftp_close($conn_id); +?> diff --git a/upload/index.html b/upload/index.html index decf9fe..25a5034 100644 --- a/upload/index.html +++ b/upload/index.html @@ -1,12 +1,12 @@ - - - - - - - Weiterleitung - - -

Du wirst weitergeleitet. Falls die Weiterleitung nicht funktioniert, klicke hier.

- + + + + + + + Weiterleitung + + +

Du wirst weitergeleitet. Falls die Weiterleitung nicht funktioniert, klicke hier.

+ \ No newline at end of file diff --git a/zeiterfassung/ZeitenAnzeige.php b/zeiterfassung/ZeitenAnzeige.php index d3fbc20..af7e91c 100644 --- a/zeiterfassung/ZeitenAnzeige.php +++ b/zeiterfassung/ZeitenAnzeige.php @@ -1,134 +1,134 @@ - - -
-
-
- - -prepare("SELECT DISTINCT MONTH(timestamp_datetime) as month, YEAR(timestamp_datetime) as year FROM timestamps WHERE employee_id = ? ORDER BY timestamp_datetime DESC"); - $months_stmt->bindParam(1, $user_id); - $months_stmt->execute(); - $months = $months_stmt->fetchAll(PDO::FETCH_ASSOC); -} catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); -} - -$selectedMonth = $_POST['month'] ?? ''; -#$selectedYear = $_POST['year'] ?? ''; - -// Zeiten für den ausgewählten Monat erhalten -if ($selectedMonth ) { - - try { - $selectedYear = explode('/',$selectedMonth)[1]; - $times_stmt = $pdo->prepare("SELECT timestamp_datetime, timestamp_type FROM timestamps WHERE employee_id = ? AND MONTH(timestamp_datetime) = ? AND YEAR(timestamp_datetime) = ? ORDER BY timestamp_datetime ASC"); - $times_stmt->bindParam(1, $user_id); - $times_stmt->bindParam(2, $selectedMonth); - $times_stmt->bindParam(3, $selectedYear); - $times_stmt->execute(); - $times = $times_stmt->fetchAll(PDO::FETCH_ASSOC); - } catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); - } - // Gruppieren der Zeiten nach Tagen - $groupedTimes = []; - foreach ($times as $time) { - $date = date('Y-m-d', strtotime($time['timestamp_datetime'])); - $groupedTimes[$date][] = $time; - } - - - -} -?> - - -

Zeitenübersicht

- -
-
- - -

- - - -
-
- - - - - - - - - - - - - $times): ?> - - - - - - -
DatumTypAktionen
- -
- -
- - Anpassen - -
- - - -
-
-
- + + +
+
+
+ + +prepare("SELECT DISTINCT MONTH(timestamp_datetime) as month, YEAR(timestamp_datetime) as year FROM timestamps WHERE employee_id = ? ORDER BY timestamp_datetime DESC"); + $months_stmt->bindParam(1, $user_id); + $months_stmt->execute(); + $months = $months_stmt->fetchAll(PDO::FETCH_ASSOC); +} catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); +} + +$selectedMonth = $_POST['month'] ?? ''; +#$selectedYear = $_POST['year'] ?? ''; + +// Zeiten für den ausgewählten Monat erhalten +if ($selectedMonth ) { + + try { + $selectedYear = explode('/',$selectedMonth)[1]; + $times_stmt = $pdo->prepare("SELECT timestamp_datetime, timestamp_type FROM timestamps WHERE employee_id = ? AND MONTH(timestamp_datetime) = ? AND YEAR(timestamp_datetime) = ? ORDER BY timestamp_datetime ASC"); + $times_stmt->bindParam(1, $user_id); + $times_stmt->bindParam(2, $selectedMonth); + $times_stmt->bindParam(3, $selectedYear); + $times_stmt->execute(); + $times = $times_stmt->fetchAll(PDO::FETCH_ASSOC); + } catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); + } + // Gruppieren der Zeiten nach Tagen + $groupedTimes = []; + foreach ($times as $time) { + $date = date('Y-m-d', strtotime($time['timestamp_datetime'])); + $groupedTimes[$date][] = $time; + } + + + +} +?> + + +

Zeitenübersicht

+ +
+
+ + +

+ + + +
+
+ + + + + + + + + + + + + $times): ?> + + + + + + +
DatumTypAktionen
+ +
+ +
+ + Anpassen + +
+ + + +
+
+
+ \ No newline at end of file diff --git a/zeiterfassung/alleZeitenanzeige.php b/zeiterfassung/alleZeitenanzeige.php index 87effc8..5e8af51 100644 --- a/zeiterfassung/alleZeitenanzeige.php +++ b/zeiterfassung/alleZeitenanzeige.php @@ -1,153 +1,153 @@ - - -
-
-
- -prepare("SELECT id,vorname, nachname FROM users WHERE zeiterfassung='1' ORDER BY nachname ASC"); - $users_stmt->execute(); - $users = $users_stmt->fetchAll(PDO::FETCH_ASSOC); -} catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); -} - -// Monate für den Dropdown-Menü erhalten -try { - // Hier sollte die Abfrage angepasst werden, um auf den ausgewählten Benutzer zu filtern - $months_stmt = $pdo->prepare("SELECT DISTINCT MONTH(timestamp_datetime) as month, YEAR(timestamp_datetime) as year FROM timestamps ORDER BY timestamp_datetime DESC"); - #$months_stmt->bindParam(1, $user_id); - $months_stmt->execute(); - $months = $months_stmt->fetchAll(PDO::FETCH_ASSOC); -} catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); -} - -$selectedUser = $_POST['user'] ?? $user_id; // Standardmäßig der angemeldete Benutzer -$selectedMonth = $_POST['month'] ?? ''; - -// Zeiten für den ausgewählten Monat und Benutzer erhalten -if ($selectedMonth && $selectedUser) { - try { - $selectedYear = explode('/',$selectedMonth)[1]; - $times_stmt = $pdo->prepare("SELECT timestamp_datetime, timestamp_type FROM timestamps WHERE employee_id = ? AND MONTH(timestamp_datetime) = ? AND YEAR(timestamp_datetime) = ? ORDER BY timestamp_datetime ASC"); - $times_stmt->bindParam(1, $selectedUser); - $times_stmt->bindParam(2, explode('/', $selectedMonth)[0]); // Monat extrahieren - $times_stmt->bindParam(3, $selectedYear); - $times_stmt->execute(); - $times = $times_stmt->fetchAll(PDO::FETCH_ASSOC); - } catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); - } - // Gruppieren der Zeiten nach Tagen - $groupedTimes = []; - foreach ($times as $time) { - $date = date('Y-m-d', strtotime($time['timestamp_datetime'])); - $groupedTimes[$date][] = $time; - } -} - - - - - - -?> - -

Zeitenübersicht

- -
-
- - -
-
- - -
-
- - - - -
- - - - - - - - - $times): ?> - - - - - - -
DatumTypAktionen
- -
- -
- Anpassen -
- - -
-
-
- + + +
+
+
+ +prepare("SELECT id,vorname, nachname FROM users WHERE zeiterfassung='1' ORDER BY nachname ASC"); + $users_stmt->execute(); + $users = $users_stmt->fetchAll(PDO::FETCH_ASSOC); +} catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); +} + +// Monate für den Dropdown-Menü erhalten +try { + // Hier sollte die Abfrage angepasst werden, um auf den ausgewählten Benutzer zu filtern + $months_stmt = $pdo->prepare("SELECT DISTINCT MONTH(timestamp_datetime) as month, YEAR(timestamp_datetime) as year FROM timestamps ORDER BY timestamp_datetime DESC"); + #$months_stmt->bindParam(1, $user_id); + $months_stmt->execute(); + $months = $months_stmt->fetchAll(PDO::FETCH_ASSOC); +} catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); +} + +$selectedUser = $_POST['user'] ?? $user_id; // Standardmäßig der angemeldete Benutzer +$selectedMonth = $_POST['month'] ?? ''; + +// Zeiten für den ausgewählten Monat und Benutzer erhalten +if ($selectedMonth && $selectedUser) { + try { + $selectedYear = explode('/',$selectedMonth)[1]; + $times_stmt = $pdo->prepare("SELECT timestamp_datetime, timestamp_type FROM timestamps WHERE employee_id = ? AND MONTH(timestamp_datetime) = ? AND YEAR(timestamp_datetime) = ? ORDER BY timestamp_datetime ASC"); + $times_stmt->bindParam(1, $selectedUser); + $times_stmt->bindParam(2, explode('/', $selectedMonth)[0]); // Monat extrahieren + $times_stmt->bindParam(3, $selectedYear); + $times_stmt->execute(); + $times = $times_stmt->fetchAll(PDO::FETCH_ASSOC); + } catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); + } + // Gruppieren der Zeiten nach Tagen + $groupedTimes = []; + foreach ($times as $time) { + $date = date('Y-m-d', strtotime($time['timestamp_datetime'])); + $groupedTimes[$date][] = $time; + } +} + + + + + + +?> + +

Zeitenübersicht

+ +
+
+ + +
+
+ + +
+
+ + + + +
+ + + + + + + + + $times): ?> + + + + + + +
DatumTypAktionen
+ +
+ +
+ Anpassen +
+ + +
+
+
+ \ No newline at end of file diff --git a/zeiterfassung/allefehlbuchungen.php b/zeiterfassung/allefehlbuchungen.php index 4b0c9e4..48598c7 100644 --- a/zeiterfassung/allefehlbuchungen.php +++ b/zeiterfassung/allefehlbuchungen.php @@ -1,170 +1,170 @@ - - - -
-
-
- - - - -
-

Zeitbuchungsfehler Auswertung

- -prepare("SELECT id,vorname, nachname FROM users WHERE zeiterfassung='1' ORDER BY nachname ASC"); - $users_stmt->execute(); - $users = $users_stmt->fetchAll(PDO::FETCH_ASSOC); -} catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); -} - - -foreach($users AS $user){ - - - try { - // Holen Sie die fehlerhaften Zeitbuchungen des Mitarbeiters aus der Datenbank - $query = " - SELECT - DATE(timestamp_datetime) as datum, - SUM(CASE WHEN timestamp_type = 'KOMMEN' THEN 1 ELSE 0 END) as kommen_count, - SUM(CASE WHEN timestamp_type = 'GEHEN' THEN 1 ELSE 0 END) as gehen_count - FROM - timestamps - WHERE - employee_id = :employee_id - GROUP BY - DATE(timestamp_datetime) - HAVING - kommen_count != gehen_count"; - - $stmt = $pdo->prepare($query); - $stmt->bindParam(':employee_id', $user["id"], PDO::PARAM_INT); - $stmt->execute(); - $fehlerhafteTage = $stmt->fetchAll(PDO::FETCH_ASSOC); - } catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); - } - - - try { - $query2 = " - SELECT - DATE(timestamp_datetime) AS datum, - GROUP_CONCAT(timestamp_type ORDER BY timestamp_datetime) AS day_sequence - FROM - timestamps - WHERE - employee_id = :employee_id - GROUP BY - DATE(timestamp_datetime);"; - - $stmt = $pdo->prepare($query2); - $stmt->bindParam(':employee_id', $user["id"], PDO::PARAM_INT); - $stmt->execute(); - $result = $stmt->fetchAll(); - - $invalidDates = []; - - } catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); - } - - - try { - $query1 = " - SELECT - vorname, - nachname - FROM - users - WHERE - id = :employee_id - ORDER BY - nachname - "; - - $stmt = $pdo->prepare($query1); - $stmt->bindParam(':employee_id', $user["id"], PDO::PARAM_INT); - $stmt->execute(); - $userdaten = $stmt->fetchAll(PDO::FETCH_ASSOC); - } catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); - } - - - foreach ($userdaten as $usertag){ - echo "
" . $usertag["vorname"] . " " . $usertag["nachname"] . "
"; - - } - - - foreach ($result as $row) { - if (!isValidSequence($row["day_sequence"])) { - $invalidDates[] = $row["datum"]; - } - } - - - ?> - - - - - - - - - - - - - - - - - - - - - - - - -
DatumFehlerAktionen
Fehlerhafte Daten - Anpassen -
- - - - - -
-
-
-
+ + + +
+
+
+ + + + +
+

Zeitbuchungsfehler Auswertung

+ +prepare("SELECT id,vorname, nachname FROM users WHERE zeiterfassung='1' ORDER BY nachname ASC"); + $users_stmt->execute(); + $users = $users_stmt->fetchAll(PDO::FETCH_ASSOC); +} catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); +} + + +foreach($users AS $user){ + + + try { + // Holen Sie die fehlerhaften Zeitbuchungen des Mitarbeiters aus der Datenbank + $query = " + SELECT + DATE(timestamp_datetime) as datum, + SUM(CASE WHEN timestamp_type = 'KOMMEN' THEN 1 ELSE 0 END) as kommen_count, + SUM(CASE WHEN timestamp_type = 'GEHEN' THEN 1 ELSE 0 END) as gehen_count + FROM + timestamps + WHERE + employee_id = :employee_id + GROUP BY + DATE(timestamp_datetime) + HAVING + kommen_count != gehen_count"; + + $stmt = $pdo->prepare($query); + $stmt->bindParam(':employee_id', $user["id"], PDO::PARAM_INT); + $stmt->execute(); + $fehlerhafteTage = $stmt->fetchAll(PDO::FETCH_ASSOC); + } catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); + } + + + try { + $query2 = " + SELECT + DATE(timestamp_datetime) AS datum, + GROUP_CONCAT(timestamp_type ORDER BY timestamp_datetime) AS day_sequence + FROM + timestamps + WHERE + employee_id = :employee_id + GROUP BY + DATE(timestamp_datetime);"; + + $stmt = $pdo->prepare($query2); + $stmt->bindParam(':employee_id', $user["id"], PDO::PARAM_INT); + $stmt->execute(); + $result = $stmt->fetchAll(); + + $invalidDates = []; + + } catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); + } + + + try { + $query1 = " + SELECT + vorname, + nachname + FROM + users + WHERE + id = :employee_id + ORDER BY + nachname + "; + + $stmt = $pdo->prepare($query1); + $stmt->bindParam(':employee_id', $user["id"], PDO::PARAM_INT); + $stmt->execute(); + $userdaten = $stmt->fetchAll(PDO::FETCH_ASSOC); + } catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); + } + + + foreach ($userdaten as $usertag){ + echo "
" . $usertag["vorname"] . " " . $usertag["nachname"] . "
"; + + } + + + foreach ($result as $row) { + if (!isValidSequence($row["day_sequence"])) { + $invalidDates[] = $row["datum"]; + } + } + + + ?> + + + + + + + + + + + + + + + + + + + + + + + + +
DatumFehlerAktionen
Fehlerhafte Daten + Anpassen +
+ + + + + +
+
+
+
\ No newline at end of file diff --git a/zeiterfassung/api/vacations.php b/zeiterfassung/api/vacations.php index de78c8a..a5022ce 100644 --- a/zeiterfassung/api/vacations.php +++ b/zeiterfassung/api/vacations.php @@ -1,197 +1,197 @@ - 'start and end required']); - exit; -} - -$events = []; -try { -$branch = 'unknown'; -$debugMode = isset($_GET['debug']) && ($_GET['debug'] == '1' || $_GET['debug'] === 'true'); - -// Vacations: support a personal-only mode, admin mode, and public/team mode -if ($onlyPersonal) { - $branch = 'onlyPersonal'; - if ($onlyApproved) { - $branch = 'onlyPersonal_onlyApproved'; - $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? AND LOWER(TRIM(v.status)) = 'genehmigt' ORDER BY v.start_date"); - $stmt->execute([$_SESSION['userid'], $end, $start]); - } else { - if ($includeRejected) { - $branch = 'onlyPersonal_includeRejected'; - $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? ORDER BY v.start_date"); - $stmt->execute([$_SESSION['userid'], $end, $start]); - } else { - $branch = 'onlyPersonal_excludeRejected'; - $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? AND (v.status IS NULL OR LOWER(TRIM(v.status)) != 'abgelehnt') ORDER BY v.start_date"); - $stmt->execute([$_SESSION['userid'], $end, $start]); - } - } -} elseif ($isAdmin) { - $branch = 'admin'; - if ($onlyApproved) { - $branch = 'admin_onlyApproved'; - $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.start_date <= ? AND v.end_date >= ? AND LOWER(TRIM(v.status)) = 'genehmigt' ORDER BY v.start_date"); - $stmt->execute([$end, $start]); - } else { - // By default admins see genehmigt + beantragt; include_rejected=1 can override - if ($includeRejected) { - $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.start_date <= ? AND v.end_date >= ? ORDER BY v.start_date"); - $stmt->execute([$end, $start]); - } else { - $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.start_date <= ? AND v.end_date >= ? AND (v.status IS NULL OR LOWER(TRIM(v.status)) IN ('genehmigt','beantragt')) ORDER BY v.start_date"); - $stmt->execute([$end, $start]); - } - } -} else { - $branch = 'public_or_regular'; - if ($public && $onlyApproved) { - $branch = 'public_onlyApproved'; - // public team view: show all approved vacations (read-only) - $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.start_date <= ? AND v.end_date >= ? AND LOWER(TRIM(v.status)) = 'genehmigt' ORDER BY v.start_date"); - $stmt->execute([$end, $start]); - } elseif ($public && $publicAll) { - $branch = 'public_publicAll'; - // public team view: explicitly show only approved (genehmigt) and pending (beantragt) vacations - $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.start_date <= ? AND v.end_date >= ? AND (v.status IS NULL OR LOWER(TRIM(v.status)) IN ('genehmigt','beantragt')) ORDER BY v.start_date"); - $stmt->execute([$end, $start]); - } else { - if ($onlyApproved) { - $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? AND LOWER(TRIM(v.status)) = 'genehmigt' ORDER BY v.start_date"); - $stmt->execute([$_SESSION['userid'], $end, $start]); - } else { - // By default exclude rejected ('abgelehnt') for regular users; include if include_rejected=1 - if ($includeRejected) { - $branch = 'regular_includeRejected'; - $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? ORDER BY v.start_date"); - $stmt->execute([$_SESSION['userid'], $end, $start]); - } else { - $branch = 'regular_excludeRejected'; - $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? AND (v.status IS NULL OR LOWER(TRIM(v.status)) != 'abgelehnt') ORDER BY v.start_date"); - $stmt->execute([$_SESSION['userid'], $end, $start]); - } - } - } -} - -try { - $vacations = $stmt->fetchAll(); - - // If debug mode is enabled, prepare meta information - if ($debugMode) { - $rawStatuses = array_map(function($r){ return $r['status'] ?? null; }, $vacations); - $meta = [ - 'branch' => $branch, - 'count' => count($vacations), - 'raw_statuses' => $rawStatuses - ]; - } - - foreach ($vacations as $v) { - // Normalize status: collapse whitespace (including NBSP), trim, lowercase - if (isset($v['status'])) { - $normalized = preg_replace('/\s+/u', ' ', $v['status']); - $status = mb_strtolower(trim($normalized)); - } else { - $status = ''; - } - // Defensive filter: do not expose rejected ('abgelehnt') entries to non-admins - if (!$isAdmin && !$includeRejected && mb_stripos($status, 'abgelehnt') !== false) { - continue; - } - $isApproved = (mb_stripos($status, 'genehmigt') !== false); - if ($isAdmin) { - $title = $v['vorname'] . ' ' . $v['nachname'] . ' (' . ($v['status'] ?? 'beantragt') . ')'; - } else { - $title = $isApproved ? 'Urlaub' : 'Urlaubsantrag'; - } - // Safely compute end date; fallback to start_date if invalid - try { - $endInclusive = (new DateTime($v['end_date']))->modify('+1 day')->format('Y-m-d'); - } catch (Exception $e) { - $endInclusive = $v['start_date']; - } - $events[] = [ - 'id' => 'vac_' . $v['id'], - 'title' => $title, - 'start' => $v['start_date'], - 'end' => $endInclusive, - 'allDay' => true, - 'color' => ($isApproved) ? '#28a745' : '#ffc107', - 'extendedProps' => [ - 'type' => 'user', - 'user_id' => $v['user_id'], - 'status' => $v['status'], - 'comment' => $v['comment_user'] ?? '' - ] - ]; - } -} catch (Exception $ex) { - header('Content-Type: application/json; charset=utf-8'); - $payload = ['error' => $ex->getMessage(), 'branch' => $branch, 'trace' => $ex->getTraceAsString()]; - echo json_encode($payload); - exit; -} - -} catch (Exception $ex) { - header('Content-Type: application/json; charset=utf-8'); - $payload = ['error' => $ex->getMessage(), 'branch' => $branch, 'trace' => $ex->getTraceAsString()]; - echo json_encode($payload); - exit; -} - -// Company holidays (visible to all) -$stmt = $pdo->prepare("SELECT * FROM company_holidays WHERE start_date <= ? AND end_date >= ? ORDER BY start_date"); -$stmt->execute([$end, $start]); -$holidays = $stmt->fetchAll(); - -foreach ($holidays as $h) { - $endInclusive = (new DateTime($h['end_date']))->modify('+1 day')->format('Y-m-d'); - $events[] = [ - 'id' => 'com_' . $h['id'], - 'title' => $h['description'] ?: 'Betriebsurlaub', - 'start' => $h['start_date'], - 'end' => $endInclusive, - 'allDay' => true, - 'color' => '#007bff', - 'extendedProps' => [ - 'type' => 'company', - 'description' => $h['description'] - ] - ]; -} - -header('Content-Type: application/json; charset=utf-8'); -if ($debugMode) { - echo json_encode(['events' => $events, 'meta' => $meta]); -} else { - echo json_encode($events); -} - -?> + 'start and end required']); + exit; +} + +$events = []; +try { +$branch = 'unknown'; +$debugMode = isset($_GET['debug']) && ($_GET['debug'] == '1' || $_GET['debug'] === 'true'); + +// Vacations: support a personal-only mode, admin mode, and public/team mode +if ($onlyPersonal) { + $branch = 'onlyPersonal'; + if ($onlyApproved) { + $branch = 'onlyPersonal_onlyApproved'; + $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? AND LOWER(TRIM(v.status)) = 'genehmigt' ORDER BY v.start_date"); + $stmt->execute([$_SESSION['userid'], $end, $start]); + } else { + if ($includeRejected) { + $branch = 'onlyPersonal_includeRejected'; + $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? ORDER BY v.start_date"); + $stmt->execute([$_SESSION['userid'], $end, $start]); + } else { + $branch = 'onlyPersonal_excludeRejected'; + $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? AND (v.status IS NULL OR LOWER(TRIM(v.status)) != 'abgelehnt') ORDER BY v.start_date"); + $stmt->execute([$_SESSION['userid'], $end, $start]); + } + } +} elseif ($isAdmin) { + $branch = 'admin'; + if ($onlyApproved) { + $branch = 'admin_onlyApproved'; + $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.start_date <= ? AND v.end_date >= ? AND LOWER(TRIM(v.status)) = 'genehmigt' ORDER BY v.start_date"); + $stmt->execute([$end, $start]); + } else { + // By default admins see genehmigt + beantragt; include_rejected=1 can override + if ($includeRejected) { + $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.start_date <= ? AND v.end_date >= ? ORDER BY v.start_date"); + $stmt->execute([$end, $start]); + } else { + $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.start_date <= ? AND v.end_date >= ? AND (v.status IS NULL OR LOWER(TRIM(v.status)) IN ('genehmigt','beantragt')) ORDER BY v.start_date"); + $stmt->execute([$end, $start]); + } + } +} else { + $branch = 'public_or_regular'; + if ($public && $onlyApproved) { + $branch = 'public_onlyApproved'; + // public team view: show all approved vacations (read-only) + $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.start_date <= ? AND v.end_date >= ? AND LOWER(TRIM(v.status)) = 'genehmigt' ORDER BY v.start_date"); + $stmt->execute([$end, $start]); + } elseif ($public && $publicAll) { + $branch = 'public_publicAll'; + // public team view: explicitly show only approved (genehmigt) and pending (beantragt) vacations + $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.start_date <= ? AND v.end_date >= ? AND (v.status IS NULL OR LOWER(TRIM(v.status)) IN ('genehmigt','beantragt')) ORDER BY v.start_date"); + $stmt->execute([$end, $start]); + } else { + if ($onlyApproved) { + $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? AND LOWER(TRIM(v.status)) = 'genehmigt' ORDER BY v.start_date"); + $stmt->execute([$_SESSION['userid'], $end, $start]); + } else { + // By default exclude rejected ('abgelehnt') for regular users; include if include_rejected=1 + if ($includeRejected) { + $branch = 'regular_includeRejected'; + $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? ORDER BY v.start_date"); + $stmt->execute([$_SESSION['userid'], $end, $start]); + } else { + $branch = 'regular_excludeRejected'; + $stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname FROM vacations v JOIN users u ON v.user_id = u.id WHERE v.user_id = ? AND v.start_date <= ? AND v.end_date >= ? AND (v.status IS NULL OR LOWER(TRIM(v.status)) != 'abgelehnt') ORDER BY v.start_date"); + $stmt->execute([$_SESSION['userid'], $end, $start]); + } + } + } +} + +try { + $vacations = $stmt->fetchAll(); + + // If debug mode is enabled, prepare meta information + if ($debugMode) { + $rawStatuses = array_map(function($r){ return $r['status'] ?? null; }, $vacations); + $meta = [ + 'branch' => $branch, + 'count' => count($vacations), + 'raw_statuses' => $rawStatuses + ]; + } + + foreach ($vacations as $v) { + // Normalize status: collapse whitespace (including NBSP), trim, lowercase + if (isset($v['status'])) { + $normalized = preg_replace('/\s+/u', ' ', $v['status']); + $status = mb_strtolower(trim($normalized)); + } else { + $status = ''; + } + // Defensive filter: do not expose rejected ('abgelehnt') entries to non-admins + if (!$isAdmin && !$includeRejected && mb_stripos($status, 'abgelehnt') !== false) { + continue; + } + $isApproved = (mb_stripos($status, 'genehmigt') !== false); + if ($isAdmin) { + $title = $v['vorname'] . ' ' . $v['nachname'] . ' (' . ($v['status'] ?? 'beantragt') . ')'; + } else { + $title = $isApproved ? 'Urlaub' : 'Urlaubsantrag'; + } + // Safely compute end date; fallback to start_date if invalid + try { + $endInclusive = (new DateTime($v['end_date']))->modify('+1 day')->format('Y-m-d'); + } catch (Exception $e) { + $endInclusive = $v['start_date']; + } + $events[] = [ + 'id' => 'vac_' . $v['id'], + 'title' => $title, + 'start' => $v['start_date'], + 'end' => $endInclusive, + 'allDay' => true, + 'color' => ($isApproved) ? '#28a745' : '#ffc107', + 'extendedProps' => [ + 'type' => 'user', + 'user_id' => $v['user_id'], + 'status' => $v['status'], + 'comment' => $v['comment_user'] ?? '' + ] + ]; + } +} catch (Exception $ex) { + header('Content-Type: application/json; charset=utf-8'); + $payload = ['error' => $ex->getMessage(), 'branch' => $branch, 'trace' => $ex->getTraceAsString()]; + echo json_encode($payload); + exit; +} + +} catch (Exception $ex) { + header('Content-Type: application/json; charset=utf-8'); + $payload = ['error' => $ex->getMessage(), 'branch' => $branch, 'trace' => $ex->getTraceAsString()]; + echo json_encode($payload); + exit; +} + +// Company holidays (visible to all) +$stmt = $pdo->prepare("SELECT * FROM company_holidays WHERE start_date <= ? AND end_date >= ? ORDER BY start_date"); +$stmt->execute([$end, $start]); +$holidays = $stmt->fetchAll(); + +foreach ($holidays as $h) { + $endInclusive = (new DateTime($h['end_date']))->modify('+1 day')->format('Y-m-d'); + $events[] = [ + 'id' => 'com_' . $h['id'], + 'title' => $h['description'] ?: 'Betriebsurlaub', + 'start' => $h['start_date'], + 'end' => $endInclusive, + 'allDay' => true, + 'color' => '#007bff', + 'extendedProps' => [ + 'type' => 'company', + 'description' => $h['description'] + ] + ]; +} + +header('Content-Type: application/json; charset=utf-8'); +if ($debugMode) { + echo json_encode(['events' => $events, 'meta' => $meta]); +} else { + echo json_encode($events); +} + +?> diff --git a/zeiterfassung/approveVacation.php b/zeiterfassung/approveVacation.php index c1bac6c..933cc3a 100644 --- a/zeiterfassung/approveVacation.php +++ b/zeiterfassung/approveVacation.php @@ -1,105 +1,105 @@ -prepare("UPDATE vacations SET status = 'genehmigt', approved_by = ?, approved_at = NOW() WHERE id = ?"); - $stmt->execute([$_SESSION['userid'], $id]); - } elseif ($action === 'reject') { - $stmt = $pdo->prepare("UPDATE vacations SET status = 'abgelehnt', approved_by = ?, approved_at = NOW() WHERE id = ?"); - $stmt->execute([$_SESSION['userid'], $id]); - } elseif ($action === 'delete' && is_admin_user()) { - $del = $pdo->prepare("DELETE FROM vacations WHERE id = ?"); - $del->execute([$id]); - } - - header('Location: approveVacation.php'); - exit(); -} - -include 'header.php'; - -// List pending and recent requests -$stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname, u.email FROM vacations v JOIN users u ON v.user_id = u.id ORDER BY v.created_at DESC"); -$stmt->execute(); -$requests = $stmt->fetchAll(); - -?> - -
-

Urlaubsanträge - Genehmigung

- - - - - - - - - - - - - - - - - - - - - - - - - - -
MitarbeiterVonBisTageKommentarStatusAktion
- Beantragt'; - } elseif ($r['status'] === 'genehmigt') { - echo 'Genehmigt'; - } else { - echo 'Abgelehnt'; - } - ?> - - -
- - - -
- - - -
- - - -
- -
- - - -
-
- -
- - +prepare("UPDATE vacations SET status = 'genehmigt', approved_by = ?, approved_at = NOW() WHERE id = ?"); + $stmt->execute([$_SESSION['userid'], $id]); + } elseif ($action === 'reject') { + $stmt = $pdo->prepare("UPDATE vacations SET status = 'abgelehnt', approved_by = ?, approved_at = NOW() WHERE id = ?"); + $stmt->execute([$_SESSION['userid'], $id]); + } elseif ($action === 'delete' && is_admin_user()) { + $del = $pdo->prepare("DELETE FROM vacations WHERE id = ?"); + $del->execute([$id]); + } + + header('Location: approveVacation.php'); + exit(); +} + +include 'header.php'; + +// List pending and recent requests +$stmt = $pdo->prepare("SELECT v.*, u.vorname, u.nachname, u.email FROM vacations v JOIN users u ON v.user_id = u.id ORDER BY v.created_at DESC"); +$stmt->execute(); +$requests = $stmt->fetchAll(); + +?> + +
+

Urlaubsanträge - Genehmigung

+ + + + + + + + + + + + + + + + + + + + + + + + + + +
MitarbeiterVonBisTageKommentarStatusAktion
+ Beantragt'; + } elseif ($r['status'] === 'genehmigt') { + echo 'Genehmigt'; + } else { + echo 'Abgelehnt'; + } + ?> + + +
+ + + +
+ + + +
+ + + +
+ +
+ + + +
+
+ +
+ + diff --git a/zeiterfassung/ausgabezeiten.php b/zeiterfassung/ausgabezeiten.php index 7a25a72..68cbcf8 100644 --- a/zeiterfassung/ausgabezeiten.php +++ b/zeiterfassung/ausgabezeiten.php @@ -1,98 +1,98 @@ - - - -
-
-
-

Stempelkarten-System

- -"; - // Abfrage für alle Zeitstempel des Tages - $query = " - SELECT timestamp_type, timestamp_datetime - FROM timestamps - WHERE employee_id = :employee_id AND DATE(timestamp_datetime) = :datum - ORDER BY timestamp_datetime - "; - try { - $stmt = $pdo->prepare($query); - $stmt->bindParam(':employee_id', $mitarbeiterId, PDO::PARAM_INT); - $stmt->bindParam(':datum', $datum); - $stmt->execute(); - $zeitstempel = $stmt->fetchAll(PDO::FETCH_ASSOC); - echo $zeitstempel; - } catch(PDOException $e) { - $pdo->rollBack(); - echo "Datenbankfehler: " . $e->getMessage(); - } - $fruehesteKommenZeit = null; - $spaetesteGehenZeit = null; - $gesamtarbeitszeit = new DateInterval('PT0S'); - $gesamtpausenzeit = new DateInterval('PT0S'); - $letzterGehenZeitstempel = null; - echo "test"; - foreach ($zeitstempel as $index => $eintrag) { - $zeit = new DateTime($eintrag['timestamp_datetime']); - echo "test2"; - if ($eintrag['timestamp_type'] === 'KOMMEN') { - echo "test3"; - if ($fruehesteKommenZeit === null || $zeit < $fruehesteKommenZeit) { - $fruehesteKommenZeit = $zeit; - } - if ($letzterGehenZeitstempel) { - $pause = $letzterGehenZeitstempel->diff($zeit); - $gesamtpausenzeit = $gesamtpausenzeit->add($pause); - } - } else if ($eintrag['timestamp_type'] === 'GEHEN') { - if ($spaetesteGehenZeit === null || $zeit > $spaetesteGehenZeit) { - $spaetesteGehenZeit = $zeit; - } - $letzterGehenZeitstempel = $zeit; - } - } - - if ($fruehesteKommenZeit && $spaetesteGehenZeit) { - $gesamtarbeitszeit = $fruehesteKommenZeit->diff($spaetesteGehenZeit)->subtract($gesamtpausenzeit); - } - #echo $gesamtarbeitszeit; - $zeitenProTag[$datum] = [ - 'fruehesteKommenZeit' => $fruehesteKommenZeit ? $fruehesteKommenZeit->format('H:i:s') : '', - 'spaetesteGehenZeit' => $spaetesteGehenZeit ? $spaetesteGehenZeit->format('H:i:s') : '', - 'gesamtarbeitszeit' => $gesamtarbeitszeit->format('%H:%I:%S'), - 'gesamtpausenzeit' => $gesamtpausenzeit->format('%H:%I:%S') - ]; -} - -// Ausgabe der Ergebnisse für Testzwecke -echo '
';
-print_r($zeitenProTag);
-echo '
'; -?> - -
-
-
- + + + +
+
+
+

Stempelkarten-System

+ +"; + // Abfrage für alle Zeitstempel des Tages + $query = " + SELECT timestamp_type, timestamp_datetime + FROM timestamps + WHERE employee_id = :employee_id AND DATE(timestamp_datetime) = :datum + ORDER BY timestamp_datetime + "; + try { + $stmt = $pdo->prepare($query); + $stmt->bindParam(':employee_id', $mitarbeiterId, PDO::PARAM_INT); + $stmt->bindParam(':datum', $datum); + $stmt->execute(); + $zeitstempel = $stmt->fetchAll(PDO::FETCH_ASSOC); + echo $zeitstempel; + } catch(PDOException $e) { + $pdo->rollBack(); + echo "Datenbankfehler: " . $e->getMessage(); + } + $fruehesteKommenZeit = null; + $spaetesteGehenZeit = null; + $gesamtarbeitszeit = new DateInterval('PT0S'); + $gesamtpausenzeit = new DateInterval('PT0S'); + $letzterGehenZeitstempel = null; + echo "test"; + foreach ($zeitstempel as $index => $eintrag) { + $zeit = new DateTime($eintrag['timestamp_datetime']); + echo "test2"; + if ($eintrag['timestamp_type'] === 'KOMMEN') { + echo "test3"; + if ($fruehesteKommenZeit === null || $zeit < $fruehesteKommenZeit) { + $fruehesteKommenZeit = $zeit; + } + if ($letzterGehenZeitstempel) { + $pause = $letzterGehenZeitstempel->diff($zeit); + $gesamtpausenzeit = $gesamtpausenzeit->add($pause); + } + } else if ($eintrag['timestamp_type'] === 'GEHEN') { + if ($spaetesteGehenZeit === null || $zeit > $spaetesteGehenZeit) { + $spaetesteGehenZeit = $zeit; + } + $letzterGehenZeitstempel = $zeit; + } + } + + if ($fruehesteKommenZeit && $spaetesteGehenZeit) { + $gesamtarbeitszeit = $fruehesteKommenZeit->diff($spaetesteGehenZeit)->subtract($gesamtpausenzeit); + } + #echo $gesamtarbeitszeit; + $zeitenProTag[$datum] = [ + 'fruehesteKommenZeit' => $fruehesteKommenZeit ? $fruehesteKommenZeit->format('H:i:s') : '', + 'spaetesteGehenZeit' => $spaetesteGehenZeit ? $spaetesteGehenZeit->format('H:i:s') : '', + 'gesamtarbeitszeit' => $gesamtarbeitszeit->format('%H:%I:%S'), + 'gesamtpausenzeit' => $gesamtpausenzeit->format('%H:%I:%S') + ]; +} + +// Ausgabe der Ergebnisse für Testzwecke +echo '
';
+print_r($zeitenProTag);
+echo '
'; +?> + +
+
+
+ \ No newline at end of file diff --git a/zeiterfassung/company_holidays.php b/zeiterfassung/company_holidays.php index dcbb6c4..d0a8b56 100644 --- a/zeiterfassung/company_holidays.php +++ b/zeiterfassung/company_holidays.php @@ -1,90 +1,90 @@ -prepare("INSERT INTO company_holidays (start_date, end_date, description, created_by) VALUES (?, ?, ?, ?)"); - $stmt->execute([$start, $end, $desc, $_SESSION['userid']]); - - header('Location: company_holidays.php'); - exit(); -} - -include 'header.php'; - -$stmt = $pdo->prepare("SELECT * FROM company_holidays ORDER BY start_date DESC"); -$stmt->execute(); -$holidays = $stmt->fetchAll(); - -?> - -
-

Betriebsurlaub verwalten

- -
-
- - -
-
- - -
-
- - -
- -
- - - - - - - - - - - - - - - - - - - - - - -
VonBisBeschreibungErstellt vonAktion
prepare("SELECT vorname, nachname FROM users WHERE id = ?"); - $s->execute([$h['created_by']]); - $u = $s->fetch(); - echo htmlspecialchars($u['vorname'] . ' ' . $u['nachname']); - ?> -
- - -
-
- -
- - +prepare("INSERT INTO company_holidays (start_date, end_date, description, created_by) VALUES (?, ?, ?, ?)"); + $stmt->execute([$start, $end, $desc, $_SESSION['userid']]); + + header('Location: company_holidays.php'); + exit(); +} + +include 'header.php'; + +$stmt = $pdo->prepare("SELECT * FROM company_holidays ORDER BY start_date DESC"); +$stmt->execute(); +$holidays = $stmt->fetchAll(); + +?> + +
+

Betriebsurlaub verwalten

+ +
+
+ + +
+
+ + +
+
+ + +
+ +
+ + + + + + + + + + + + + + + + + + + + + + +
VonBisBeschreibungErstellt vonAktion
prepare("SELECT vorname, nachname FROM users WHERE id = ?"); + $s->execute([$h['created_by']]); + $u = $s->fetch(); + echo htmlspecialchars($u['vorname'] . ' ' . $u['nachname']); + ?> +
+ + +
+
+ +
+ + diff --git a/zeiterfassung/createPDF.php b/zeiterfassung/createPDF.php index d5d21ab..2ddc6a5 100644 --- a/zeiterfassung/createPDF.php +++ b/zeiterfassung/createPDF.php @@ -1,241 +1,241 @@ -prepare($query2); - $stmt->bindParam(':employee_id', $user_id, PDO::PARAM_INT); - $stmt->bindParam(':selectedMonth', $selectedMonth, PDO::PARAM_INT); - $stmt->bindParam(':selectedYear', $selectedYear, PDO::PARAM_INT); - $stmt->execute(); - $result = $stmt->fetchAll(); - - #$invalidDates = []; - -} catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); -} - -foreach ($result as $row) { - - if (!isValidSequence($row["day_sequence"])) { - $fehlerhafteTage[] = $row["datum"]; - } -} - -if ($fehlerhafteTage){ - - include 'header.php'; ?> -
-
-
-

Stempelkarten-System

-Fehlzeiten erkannt

Bitte erst beheben.


"; - -?> - - Zurück - - -
-
-
- -prepare("SELECT vorname, nachname FROM users WHERE id = ?"); - $user_stmt->bindParam(1, $user_id); - $user_stmt->execute(); - $user = $user_stmt->fetch(PDO::FETCH_ASSOC); - - if ($user) { - $mitarbeiterName = $user['vorname'] . ' ' . $user['nachname']; - } else { - die("Mitarbeiter nicht gefunden."); - } - - // Holen Sie die Zeiten des Mitarbeiters aus der Datenbank - $times_stmt = $pdo->prepare("SELECT - DATE(timestamp_datetime) AS day, - MIN(CASE WHEN timestamp_type = 'KOMMEN' THEN timestamp_datetime END) AS first_come, - MAX(CASE WHEN timestamp_type = 'GEHEN' THEN timestamp_datetime END) AS last_go, - - SEC_TO_TIME(SUM( - CASE - WHEN timestamp_type = 'GEHEN' THEN UNIX_TIMESTAMP(timestamp_datetime) - WHEN timestamp_type = 'KOMMEN' THEN -UNIX_TIMESTAMP(timestamp_datetime) - ELSE 0 - END - )) AS total_time, - SEC_TO_TIME( - TIME_TO_SEC( - SEC_TO_TIME( - UNIX_TIMESTAMP( - MAX(CASE WHEN timestamp_type = 'GEHEN' THEN timestamp_datetime END) - ) - UNIX_TIMESTAMP( - MIN(CASE WHEN timestamp_type = 'KOMMEN' THEN timestamp_datetime END) - ) - ) - ) - TIME_TO_SEC(SEC_TO_TIME(SUM( - CASE - WHEN timestamp_type = 'GEHEN' THEN UNIX_TIMESTAMP(timestamp_datetime) - WHEN timestamp_type = 'KOMMEN' THEN -UNIX_TIMESTAMP(timestamp_datetime) - ELSE 0 - END - ))) - ) AS difference_between_total_time_and_pause_time -FROM - timestamps - WHERE - employee_id = :employee_id AND - MONTH(timestamp_datetime) = :month AND - YEAR(timestamp_datetime) = :year - GROUP BY - DATE(timestamp_datetime)"); - - $times_stmt->bindParam(':employee_id', $user_id, PDO::PARAM_INT); - $times_stmt->bindParam(':month', $selectedMonth, PDO::PARAM_INT); - $times_stmt->bindParam(':year', $selectedYear, PDO::PARAM_INT); - $times_stmt->execute(); - // Ergebnisse abrufen - #$result = $times_stmt->fetchAll(); - - #if (count($result) > 0) { - - // Erstellen eines leeren Arrays, um die gesammelten Daten zu speichern - $times_data = []; - - // Schleife durch die Ergebnisse der Abfrage und Speichern der Daten in einem assoziativen Array mit dem Tag als Schlüssel - while ($row = $times_stmt->fetch(PDO::FETCH_ASSOC)) { - $day = date('d', strtotime($row['day'])); - $times_data[$day] = $row; - } - - - // Erstellen des PDF-Dokuments - $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); - - $pdf->SetCreator(PDF_CREATOR); - $pdf->SetAuthor($mitarbeiterName); - $pdf->SetTitle('Arbeitszeiten'); - $pdf->SetSubject('Arbeitszeiten von ' . $mitarbeiterName); - - $pdf->AddPage(); - $stempdate = $selectedYear . "-" . $selectedMonth . "-1" ; - $date = new DateTime($stempdate); - - // the international date formater object - $formatter = new IntlDateFormatter( - "de-DE", - IntlDateFormatter::LONG, - IntlDateFormatter::NONE, - "Europe/Berlin", - IntlDateFormatter::GREGORIAN, - "MMMM" - ); - - // Konvertieren Sie die Monatsnummer in einen Monatsnamen - #$dateObj = DateTime::createFromFormat('!m', $selectedMonth); - $monthName = $formatter->format($date); // z.B. March - - - - $html = '

Arbeitszeiten - ' . $firmaName . '

'; - $html .= '

Mitarbeiter: ' . $mitarbeiterName . '

'; - $html .= '

Monat: ' . $monthName . ' ' . $selectedYear . '

'; - $html .= ''; - $html .= ''; - - // Schleife durch die Tage 1-31 - for ($day = 1; $day <= 31; $day++) { - - $daytwo = str_pad($day, 2, '0', STR_PAD_LEFT); - // Überprüfen, ob Daten für diesen Tag vorhanden sind - if (isset($times_data[$daytwo])) { - // Daten für diesen Tag aus dem Array abrufen - $row = $times_data[$daytwo]; - - $html .= ''; - list($hours, $minutes, $seconds) = explode(':', $row["total_time"]); - $totalSeconds += $hours * 3600 + $minutes * 60 + $seconds; - - - } else { - // Wenn keine Daten für diesen Tag vorhanden sind, eine leere Zeile ausgeben - $html .= ''; - } - - - } - // Umwandeln der gesamten Sekunden zurück in Stunden, Minuten, Sekunden - $hours = floor($totalSeconds / 3600); - $mins = floor($totalSeconds / 60 % 60); - $secs = floor($totalSeconds % 60); - $totalTime = sprintf('%02d:%02d:%02d', $hours, $mins, $secs); - - #echo "Gesamtzeit über alle Tage: " . $totalTime; - $html .= ''; - - $html .= '
TagStartPauseEndeGesamtzeitaufgezeichnet am:Bemerkung
' . $day . '' . date('H:i:s', strtotime($row['first_come'])) . '' . $row['difference_between_total_time_and_pause_time'] . '' . date('H:i:s', strtotime($row['last_go'])) . '' . $row['total_time'] . '' . date('d.m.Y', strtotime($row['day'])) . '
' . $day . '
Gesamt' . $totalTime .'
'; - - $pdf->writeHTML($html, true, false, true, false, ''); - - $pdf->Output('Arbeitszeiten_' . $user['nachname'] . '_' . $selectedYear . '_' . $selectedMonth . '.pdf', 'I'); - #} else { - # echo "Keine Ergebnisse gefunden"; - #} - - - -} catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); -} +prepare($query2); + $stmt->bindParam(':employee_id', $user_id, PDO::PARAM_INT); + $stmt->bindParam(':selectedMonth', $selectedMonth, PDO::PARAM_INT); + $stmt->bindParam(':selectedYear', $selectedYear, PDO::PARAM_INT); + $stmt->execute(); + $result = $stmt->fetchAll(); + + #$invalidDates = []; + +} catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); +} + +foreach ($result as $row) { + + if (!isValidSequence($row["day_sequence"])) { + $fehlerhafteTage[] = $row["datum"]; + } +} + +if ($fehlerhafteTage){ + + include 'header.php'; ?> +
+
+
+

Stempelkarten-System

+Fehlzeiten erkannt

Bitte erst beheben.


"; + +?> + + Zurück + + +
+
+
+ +prepare("SELECT vorname, nachname FROM users WHERE id = ?"); + $user_stmt->bindParam(1, $user_id); + $user_stmt->execute(); + $user = $user_stmt->fetch(PDO::FETCH_ASSOC); + + if ($user) { + $mitarbeiterName = $user['vorname'] . ' ' . $user['nachname']; + } else { + die("Mitarbeiter nicht gefunden."); + } + + // Holen Sie die Zeiten des Mitarbeiters aus der Datenbank + $times_stmt = $pdo->prepare("SELECT + DATE(timestamp_datetime) AS day, + MIN(CASE WHEN timestamp_type = 'KOMMEN' THEN timestamp_datetime END) AS first_come, + MAX(CASE WHEN timestamp_type = 'GEHEN' THEN timestamp_datetime END) AS last_go, + + SEC_TO_TIME(SUM( + CASE + WHEN timestamp_type = 'GEHEN' THEN UNIX_TIMESTAMP(timestamp_datetime) + WHEN timestamp_type = 'KOMMEN' THEN -UNIX_TIMESTAMP(timestamp_datetime) + ELSE 0 + END + )) AS total_time, + SEC_TO_TIME( + TIME_TO_SEC( + SEC_TO_TIME( + UNIX_TIMESTAMP( + MAX(CASE WHEN timestamp_type = 'GEHEN' THEN timestamp_datetime END) + ) - UNIX_TIMESTAMP( + MIN(CASE WHEN timestamp_type = 'KOMMEN' THEN timestamp_datetime END) + ) + ) + ) - TIME_TO_SEC(SEC_TO_TIME(SUM( + CASE + WHEN timestamp_type = 'GEHEN' THEN UNIX_TIMESTAMP(timestamp_datetime) + WHEN timestamp_type = 'KOMMEN' THEN -UNIX_TIMESTAMP(timestamp_datetime) + ELSE 0 + END + ))) + ) AS difference_between_total_time_and_pause_time +FROM + timestamps + WHERE + employee_id = :employee_id AND + MONTH(timestamp_datetime) = :month AND + YEAR(timestamp_datetime) = :year + GROUP BY + DATE(timestamp_datetime)"); + + $times_stmt->bindParam(':employee_id', $user_id, PDO::PARAM_INT); + $times_stmt->bindParam(':month', $selectedMonth, PDO::PARAM_INT); + $times_stmt->bindParam(':year', $selectedYear, PDO::PARAM_INT); + $times_stmt->execute(); + // Ergebnisse abrufen + #$result = $times_stmt->fetchAll(); + + #if (count($result) > 0) { + + // Erstellen eines leeren Arrays, um die gesammelten Daten zu speichern + $times_data = []; + + // Schleife durch die Ergebnisse der Abfrage und Speichern der Daten in einem assoziativen Array mit dem Tag als Schlüssel + while ($row = $times_stmt->fetch(PDO::FETCH_ASSOC)) { + $day = date('d', strtotime($row['day'])); + $times_data[$day] = $row; + } + + + // Erstellen des PDF-Dokuments + $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); + + $pdf->SetCreator(PDF_CREATOR); + $pdf->SetAuthor($mitarbeiterName); + $pdf->SetTitle('Arbeitszeiten'); + $pdf->SetSubject('Arbeitszeiten von ' . $mitarbeiterName); + + $pdf->AddPage(); + $stempdate = $selectedYear . "-" . $selectedMonth . "-1" ; + $date = new DateTime($stempdate); + + // the international date formater object + $formatter = new IntlDateFormatter( + "de-DE", + IntlDateFormatter::LONG, + IntlDateFormatter::NONE, + "Europe/Berlin", + IntlDateFormatter::GREGORIAN, + "MMMM" + ); + + // Konvertieren Sie die Monatsnummer in einen Monatsnamen + #$dateObj = DateTime::createFromFormat('!m', $selectedMonth); + $monthName = $formatter->format($date); // z.B. March + + + + $html = '

Arbeitszeiten - ' . $firmaName . '

'; + $html .= '

Mitarbeiter: ' . $mitarbeiterName . '

'; + $html .= '

Monat: ' . $monthName . ' ' . $selectedYear . '

'; + $html .= ''; + $html .= ''; + + // Schleife durch die Tage 1-31 + for ($day = 1; $day <= 31; $day++) { + + $daytwo = str_pad($day, 2, '0', STR_PAD_LEFT); + // Überprüfen, ob Daten für diesen Tag vorhanden sind + if (isset($times_data[$daytwo])) { + // Daten für diesen Tag aus dem Array abrufen + $row = $times_data[$daytwo]; + + $html .= ''; + list($hours, $minutes, $seconds) = explode(':', $row["total_time"]); + $totalSeconds += $hours * 3600 + $minutes * 60 + $seconds; + + + } else { + // Wenn keine Daten für diesen Tag vorhanden sind, eine leere Zeile ausgeben + $html .= ''; + } + + + } + // Umwandeln der gesamten Sekunden zurück in Stunden, Minuten, Sekunden + $hours = floor($totalSeconds / 3600); + $mins = floor($totalSeconds / 60 % 60); + $secs = floor($totalSeconds % 60); + $totalTime = sprintf('%02d:%02d:%02d', $hours, $mins, $secs); + + #echo "Gesamtzeit über alle Tage: " . $totalTime; + $html .= ''; + + $html .= '
TagStartPauseEndeGesamtzeitaufgezeichnet am:Bemerkung
' . $day . '' . date('H:i:s', strtotime($row['first_come'])) . '' . $row['difference_between_total_time_and_pause_time'] . '' . date('H:i:s', strtotime($row['last_go'])) . '' . $row['total_time'] . '' . date('d.m.Y', strtotime($row['day'])) . '
' . $day . '
Gesamt' . $totalTime .'
'; + + $pdf->writeHTML($html, true, false, true, false, ''); + + $pdf->Output('Arbeitszeiten_' . $user['nachname'] . '_' . $selectedYear . '_' . $selectedMonth . '.pdf', 'I'); + #} else { + # echo "Keine Ergebnisse gefunden"; + #} + + + +} catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); +} ?> \ No newline at end of file diff --git a/zeiterfassung/deleteCompanyHoliday.php b/zeiterfassung/deleteCompanyHoliday.php index 32e4047..879455d 100644 --- a/zeiterfassung/deleteCompanyHoliday.php +++ b/zeiterfassung/deleteCompanyHoliday.php @@ -1,26 +1,26 @@ -prepare("DELETE FROM company_holidays WHERE id = ?"); -$stmt->execute([$id]); - -header('Location: company_holidays.php'); -exit; +prepare("DELETE FROM company_holidays WHERE id = ?"); +$stmt->execute([$id]); + +header('Location: company_holidays.php'); +exit; ?> \ No newline at end of file diff --git a/zeiterfassung/deleteDayEntry.php b/zeiterfassung/deleteDayEntry.php index 69dd111..3f2af23 100644 --- a/zeiterfassung/deleteDayEntry.php +++ b/zeiterfassung/deleteDayEntry.php @@ -1,51 +1,51 @@ - -
-
-
-prepare($sql); - - // Binden von Parametern - $stmt->bindParam(':timestamp_id', $timestamp_id, PDO::PARAM_INT); - - // Ausführen der vorbereiteten Abfrage - $stmt->execute(); - - // Erfolgreich gelöscht - echo "Buchung erfolgreich gelöscht"; - } else { - // Fehler, wenn timestamp_id nicht im POST-Array gefunden wurde - echo "Fehler: timestamp_id nicht gefunden"; - } -} catch(PDOException $e) { - // Fehler beim Verbindungsaufbau oder bei der Abfrage - echo "Fehler: " . $e->getMessage(); -} - - -?> - - -
-
-
- + +
+
+
+prepare($sql); + + // Binden von Parametern + $stmt->bindParam(':timestamp_id', $timestamp_id, PDO::PARAM_INT); + + // Ausführen der vorbereiteten Abfrage + $stmt->execute(); + + // Erfolgreich gelöscht + echo "Buchung erfolgreich gelöscht"; + } else { + // Fehler, wenn timestamp_id nicht im POST-Array gefunden wurde + echo "Fehler: timestamp_id nicht gefunden"; + } +} catch(PDOException $e) { + // Fehler beim Verbindungsaufbau oder bei der Abfrage + echo "Fehler: " . $e->getMessage(); +} + + +?> + + +
+
+
+ \ No newline at end of file diff --git a/zeiterfassung/deleteEntry.php b/zeiterfassung/deleteEntry.php index 74d113f..aa051b3 100644 --- a/zeiterfassung/deleteEntry.php +++ b/zeiterfassung/deleteEntry.php @@ -1,39 +1,39 @@ -prepare($sql); - - // Binden von Parametern - $stmt->bindParam(':timestamp_id', $timestamp_id, PDO::PARAM_INT); - - // Ausführen der vorbereiteten Abfrage - $stmt->execute(); - - // Erfolgreich gelöscht - echo "Buchung erfolgreich gelöscht"; - } else { - // Fehler, wenn timestamp_id nicht im POST-Array gefunden wurde - echo "Fehler: timestamp_id nicht gefunden"; - } -} catch(PDOException $e) { - // Fehler beim Verbindungsaufbau oder bei der Abfrage - echo "Fehler: " . $e->getMessage(); -} - - +prepare($sql); + + // Binden von Parametern + $stmt->bindParam(':timestamp_id', $timestamp_id, PDO::PARAM_INT); + + // Ausführen der vorbereiteten Abfrage + $stmt->execute(); + + // Erfolgreich gelöscht + echo "Buchung erfolgreich gelöscht"; + } else { + // Fehler, wenn timestamp_id nicht im POST-Array gefunden wurde + echo "Fehler: timestamp_id nicht gefunden"; + } +} catch(PDOException $e) { + // Fehler beim Verbindungsaufbau oder bei der Abfrage + echo "Fehler: " . $e->getMessage(); +} + + ?> \ No newline at end of file diff --git a/zeiterfassung/deleteVacation.php b/zeiterfassung/deleteVacation.php index f5d95e9..451b959 100644 --- a/zeiterfassung/deleteVacation.php +++ b/zeiterfassung/deleteVacation.php @@ -1,38 +1,38 @@ -prepare("SELECT user_id, status FROM vacations WHERE id = ?"); -$stmt->execute([$id]); -$vac = $stmt->fetch(); - -if (!$vac) { - die('Urlaubseintrag nicht gefunden.'); -} - -$isAdmin = is_admin_user(); - -if (!$isAdmin && $vac['user_id'] != $_SESSION['userid']) { - die('Zugriff verweigert.'); -} - -// Allow deletion for admins or owner -$del = $pdo->prepare("DELETE FROM vacations WHERE id = ?"); -$del->execute([$id]); - -header('Location: ' . $referer); -exit(); - -?> +prepare("SELECT user_id, status FROM vacations WHERE id = ?"); +$stmt->execute([$id]); +$vac = $stmt->fetch(); + +if (!$vac) { + die('Urlaubseintrag nicht gefunden.'); +} + +$isAdmin = is_admin_user(); + +if (!$isAdmin && $vac['user_id'] != $_SESSION['userid']) { + die('Zugriff verweigert.'); +} + +// Allow deletion for admins or owner +$del = $pdo->prepare("DELETE FROM vacations WHERE id = ?"); +$del->execute([$id]); + +header('Location: ' . $referer); +exit(); + +?> diff --git a/zeiterfassung/editDayEntries.php b/zeiterfassung/editDayEntries.php index 820d571..956dc70 100644 --- a/zeiterfassung/editDayEntries.php +++ b/zeiterfassung/editDayEntries.php @@ -1,116 +1,116 @@ - - - -
-
-
-

Stempelkarten-System

- -prepare($query); - $stmt->bindParam(':employee_id', $user_id, PDO::PARAM_INT); - $stmt->bindParam(':datum', $datum); - $stmt->execute(); - $buchungen = $stmt->fetchAll(PDO::FETCH_ASSOC); - } catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); - } -} else { - die("Fehler: Mitarbeiter-ID oder Datum fehlt."); -} - -// ... [Hier könnten Sie PHP-Code für die Bearbeitung der Buchungen hinzufügen] - -?> - - - - - Tageseinträge bearbeiten - - - - -
-

Tageseinträge bearbeiten -

- - -
- - - $buchung): ?> -
- - - - - Löschen - - -
- - -
- -
-
- -

- -
- - - - -
-
-
- - + + + +
+
+
+

Stempelkarten-System

+ +prepare($query); + $stmt->bindParam(':employee_id', $user_id, PDO::PARAM_INT); + $stmt->bindParam(':datum', $datum); + $stmt->execute(); + $buchungen = $stmt->fetchAll(PDO::FETCH_ASSOC); + } catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); + } +} else { + die("Fehler: Mitarbeiter-ID oder Datum fehlt."); +} + +// ... [Hier könnten Sie PHP-Code für die Bearbeitung der Buchungen hinzufügen] + +?> + + + + + Tageseinträge bearbeiten + + + + +
+

Tageseinträge bearbeiten -

+ + +
+ + + $buchung): ?> +
+ + + + + Löschen + + +
+ + +
+ +
+
+ +

+ +
+ + + + +
+
+
+ + \ No newline at end of file diff --git a/zeiterfassung/editTimeEntry.php b/zeiterfassung/editTimeEntry.php index 23ce022..a6e8d46 100644 --- a/zeiterfassung/editTimeEntry.php +++ b/zeiterfassung/editTimeEntry.php @@ -1,26 +1,26 @@ - + diff --git a/zeiterfassung/editworker.php b/zeiterfassung/editworker.php index e2c53c8..41d2bb8 100644 --- a/zeiterfassung/editworker.php +++ b/zeiterfassung/editworker.php @@ -1,122 +1,122 @@ - - - -
-
-
- -prepare("SELECT * FROM users WHERE id = ?"); - $stmt->execute([$id]); - $mitarbeiter = $stmt->fetch(PDO::FETCH_ASSOC); - - if (!$mitarbeiter) { - die('Mitarbeiter nicht gefunden!'); - } -} else { - die('Ungültige Anfrage!'); -} - -if ($_SERVER['REQUEST_METHOD'] == 'POST') { - $email = $_POST['email']; - $vorname = $_POST['vorname']; - $nachname = $_POST['nachname']; - $card_id = $_POST['card_id'] ?? ''; - $card2_id = $_POST['card2_id'] ?? ''; - $worker = $_POST['worker'] ?? 0; - - $sql = "UPDATE users SET email=?, vorname=?, nachname=?, worker=?, admin=?, zeiterfassung=?, card_id=?, card2_id=? WHERE id=?"; - $stmt = $pdo->prepare($sql); - $stmt->execute([$email, $vorname, $nachname, $_POST['worker'], $_POST['admin'], $_POST['zeiterfassung'], $card_id, $card2_id, $id]); - - // Zusatzaktion für users_worker - if ($worker == 1) { - // Prüfen, ob der Eintrag schon existiert - $checkSql = "SELECT COUNT(*) FROM users_worker WHERE userid = ?"; - $checkStmt = $pdo->prepare($checkSql); - $checkStmt->execute([$id]); - $exists = $checkStmt->fetchColumn(); - - if ($exists == 0) { - // Eintrag hinzufügen - $insertSql = "INSERT INTO users_worker (workerid, userid) VALUES (?, ?)"; - $insertStmt = $pdo->prepare($insertSql); - $insertStmt->execute([$id, $id]); - } - } else { - // Eintrag löschen - $deleteSql = "DELETE FROM users_worker WHERE userid = ?"; - $deleteStmt = $pdo->prepare($deleteSql); - $deleteStmt->execute([$id]); - } - - echo "
"; - // Optional: Umleitung - // header('Location: index.php'); -}else{ -?> - -
-

Mitarbeiter bearbeiten

-
-
- - -
-
- - -
-
- - -
-
- > - -
-
- > - -
-
- > - -
-
- - -
-
- - -
- -
-
- - - -
- -
- -
-
- + + + +
+
+
+ +prepare("SELECT * FROM users WHERE id = ?"); + $stmt->execute([$id]); + $mitarbeiter = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$mitarbeiter) { + die('Mitarbeiter nicht gefunden!'); + } +} else { + die('Ungültige Anfrage!'); +} + +if ($_SERVER['REQUEST_METHOD'] == 'POST') { + $email = $_POST['email']; + $vorname = $_POST['vorname']; + $nachname = $_POST['nachname']; + $card_id = $_POST['card_id'] ?? ''; + $card2_id = $_POST['card2_id'] ?? ''; + $worker = $_POST['worker'] ?? 0; + + $sql = "UPDATE users SET email=?, vorname=?, nachname=?, worker=?, admin=?, zeiterfassung=?, card_id=?, card2_id=? WHERE id=?"; + $stmt = $pdo->prepare($sql); + $stmt->execute([$email, $vorname, $nachname, $_POST['worker'], $_POST['admin'], $_POST['zeiterfassung'], $card_id, $card2_id, $id]); + + // Zusatzaktion für users_worker + if ($worker == 1) { + // Prüfen, ob der Eintrag schon existiert + $checkSql = "SELECT COUNT(*) FROM users_worker WHERE userid = ?"; + $checkStmt = $pdo->prepare($checkSql); + $checkStmt->execute([$id]); + $exists = $checkStmt->fetchColumn(); + + if ($exists == 0) { + // Eintrag hinzufügen + $insertSql = "INSERT INTO users_worker (workerid, userid) VALUES (?, ?)"; + $insertStmt = $pdo->prepare($insertSql); + $insertStmt->execute([$id, $id]); + } + } else { + // Eintrag löschen + $deleteSql = "DELETE FROM users_worker WHERE userid = ?"; + $deleteStmt = $pdo->prepare($deleteSql); + $deleteStmt->execute([$id]); + } + + echo "
"; + // Optional: Umleitung + // header('Location: index.php'); +}else{ +?> + +
+

Mitarbeiter bearbeiten

+
+
+ + +
+
+ + +
+
+ + +
+
+ > + +
+
+ > + +
+
+ > + +
+
+ + +
+
+ + +
+ +
+
+ + + +
+ +
+ +
+
+ \ No newline at end of file diff --git a/zeiterfassung/editworkerpassword.php b/zeiterfassung/editworkerpassword.php index 3c0f6e7..a2d954e 100644 --- a/zeiterfassung/editworkerpassword.php +++ b/zeiterfassung/editworkerpassword.php @@ -1,78 +1,78 @@ - - - -
-
-
- -prepare("SELECT * FROM users WHERE id = ?"); - $stmt->execute([$id]); - $mitarbeiter = $stmt->fetch(PDO::FETCH_ASSOC); - - if (!$mitarbeiter) { - die('Mitarbeiter nicht gefunden!'); - } -} else { - die('Ungültige Anfrage!'); -} - - -if ($_SERVER['REQUEST_METHOD'] == 'POST') { - if(isset($_GET['send'])) { - $passwort = $_POST['passwort']; - $passwort2 = $_POST['passwort2']; - - if($passwort != $passwort2) { - $msg = "Bitte identische Passwörter eingeben"; - } else { //Speichere neues Passwort und lösche den Code - $passworthash = password_hash($passwort, PASSWORD_DEFAULT); - $statement = $pdo->prepare("UPDATE users SET passwort = :passworthash, passwortcode = NULL, passwortcode_time = NULL WHERE id = :userid"); - $result = $statement->execute(array('passworthash' => $passworthash, 'userid'=> $id )); - - if($result) { - echo "
"; - } - } - } - - // Optional: Umleitung - // header('Location: index.php'); -}else{ -?> - -
- -

Neues Passwort vergeben

- -Passwort von Mitarbeiter: " . htmlspecialchars($mitarbeiter['vorname']) . " " . htmlspecialchars($mitarbeiter['nachname']) . " ändern." ?> - -
-
-
- -
-
- - -
- -
- - -
-
-
- + + + +
+
+
+ +prepare("SELECT * FROM users WHERE id = ?"); + $stmt->execute([$id]); + $mitarbeiter = $stmt->fetch(PDO::FETCH_ASSOC); + + if (!$mitarbeiter) { + die('Mitarbeiter nicht gefunden!'); + } +} else { + die('Ungültige Anfrage!'); +} + + +if ($_SERVER['REQUEST_METHOD'] == 'POST') { + if(isset($_GET['send'])) { + $passwort = $_POST['passwort']; + $passwort2 = $_POST['passwort2']; + + if($passwort != $passwort2) { + $msg = "Bitte identische Passwörter eingeben"; + } else { //Speichere neues Passwort und lösche den Code + $passworthash = password_hash($passwort, PASSWORD_DEFAULT); + $statement = $pdo->prepare("UPDATE users SET passwort = :passworthash, passwortcode = NULL, passwortcode_time = NULL WHERE id = :userid"); + $result = $statement->execute(array('passworthash' => $passworthash, 'userid'=> $id )); + + if($result) { + echo "
"; + } + } + } + + // Optional: Umleitung + // header('Location: index.php'); +}else{ +?> + +
+ +

Neues Passwort vergeben

+ +Passwort von Mitarbeiter: " . htmlspecialchars($mitarbeiter['vorname']) . " " . htmlspecialchars($mitarbeiter['nachname']) . " ändern." ?> + +
+
+
+ +
+
+ + +
+ +
+ + +
+
+
+ \ No newline at end of file diff --git a/zeiterfassung/fehlbuchungen.php b/zeiterfassung/fehlbuchungen.php index ea09eb2..7898993 100644 --- a/zeiterfassung/fehlbuchungen.php +++ b/zeiterfassung/fehlbuchungen.php @@ -1,100 +1,100 @@ -prepare($query2); - $stmt->bindParam(':employee_id', $user["id"], PDO::PARAM_INT); - $stmt->execute(); - $result = $stmt->fetchAll(); - - $invalidDates = []; - -} catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); -} - - - -?> - - -
-
-
- - -
-

Zeitbuchungsfehler Auswertung

- - - - - - - - - - - - - - - - - - - - - - - - - -
DatumFehlerAktionen
Fehlerhafte KOMMEN/GEHEN Buchung - Anpassen -
- - - - -
-
-
+prepare($query2); + $stmt->bindParam(':employee_id', $user["id"], PDO::PARAM_INT); + $stmt->execute(); + $result = $stmt->fetchAll(); + + $invalidDates = []; + +} catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); +} + + + +?> + + +
+
+
+ + +
+

Zeitbuchungsfehler Auswertung

+ + + + + + + + + + + + + + + + + + + + + + + + + +
DatumFehlerAktionen
Fehlerhafte KOMMEN/GEHEN Buchung + Anpassen +
+ + + + +
+
+
\ No newline at end of file diff --git a/zeiterfassung/footer.php b/zeiterfassung/footer.php index c517bcb..bce973d 100644 --- a/zeiterfassung/footer.php +++ b/zeiterfassung/footer.php @@ -1,7 +1,7 @@ - - - - - - + + + + + + \ No newline at end of file diff --git a/zeiterfassung/header.php b/zeiterfassung/header.php index 90deb9e..8b2794b 100644 --- a/zeiterfassung/header.php +++ b/zeiterfassung/header.php @@ -1,93 +1,93 @@ - - - - - - Ihre Webseite - - - - -prepare("SELECT * FROM users WHERE id = ?"); - $stmt->execute([$_SESSION['userid']]); - $user = $stmt->fetch(); - } else { - // Minimal default to avoid notices when not logged in - $user = ['admin' => 0, 'zeiterfassung' => 0]; - } -} -?> - - - - + + + + + Ihre Webseite + + + + +prepare("SELECT * FROM users WHERE id = ?"); + $stmt->execute([$_SESSION['userid']]); + $user = $stmt->fetch(); + } else { + // Minimal default to avoid notices when not logged in + $user = ['admin' => 0, 'zeiterfassung' => 0]; + } +} +?> + + + + - - -
-
-
-

Stempelkarten-System

- -prepare("SELECT vorname FROM users WHERE id = ?"); - $stmt->bindParam(1, $user_id); - $stmt->execute(); - $user = $stmt->fetch(PDO::FETCH_ASSOC); - - - if ($user) { - // Logik für das Setzen des Zeitstempels - $stmt = $pdo->prepare("SELECT COUNT(CASE WHEN timestamp_type = 'KOMMEN' THEN 1 ELSE NULL END) AS AnzahlKommen, COUNT(CASE WHEN timestamp_type = 'GEHEN' THEN 1 ELSE NULL END) AS AnzahlGehen FROM timestamps WHERE employee_id = ? AND DATE(timestamp_datetime) = CURDATE()"); - $stmt->bindParam(1, $user_id); - $stmt->execute(); - $timestamp_data = $stmt->fetch(PDO::FETCH_ASSOC); - - $timestamp_type = $timestamp_data['AnzahlKommen'] > $timestamp_data['AnzahlGehen'] ? "GEHEN" : "KOMMEN"; - - // Zeitstempel hinzufügen - $insert_stmt = $pdo->prepare("INSERT INTO timestamps (employee_id, timestamp_type, timestamp_datetime, timestamp_endpoint) VALUES (?, ?, NOW(), 1)"); - $insert_stmt->bindParam(1, $user_id); - $insert_stmt->bindParam(2, $timestamp_type); - $insert_stmt->execute(); - - if ($insert_stmt->rowCount() > 0) { - echo '
Zeitstempel für ' . $user['vorname'] . " erfolgreich gesetzt: " . $timestamp_type . "
"; - } else { - echo "Fehler beim Speichern des Zeitstempels."; - } - } else { - echo "Benutzer nicht gefunden."; - } - } catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); - } -} - -$aktueller_status = "Unbekannt"; -$letzte_aktion_zeit = "N/A"; - -try { - // Abfragen des letzten Status und der Zeit des Mitarbeiters - $status_stmt = $pdo->prepare("SELECT timestamp_type, timestamp_datetime FROM timestamps WHERE employee_id = ? ORDER BY timestamp_datetime DESC LIMIT 1"); - $status_stmt->bindParam(1, $user_id); - $status_stmt->execute(); - $status_data = $status_stmt->fetch(PDO::FETCH_ASSOC); - - if ($status_data) { - $aktueller_status = $status_data['timestamp_type']; - $letzte_aktion_zeit = $status_data['timestamp_datetime']; - } -} catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); -} - - - - -try { - - $query2 = " - SELECT - DATE(timestamp_datetime) AS datum, - GROUP_CONCAT(timestamp_type ORDER BY timestamp_datetime) AS day_sequence - FROM - timestamps - WHERE - employee_id = :employee_id AND - DATE(timestamp_datetime) != CURDATE() - GROUP BY - DATE(timestamp_datetime);"; - - $stmt = $pdo->prepare($query2); - $stmt->bindParam(':employee_id', $user["id"], PDO::PARAM_INT); - $stmt->execute(); - $result = $stmt->fetchAll(); - - #$invalidDates = []; - -} catch(PDOException $e) { - echo "Datenbankfehler: " . $e->getMessage(); -} - - -foreach ($result as $row) { - if (!isValidSequence($row["day_sequence"])) { - $fehlerhafteTage[] = $row["datum"]; - } -} - - -#print_r($fehlerhafteTage); - -?> - -
- -
-

Es gibt ein Buchungsproblem! Zur Anpassung

-
- - - - -

Aktueller Status: ABWESEND

'; -} elseif ($aktueller_status == 'KOMMEN') { - echo '
ANWESEND
'; -} else { - // Wenn weder "GEHEN" noch "KOMMEN" ist, handle es entsprechend - echo '
Unbekannter Status
'; -} - - ?>

- -
-

Letzte Stempelzeit:

-
- - -

- -
- -
- -
-
-
- + + + +
+
+
+

Stempelkarten-System

+ +prepare("SELECT vorname FROM users WHERE id = ?"); + $stmt->bindParam(1, $user_id); + $stmt->execute(); + $user = $stmt->fetch(PDO::FETCH_ASSOC); + + + if ($user) { + // Logik für das Setzen des Zeitstempels + $stmt = $pdo->prepare("SELECT COUNT(CASE WHEN timestamp_type = 'KOMMEN' THEN 1 ELSE NULL END) AS AnzahlKommen, COUNT(CASE WHEN timestamp_type = 'GEHEN' THEN 1 ELSE NULL END) AS AnzahlGehen FROM timestamps WHERE employee_id = ? AND DATE(timestamp_datetime) = CURDATE()"); + $stmt->bindParam(1, $user_id); + $stmt->execute(); + $timestamp_data = $stmt->fetch(PDO::FETCH_ASSOC); + + $timestamp_type = $timestamp_data['AnzahlKommen'] > $timestamp_data['AnzahlGehen'] ? "GEHEN" : "KOMMEN"; + + // Zeitstempel hinzufügen + $insert_stmt = $pdo->prepare("INSERT INTO timestamps (employee_id, timestamp_type, timestamp_datetime, timestamp_endpoint) VALUES (?, ?, NOW(), 1)"); + $insert_stmt->bindParam(1, $user_id); + $insert_stmt->bindParam(2, $timestamp_type); + $insert_stmt->execute(); + + if ($insert_stmt->rowCount() > 0) { + echo '
Zeitstempel für ' . $user['vorname'] . " erfolgreich gesetzt: " . $timestamp_type . "
"; + } else { + echo "Fehler beim Speichern des Zeitstempels."; + } + } else { + echo "Benutzer nicht gefunden."; + } + } catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); + } +} + +$aktueller_status = "Unbekannt"; +$letzte_aktion_zeit = "N/A"; + +try { + // Abfragen des letzten Status und der Zeit des Mitarbeiters + $status_stmt = $pdo->prepare("SELECT timestamp_type, timestamp_datetime FROM timestamps WHERE employee_id = ? ORDER BY timestamp_datetime DESC LIMIT 1"); + $status_stmt->bindParam(1, $user_id); + $status_stmt->execute(); + $status_data = $status_stmt->fetch(PDO::FETCH_ASSOC); + + if ($status_data) { + $aktueller_status = $status_data['timestamp_type']; + $letzte_aktion_zeit = $status_data['timestamp_datetime']; + } +} catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); +} + + + + +try { + + $query2 = " + SELECT + DATE(timestamp_datetime) AS datum, + GROUP_CONCAT(timestamp_type ORDER BY timestamp_datetime) AS day_sequence + FROM + timestamps + WHERE + employee_id = :employee_id AND + DATE(timestamp_datetime) != CURDATE() + GROUP BY + DATE(timestamp_datetime);"; + + $stmt = $pdo->prepare($query2); + $stmt->bindParam(':employee_id', $user["id"], PDO::PARAM_INT); + $stmt->execute(); + $result = $stmt->fetchAll(); + + #$invalidDates = []; + +} catch(PDOException $e) { + echo "Datenbankfehler: " . $e->getMessage(); +} + + +foreach ($result as $row) { + if (!isValidSequence($row["day_sequence"])) { + $fehlerhafteTage[] = $row["datum"]; + } +} + + +#print_r($fehlerhafteTage); + +?> + +
+ +
+

Es gibt ein Buchungsproblem! Zur Anpassung

+
+ + + + +

Aktueller Status: ABWESEND

'; +} elseif ($aktueller_status == 'KOMMEN') { + echo '
ANWESEND
'; +} else { + // Wenn weder "GEHEN" noch "KOMMEN" ist, handle es entsprechend + echo '
Unbekannter Status
'; +} + + ?>

+ +
+

Letzte Stempelzeit:

+
+ + +

+ +
+ +
+ +
+
+
+ \ No newline at end of file diff --git a/zeiterfassung/my_vacations_calendar.php b/zeiterfassung/my_vacations_calendar.php index badbc0e..918e94b 100644 --- a/zeiterfassung/my_vacations_calendar.php +++ b/zeiterfassung/my_vacations_calendar.php @@ -1,61 +1,61 @@ - - -
-

Mein Urlaubskalender

-
-
-
- genehmigt - beantragt - Betriebsurlaub -
-
- -
- - - - - - + + +
+

Mein Urlaubskalender

+
+
+
+ genehmigt + beantragt + Betriebsurlaub +
+
+ +
+ + + + + + diff --git a/zeiterfassung/saveDayEntries.php b/zeiterfassung/saveDayEntries.php index 5b15f99..c784d7f 100644 --- a/zeiterfassung/saveDayEntries.php +++ b/zeiterfassung/saveDayEntries.php @@ -1,80 +1,80 @@ - - - -
-
-
-

Stempelkarten-System

- - $buchung) { - if (date('Y-m-d', strtotime($buchung['timestamp_datetime'])) !== $datum) { - die("Fehler: Nicht alle Termineinträge sind für denselben Tag."); - } - } - - try { - $pdo->beginTransaction(); - - // Löschvorgänge durchführen - foreach ($deleted_entries as $deleted_id) { - $delete_query = "DELETE FROM timestamps WHERE timestamp_id = :timestamp_id AND employee_id = :employee_id"; - $stmt = $pdo->prepare($delete_query); - $stmt->bindParam(':timestamp_id', $deleted_id, PDO::PARAM_INT); - $stmt->bindParam(':employee_id', $employee_id, PDO::PARAM_INT); - $stmt->execute(); - } - - // Speichern oder Aktualisieren der Buchungen - foreach ($buchungen as $timestamp_id => $buchung) { - if (strpos($timestamp_id, 'new_') !== false) { - // Neue Buchung hinzufügen - $insert_query = "INSERT INTO timestamps (employee_id, timestamp_type, timestamp_datetime) VALUES (:employee_id, :timestamp_type, :timestamp_datetime)"; - $stmt = $pdo->prepare($insert_query); - } else { - // Bestehende Buchung aktualisieren - $update_query = "UPDATE timestamps SET timestamp_type = :timestamp_type, timestamp_datetime = :timestamp_datetime WHERE timestamp_id = :timestamp_id AND employee_id = :employee_id"; - $stmt = $pdo->prepare($update_query); - $stmt->bindParam(':timestamp_id', $timestamp_id, PDO::PARAM_INT); - } - - $stmt->bindParam(':employee_id', $employee_id, PDO::PARAM_INT); - $stmt->bindParam(':timestamp_type', $buchung['timestamp_type']); - $stmt->bindParam(':timestamp_datetime', $buchung['timestamp_datetime']); - $stmt->execute(); - } - - $pdo->commit(); - echo "Änderungen erfolgreich gespeichert."; - } catch(PDOException $e) { - $pdo->rollBack(); - echo "Datenbankfehler: " . $e->getMessage(); - } -} else { - die("Ungültige Anfrage."); -} -?> -
-
-
- + + + +
+
+
+

Stempelkarten-System

+ + $buchung) { + if (date('Y-m-d', strtotime($buchung['timestamp_datetime'])) !== $datum) { + die("Fehler: Nicht alle Termineinträge sind für denselben Tag."); + } + } + + try { + $pdo->beginTransaction(); + + // Löschvorgänge durchführen + foreach ($deleted_entries as $deleted_id) { + $delete_query = "DELETE FROM timestamps WHERE timestamp_id = :timestamp_id AND employee_id = :employee_id"; + $stmt = $pdo->prepare($delete_query); + $stmt->bindParam(':timestamp_id', $deleted_id, PDO::PARAM_INT); + $stmt->bindParam(':employee_id', $employee_id, PDO::PARAM_INT); + $stmt->execute(); + } + + // Speichern oder Aktualisieren der Buchungen + foreach ($buchungen as $timestamp_id => $buchung) { + if (strpos($timestamp_id, 'new_') !== false) { + // Neue Buchung hinzufügen + $insert_query = "INSERT INTO timestamps (employee_id, timestamp_type, timestamp_datetime) VALUES (:employee_id, :timestamp_type, :timestamp_datetime)"; + $stmt = $pdo->prepare($insert_query); + } else { + // Bestehende Buchung aktualisieren + $update_query = "UPDATE timestamps SET timestamp_type = :timestamp_type, timestamp_datetime = :timestamp_datetime WHERE timestamp_id = :timestamp_id AND employee_id = :employee_id"; + $stmt = $pdo->prepare($update_query); + $stmt->bindParam(':timestamp_id', $timestamp_id, PDO::PARAM_INT); + } + + $stmt->bindParam(':employee_id', $employee_id, PDO::PARAM_INT); + $stmt->bindParam(':timestamp_type', $buchung['timestamp_type']); + $stmt->bindParam(':timestamp_datetime', $buchung['timestamp_datetime']); + $stmt->execute(); + } + + $pdo->commit(); + echo "Änderungen erfolgreich gespeichert."; + } catch(PDOException $e) { + $pdo->rollBack(); + echo "Datenbankfehler: " . $e->getMessage(); + } +} else { + die("Ungültige Anfrage."); +} +?> +
+
+
+ \ No newline at end of file diff --git a/zeiterfassung/showworker.php b/zeiterfassung/showworker.php index 530c0af..efc65f5 100644 --- a/zeiterfassung/showworker.php +++ b/zeiterfassung/showworker.php @@ -1,114 +1,114 @@ - - - -
-
-
- - -prepare($sql); - $stmt->execute([$email, $vorname, $nachname]); - - - echo "
"; -} - -// Abfrage der Mitarbeiterdaten -$sql = "SELECT id, email, vorname, nachname, zeiterfassung, worker, admin, card_id, card2_id FROM users"; -$stmt = $pdo->query($sql); -?> - -
-

Mitarbeiterliste

-
- - - - - - - - - - - - - - - - - fetch(PDO::FETCH_ASSOC)) { - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - echo ""; - } - ?> - -
IDEmailVornameNachnameZeiterfassungworkerAdminCard IDCard2 IDAktionen
" . htmlspecialchars($row['id']) . "" . htmlspecialchars($row['email']) . "" . htmlspecialchars($row['vorname']) . "" . htmlspecialchars($row['nachname']) . "" ; - if($row['zeiterfassung'] == "1"){echo "Ja";} - echo "" ; - if($row['worker'] == "1"){echo "Ja";} - echo "" ; - if($row['admin'] == "1"){echo "Ja";} - echo "" . htmlspecialchars($row['card_id']) . "" . htmlspecialchars($row['card2_id']) . "Bearbeiten
-
- -

Neuen Mitarbeiter hinzufügen

-
-
- - -
-
- - -
-
- - -
- -
- - -
- -
-
-
-
- + + + +
+
+
+ + +prepare($sql); + $stmt->execute([$email, $vorname, $nachname]); + + + echo "
"; +} + +// Abfrage der Mitarbeiterdaten +$sql = "SELECT id, email, vorname, nachname, zeiterfassung, worker, admin, card_id, card2_id FROM users"; +$stmt = $pdo->query($sql); +?> + +
+

Mitarbeiterliste

+
+ + + + + + + + + + + + + + + + + fetch(PDO::FETCH_ASSOC)) { + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + echo ""; + } + ?> + +
IDEmailVornameNachnameZeiterfassungworkerAdminCard IDCard2 IDAktionen
" . htmlspecialchars($row['id']) . "" . htmlspecialchars($row['email']) . "" . htmlspecialchars($row['vorname']) . "" . htmlspecialchars($row['nachname']) . "" ; + if($row['zeiterfassung'] == "1"){echo "Ja";} + echo "" ; + if($row['worker'] == "1"){echo "Ja";} + echo "" ; + if($row['admin'] == "1"){echo "Ja";} + echo "" . htmlspecialchars($row['card_id']) . "" . htmlspecialchars($row['card2_id']) . "Bearbeiten
+
+ +

Neuen Mitarbeiter hinzufügen

+
+
+ + +
+
+ + +
+
+ + +
+ +
+ + +
+ +
+
+
+
+ \ No newline at end of file diff --git a/zeiterfassung/urlaub_genehmigen.php b/zeiterfassung/urlaub_genehmigen.php index c3e31a6..4861c5c 100644 --- a/zeiterfassung/urlaub_genehmigen.php +++ b/zeiterfassung/urlaub_genehmigen.php @@ -1,121 +1,121 @@ -prepare(" - UPDATE vacations - SET status = ?, - approved_by = ?, - approved_at = NOW() - WHERE id = ? - "); - $stmt->execute([$status, $admin_id, $vacation_id]); - - $message = "Antrag erfolgreich aktualisiert."; -} - -/* ===== Offene Anträge laden ===== */ -$stmt = $pdo->prepare(" - SELECT v.*, u.vorname, u.nachname - FROM vacations v - JOIN users u ON u.id = v.user_id - WHERE v.status = 'beantragt' - ORDER BY v.start_date ASC -"); -$stmt->execute(); -$antraege = $stmt->fetchAll(); -?> - - - -
-
-
- -

Urlaubsanträge genehmigen

- - -
- - - -
Keine offenen Anträge.
- - - - - - - - - - - - - - - - - - - - - - - -
MitarbeiterVonBisTageKommentarAktion
- -
- - - -
- -
- - - -
- -
- - - -
-
-
- +prepare(" + UPDATE vacations + SET status = ?, + approved_by = ?, + approved_at = NOW() + WHERE id = ? + "); + $stmt->execute([$status, $admin_id, $vacation_id]); + + $message = "Antrag erfolgreich aktualisiert."; +} + +/* ===== Offene Anträge laden ===== */ +$stmt = $pdo->prepare(" + SELECT v.*, u.vorname, u.nachname + FROM vacations v + JOIN users u ON u.id = v.user_id + WHERE v.status = 'beantragt' + ORDER BY v.start_date ASC +"); +$stmt->execute(); +$antraege = $stmt->fetchAll(); +?> + + + +
+
+
+ +

Urlaubsanträge genehmigen

+ + +
+ + + +
Keine offenen Anträge.
+ + + + + + + + + + + + + + + + + + + + + + + +
MitarbeiterVonBisTageKommentarAktion
+ +
+ + + +
+ +
+ + + +
+ +
+ + + +
+
+
+ \ No newline at end of file diff --git a/zeiterfassung/urlaubsantrag.php b/zeiterfassung/urlaubsantrag.php index 43277f1..cde0c5e 100644 --- a/zeiterfassung/urlaubsantrag.php +++ b/zeiterfassung/urlaubsantrag.php @@ -1,178 +1,178 @@ -modify('+1 day'); - - $interval = new DateInterval('P1D'); - $period = new DatePeriod($start, $interval, $end); - - $workingDays = 0; - - foreach ($period as $day) { - if ($day->format('N') < 6) { // 1 (Mo) - 5 (Fr) - $workingDays++; - } - } - - return $workingDays; -} - -if ($_SERVER["REQUEST_METHOD"] == "POST") { - - $start_date = $_POST['start_date']; - $end_date = $_POST['end_date']; - $comment = trim($_POST['comment']); - - if (empty($start_date) || empty($end_date)) { - $error = "Bitte beide Datumsfelder ausfüllen."; - } elseif ($start_date > $end_date) { - $error = "Enddatum liegt vor dem Startdatum."; - } elseif ($start_date < date("Y-m-d")) { - $error = "Urlaub kann nicht in der Vergangenheit beantragt werden."; - } else { - - // Überschneidung prüfen - $stmt = $pdo->prepare(" - SELECT COUNT(*) FROM vacations - WHERE user_id = ? - AND status != 'abgelehnt' - AND ( - (start_date BETWEEN ? AND ?) - OR (end_date BETWEEN ? AND ?) - OR (? BETWEEN start_date AND end_date) - ) - "); - $stmt->execute([$user_id, $start_date, $end_date, $start_date, $end_date, $start_date]); - $exists = $stmt->fetchColumn(); - - if ($exists > 0) { - $error = "Der Zeitraum überschneidet sich mit einem bestehenden Antrag."; - } else { - - $days = calculateWorkingDays($start_date, $end_date); - - $insert = $pdo->prepare(" - INSERT INTO vacations (user_id, start_date, end_date, days, comment_user) - VALUES (?, ?, ?, ?, ?) - "); - - $insert->execute([$user_id, $start_date, $end_date, $days, $comment]); - - $message = "Urlaubsantrag erfolgreich eingereicht ($days Werktage)."; - } - } -} -?> - - - -
-
-
- -

Urlaubsantrag

- - -
- - - -
- - -
- -
- - -
- -
- - -
- -
- - -
- -
- - - -
- -
- -

Meine Anträge

- -prepare(" - SELECT * FROM vacations - WHERE user_id = ? - ORDER BY created_at DESC -"); -$stmt->execute([$user_id]); -$antraege = $stmt->fetchAll(); -?> - - - - - - - - - - - - - - - - - - - - -
VonBisTageStatusAktion
- Beantragt'; - } elseif ($a['status'] == 'genehmigt') { - echo 'Genehmigt'; - } else { - echo 'Abgelehnt'; - } - ?> - -
- - - -
-
- -
-
-
- +modify('+1 day'); + + $interval = new DateInterval('P1D'); + $period = new DatePeriod($start, $interval, $end); + + $workingDays = 0; + + foreach ($period as $day) { + if ($day->format('N') < 6) { // 1 (Mo) - 5 (Fr) + $workingDays++; + } + } + + return $workingDays; +} + +if ($_SERVER["REQUEST_METHOD"] == "POST") { + + $start_date = $_POST['start_date']; + $end_date = $_POST['end_date']; + $comment = trim($_POST['comment']); + + if (empty($start_date) || empty($end_date)) { + $error = "Bitte beide Datumsfelder ausfüllen."; + } elseif ($start_date > $end_date) { + $error = "Enddatum liegt vor dem Startdatum."; + } elseif ($start_date < date("Y-m-d")) { + $error = "Urlaub kann nicht in der Vergangenheit beantragt werden."; + } else { + + // Überschneidung prüfen + $stmt = $pdo->prepare(" + SELECT COUNT(*) FROM vacations + WHERE user_id = ? + AND status != 'abgelehnt' + AND ( + (start_date BETWEEN ? AND ?) + OR (end_date BETWEEN ? AND ?) + OR (? BETWEEN start_date AND end_date) + ) + "); + $stmt->execute([$user_id, $start_date, $end_date, $start_date, $end_date, $start_date]); + $exists = $stmt->fetchColumn(); + + if ($exists > 0) { + $error = "Der Zeitraum überschneidet sich mit einem bestehenden Antrag."; + } else { + + $days = calculateWorkingDays($start_date, $end_date); + + $insert = $pdo->prepare(" + INSERT INTO vacations (user_id, start_date, end_date, days, comment_user) + VALUES (?, ?, ?, ?, ?) + "); + + $insert->execute([$user_id, $start_date, $end_date, $days, $comment]); + + $message = "Urlaubsantrag erfolgreich eingereicht ($days Werktage)."; + } + } +} +?> + + + +
+
+
+ +

Urlaubsantrag

+ + +
+ + + +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + +
+ +
+ + + +
+ +
+ +

Meine Anträge

+ +prepare(" + SELECT * FROM vacations + WHERE user_id = ? + ORDER BY created_at DESC +"); +$stmt->execute([$user_id]); +$antraege = $stmt->fetchAll(); +?> + + + + + + + + + + + + + + + + + + + + +
VonBisTageStatusAktion
+ Beantragt'; + } elseif ($a['status'] == 'genehmigt') { + echo 'Genehmigt'; + } else { + echo 'Abgelehnt'; + } + ?> + +
+ + + +
+
+ +
+
+
+ \ No newline at end of file diff --git a/zeiterfassung/vacations_calendar.php b/zeiterfassung/vacations_calendar.php index 1729a2e..7e60406 100644 --- a/zeiterfassung/vacations_calendar.php +++ b/zeiterfassung/vacations_calendar.php @@ -1,63 +1,63 @@ - - -
-

Team Urlaubskalender

-
-
-
- genehmigt - beantragt - Betriebsurlaub -
-
- -
- - - - - - + + +
+

Team Urlaubskalender

+
+
+
+ genehmigt + beantragt + Betriebsurlaub +
+
+ +
+ + + + + + diff --git a/zeiterfassung/vacations_calendar_all.php b/zeiterfassung/vacations_calendar_all.php index 95d7d97..fbc670b 100644 --- a/zeiterfassung/vacations_calendar_all.php +++ b/zeiterfassung/vacations_calendar_all.php @@ -1,59 +1,59 @@ - - -
-

Team Urlaubskalender

-
-
-
- genehmigt - Betriebsurlaub -
-
- -
- - - - - - + + +
+

Team Urlaubskalender

+
+
+
+ genehmigt + Betriebsurlaub +
+
+ +
+ + + + + + diff --git a/zeiterfassung/vacations_overview.php b/zeiterfassung/vacations_overview.php index c6d82f6..ff906c2 100644 --- a/zeiterfassung/vacations_overview.php +++ b/zeiterfassung/vacations_overview.php @@ -1,84 +1,84 @@ -prepare("SELECT id, vorname, nachname, email, urlaubstage FROM users ORDER BY nachname, vorname"); -$stmt->execute(); -$users = $stmt->fetchAll(); - -?> - -
-

Urlaubsübersicht ()

- - - - - - - - - - - - - - - prepare("SELECT IFNULL(SUM(days),0) AS used FROM vacations WHERE user_id = ? AND status = 'genehmigt' AND YEAR(start_date) = ?"); - $s->execute([$uid, $year]); - $used = (int)$s->fetchColumn(); - - // Ausstehende Anträge - $p = $pdo->prepare("SELECT COUNT(*) FROM vacations WHERE user_id = ? AND status = 'beantragt'"); - $p->execute([$uid]); - $pending = (int)$p->fetchColumn(); - - // Bevorstehende Urlaube (nächste 5) - $n = $pdo->prepare("SELECT start_date, end_date, days, status FROM vacations WHERE user_id = ? AND end_date >= CURDATE() ORDER BY start_date LIMIT 5"); - $n->execute([$uid]); - $upcoming = $n->fetchAll(); - - $entitlement = isset($u['urlaubstage']) ? (int)$u['urlaubstage'] : 0; - $remaining = $entitlement - $used; - ?> - - - - - - - - - - - -
MitarbeiterEmailAnspruchGenutzt ()VerbleibendAusstehendBevorstehende Urlaube
- '; - } - } ?> -
- -

Hinweis: Ansprüche werden aus dem Feld users.urlaubstage gelesen. Falls dieses Feld leer ist, bitte in der Nutzerverwaltung pflegen.

- -
- - +prepare("SELECT id, vorname, nachname, email, urlaubstage FROM users ORDER BY nachname, vorname"); +$stmt->execute(); +$users = $stmt->fetchAll(); + +?> + +
+

Urlaubsübersicht ()

+ + + + + + + + + + + + + + + prepare("SELECT IFNULL(SUM(days),0) AS used FROM vacations WHERE user_id = ? AND status = 'genehmigt' AND YEAR(start_date) = ?"); + $s->execute([$uid, $year]); + $used = (int)$s->fetchColumn(); + + // Ausstehende Anträge + $p = $pdo->prepare("SELECT COUNT(*) FROM vacations WHERE user_id = ? AND status = 'beantragt'"); + $p->execute([$uid]); + $pending = (int)$p->fetchColumn(); + + // Bevorstehende Urlaube (nächste 5) + $n = $pdo->prepare("SELECT start_date, end_date, days, status FROM vacations WHERE user_id = ? AND end_date >= CURDATE() ORDER BY start_date LIMIT 5"); + $n->execute([$uid]); + $upcoming = $n->fetchAll(); + + $entitlement = isset($u['urlaubstage']) ? (int)$u['urlaubstage'] : 0; + $remaining = $entitlement - $used; + ?> + + + + + + + + + + + +
MitarbeiterEmailAnspruchGenutzt ()VerbleibendAusstehendBevorstehende Urlaube
+ '; + } + } ?> +
+ +

Hinweis: Ansprüche werden aus dem Feld users.urlaubstage gelesen. Falls dieses Feld leer ist, bitte in der Nutzerverwaltung pflegen.

+ +
+ + diff --git a/zusatzleistungen.php b/zusatzleistungen.php index 2392645..3d73406 100644 --- a/zusatzleistungen.php +++ b/zusatzleistungen.php @@ -1,247 +1,247 @@ - - - - - - Praxis Creutzburg – Private Zusatzleistungen & IGeL - - - - - - - -
- - -
-
- - -
-

Private Zusatzleistungen (IGeL) – Transparenz & Preise

-

- Einige sinnvolle Untersuchungen und Beratungen werden nicht von der Gesetzlichen Krankenversicherung übernommen. - Diese Privatleistungen rechnen wir als Selbstzahlerleistungen ab. - Die folgenden Preise sind Richtwerte und können je nach Aufwand variieren. - Vorab erhalten Sie von uns eine verständliche Kostentransparenz. -

-
- - -
-

Unsere beliebtesten Zusatzleistungen

-

Alle Preise in Euro. Impfstoffe und externe Laborkosten (falls anfallend) werden gesondert berechnet.

-
- - -
-

Diagnostik & Beratung

- -
    - -
  • -
    - Reisemedizinische Beratung (Fernreisen) - ca. 35–60 € -
    -

    - Individuelle Impf- und Prophylaxeplanung passend zu Reiseziel, Dauer und Vorerkrankungen. - (Private Zusatzleistung) -

    -
  • - - -
  • -
    - Ärztliches Attest für Führerscheine (z. B. LKW, Sportboot) - ca. 40–90 € -
    -

    - Übliche ärztliche Untersuchung gemäß Vorgaben der Behörde/Prüfstelle mit Ausstellung des Attests. - (Privatleistung) -

    -
  • - - -
  • -
    - Tauchtauglichkeitsuntersuchung (Sporttaucher) - ca. 80–140 € -
    -

    - Anamnese, körperliche Untersuchung und – je nach Anforderung – ggf. EKG/Lungenfunktion; Bescheinigung nach Richtlinien. - (Privatleistung) -

    -
  • - -

    Ultraschall / Sonografie

    -
      - -
    • -
      - Ultraschall der Gefäße (Beine, mit Farbdoppler) - ca. 60–100 € -
      -

      - Beurteilung von arterieller Durchblutung und Venensituation; frühzeitiges Erkennen von Gefäßveränderungen, - Thromboseausschluss möglich. (Private Zusatzleistung) -

      -
    • - - -
    • -
      - Ultraschall der Halsgefäße (Carotis) inkl. Intima-Media-Messung - ca. 70–110 € -
      -

      - Hochauflösende Messung der Gefäßwanddicke und Darstellung von Plaques zur Einschätzung des Schlaganfall- und Gefäßrisikos. - (Privatleistung) -

      -
    • - - -
    • -
      - Herzultraschall (Echokardiografie, Point-of-Care) - ca. 70–120 € -
      -

      - Überblick über Pumpfunktion, Herzgröße und Herzklappen; schnelle Abklärung bei Beschwerden. - (Privatleistung) -

      -
    • - - -
    • -
      - Ultraschall Bauchorgane (Abdomen, bis 3 Organe) - ca. 35–50 € -
      -

      Vorsorgliche Beurteilung von Leber, Gallenblase, Nieren u. a.

      -
    • - -
    • -
      - Ultraschall Schilddrüse - ca. 35–45 € -
      -

      Beurteilung von Größe, Struktur und Knoten – z. B. als Verlaufskontrolle.

      -
    • -
    - -

    Labor

    -
      - -
    • -
      - Leberwerte (Bluttest) - ca. 20–45 € -
      -

      - Typisch: AST, ALT, GGT, ggf. Bilirubin. Kassenleistung bei medizinischer Indikation, - sonst Privatleistung als Vorsorge. (Kassenleistung/Privatleistung) -

      -
    • - - -
    • -
      - Nierenwerte (Bluttest) - ca. 20–45 € -
      -

      - Typisch: Kreatinin, Harnstoff, eGFR. Kassenleistung bei medizinischer Indikation, - sonst Privatleistung als Vorsorge. (Kassenleistung/Privatleistung) -

      -
    • - - -
    • -
      - Vitamin-D-Bestimmung - ca. 25–40 € -
      -

      25-OH-Vitamin-D im Blut; inkl. Laborhandling.

      -
    • -
    - -

    Impfungen

    -
      -
    • -
      - Impfung (Durchführung, ohne Impfstoff) - ca. 10–20 € -
      -

      - Durchführung einer Impfung; Impfstoffe und ggf. Reisediagnostik separat. -

      -
    • -
    - -

    Kardiologie / EKG

    -
      -
    • -
      - Ruhe-EKG - ca. 20–30 € -
      -

      12-Kanal-EKG in Ruhe zur Beurteilung von Rhythmus und Leitung.

      -
    • - -

      - * Preisangaben sind Richtwerte inkl. MwSt., soweit anwendbar. Maßgeblich ist die individuelle Rechnung. -

      -
- - -
-

Termin buchen

-

Gern beraten wir Sie, welche Leistungen in Ihrem Fall sinnvoll sind. Vereinbaren Sie einfach einen Termin in unserer Praxis.

- -
- -
-
-
- - - - + + + + + + Praxis Creutzburg – Private Zusatzleistungen & IGeL + + + + + + + +
+ + +
+
+ + +
+

Private Zusatzleistungen (IGeL) – Transparenz & Preise

+

+ Einige sinnvolle Untersuchungen und Beratungen werden nicht von der Gesetzlichen Krankenversicherung übernommen. + Diese Privatleistungen rechnen wir als Selbstzahlerleistungen ab. + Die folgenden Preise sind Richtwerte und können je nach Aufwand variieren. + Vorab erhalten Sie von uns eine verständliche Kostentransparenz. +

+
+ + +
+

Unsere beliebtesten Zusatzleistungen

+

Alle Preise in Euro. Impfstoffe und externe Laborkosten (falls anfallend) werden gesondert berechnet.

+
+ + +
+

Diagnostik & Beratung

+ +
    + +
  • +
    + Reisemedizinische Beratung (Fernreisen) + ca. 35–60 € +
    +

    + Individuelle Impf- und Prophylaxeplanung passend zu Reiseziel, Dauer und Vorerkrankungen. + (Private Zusatzleistung) +

    +
  • + + +
  • +
    + Ärztliches Attest für Führerscheine (z. B. LKW, Sportboot) + ca. 40–90 € +
    +

    + Übliche ärztliche Untersuchung gemäß Vorgaben der Behörde/Prüfstelle mit Ausstellung des Attests. + (Privatleistung) +

    +
  • + + +
  • +
    + Tauchtauglichkeitsuntersuchung (Sporttaucher) + ca. 80–140 € +
    +

    + Anamnese, körperliche Untersuchung und – je nach Anforderung – ggf. EKG/Lungenfunktion; Bescheinigung nach Richtlinien. + (Privatleistung) +

    +
  • + +

    Ultraschall / Sonografie

    +
      + +
    • +
      + Ultraschall der Gefäße (Beine, mit Farbdoppler) + ca. 60–100 € +
      +

      + Beurteilung von arterieller Durchblutung und Venensituation; frühzeitiges Erkennen von Gefäßveränderungen, + Thromboseausschluss möglich. (Private Zusatzleistung) +

      +
    • + + +
    • +
      + Ultraschall der Halsgefäße (Carotis) inkl. Intima-Media-Messung + ca. 70–110 € +
      +

      + Hochauflösende Messung der Gefäßwanddicke und Darstellung von Plaques zur Einschätzung des Schlaganfall- und Gefäßrisikos. + (Privatleistung) +

      +
    • + + +
    • +
      + Herzultraschall (Echokardiografie, Point-of-Care) + ca. 70–120 € +
      +

      + Überblick über Pumpfunktion, Herzgröße und Herzklappen; schnelle Abklärung bei Beschwerden. + (Privatleistung) +

      +
    • + + +
    • +
      + Ultraschall Bauchorgane (Abdomen, bis 3 Organe) + ca. 35–50 € +
      +

      Vorsorgliche Beurteilung von Leber, Gallenblase, Nieren u. a.

      +
    • + +
    • +
      + Ultraschall Schilddrüse + ca. 35–45 € +
      +

      Beurteilung von Größe, Struktur und Knoten – z. B. als Verlaufskontrolle.

      +
    • +
    + +

    Labor

    +
      + +
    • +
      + Leberwerte (Bluttest) + ca. 20–45 € +
      +

      + Typisch: AST, ALT, GGT, ggf. Bilirubin. Kassenleistung bei medizinischer Indikation, + sonst Privatleistung als Vorsorge. (Kassenleistung/Privatleistung) +

      +
    • + + +
    • +
      + Nierenwerte (Bluttest) + ca. 20–45 € +
      +

      + Typisch: Kreatinin, Harnstoff, eGFR. Kassenleistung bei medizinischer Indikation, + sonst Privatleistung als Vorsorge. (Kassenleistung/Privatleistung) +

      +
    • + + +
    • +
      + Vitamin-D-Bestimmung + ca. 25–40 € +
      +

      25-OH-Vitamin-D im Blut; inkl. Laborhandling.

      +
    • +
    + +

    Impfungen

    +
      +
    • +
      + Impfung (Durchführung, ohne Impfstoff) + ca. 10–20 € +
      +

      + Durchführung einer Impfung; Impfstoffe und ggf. Reisediagnostik separat. +

      +
    • +
    + +

    Kardiologie / EKG

    +
      +
    • +
      + Ruhe-EKG + ca. 20–30 € +
      +

      12-Kanal-EKG in Ruhe zur Beurteilung von Rhythmus und Leitung.

      +
    • + +

      + * Preisangaben sind Richtwerte inkl. MwSt., soweit anwendbar. Maßgeblich ist die individuelle Rechnung. +

      +
+ + +
+

Termin buchen

+

Gern beraten wir Sie, welche Leistungen in Ihrem Fall sinnvoll sind. Vereinbaren Sie einfach einen Termin in unserer Praxis.

+ +
+ +
+
+
+ + + +