Website Update Gemini - 1st run.

This commit is contained in:
chriz committed 2026-10-19 15:54:08 +02:00
1 parent eb28b95cd4
commit 911b8864ca
31 files changed
+3076 -809

No files matched your search

+6 -5
View File
@@ -1,12 +1,13 @@
Options +FollowSymLinks
RewriteEngine on
RewriteCond %{HTTP_HOST} !^www\.dialyse-berlin\.net [NC]
RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
#RewriteCond %{HTTP_HOST} !^www\.dialyse-berlin\.net [NC]
#RewriteRule ^(.*)$ https://www.%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{HTTP_HOST} ^www\.dialyse-berlin\.net [NC]
RewriteCond %{HTTPS} !=on
RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
#RewriteCond %{HTTP_HOST} ^www\.dialyse-berlin\.net [NC]
#RewriteCond %{HTTPS} !=on
#RewriteRule ^(.*)$ https://%{HTTP_HOST}/$1 [R=301,L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{QUERY_STRING} ([a-zA-Z0-9-_.=&+%]*)
+23
View File
@@ -0,0 +1,23 @@
FROM php:8.5-apache
# Install common extensions (example)
# RUN docker-php-ext-install
# Enable Apache modules if needed
RUN a2enmod rewrite
# Copy application code
COPY . /var/www/html/
# Disable the legacy HTTPS redirect rules from .htaccess so the container stays on plain HTTP
# RUN sed -i '/RewriteCond %{HTTP_HOST} !^www\\.dialyse-berlin\\.net \[NC\]/,+2d; /RewriteCond %{HTTP_HOST} ^www\\.dialyse-berlin\\.net \[NC\]/,+2d' /var/www/html/.htaccess || true \
# && a2dismod ssl || true
# Set permissions
RUN chown -R www-data:www-data /var/www/html
# Optional: install Composer dependencies if you have a composer.json
# COPY --from=composer:latest /usr/bin/composer /usr/bin/composer
# RUN composer install --no-dev --optimize-autoloader
EXPOSE 80
+1514 -236
View File
File diff suppressed because it is too large. Load diff
+1 -1
View File
@@ -1 +1 @@
.lb-loader,.lightbox{text-align:center;line-height:0;position:absolute;left:0}body.lb-disable-scrolling{overflow:hidden}.lightboxOverlay{position:absolute;top:0;left:0;z-index:9999;background-color:#000;filter:alpha(Opacity=80);opacity:.8;display:none}.lightbox{width:100%;z-index:10000;font-weight:400;outline:0}.lightbox .lb-image{display:block;height:auto;max-width:inherit;max-height:none;border-radius:3px;border:4px solid #fff}.lightbox a img{border:none}.lb-outerContainer{position:relative;width:250px;height:250px;margin:0 auto;border-radius:4px;background-color:#fff}.lb-outerContainer:after{content:"";display:table;clear:both}.lb-loader{top:43%;height:25%;width:100%}.lb-cancel{display:block;width:32px;height:32px;margin:0 auto;background:url(../img/lightbox/loading.gif) no-repeat}.lb-nav{position:absolute;top:0;left:0;height:100%;width:100%;z-index:10}.lb-container>.nav{left:0}.lb-nav a{outline:0;background-image:url(data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==)}.lb-next,.lb-prev{height:100%;cursor:pointer;display:block}.lb-nav a.lb-prev{width:34%;left:0;float:left;background:url(../img/lightbox/prev.png) left 48% no-repeat;filter:alpha(Opacity=0);opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-prev:hover{filter:alpha(Opacity=100);opacity:1}.lb-nav a.lb-next{width:64%;right:0;float:right;background:url(../img/lightbox/next.png) right 48% no-repeat;filter:alpha(Opacity=0);opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-next:hover{filter:alpha(Opacity=100);opacity:1}.lb-dataContainer{margin:0 auto;padding-top:5px;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.lb-dataContainer:after{content:"";display:table;clear:both}.lb-data{padding:0 4px;color:#ccc}.lb-data .lb-details{width:85%;float:left;text-align:left;line-height:1.1em}.lb-data .lb-caption{font-size:13px;font-weight:700;line-height:1em}.lb-data .lb-caption a{color:#4ae}.lb-data .lb-number{display:block;clear:left;padding-bottom:1em;font-size:12px;color:#999}.lb-data .lb-close{display:block;float:right;width:30px;height:30px;background:url(../img/lightbox/close.png) top right no-repeat;text-align:right;outline:0;filter:alpha(Opacity=70);opacity:.7;-webkit-transition:opacity .2s;-moz-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.lb-data .lb-close:hover{cursor:pointer;filter:alpha(Opacity=100);opacity:1}
.lb-loader,.lightbox{text-align:center;line-height:0}body.lb-disable-scrolling{overflow:hidden}.lightboxOverlay{position:absolute;top:0;left:0;z-index:9999;background-color:#000;opacity:.8;display:none}.lightbox{position:absolute;left:0;width:100%;z-index:10000;font-weight:400;outline:0}.lightbox .lb-image{display:block;height:auto;max-width:inherit;max-height:none;border-radius:3px;border:4px solid #fff}.lightbox a img{border:none}.lb-outerContainer{position:relative;width:250px;height:250px;margin:0 auto;border-radius:4px;background-color:#fff}.lb-loader,.lb-nav{position:absolute;left:0}.lb-outerContainer:after{content:"";display:table;clear:both}.lb-loader{top:43%;height:25%;width:100%}.lb-cancel{display:block;width:32px;height:32px;margin:0 auto;background:url(../img/lightbox/loading.gif) no-repeat}.lb-nav{top:0;height:100%;width:100%;z-index:10}.lb-container>.nav{left:0}.lb-nav a{outline:0;background-image:url(data:image/gif;base64,R0lGODlhAQABAPAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==)}.lb-next,.lb-prev{height:100%;cursor:pointer;display:block}.lb-nav a.lb-prev{width:34%;left:0;float:left;background:url(../img/lightbox/prev.png) left 48% no-repeat;opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-prev:hover{opacity:1}.lb-nav a.lb-next{width:64%;right:0;float:right;background:url(../img/lightbox/next.png) right 48% no-repeat;opacity:0;-webkit-transition:opacity .6s;-moz-transition:opacity .6s;-o-transition:opacity .6s;transition:opacity .6s}.lb-nav a.lb-next:hover{opacity:1}.lb-dataContainer{margin:0 auto;padding-top:5px;width:100%;border-bottom-left-radius:4px;border-bottom-right-radius:4px}.lb-dataContainer:after{content:"";display:table;clear:both}.lb-data{padding:0 4px;color:#ccc}.lb-data .lb-details{width:85%;float:left;text-align:left;line-height:1.1em}.lb-data .lb-caption{font-size:13px;font-weight:700;line-height:1em}.lb-data .lb-caption a{color:#4ae}.lb-data .lb-number{display:block;clear:left;padding-bottom:1em;font-size:12px;color:#999}.lb-data .lb-close{display:block;float:right;width:30px;height:30px;background:url(../img/lightbox/close.png) top right no-repeat;text-align:right;outline:0;opacity:.7;-webkit-transition:opacity .2s;-moz-transition:opacity .2s;-o-transition:opacity .2s;transition:opacity .2s}.lb-data .lb-close:hover{cursor:pointer;opacity:1}
BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 280 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 8.3 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

BIN
View File
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.3 KiB

+31 -31
View File
@@ -1,35 +1,35 @@
function initialize() {
var geocoder = new google.maps.Geocoder();
geocoder.geocode( { 'address': 'Thorner Straße 1,12623 Berlin'}, function(results, status) {
if(status == google.maps.GeocoderStatus.OK) {
var myOptions = {
zoom: 15,
center: results[0].geometry.location,
mapTypeId: google.maps.MapTypeId.ROADMAP,
mapTypeControl: false,
navigationControl: true,
navigationControlOptions: {style: google.maps.NavigationControlStyle.SMALL}
};
var map = new google.maps.Map(document.getElementById("googlemap"), myOptions);
var marker = new google.maps.Marker({
position: results[0].geometry.location,
map: map
});
} else {
alert("Geocode was not successful for the following reason: " + status);
}
});
}
initialize();
/**
* Contact and Map Helpers
* Dialysezentrum Berlin-Mahlsdorf
*/
function sending() {
var text = "%6D%61%69%6C%74%6F:%6B%6F%6E%74%61%6B%74@%64%69%61%6C%79%73%65%2D%62%65%72%6C%69%6E%2E%6E%65%74";
location.href = decodeURI(text);
// Obfuscated mailto link to prevent bot harvesting
var parts = ['kontakt', 'dialyse-berlin.net'];
window.location.href = 'mailto:' + parts[0] + '@' + parts[1];
return true;
}
function showMapLocation(loc) {
var $frame = $('#mapFrame');
var $addrText = $('#mapAddressText');
var $extLink = $('#mapExternalLink');
var $btnMahlsdorf = $('#btnMapMahlsdorf');
var $btnSatellit = $('#btnMapSatellit');
if (loc === 'satellit') {
$frame.attr('src', 'https://maps.google.com/maps?q=Blumberger+Damm+130,+12685+Berlin&t=&z=15&ie=UTF8&iwloc=&output=embed');
$addrText.text('Blumberger Damm 130 (Eingang Pritzhagener Weg 21), 12685 Berlin');
$extLink.attr('href', 'https://www.google.com/maps/place/Dialysezentrum+Berlin-Mahlsdorf+LC/@52.542799,13.5694855,17z/');
$btnMahlsdorf.removeClass('btn-primary').addClass('btn-outline-primary');
$btnSatellit.removeClass('btn-outline-primary').addClass('btn-primary');
} else {
$frame.attr('src', 'https://maps.google.com/maps?q=Thorner+Stra%C3%9Fe+1,+12623+Berlin&t=&z=15&ie=UTF8&iwloc=&output=embed');
$addrText.text('Thorner Straße 1, 12623 Berlin');
$extLink.attr('href', 'https://www.google.de/maps/place/Dialysezentrum+Berlin-Mahlsdorf/@52.5078935,13.6126659,16z/');
$btnMahlsdorf.removeClass('btn-outline-primary').addClass('btn-primary');
$btnSatellit.removeClass('btn-primary').addClass('btn-outline-primary');
}
}
-2
View File
@@ -1,2 +0,0 @@
/*! jQuery v3.6.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(C,e){"use strict";var t=[],r=Object.getPrototypeOf,s=t.slice,g=t.flat?function(e){return t.flat.call(e)}:function(e){return t.concat.apply([],e)},u=t.push,i=t.indexOf,n={},o=n.toString,y=n.hasOwnProperty,a=y.toString,l=a.call(Object),v={},m=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},x=function(e){return null!=e&&e===e.window},E=C.document,c={type:!0,src:!0,nonce:!0,noModule:!0};function b(e,t,n){var r,i,o=(n=n||E).createElement("script");if(o.text=e,t)for(r in c)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function w(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[o.call(e)]||"object":typeof e}var f="3.6.1",S=function(e,t){return new S.fn.init(e,t)};function p(e){var t=!!e&&"length"in e&&e.length,n=w(e);return!m(e)&&!x(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}S.fn=S.prototype={jquery:f,constructor:S,length:0,toArray:function(){return s.call(this)},get:function(e){return null==e?s.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=S.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return S.each(this,e)},map:function(n){return this.pushStack(S.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(s.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(S.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(S.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:u,sort:t.sort,splice:t.splice},S.extend=S.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||m(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(S.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||S.isPlainObject(n)?n:{},i=!1,a[t]=S.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},S.extend({expando:"jQuery"+(f+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==o.call(e))&&(!(t=r(e))||"function"==typeof(n=y.call(t,"constructor")&&t.constructor)&&a.call(n)===l)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){b(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(p(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},makeArray:function(e,t){var n=t||[];return null!=e&&(p(Object(e))?S.merge(n,"string"==typeof e?[e]:e):u.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:i.call(t,e,n)},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(p(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:v}),"function"==typeof Symbol&&(S.fn[Symbol.iterator]=t[Symbol.iterator]),S.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var d=function(n){var e,d,b,o,i,h,f,g,w,u,l,T,C,a,E,y,s,c,v,S="sizzle"+1*new Date,p=n.document,k=0,r=0,m=ue(),x=ue(),A=ue(),N=ue(),j=function(e,t){return e===t&&(l=!0),0},D={}.hasOwnProperty,t=[],q=t.pop,L=t.push,H=t.push,O=t.slice,P=function(e,t){for(var n=0,r=e.length;n<r;n++)if(e[n]===t)return n;return-1},R="checked|selected|async|autofocus|autoplay|controls|defer|disabled|hidden|ismap|loop|multiple|open|readonly|required|scoped",M="[\\x20\\t\\r\\n\\f]",I="(?:\\\\[\\da-fA-F]{1,6}"+M+"?|\\\\[^\\r\\n\\f]|[\\w-]|[^\0-\\x7f])+",W="\\["+M+"*("+I+")(?:"+M+"*([*^$|!~]?=)"+M+"*(?:'((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\"|("+I+"))|)"+M+"*\\]",F=":("+I+")(?:\\((('((?:\\\\.|[^\\\\'])*)'|\"((?:\\\\.|[^\\\\\"])*)\")|((?:\\\\.|[^\\\\()[\\]]|"+W+")*)|.*)\\)|)",$=new RegExp(M+"+","g"),B=new RegExp("^"+M+"+|((?:^|[^\\\\])(?:\\\\.)*)"+M+"+$","g"),_=new RegExp("^"+M+"*,"+M+"*"),z=new RegExp("^"+M+"*([>+~]|"+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("^Line truncated
+2
View File
@@ -0,0 +1,2 @@
/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.1",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0<t&&t-1 in e)}function fe(e,t){return e.nodeName&&e.nodeName.toLowerCase()===t.toLowerCase()}ce.fn=ce.prototype={jquery:t,constructor:ce,length:0,toArray:function(){return ae.call(this)},get:function(e){return null==e?ae.call(this):e<0?this[e+this.length]:this[e]},pushStack:function(e){var t=ce.merge(this.constructor(),e);return t.prevObject=this,t},each:function(e){return ce.each(this,e)},map:function(n){return this.pushStack(ce.map(this,function(e,t){return n.call(e,t,e)}))},slice:function(){return this.pushStack(ae.apply(this,arguments))},first:function(){return this.eq(0)},last:function(){return this.eq(-1)},even:function(){return this.pushStack(ce.grep(this,function(e,t){return(t+1)%2}))},odd:function(){return this.pushStack(ce.grep(this,function(e,t){return t%2}))},eq:function(e){var t=this.length,n=+e+(e<0?t:0);return this.pushStack(0<=n&&n<t?[this[n]]:[])},end:function(){return this.prevObject||this.constructor()},push:s,sort:oe.sort,splice:oe.splice},ce.extend=ce.fn.extend=function(){var e,t,n,r,i,o,a=arguments[0]||{},s=1,u=arguments.length,l=!1;for("boolean"==typeof a&&(l=a,a=arguments[s]||{},s++),"object"==typeof a||v(a)||(a={}),s===u&&(a=this,s--);s<u;s++)if(null!=(e=arguments[s]))for(t in e)r=e[t],"__proto__"!==t&&a!==r&&(l&&r&&(ce.isPlainObject(r)||(i=Array.isArray(r)))?(n=a[t],o=i&&!Array.isArray(n)?[]:i||ce.isPlainObject(n)?n:{},i=!1,a[t]=ce.extend(l,o,r)):void 0!==r&&(a[t]=r));return a},ce.extend({expando:"jQuery"+(t+Math.random()).replace(/\D/g,""),isReady:!0,error:function(e){throw new Error(e)},noop:function(){},isPlainObject:function(e){var t,n;return!(!e||"[object Object]"!==i.call(e))&&(!(t=r(e))||"function"==typeof(n=ue.call(t,"constructor")&&t.constructor)&&o.call(n)===a)},isEmptyObject:function(e){var t;for(t in e)return!1;return!0},globalEval:function(e,t,n){m(e,{nonce:t&&t.nonce},n)},each:function(e,t){var n,r=0;if(c(e)){for(n=e.length;r<n;r++)if(!1===t.call(e[r],r,e[r]))break}else for(r in e)if(!1===t.call(e[r],r,e[r]))break;return e},text:function(e){var t,n="",r=0,i=e.nodeType;if(!i)while(t=e[r++])n+=ce.text(t);return 1===i||11===i?e.textContent:9===i?e.documentElement.textContent:3===i||4===i?e.nodeValue:n},makeArray:function(e,t){var n=t||[];return null!=e&&(c(Object(e))?ce.merge(n,"string"==typeof e?[e]:e):s.call(n,e)),n},inArray:function(e,t,n){return null==t?-1:se.call(t,e,n)},isXMLDoc:function(e){var t=e&&e.namespaceURI,n=e&&(e.ownerDocument||e).documentElement;return!l.test(t||n&&n.nodeName||"HTML")},merge:function(e,t){for(var n=+t.length,r=0,i=e.length;r<n;r++)e[i++]=t[r];return e.length=i,e},grep:function(e,t,n){for(var r=[],i=0,o=e.length,a=!n;i<o;i++)!t(e[i],i)!==a&&r.push(e[i]);return r},map:function(e,t,n){var r,i,o=0,a=[];if(c(e))for(r=e.length;o<r;o++)null!=(i=t(e[o],o,n))&&a.push(i);else for(o in e)null!=(i=t(e[o],o,n))&&a.push(i);return g(a)},guid:1,support:le}),"function"==typeof Symbol&&(ce.fn[Symbol.iterator]=oe[Symbol.iterator]),ce.each("Boolean Number String Function Array Date RegExp Object Error Symbol".split(" "),function(e,t){n["[object "+t+"]"]=t.toLowerCase()});var pe=oe.pop,de=oe.sort,he=oe.splice,ge="[\\x20\\t\\r\\n\\f]",ve=new RegExp("^"+ge+"+|((?:^|[^\\\\])(?:\\\\.)*)"+ge+"+$","g");ce.contains=function(e,t){var n=t&&t.parentNode;return e===n||!(!n||1!==n.nodeType||!(e.contains?e.contains(n):e.compareDocumentPosition&&16&e.compareDocumentPosition(n)))};var f=/([\0-\x1f\x7f]|^-?\d)|^-$|[^\x80-\uFFFF\w-]/g;function p(e,t){return t?"\0"===e?"\ufffd":e.slice(0,-1)+"\\"+e.charCodeAt(e.length-1).toString(16)+" ":"\\"+e}ce.escapeSelector=function(e){return(e+"").replace(f,p)};var ye=C,me=s;!function(){var e,b,w,o,a,T,r,C,d,i,k=me,S=ce.expando,E=0,n=0,s=W(),c=W(),u=W(),h=W(),l=function(e,t){return e===t&&(a=!0),0},f="checked|selected|async|autofocus|autoplay|conLine truncated
-38
View File
@@ -1,38 +0,0 @@
/*!
* jQuery JavaScript Library v3.4.1
* https://jquery.com/
*
* Includes Sizzle.js
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://jquery.org/license
*
* Date: 2019-05-01T21:04Z
*/
!function(a,b){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this,function(a,b){"use strict";function c(a,b,c){c=c||ia;var d,e,f=c.createElement("script");if(f.text=a,b)for(d in wa)(e=b[d]||b.getAttribute&&b.getAttribute(d))&&f.setAttribute(d,e);c.head.appendChild(f).parentNode.removeChild(f)}function d(a){return null==a?a+"":"object"==typeof a||"function"==typeof a?oa[pa.call(a)]||"object":typeof a}function e(a){var b=!!a&&"length"in a&&a.length,c=d(a);return!ua(a)&&!va(a)&&("array"===c||0===b||"number"==typeof b&&b>0&&b-1 in a)}function f(a,b){return a.nodeName&&a.nodeName.toLowerCase()===b.toLowerCase()}function g(a,b,c){return ua(b)?ya.grep(a,function(a,d){return!!b.call(a,d,a)!==c}):b.nodeType?ya.grep(a,function(a){return a===b!==c}):"string"!=typeof b?ya.grep(a,function(a){return na.call(b,a)>-1!==c}):ya.filter(b,a,c)}function h(a,b){for(;(a=a[b])&&1!==a.nodeType;);return a}function i(a){var b={};return ya.each(a.match(Ja)||[],function(a,c){b[c]=!0}),b}function j(a){return a}function k(a){throw a}function l(a,b,c,d){var e;try{a&&ua(e=a.promise)?e.call(a).done(b).fail(c):a&&ua(e=a.then)?e.call(a,b,c):b.apply(void 0,[a].slice(d))}catch(a){c.apply(void 0,[a])}}function m(){ia.removeEventListener("DOMContentLoaded",m),a.removeEventListener("load",m),ya.ready()}function n(a,b){return b.toUpperCase()}function o(a){return a.replace(Na,"ms-").replace(Oa,n)}function p(){this.expando=ya.expando+p.uid++}function q(a){return"true"===a||"false"!==a&&("null"===a?null:a===+a+""?+a:Sa.test(a)?JSON.parse(a):a)}function r(a,b,c){var d;if(void 0===c&&1===a.nodeType)if(d="data-"+b.replace(Ta,"-$&").toLowerCase(),"string"==typeof(c=a.getAttribute(d))){try{c=q(c)}catch(a){}Ra.set(a,b,c)}else c=void 0;return c}function s(a,b,c,d){var e,f,g=20,h=d?function(){return d.cur()}:function(){return ya.css(a,b,"")},i=h(),j=c&&c[3]||(ya.cssNumber[b]?"":"px"),k=a.nodeType&&(ya.cssNumber[b]||"px"!==j&&+i)&&Va.exec(ya.css(a,b));if(k&&k[3]!==j){for(i/=2,j=j||k[3],k=+i||1;g--;)ya.style(a,b,k+j),(1-f)*(1-(f=h()/i||.5))<=0&&(g=0),k/=f;k*=2,ya.style(a,b,k+j),c=c||[]}return c&&(k=+k||+i||0,e=c[1]?k+(c[1]+1)*c[2]:+c[2],d&&(d.unit=j,d.start=k,d.end=e)),e}function t(a){var b,c=a.ownerDocument,d=a.nodeName,e=ab[d];return e||(b=c.body.appendChild(c.createElement(d)),e=ya.css(b,"display"),b.parentNode.removeChild(b),"none"===e&&(e="block"),ab[d]=e,e)}function u(a,b){for(var c,d,e=[],f=0,g=a.length;f<g;f++)d=a[f],d.style&&(c=d.style.display,b?("none"===c&&(e[f]=Qa.get(d,"display")||null,e[f]||(d.style.display="")),""===d.style.display&&$a(d)&&(e[f]=t(d))):"none"!==c&&(e[f]="none",Qa.set(d,"display",c)));for(f=0;f<g;f++)null!=e[f]&&(a[f].style.display=e[f]);return a}function v(a,b){var c;return c=void 0!==a.getElementsByTagName?a.getElementsByTagName(b||"*"):void 0!==a.querySelectorAll?a.querySelectorAll(b||"*"):[],void 0===b||b&&f(a,b)?ya.merge([a],c):c}function w(a,b){for(var c=0,d=a.length;c<d;c++)Qa.set(a[c],"globalEval",!b||Qa.get(b[c],"globalEval"))}function x(a,b,c,e,f){for(var g,h,i,j,k,l,m=b.createDocumentFragment(),n=[],o=0,p=a.length;o<p;o++)if((g=a[o])||0===g)if("object"===d(g))ya.merge(n,g.nodeType?[g]:g);else if(fb.test(g)){for(h=h||m.appendChild(b.createElement("div")),i=(cb.exec(g)||["",""])[1].toLowerCase(),j=eb[i]||eb._default,h.innerHTML=j[1]+ya.htmlPrefilter(g)+j[2],l=j[0];l--;)h=h.lastChild;ya.merge(n,h.childNodes),h=m.firstChild,h.textContent=""}else n.push(b.createTextNode(g));for(m.textContent="",o=0;g=n[o++];)if(e&&ya.inArray(g,e)>-1)f&&f.push(g);else if(k=Ya(g),h=v(m.appendChild(g),"script"),k&&w(h),c)for(l=0;g=h[l++];)db.test(g.type||"")&&c.push(g);return m}function y(){return!0}function z(){return!1}function A(a,b){return a===B()==("focus"===b)}function B(){try{return ia.activeElement}catch(a){}}function C(a,b,c,d,e,f){var g,h;if("object"==typeof b){"string"!=typeof c&&(d=d||c,c=void 0);for(h in b)C(a,h,c,d,b[h],f);return a}if(null==d&&null==e?(e=c,d=c=void 0):null==e&&("string"==typeof c?(e=d,d=void 0):(e=d,d=c,c=void 0)),!1===e)e=z;else if(!e)return a;return 1===f&&(g=e,e=function(a){return ya().off(a),g.apply(this,arguments)},e.guid=g.guid||(g.guid=ya.guid++)),a.each(function(){ya.event.add(this,b,e,d,c)})}function D(a,b,c){if(!c)return void(void 0===Qa.get(a,b)&&ya.event.add(a,b,y));Qa.set(a,b,!1),ya.event.add(a,b,{namespace:!1,handler:function(a){var d,e,f=Qa.get(this,b);if(1&a.isTrigger&&this[b]){if(f.length)(ya.event.special[b]||{}).delegateType&&a.stopPropagation();else if(f=ka.call(arguments),Qa.set(this,b,f),d=c(this,b),this[b](),e=Qa.get(this,b),f!==e||d?Qa.set(this,b,!1):e={},f!==e)return a.stopImmediatePropagation(),a.preventDefault(),e.value}else f.length&&(Qa.set(this,b,{value:ya.event.trigger(ya.extend(f[0],ya.Event.prototype),f.slice(1),this)}),a.stopImmediatePropagation())}})}function E(a,b){return f(a,"table"Line truncated
* Sizzle CSS Selector Engine v2.3.4
* https://sizzlejs.com/
*
* Copyright JS Foundation and other contributors
* Released under the MIT license
* https://js.foundation/
*
* Date: 2019-04-08
*/
function(a){function b(a,b,c,d){var e,f,g,h,i,j,k,m=b&&b.ownerDocument,o=b?b.nodeType:9;if(c=c||[],"string"!=typeof a||!a||1!==o&&9!==o&&11!==o)return c;if(!d&&((b?b.ownerDocument||b:P)!==H&&G(b),b=b||H,J)){if(11!==o&&(i=ta.exec(a)))if(e=i[1]){if(9===o){if(!(g=b.getElementById(e)))return c;if(g.id===e)return c.push(g),c}else if(m&&(g=m.getElementById(e))&&N(b,g)&&g.id===e)return c.push(g),c}else{if(i[2])return _.apply(c,b.getElementsByTagName(a)),c;if((e=i[3])&&w.getElementsByClassName&&b.getElementsByClassName)return _.apply(c,b.getElementsByClassName(e)),c}if(w.qsa&&!V[a+" "]&&(!K||!K.test(a))&&(1!==o||"object"!==b.nodeName.toLowerCase())){if(k=a,m=b,1===o&&la.test(a)){for((h=b.getAttribute("id"))?h=h.replace(xa,ya):b.setAttribute("id",h=O),j=A(a),f=j.length;f--;)j[f]="#"+h+" "+n(j[f]);k=j.join(","),m=ua.test(a)&&l(b.parentNode)||b}try{return _.apply(c,m.querySelectorAll(k)),c}catch(b){V(a,!0)}finally{h===O&&b.removeAttribute("id")}}}return C(a.replace(ia,"$1"),b,c,d)}function c(){function a(c,d){return b.push(c+" ")>x.cacheLength&&delete a[b.shift()],a[c+" "]=d}var b=[];return a}function d(a){return a[O]=!0,a}function e(a){var b=H.createElement("fieldset");try{return!!a(b)}catch(a){return!1}finally{b.parentNode&&b.parentNode.removeChild(b),b=null}}function f(a,b){for(var c=a.split("|"),d=c.length;d--;)x.attrHandle[c[d]]=b}function g(a,b){var c=b&&a,d=c&&1===a.nodeType&&1===b.nodeType&&a.sourceIndex-b.sourceIndex;if(d)return d;if(c)for(;c=c.nextSibling;)if(c===b)return-1;return a?1:-1}function h(a){return function(b){return"input"===b.nodeName.toLowerCase()&&b.type===a}}function i(a){return function(b){var c=b.nodeName.toLowerCase();return("input"===c||"button"===c)&&b.type===a}}function j(a){return function(b){return"form"in b?b.parentNode&&!1===b.disabled?"label"in b?"label"in b.parentNode?b.parentNode.disabled===a:b.disabled===a:b.isDisabled===a||b.isDisabled!==!a&&Aa(b)===a:b.disabled===a:"label"in b&&b.disabled===a}}function k(a){return d(function(b){return b=+b,d(function(c,d){for(var e,f=a([],c.length,b),g=f.length;g--;)c[e=f[g]]&&(c[e]=!(d[e]=c[e]))})})}function l(a){return a&&void 0!==a.getElementsByTagName&&a}function m(){}function n(a){for(var b=0,c=a.length,d="";b<c;b++)d+=a[b].value;return d}function o(a,b,c){var d=b.dir,e=b.next,f=e||d,g=c&&"parentNode"===f,h=R++;return b.first?function(b,c,e){for(;b=b[d];)if(1===b.nodeType||g)return a(b,c,e);return!1}:function(b,c,i){var j,k,l,m=[Q,h];if(i){for(;b=b[d];)if((1===b.nodeType||g)&&a(b,c,i))return!0}else for(;b=b[d];)if(1===b.nodeType||g)if(l=b[O]||(b[O]={}),k=l[b.uniqueID]||(l[b.uniqueID]={}),e&&e===b.nodeName.toLowerCase())b=b[d]||b;else{if((j=k[f])&&j[0]===Q&&j[1]===h)return m[2]=j[2];if(k[f]=m,m[2]=a(b,c,i))return!0}return!1}}function p(a){return a.length>1?function(b,c,d){for(var e=a.length;e--;)if(!a[e](b,c,d))return!1;return!0}:a[0]}function q(a,c,d){for(var e=0,f=c.length;e<f;e++)b(a,c[e],d);return d}function r(a,b,c,d,e){for(var f,g=[],h=0,i=a.length,j=null!=b;h<i;h++)(f=a[h])&&(c&&!c(f,d,e)||(g.push(f),j&&b.push(h)));return g}function s(a,b,c,e,f,g){return e&&!e[O]&&(e=s(e)),f&&!f[O]&&(f=s(f,g)),d(function(d,g,h,i){var j,k,l,m=[],n=[],o=g.length,p=d||q(b||"*",h.nodeType?[h]:h,[]),s=!a||!d&&b?p:r(p,m,a,h,i),t=c?f||(d?a:o||e)?[]:g:s;if(c&&c(s,t,h,i),e)for(j=r(t,n),e(j,[],h,i),k=j.length;k--;)(l=j[k])&&(t[n[k]]=!(s[n[k]]=l));if(d){if(f||a){if(f){for(j=[],k=t.length;k--;)(l=t[k])&&j.push(s[k]=l);f(null,t=[],j,i)}for(k=t.length;k--;)(l=t[k])&&(j=f?ba(d,l):m[k])>-1&&(d[j]=!(g[j]=l))}}else t=r(t===g?t.splice(o,t.length):t),f?f(null,g,t,i):_.apply(g,t)})}function t(a){for(var b,c,d,e=a.length,f=x.relative[a[0].type],g=f||x.relative[" "],h=f?1:0,i=o(function(a){return a===b},g,!0),j=o(function(a){return ba(b,a)>-1},g,!0),k=[function(a,c,d){var e=!f&&(d||c!==D)||((b=c).nodeType?i(a,c,d):j(a,c,d));return b=null,e}];h<e;h++)if(c=x.relative[a[h].type])k=[o(p(k),c)];else{if(c=x.filter[a[h].type].apply(null,a[h].matches),c[O]){for(d=++h;d<e&&!x.relative[a[d].type];d++);return s(h>1&&p(k),h>1&&n(a.slice(0,h-1).concat({value:" "===a[h-2].type?"*":""})).replace(ia,"$1"),c,h<d&&t(a.slice(h,d)),d<e&&t(a=a.slice(d)),d<e&&n(a))}k.push(c)}return p(k)}function u(a,c){var e=c.length>0,f=a.length>0,g=function(d,g,h,i,j){var k,l,m,n=0,o="0",p=d&&[],q=[],s=D,t=d||f&&x.find.TAG("*",j),u=Q+=null==s?1:Math.random()||.1,v=t.length;for(j&&(D=g===H||g||j);o!==v&&null!=(k=t[o]);o++){if(f&&k){for(l=0,g||k.ownerDocument===H||(G(k),h=!J);m=a[l++];)if(m(k,g||H,h)){i.push(k);break}j&&(Q=u)}e&&((k=!m&&k)&&n--,d&&p.push(k))}if(n+=o,e&&o!==n){for(l=0;m=c[l++];)m(p,q,g,h);if(d){if(n>0)for(;o--;)p[o]||q[o]||(q[o]=Z.call(i));q=r(q)}_.apply(i,q),j&&!d&&q.length>0&&n+c.length>1&&b.uniqueSort(i)}return j&&(Q=u,D=s),p};return e?d(g):g}var v,w,x,y,z,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O="sizzle"+1*new Date,P=a.document,Q=0,R=0,S=c(),T=c(),U=c(),V=c(),W=function(a,b){return a===b&&(F=!0),0},X={}.hasOwnProperty,Y=[],Z=Y.pop,$=Y.push,_=Y.push,aa=Y.slice,ba=function(a,b){for(var c=0,d=a.length;c<Line truncated
* Lightbox v2.11.3
* by Lokesh Dhakar
*
* More info:
* http://lokeshdhakar.com/projects/lightbox2/
*
* Copyright Lokesh Dhakar
* Released under the MIT license
* https://github.com/lokesh/lightbox2/blob/master/LICENSE
*
* @preserve
*/
function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.lightbox=b(a.jQuery)}(this,function(a){function b(b){this.album=[],this.currentImageIndex=void 0,this.init(),this.options=a.extend({},this.constructor.defaults),this.option(b)}return b.defaults={albumLabel:"Image %1 of %2",alwaysShowNavOnTouchDevices:!1,fadeDuration:600,fitImagesInViewport:!0,imageFadeDuration:600,positionFromTop:50,resizeDuration:700,showImageNumberLabel:!0,wrapAround:!1,disableScrolling:!1,sanitizeTitle:!1},b.prototype.option=function(b){a.extend(this.options,b)},b.prototype.imageCountLabel=function(a,b){return this.options.albumLabel.replace(/%1/g,a).replace(/%2/g,b)},b.prototype.init=function(){var b=this;a(document).ready(function(){b.enable(),b.build()})},b.prototype.enable=function(){var b=this;a("body").on("click","a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]",function(c){return b.start(a(c.currentTarget)),!1})},b.prototype.build=function(){if(!(a("#lightbox").length>0)){var b=this;a('<div id="lightboxOverlay" tabindex="-1" class="lightboxOverlay"></div><div id="lightbox" tabindex="-1" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" alt=""/><div class="lb-nav"><a class="lb-prev" aria-label="Previous image" href="" ></a><a class="lb-next" aria-label="Next image" href="" ></a></div><div class="lb-loader"><a class="lb-cancel"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close"></a></div></div></div></div>').appendTo(a("body")),this.$lightbox=a("#lightbox"),this.$overlay=a("#lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".lb-outerContainer"),this.$container=this.$lightbox.find(".lb-container"),this.$image=this.$lightbox.find(".lb-image"),this.$nav=this.$lightbox.find(".lb-nav"),this.containerPadding={top:parseInt(this.$container.css("padding-top"),10),right:parseInt(this.$container.css("padding-right"),10),bottom:parseInt(this.$container.css("padding-bottom"),10),left:parseInt(this.$container.css("padding-left"),10)},this.imageBorderWidth={top:parseInt(this.$image.css("border-top-width"),10),right:parseInt(this.$image.css("border-right-width"),10),bottom:parseInt(this.$image.css("border-bottom-width"),10),left:parseInt(this.$image.css("border-left-width"),10)},this.$overlay.hide().on("click",function(){return b.end(),!1}),this.$lightbox.hide().on("click",function(c){"lightbox"===a(c.target).attr("id")&&b.end()}),this.$outerContainer.on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$lightbox.find(".lb-prev").on("click",function(){return 0===b.currentImageIndex?b.changeImage(b.album.length-1):b.changeImage(b.currentImageIndex-1),!1}),this.$lightbox.find(".lb-next").on("click",function(){return b.currentImageIndex===b.album.length-1?b.changeImage(0):b.changeImage(b.currentImageIndex+1),!1}),this.$nav.on("mousedown",function(a){3===a.which&&(b.$nav.css("pointer-events","none"),b.$lightbox.one("contextmenu",function(){setTimeout(function(){this.$nav.css("pointer-events","auto")}.bind(b),0)}))}),this.$lightbox.find(".lb-loader, .lb-close").on("click",function(){return b.end(),!1})}},b.prototype.start=function(b){function c(a){d.album.push({alt:a.attr("data-alt"),link:a.attr("href"),title:a.attr("data-title")||a.attr("title")})}var d=this,e=a(window);e.on("resize",a.proxy(this.sizeOverlay,this)),this.sizeOverlay(),this.album=[];var f,g=0,h=b.attr("data-lightbox");if(h){f=a(b.prop("tagName")+'[data-lightbox="'+h+'"]');for(var i=0;i<f.length;i=++i)c(a(f[i])),f[i]===b[0]&&(g=i)}else if("lightbox"===b.attr("rel"))c(b);else{f=a(b.prop("tagName")+'[rel="'+b.attr("rel")+'"]');for(var j=0;j<f.length;j=++j)c(a(f[j])),f[j]===b[0]&&(g=j)}var k=e.scrollTop()+this.options.positionFromTop,l=e.scrollLeft();this.$lightbox.css({top:k+"px",left:l+"px"}).fadeIn(this.options.fadeDuration),this.options.disableScrolling&&a("body").addClass("lb-disable-scrolling"),this.changeImage(g)},b.prototype.changeImage=function(b){var c=this,d=this.album[b].link,e=d.split(".").slice(-1)[0],f=this.$lightbox.find(".lb-image");this.disableKeyboardNav(),this.$overlay.fadeIn(this.options.fadeDuration),a(".lb-loader").fadeIn("slow"),this.$lightbox.find(".lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption").hide(),this.$outerContainer.addClass("animating");var g=new Image;g.onload=function(){var h,i,j,k,l,m;f.attr({alt:c.album[b].alt,src:d}),a(g),f.width(g.width),f.height(g.height),m=a(window).width(),l=a(window).height(),k=m-c.containerPadding.left-c.containerPadding.right-c.imageBorderWidth.left-c.imageBorderWidth.right-20,j=l-c.containerPadding.top-c.containerPadding.bottom-c.imageBorderWidLine truncated
//# sourceMappingURL=lightbox-plus-jquery.min.map
-1
View File
@@ -1 +0,0 @@
{"version":3,"sources":["lightbox-plus-jquery.js"],"names":["global","factory","module","exports","document","w","Error","window","this","noGlobal","DOMEval","code","node","doc","i","val","script","createElement","text","preservedScriptAttributes","getAttribute","setAttribute","head","appendChild","parentNode","removeChild","toType","obj","class2type","toString","call","isArrayLike","length","type","isFunction","isWindow","nodeName","elem","name","toLowerCase","winnow","elements","qualifier","not","jQuery","grep","nodeType","indexOf","filter","sibling","cur","dir","createOptions","options","object","each","match","rnothtmlwhite","_","flag","Identity","v","Thrower","ex","adoptValue","value","resolve","reject","noValue","method","promise","done","fail","then","apply","undefined","slice","completed","removeEventListener","ready","fcamelCase","all","letter","toUpperCase","camelCase","string","replace","rmsPrefix","rdashAlpha","Data","expando","uid","getData","data","rbrace","test","JSON","parse","dataAttr","key","rmultiDash","e","dataUser","set","adjustCSS","prop","valueParts","tween","adjusted","scale","maxIterations","currentValue","css","initial","unit","cssNumber","initialInUnit","rcssNum","exec","style","start","end","getDefaultDisplay","temp","ownerDocument","display","defaultDisplayMap","body","showHide","show","values","index","dataPriv","get","isHiddenWithinTree","getAll","context","tag","ret","getElementsByTagName","querySelectorAll","merge","setGlobalEval","elems","refElements","l","buildFragment","scripts","selection","ignored","tmp","wrap","attached","j","fragment","createDocumentFragment","nodes","rhtml","rtagName","wrapMap","_default","innerHTML","htmlPrefilter","lastChild","childNodes","firstChild","textContent","push","createTextNode","inArray","isAttached","rscriptType","returnTrue","returnFalse","expectSync","safeActiveElement","activeElement","err","on","types","selector","fn","one","origFn","event","off","arguments","guid","add","leverageNative","el","namespace","handler","notAsync","result","saved","isTrigger","special","delegateType","stopPropagation","stopImmediatePropagation","preventDefault","trigger","extend","Event","prototype","manipulationTarget","content","children","disableScript","restoreScript","removeAttribute","cloneCopyEvent","src","dest","pdataOld","pdataCur","udataOld","udataCur","events","hasData","access","handle","fixInput","rcheckableType","checked","defaultValue","domManip","collection","args","callback","concat","first","hasScripts","iNoClone","valueIsFunction","support","checkClone","rchecked","self","eq","html","map","clone","contains","_evalUrl","noModule","nonce","rcleanScript","remove","keepData","cleanData","curCSS","computed","width","minWidth","maxWidth","getStyles","getPropertyValue","pixelBoxStyles","rnumnonpx","rboxStyle","addGetHookIf","conditionFn","hookFn","vendorPropName","capName","cssPrefixes","emptyStyle","finalPropName","final","cssProps","vendorProps","setPositiveNumber","subtract","matches","Math","max","boxModelAdjustment","dimension","box","isBorderBox","styles","computedVal","extra","delta","cssExpand","ceil","getWidthOrHeight","boxSizingNeeded","boxSizingReliable","valueIsBorderBox","offsetProp","parseFloat","getClientRects","Tween","easing","init","schedule","inProgress","hidden","requestAnimationFrame","setTimeout","fx","interval","tick","createFxNow","fxNow","Date","now","genFx","includeWidth","which","attrs","height","opacity","createTween","animation","Animation","tweeners","defaultPrefilter","props","opts","toggle","hooks","oldfire","propTween","restoreDisplay","isBox","anim","orig","dataShow","queue","_queueHooks","unqueued","empty","fire","always","rfxtypes","isEmptyObject","overflow","overflowX","overflowY","propFilter","specialEasing","Array","isArray","cssHooks","expand","properties","stopped","prefilters","deferred","Deferred","currentTime","remaining","startTime","duration","percent","tweens","run","notifyWith","resolveWith","originalProperties","originalOptions","stop","gotoEnd","rejectWith","bind","progress","complete","timer","stripAndCollapse","join","getClass","classesToArray","buildParams","prefix","traditional","rbracket","addToPrefiltersOrTransports","structure","dataTypeExpression","func","dataType","dataTypes","unshift","inspectPrefiltersOrTransports","jqXHR","inspect","selected","inspected","prefilterOrFactory","dataTypeOrTransport","seekingTransport","transports","ajaxExtend","target","deep","flatOptions","ajaxSettings","ajaxHandleResponses","s","responses","ct","finalDataType","firstDataType","contents","shift","mimeType","getResponseHeader","converters","ajaxConvert","response","isSuccess","conv2","current","conv","prev","responseFields","dataFilter","split","throws","state","error","arr","getProto","Object","getPrototypeOf","hasOwn","hasOwnProperty","fnToString","ObjectFunctionString","version","rtrim","jquery","constructor","toArray","num","pushStack","prevObject","last","len","sort","splice","copy","copyIsArray"Line truncated
+15
View File
@@ -0,0 +1,15 @@
/*!
* Lightbox v2.11.5
* by Lokesh Dhakar
*
* More info:
* http://lokeshdhakar.com/projects/lightbox2/
*
* Copyright Lokesh Dhakar
* Released under the MIT license
* https://github.com/lokesh/lightbox2/blob/master/LICENSE
*
* @preserve
*/
!function(a,b){"function"==typeof define&&define.amd?define(["jquery"],b):"object"==typeof exports?module.exports=b(require("jquery")):a.lightbox=b(a.jQuery)}(this,function(a){function b(b){this.album=[],this.currentImageIndex=void 0,this.init(),this.options=a.extend({},this.constructor.defaults),this.option(b)}return b.defaults={albumLabel:"Image %1 of %2",alwaysShowNavOnTouchDevices:!1,fadeDuration:600,fitImagesInViewport:!0,imageFadeDuration:600,positionFromTop:50,resizeDuration:700,showImageNumberLabel:!0,wrapAround:!1,disableScrolling:!1,sanitizeTitle:!1},b.prototype.option=function(b){a.extend(this.options,b)},b.prototype.imageCountLabel=function(a,b){return this.options.albumLabel.replace(/%1/g,a).replace(/%2/g,b)},b.prototype.init=function(){var b=this;a(document).ready(function(){b.enable(),b.build()})},b.prototype.enable=function(){var b=this;a("body").on("click","a[rel^=lightbox], area[rel^=lightbox], a[data-lightbox], area[data-lightbox]",function(c){return b.start(a(c.currentTarget)),!1})},b.prototype.build=function(){if(!(a("#lightbox").length>0)){var b=this;a('<div id="lightboxOverlay" tabindex="-1" class="lightboxOverlay"></div><div id="lightbox" tabindex="-1" class="lightbox"><div class="lb-outerContainer"><div class="lb-container"><img class="lb-image" src="data:image/gif;base64,R0lGODlhAQABAIAAAP///wAAACH5BAEAAAAALAAAAAABAAEAAAICRAEAOw==" alt=""/><div class="lb-nav"><a class="lb-prev" role="button" tabindex="0" aria-label="Previous image" href="" ></a><a class="lb-next" role="button" tabindex="0" aria-label="Next image" href="" ></a></div><div class="lb-loader"><a class="lb-cancel" role="button" tabindex="0"></a></div></div></div><div class="lb-dataContainer"><div class="lb-data"><div class="lb-details"><span class="lb-caption"></span><span class="lb-number"></span></div><div class="lb-closeContainer"><a class="lb-close" role="button" tabindex="0"></a></div></div></div></div>').appendTo(a("body")),this.$lightbox=a("#lightbox"),this.$overlay=a("#lightboxOverlay"),this.$outerContainer=this.$lightbox.find(".lb-outerContainer"),this.$container=this.$lightbox.find(".lb-container"),this.$image=this.$lightbox.find(".lb-image"),this.$nav=this.$lightbox.find(".lb-nav"),this.containerPadding={top:parseInt(this.$container.css("padding-top"),10),right:parseInt(this.$container.css("padding-right"),10),bottom:parseInt(this.$container.css("padding-bottom"),10),left:parseInt(this.$container.css("padding-left"),10)},this.imageBorderWidth={top:parseInt(this.$image.css("border-top-width"),10),right:parseInt(this.$image.css("border-right-width"),10),bottom:parseInt(this.$image.css("border-bottom-width"),10),left:parseInt(this.$image.css("border-left-width"),10)},this.$overlay.hide().on("click",function(){return b.end(),!1}),this.$lightbox.hide().on("click",function(c){"lightbox"===a(c.target).attr("id")&&b.end()}),this.$outerContainer.on("click",function(c){return"lightbox"===a(c.target).attr("id")&&b.end(),!1}),this.$lightbox.find(".lb-prev").on("click",function(){return 0===b.currentImageIndex?b.changeImage(b.album.length-1):b.changeImage(b.currentImageIndex-1),!1}),this.$lightbox.find(".lb-next").on("click",function(){return b.currentImageIndex===b.album.length-1?b.changeImage(0):b.changeImage(b.currentImageIndex+1),!1}),this.$nav.on("mousedown",function(a){3===a.which&&(b.$nav.css("pointer-events","none"),b.$lightbox.one("contextmenu",function(){setTimeout(function(){this.$nav.css("pointer-events","auto")}.bind(b),0)}))}),this.$lightbox.find(".lb-loader, .lb-close").on("click keyup",function(a){if("click"===a.type||"keyup"===a.type&&(13===a.which||32===a.which))return b.end(),!1})}},b.prototype.start=function(b){function c(a){d.album.push({alt:a.attr("data-alt"),link:a.attr("href"),title:a.attr("data-title")||a.attr("title")})}var d=this,e=a(window);e.on("resize",a.proxy(this.sizeOverlay,this)),this.sizeOverlay(),this.album=[];var f,g=0,h=b.attr("data-lightbox");if(h){f=a(b.prop("tagName")+'[data-lightbox="'+h+'"]');for(var i=0;i<f.length;i=++i)c(a(f[i])),f[i]===b[0]&&(g=i)}else if("lightbox"===b.attr("rel"))c(b);else{f=a(b.prop("tagName")+'[rel="'+b.attr("rel")+'"]');for(var j=0;j<f.length;j=++j)c(a(f[j])),f[j]===b[0]&&(g=j)}var k=e.scrollTop()+this.options.positionFromTop,l=e.scrollLeft();this.$lightbox.css({top:k+"px",left:l+"px"}).fadeIn(this.options.fadeDuration),this.options.disableScrolling&&a("body").addClass("lb-disable-scrolling"),this.changeImage(g)},b.prototype.changeImage=function(b){var c=this,d=this.album[b].link,e=d.split(".").slice(-1)[0],f=this.$lightbox.find(".lb-image");this.disableKeyboardNav(),this.$overlay.fadeIn(this.options.fadeDuration),a(".lb-loader").fadeIn("slow"),this.$lightbox.find(".lb-image, .lb-nav, .lb-prev, .lb-next, .lb-dataContainer, .lb-numbers, .lb-caption").hide(),this.$outerContainer.addClass("animating");var g=new Image;g.onload=function(){var h,i,j,k,l,m;f.attr({alt:c.album[b].alt,src:d}),a(g),f.width(g.width),f.height(g.height);var n=g.width/g.height;m=a(windLine truncated
//# sourceMappingURL=lightbox.min.map
+1 -1
View File
@@ -13,7 +13,7 @@
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
* @note This program is distributed in the hope that it will be useful - WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
+2 -2
View File
@@ -13,7 +13,7 @@
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
* @note This program is distributed in the hope that it will be useful - WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
@@ -29,7 +29,7 @@ use League\OAuth2\Client\Token\AccessToken;
* OAuth - OAuth2 authentication wrapper class.
* Uses the oauth2-client package from the League of Extraordinary Packages.
*
* @see http://oauth2-client.thephpleague.com
* @see https://oauth2-client.thephpleague.com
*
* @author Marcus Bointon (Synchro/coolbru) <phpmailer@synchromedia.co.uk>
*/
+1 -1
View File
@@ -13,7 +13,7 @@
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
* @note This program is distributed in the hope that it will be useful - WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
+285 -49
View File
@@ -13,7 +13,7 @@
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
* @note This program is distributed in the hope that it will be useful - WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
@@ -152,8 +152,7 @@ class PHPMailer
* Only supported in simple alt or alt_inline message types
* To generate iCal event structures, use classes like EasyPeasyICS or iCalcreator.
*
* @see http://sprain.ch/blog/downloads/php-class-easypeasyics-create-ical-files-with-php/
* @see http://kigkonsult.se/iCalcreator/
* @see https://kigkonsult.se/iCalcreator/
*
* @var string
*/
@@ -254,7 +253,7 @@ class PHPMailer
* You can set your own, but it must be in the format "<id@domain>",
* as defined in RFC5322 section 3.6.4 or it will be ignored.
*
* @see https://tools.ietf.org/html/rfc5322#section-3.6.4
* @see https://www.rfc-editor.org/rfc/rfc5322#section-3.6.4
*
* @var string
*/
@@ -357,6 +356,13 @@ class PHPMailer
*/
public $AuthType = '';
/**
* SMTP SMTPXClient command attributes
*
* @var array
*/
protected $SMTPXClient = [];
/**
* An implementation of the PHPMailer OAuthTokenProvider interface.
*
@@ -381,7 +387,7 @@ class PHPMailer
* 'DELAY' will notify you if there is an unusual delay in delivery, but the actual
* delivery's outcome (success or failure) is not yet decided.
*
* @see https://tools.ietf.org/html/rfc3461 See section 4.1 for more information about NOTIFY
* @see https://www.rfc-editor.org/rfc/rfc3461.html#section-4.1 for more information about NOTIFY
*/
public $dsn = '';
@@ -461,7 +467,7 @@ class PHPMailer
* Only applicable when sending via SMTP.
*
* @see https://en.wikipedia.org/wiki/Variable_envelope_return_path
* @see http://www.postfix.org/VERP_README.html Postfix VERP info
* @see https://www.postfix.org/VERP_README.html Postfix VERP info
*
* @var bool
*/
@@ -544,10 +550,10 @@ class PHPMailer
* The function that handles the result of the send email action.
* It is called out by send() for each email sent.
*
* Value can be any php callable: http://www.php.net/is_callable
* Value can be any php callable: https://www.php.net/is_callable
*
* Parameters:
* bool $result result of the send action
* bool $result result of the send action
* array $to email addresses of the recipients
* array $cc cc email addresses
* array $bcc bcc email addresses
@@ -574,6 +580,10 @@ class PHPMailer
* May be a callable to inject your own validator, but there are several built-in validators.
* The default validator uses PHP's FILTER_VALIDATE_EMAIL filter_var option.
*
* If CharSet is UTF8, the validator is left at the default value,
* and you send to addresses that use non-ASCII local parts, then
* PHPMailer automatically changes to the 'eai' validator.
*
* @see PHPMailer::validateAddress()
*
* @var string|callable
@@ -653,6 +663,14 @@ class PHPMailer
*/
protected $ReplyToQueue = [];
/**
* Whether the need for SMTPUTF8 has been detected. Set by
* preSend() if necessary.
*
* @var bool
*/
public $UseSMTPUTF8 = false;
/**
* The array of attachments.
*
@@ -750,7 +768,7 @@ class PHPMailer
*
* @var string
*/
const VERSION = '6.7.1';
const VERSION = '6.12.0';
/**
* Error severity: message only, continue processing.
@@ -795,7 +813,7 @@ class PHPMailer
* The maximum line length supported by mail().
*
* Background: mail() will sometimes corrupt messages
* with headers headers longer than 65 chars, see #818.
* with headers longer than 65 chars, see #818.
*
* @var int
*/
@@ -896,7 +914,7 @@ class PHPMailer
}
//Is this a PSR-3 logger?
if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) {
$this->Debugoutput->debug($str);
$this->Debugoutput->debug(rtrim($str, "\r\n"));
return;
}
@@ -1065,7 +1083,7 @@ class PHPMailer
* be modified after calling this function), addition of such addresses is delayed until send().
* Addresses that have been added already return false, but do not throw exceptions.
*
* @param string $kind One of 'to', 'cc', 'bcc', or 'ReplyTo'
* @param string $kind One of 'to', 'cc', 'bcc', or 'Reply-To'
* @param string $address The email address
* @param string $name An optional username associated with the address
*
@@ -1104,19 +1122,22 @@ class PHPMailer
$params = [$kind, $address, $name];
//Enqueue addresses with IDN until we know the PHPMailer::$CharSet.
//Domain is assumed to be whatever is after the last @ symbol in the address
if (static::idnSupported() && $this->has8bitChars(substr($address, ++$pos))) {
if ('Reply-To' !== $kind) {
if (!array_key_exists($address, $this->RecipientsQueue)) {
$this->RecipientsQueue[$address] = $params;
if ($this->has8bitChars(substr($address, ++$pos))) {
if (static::idnSupported()) {
if ('Reply-To' !== $kind) {
if (!array_key_exists($address, $this->RecipientsQueue)) {
$this->RecipientsQueue[$address] = $params;
return true;
}
} elseif (!array_key_exists($address, $this->ReplyToQueue)) {
$this->ReplyToQueue[$address] = $params;
return true;
}
} elseif (!array_key_exists($address, $this->ReplyToQueue)) {
$this->ReplyToQueue[$address] = $params;
return true;
}
//We have an 8-bit domain, but we are missing the necessary extensions to support it
//Or we are already sending to this address
return false;
}
@@ -1154,6 +1175,15 @@ class PHPMailer
*/
protected function addAnAddress($kind, $address, $name = '')
{
if (
self::$validator === 'php' &&
((bool) preg_match('/[\x80-\xFF]/', $address))
) {
//The caller has not altered the validator and is sending to an address
//with UTF-8, so assume that they want UTF-8 support instead of failing
$this->CharSet = self::CHARSET_UTF8;
self::$validator = 'eai';
}
if (!in_array($kind, ['to', 'cc', 'bcc', 'Reply-To'])) {
$error_message = sprintf(
'%s: %s',
@@ -1205,7 +1235,7 @@ class PHPMailer
* Uses the imap_rfc822_parse_adrlist function if the IMAP extension is available.
* Note that quotes in the name part are removed.
*
* @see http://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation
* @see https://www.andrew.cmu.edu/user/agreen1/testing/mrbs/web/Mail/RFC822.php A more careful implementation
*
* @param string $addrstr The address list string
* @param bool $useimap Whether to use the IMAP extension to parse the list
@@ -1356,6 +1386,7 @@ class PHPMailer
* * `pcre` Use old PCRE implementation;
* * `php` Use PHP built-in FILTER_VALIDATE_EMAIL;
* * `html5` Use the pattern given by the HTML5 spec for 'email' type form input elements.
* * `eai` Use a pattern similar to the HTML5 spec for 'email' and to firefox, extended to support EAI (RFC6530).
* * `noregex` Don't use a regex: super fast, really dumb.
* Alternatively you may pass in a callable to inject your own validator, for example:
*
@@ -1400,7 +1431,6 @@ class PHPMailer
* * IPv6 literals: 'first.last@[IPv6:a1::]'
* Not all of these will necessarily work for sending!
*
* @see http://squiloople.com/2009/12/20/email-address-validation/
* @copyright 2009-2010 Michael Rushton
* Feel free to use and redistribute this code. But please keep this copyright notice.
*/
@@ -1427,6 +1457,24 @@ class PHPMailer
'[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/sD',
$address
);
case 'eai':
/*
* This is the pattern used in the HTML5 spec for validation of 'email' type
* form input elements (as above), modified to accept Unicode email addresses.
* This is also more lenient than Firefox' html5 spec, in order to make the regex faster.
* 'eai' is an acronym for Email Address Internationalization.
* This validator is selected automatically if you attempt to use recipient addresses
* that contain Unicode characters in the local part.
*
* @see https://html.spec.whatwg.org/#e-mail-state-(type=email)
* @see https://en.wikipedia.org/wiki/International_email
*/
return (bool) preg_match(
'/^[-\p{L}\p{N}\p{M}.!#$%&\'*+\/=?^_`{|}~]+@[\p{L}\p{N}\p{M}](?:[\p{L}\p{N}\p{M}-]{0,61}' .
'[\p{L}\p{N}\p{M}])?(?:\.[\p{L}\p{N}\p{M}]' .
'(?:[-\p{L}\p{N}\p{M}]{0,61}[\p{L}\p{N}\p{M}])?)*$/usD',
$address
);
case 'php':
default:
return filter_var($address, FILTER_VALIDATE_EMAIL) !== false;
@@ -1560,9 +1608,26 @@ class PHPMailer
$this->error_count = 0; //Reset errors
$this->mailHeader = '';
//The code below tries to support full use of Unicode,
//while remaining compatible with legacy SMTP servers to
//the greatest degree possible: If the message uses
//Unicode in the local parts of any addresses, it is sent
//using SMTPUTF8. If not, it it sent using
//punycode-encoded domains and plain SMTP.
if (
static::CHARSET_UTF8 === strtolower($this->CharSet) &&
($this->anyAddressHasUnicodeLocalPart($this->RecipientsQueue) ||
$this->anyAddressHasUnicodeLocalPart(array_keys($this->all_recipients)) ||
$this->anyAddressHasUnicodeLocalPart($this->ReplyToQueue) ||
$this->addressHasUnicodeLocalPart($this->From))
) {
$this->UseSMTPUTF8 = true;
}
//Dequeue recipient and Reply-To addresses with IDN
foreach (array_merge($this->RecipientsQueue, $this->ReplyToQueue) as $params) {
$params[1] = $this->punyencodeAddress($params[1]);
if (!$this->UseSMTPUTF8) {
$params[1] = $this->punyencodeAddress($params[1]);
}
call_user_func_array([$this, 'addAnAddress'], $params);
}
if (count($this->to) + count($this->cc) + count($this->bcc) < 1) {
@@ -1571,6 +1636,10 @@ class PHPMailer
//Validate From, Sender, and ConfirmReadingTo addresses
foreach (['From', 'Sender', 'ConfirmReadingTo'] as $address_kind) {
if ($this->{$address_kind} === null) {
$this->{$address_kind} = '';
continue;
}
$this->{$address_kind} = trim($this->{$address_kind});
if (empty($this->{$address_kind})) {
continue;
@@ -1723,9 +1792,8 @@ class PHPMailer
//This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
//A space after `-f` is optional, but there is a long history of its presence
//causing problems, so we don't use one
//Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
//Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html
//Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html
//Exim docs: https://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
//Sendmail docs: https://www.sendmail.org/~ca/email/man/sendmail.html
//Example problem: https://www.drupal.org/node/1057954
//PHP 5.6 workaround
@@ -1863,7 +1931,7 @@ class PHPMailer
*/
protected static function isPermittedPath($path)
{
//Matches scheme definition from https://tools.ietf.org/html/rfc3986#section-3.1
//Matches scheme definition from https://www.rfc-editor.org/rfc/rfc3986#section-3.1
return !preg_match('#^[a-z][a-z\d+.-]*://#i', $path);
}
@@ -1890,7 +1958,7 @@ class PHPMailer
/**
* Send mail using the PHP mail() function.
*
* @see http://www.php.net/manual/en/book.mail.php
* @see https://www.php.net/manual/en/book.mail.php
*
* @param string $header The message headers
* @param string $body The message body
@@ -1920,9 +1988,8 @@ class PHPMailer
//This sets the SMTP envelope sender which gets turned into a return-path header by the receiver
//A space after `-f` is optional, but there is a long history of its presence
//causing problems, so we don't use one
//Exim docs: http://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
//Sendmail docs: http://www.sendmail.org/~ca/email/man/sendmail.html
//Qmail docs: http://www.qmail.org/man/man8/qmail-inject.html
//Exim docs: https://www.exim.org/exim-html-current/doc/html/spec_html/ch-the_exim_command_line.html
//Sendmail docs: https://www.sendmail.org/~ca/email/man/sendmail.html
//Example problem: https://www.drupal.org/node/1057954
//CVE-2016-10033, CVE-2016-10045: Don't pass -f if characters will be escaped.
@@ -1997,6 +2064,38 @@ class PHPMailer
return $this->smtp;
}
/**
* Provide SMTP XCLIENT attributes
*
* @param string $name Attribute name
* @param ?string $value Attribute value
*
* @return bool
*/
public function setSMTPXclientAttribute($name, $value)
{
if (!in_array($name, SMTP::$xclient_allowed_attributes)) {
return false;
}
if (isset($this->SMTPXClient[$name]) && $value === null) {
unset($this->SMTPXClient[$name]);
} elseif ($value !== null) {
$this->SMTPXClient[$name] = $value;
}
return true;
}
/**
* Get SMTP XCLIENT attributes
*
* @return array
*/
public function getSMTPXclientAttributes()
{
return $this->SMTPXClient;
}
/**
* Send mail via SMTP.
* Returns false if there is a bad MAIL FROM, RCPT, or DATA input.
@@ -2019,12 +2118,20 @@ class PHPMailer
if (!$this->smtpConnect($this->SMTPOptions)) {
throw new Exception($this->lang('smtp_connect_failed'), self::STOP_CRITICAL);
}
//If we have recipient addresses that need Unicode support,
//but the server doesn't support it, stop here
if ($this->UseSMTPUTF8 && !$this->smtp->getServerExt('SMTPUTF8')) {
throw new Exception($this->lang('no_smtputf8'), self::STOP_CRITICAL);
}
//Sender already validated in preSend()
if ('' === $this->Sender) {
$smtp_from = $this->From;
} else {
$smtp_from = $this->Sender;
}
if (count($this->SMTPXClient)) {
$this->smtp->xclient($this->SMTPXClient);
}
if (!$this->smtp->mail($smtp_from)) {
$this->setError($this->lang('from_failed') . $smtp_from . ' : ' . implode(',', $this->smtp->getError()));
throw new Exception($this->ErrorInfo, self::STOP_CRITICAL);
@@ -2117,6 +2224,7 @@ class PHPMailer
$this->smtp->setDebugLevel($this->SMTPDebug);
$this->smtp->setDebugOutput($this->Debugoutput);
$this->smtp->setVerp($this->do_verp);
$this->smtp->setSMTPUTF8($this->UseSMTPUTF8);
if ($this->Host === null) {
$this->Host = 'localhost';
}
@@ -2187,10 +2295,17 @@ class PHPMailer
$this->smtp->hello($hello);
//Automatically enable TLS encryption if:
//* it's not disabled
//* we are not connecting to localhost
//* we have openssl extension
//* we are not already using SSL
//* the server offers STARTTLS
if ($this->SMTPAutoTLS && $sslext && 'ssl' !== $secure && $this->smtp->getServerExt('STARTTLS')) {
if (
$this->SMTPAutoTLS &&
$this->Host !== 'localhost' &&
$sslext &&
$secure !== 'ssl' &&
$this->smtp->getServerExt('STARTTLS')
) {
$tls = true;
}
if ($tls) {
@@ -2307,6 +2422,7 @@ class PHPMailer
'smtp_detail' => 'Detail: ',
'smtp_error' => 'SMTP server error: ',
'variable_set' => 'Cannot set or reset variable: ',
'no_smtputf8' => 'Server does not support SMTPUTF8 needed to send to Unicode addresses',
];
if (empty($lang_path)) {
//Calculate an absolute path so it can work if CWD is not here
@@ -2656,7 +2772,7 @@ class PHPMailer
}
//Only allow a custom message ID if it conforms to RFC 5322 section 3.6.4
//https://tools.ietf.org/html/rfc5322#section-3.6.4
//https://www.rfc-editor.org/rfc/rfc5322#section-3.6.4
if (
'' !== $this->MessageID &&
preg_match(
@@ -2821,7 +2937,9 @@ class PHPMailer
$bodyEncoding = $this->Encoding;
$bodyCharSet = $this->CharSet;
//Can we do a 7-bit downgrade?
if (static::ENCODING_8BIT === $bodyEncoding && !$this->has8bitChars($this->Body)) {
if ($this->UseSMTPUTF8) {
$bodyEncoding = static::ENCODING_8BIT;
} elseif (static::ENCODING_8BIT === $bodyEncoding && !$this->has8bitChars($this->Body)) {
$bodyEncoding = static::ENCODING_7BIT;
//All ISO 8859, Windows codepage and UTF-8 charsets are ascii compatible up to 7-bit
$bodyCharSet = static::CHARSET_ASCII;
@@ -3458,7 +3576,8 @@ class PHPMailer
/**
* Encode a header value (not including its label) optimally.
* Picks shortest of Q, B, or none. Result includes folding if needed.
* See RFC822 definitions for phrase, comment and text positions.
* See RFC822 definitions for phrase, comment and text positions,
* and RFC2047 for inline encodings.
*
* @param string $str The header value to encode
* @param string $position What context the string will be used in
@@ -3467,6 +3586,11 @@ class PHPMailer
*/
public function encodeHeader($str, $position = 'text')
{
$position = strtolower($position);
if ($this->UseSMTPUTF8 && !("comment" === $position)) {
return trim(static::normalizeBreaks($str));
}
$matchcount = 0;
switch (strtolower($position)) {
case 'phrase':
@@ -3581,7 +3705,7 @@ class PHPMailer
* without breaking lines within a character.
* Adapted from a function by paravoid.
*
* @see http://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283
* @see https://www.php.net/manual/en/function.mb-encode-mimeheader.php#60283
*
* @param string $str multi-byte text to wrap encode
* @param string $linebreak string to use as linefeed/end-of-line
@@ -3637,7 +3761,7 @@ class PHPMailer
/**
* Encode a string using Q encoding.
*
* @see http://tools.ietf.org/html/rfc2047#section-4.2
* @see https://www.rfc-editor.org/rfc/rfc2047#section-4.2
*
* @param string $str the text to encode
* @param string $position Where the text is going to be used, see the RFC for what that means
@@ -4047,6 +4171,79 @@ class PHPMailer
$this->CustomHeader = [];
}
/**
* Clear a specific custom header by name or name and value.
* $name value can be overloaded to contain
* both header name and value (name:value).
*
* @param string $name Custom header name
* @param string|null $value Header value
*
* @return bool True if a header was replaced successfully
*/
public function clearCustomHeader($name, $value = null)
{
if (null === $value && strpos($name, ':') !== false) {
//Value passed in as name:value
list($name, $value) = explode(':', $name, 2);
}
$name = trim($name);
$value = (null === $value) ? null : trim($value);
foreach ($this->CustomHeader as $k => $pair) {
if ($pair[0] == $name) {
// We remove the header if the value is not provided or it matches.
if (null === $value || $pair[1] == $value) {
unset($this->CustomHeader[$k]);
}
}
}
return true;
}
/**
* Replace a custom header.
* $name value can be overloaded to contain
* both header name and value (name:value).
*
* @param string $name Custom header name
* @param string|null $value Header value
*
* @return bool True if a header was replaced successfully
* @throws Exception
*/
public function replaceCustomHeader($name, $value = null)
{
if (null === $value && strpos($name, ':') !== false) {
//Value passed in as name:value
list($name, $value) = explode(':', $name, 2);
}
$name = trim($name);
$value = (null === $value) ? '' : trim($value);
$replaced = false;
foreach ($this->CustomHeader as $k => $pair) {
if ($pair[0] == $name) {
if ($replaced) {
unset($this->CustomHeader[$k]);
continue;
}
if (strpbrk($name . $value, "\r\n") !== false) {
if ($this->exceptions) {
throw new Exception($this->lang('invalid_header'));
}
return false;
}
$this->CustomHeader[$k] = [$name, $value];
$replaced = true;
}
}
return true;
}
/**
* Add an error message to the error container.
*
@@ -4058,7 +4255,7 @@ class PHPMailer
if ('smtp' === $this->Mailer && null !== $this->smtp) {
$lasterror = $this->smtp->getError();
if (!empty($lasterror['error'])) {
$msg .= $this->lang('smtp_error') . $lasterror['error'];
$msg .= ' ' . $this->lang('smtp_error') . $lasterror['error'];
if (!empty($lasterror['detail'])) {
$msg .= ' ' . $this->lang('smtp_detail') . $lasterror['detail'];
}
@@ -4102,7 +4299,7 @@ class PHPMailer
$result = $_SERVER['SERVER_NAME'];
} elseif (function_exists('gethostname') && gethostname() !== false) {
$result = gethostname();
} elseif (php_uname('n') !== false) {
} elseif (php_uname('n') !== '') {
$result = php_uname('n');
}
if (!static::isValidHost($result)) {
@@ -4127,7 +4324,7 @@ class PHPMailer
empty($host)
|| !is_string($host)
|| strlen($host) > 256
|| !preg_match('/^([a-zA-Z\d.-]*|\[[a-fA-F\d:]+\])$/', $host)
|| !preg_match('/^([a-z\d.-]*|\[[a-f\d:]+\])$/i', $host)
) {
return false;
}
@@ -4141,10 +4338,49 @@ class PHPMailer
//Is it a valid IPv4 address?
return filter_var($host, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4) !== false;
}
//Is it a syntactically valid hostname (when embeded in a URL)?
return filter_var('http://' . $host, FILTER_VALIDATE_URL) !== false;
//Is it a syntactically valid hostname (when embedded in a URL)?
return filter_var('https://' . $host, FILTER_VALIDATE_URL) !== false;
}
/**
* Check whether the supplied address uses Unicode in the local part.
*
* @return bool
*/
protected function addressHasUnicodeLocalPart($address)
{
return (bool) preg_match('/[\x80-\xFF].*@/', $address);
}
/**
* Check whether any of the supplied addresses use Unicode in the local part.
*
* @return bool
*/
protected function anyAddressHasUnicodeLocalPart($addresses)
{
foreach ($addresses as $address) {
if (is_array($address)) {
$address = $address[0];
}
if ($this->addressHasUnicodeLocalPart($address)) {
return true;
}
}
return false;
}
/**
* Check whether the message requires SMTPUTF8 based on what's known so far.
*
* @return bool
*/
public function needsSMTPUTF8()
{
return $this->UseSMTPUTF8;
}
/**
* Get an error message in the current language.
*
@@ -4553,7 +4789,7 @@ class PHPMailer
* Multi-byte-safe pathinfo replacement.
* Drop-in replacement for pathinfo(), but multibyte- and cross-platform-safe.
*
* @see http://www.php.net/manual/en/function.pathinfo.php#107461
* @see https://www.php.net/manual/en/function.pathinfo.php#107461
*
* @param string $path A filename or path, does not need to exist as a file
* @param int|string $options Either a PATHINFO_* constant,
@@ -4788,7 +5024,7 @@ class PHPMailer
* Uses the 'relaxed' algorithm from RFC6376 section 3.4.2.
* Canonicalized headers should *always* use CRLF, regardless of mailer setting.
*
* @see https://tools.ietf.org/html/rfc6376#section-3.4.2
* @see https://www.rfc-editor.org/rfc/rfc6376#section-3.4.2
*
* @param string $signHeader Header
*
@@ -4800,7 +5036,7 @@ class PHPMailer
$signHeader = static::normalizeBreaks($signHeader, self::CRLF);
//Unfold header lines
//Note PCRE \s is too broad a definition of whitespace; RFC5322 defines it as `[ \t]`
//@see https://tools.ietf.org/html/rfc5322#section-2.2
//@see https://www.rfc-editor.org/rfc/rfc5322#section-2.2
//That means this may break if you do something daft like put vertical tabs in your headers.
$signHeader = preg_replace('/\r\n[ \t]+/', ' ', $signHeader);
//Break headers out into an array
@@ -4832,7 +5068,7 @@ class PHPMailer
* Uses the 'simple' algorithm from RFC6376 section 3.4.3.
* Canonicalized bodies should *always* use CRLF, regardless of mailer setting.
*
* @see https://tools.ietf.org/html/rfc6376#section-3.4.3
* @see https://www.rfc-editor.org/rfc/rfc6376#section-3.4.3
*
* @param string $body Message Body
*
@@ -4868,7 +5104,7 @@ class PHPMailer
$DKIMquery = 'dns/txt'; //Query method
$DKIMtime = time();
//Always sign these headers without being asked
//Recommended list from https://tools.ietf.org/html/rfc6376#section-5.4.1
//Recommended list from https://www.rfc-editor.org/rfc/rfc6376#section-5.4.1
$autoSignHeaders = [
'from',
'to',
@@ -4974,7 +5210,7 @@ class PHPMailer
}
//The DKIM-Signature header is included in the signature *except for* the value of the `b` tag
//which is appended after calculating the signature
//https://tools.ietf.org/html/rfc6376#section-3.5
//https://www.rfc-editor.org/rfc/rfc6376#section-3.5
$dkimSignatureHeader = 'DKIM-Signature: v=1;' .
' d=' . $this->DKIM_domain . ';' .
' s=' . $this->DKIM_selector . ';' . static::$LE .
+5 -3
View File
@@ -13,7 +13,7 @@
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
* @note This program is distributed in the hope that it will be useful - WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
@@ -46,7 +46,7 @@ class POP3
*
* @var string
*/
const VERSION = '6.7.1';
const VERSION = '6.12.0';
/**
* Default POP3 port number.
@@ -250,7 +250,9 @@ class POP3
//On Windows this will raise a PHP Warning error if the hostname doesn't exist.
//Rather than suppress it with @fsockopen, capture it cleanly instead
set_error_handler([$this, 'catchWarning']);
set_error_handler(function () {
call_user_func_array([$this, 'catchWarning'], func_get_args());
});
if (false === $port) {
$port = static::DEFAULT_PORT;
+113 -25
View File
@@ -13,7 +13,7 @@
* @copyright 2012 - 2020 Marcus Bointon
* @copyright 2010 - 2012 Jim Jagielski
* @copyright 2004 - 2009 Andy Prevost
* @license http://www.gnu.org/copyleft/lesser.html GNU Lesser General Public License
* @license https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html GNU Lesser General Public License
* @note This program is distributed in the hope that it will be useful - WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
* FITNESS FOR A PARTICULAR PURPOSE.
@@ -35,7 +35,7 @@ class SMTP
*
* @var string
*/
const VERSION = '6.7.1';
const VERSION = '6.12.0';
/**
* SMTP line break constant.
@@ -51,11 +51,18 @@ class SMTP
*/
const DEFAULT_PORT = 25;
/**
* The SMTPs port to use if one is not specified.
*
* @var int
*/
const DEFAULT_SECURE_PORT = 465;
/**
* The maximum line length allowed by RFC 5321 section 4.5.3.1.6,
* *excluding* a trailing CRLF break.
*
* @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.6
* @see https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.6
*
* @var int
*/
@@ -65,7 +72,7 @@ class SMTP
* The maximum line length allowed for replies in RFC 5321 section 4.5.3.1.5,
* *including* a trailing CRLF line break.
*
* @see https://tools.ietf.org/html/rfc5321#section-4.5.3.1.5
* @see https://www.rfc-editor.org/rfc/rfc5321#section-4.5.3.1.5
*
* @var int
*/
@@ -145,19 +152,28 @@ class SMTP
/**
* Whether to use VERP.
*
* @see http://en.wikipedia.org/wiki/Variable_envelope_return_path
* @see http://www.postfix.org/VERP_README.html Info on VERP
* @see https://en.wikipedia.org/wiki/Variable_envelope_return_path
* @see https://www.postfix.org/VERP_README.html Info on VERP
*
* @var bool
*/
public $do_verp = false;
/**
* Whether to use SMTPUTF8.
*
* @see https://www.rfc-editor.org/rfc/rfc6531
*
* @var bool
*/
public $do_smtputf8 = false;
/**
* The timeout value for connection, in seconds.
* Default of 5 minutes (300sec) is from RFC2821 section 4.5.3.2.
* This needs to be quite high to function correctly with hosts using greetdelay as an anti-spam measure.
*
* @see http://tools.ietf.org/html/rfc2821#section-4.5.3.2
* @see https://www.rfc-editor.org/rfc/rfc2821#section-4.5.3.2
*
* @var int
*/
@@ -180,17 +196,29 @@ class SMTP
*/
protected $smtp_transaction_id_patterns = [
'exim' => '/[\d]{3} OK id=(.*)/',
'sendmail' => '/[\d]{3} 2.0.0 (.*) Message/',
'postfix' => '/[\d]{3} 2.0.0 Ok: queued as (.*)/',
'Microsoft_ESMTP' => '/[0-9]{3} 2.[\d].0 (.*)@(?:.*) Queued mail for delivery/',
'sendmail' => '/[\d]{3} 2\.0\.0 (.*) Message/',
'postfix' => '/[\d]{3} 2\.0\.0 Ok: queued as (.*)/',
'Microsoft_ESMTP' => '/[0-9]{3} 2\.[\d]\.0 (.*)@(?:.*) Queued mail for delivery/',
'Amazon_SES' => '/[\d]{3} Ok (.*)/',
'SendGrid' => '/[\d]{3} Ok: queued as (.*)/',
'CampaignMonitor' => '/[\d]{3} 2.0.0 OK:([a-zA-Z\d]{48})/',
'CampaignMonitor' => '/[\d]{3} 2\.0\.0 OK:([a-zA-Z\d]{48})/',
'Haraka' => '/[\d]{3} Message Queued \((.*)\)/',
'ZoneMTA' => '/[\d]{3} Message queued as (.*)/',
'Mailjet' => '/[\d]{3} OK queued as (.*)/',
];
/**
* Allowed SMTP XCLIENT attributes.
* Must be allowed by the SMTP server. EHLO response is not checked.
*
* @see https://www.postfix.org/XCLIENT_README.html
*
* @var array
*/
public static $xclient_allowed_attributes = [
'NAME', 'ADDR', 'PORT', 'PROTO', 'HELO', 'LOGIN', 'DESTADDR', 'DESTPORT'
];
/**
* The last transaction ID issued in response to a DATA command,
* if one was detected.
@@ -261,7 +289,8 @@ class SMTP
}
//Is this a PSR-3 logger?
if ($this->Debugoutput instanceof \Psr\Log\LoggerInterface) {
$this->Debugoutput->debug($str);
//Remove trailing line breaks potentially added by calls to SMTP::client_send()
$this->Debugoutput->debug(rtrim($str, "\r\n"));
return;
}
@@ -274,6 +303,7 @@ class SMTP
switch ($this->Debugoutput) {
case 'error_log':
//Don't output, just log
/** @noinspection ForgottenDebugOutputInspection */
error_log($str);
break;
case 'html':
@@ -352,7 +382,7 @@ class SMTP
}
//Anything other than a 220 response means something went wrong
//RFC 5321 says the server will wait for us to send a QUIT in response to a 554 error
//https://tools.ietf.org/html/rfc5321#section-3.1
//https://www.rfc-editor.org/rfc/rfc5321#section-3.1
if ($responseCode === 554) {
$this->quit();
}
@@ -385,7 +415,9 @@ class SMTP
$errstr = '';
if ($streamok) {
$socket_context = stream_context_create($options);
set_error_handler([$this, 'errorHandler']);
set_error_handler(function () {
call_user_func_array([$this, 'errorHandler'], func_get_args());
});
$connection = stream_socket_client(
$host . ':' . $port,
$errno,
@@ -400,7 +432,9 @@ class SMTP
'Connection: stream_socket_client not available, falling back to fsockopen',
self::DEBUG_CONNECTION
);
set_error_handler([$this, 'errorHandler']);
set_error_handler(function () {
call_user_func_array([$this, 'errorHandler'], func_get_args());
});
$connection = fsockopen(
$host,
$port,
@@ -464,7 +498,9 @@ class SMTP
}
//Begin encrypted connection
set_error_handler([$this, 'errorHandler']);
set_error_handler(function () {
call_user_func_array([$this, 'errorHandler'], func_get_args());
});
$crypto_ok = stream_socket_enable_crypto(
$this->smtp_conn,
true,
@@ -555,7 +591,7 @@ class SMTP
}
//Send encoded username and password
if (
//Format from https://tools.ietf.org/html/rfc4616#section-2
//Format from https://www.rfc-editor.org/rfc/rfc4616#section-2
//We skip the first field (it's forgery), so the string starts with a null byte
!$this->sendCommand(
'User & Password',
@@ -629,7 +665,7 @@ class SMTP
}
//The following borrowed from
//http://php.net/manual/en/function.mhash.php#27225
//https://www.php.net/manual/en/function.mhash.php#27225
//RFC 2104 HMAC implementation for php.
//Creates an md5 HMAC.
@@ -697,7 +733,7 @@ class SMTP
* Send an SMTP DATA command.
* Issues a data command and sends the msg_data to the server,
* finalizing the mail transaction. $msg_data is the message
* that is to be send with the headers. Each header needs to be
* that is to be sent with the headers. Each header needs to be
* on a single line followed by a <CRLF> with the message headers
* and the message body being separated by an additional <CRLF>.
* Implements RFC 821: DATA <CRLF>.
@@ -725,7 +761,7 @@ class SMTP
$lines = explode("\n", str_replace(["\r\n", "\r"], "\n", $msg_data));
/* To distinguish between a complete RFC822 message and a plain message body, we check if the first field
* of the first line (':' separated) does not contain a space then it _should_ be a header and we will
* of the first line (':' separated) does not contain a space then it _should_ be a header, and we will
* process all lines before a blank line as headers.
*/
@@ -768,7 +804,7 @@ class SMTP
//Send the lines to the server
foreach ($lines_out as $line_out) {
//Dot-stuffing as per RFC5321 section 4.5.2
//https://tools.ietf.org/html/rfc5321#section-4.5.2
//https://www.rfc-editor.org/rfc/rfc5321#section-4.5.2
if (!empty($line_out) && $line_out[0] === '.') {
$line_out = '.' . $line_out;
}
@@ -886,7 +922,15 @@ class SMTP
* $from. Returns true if successful or false otherwise. If True
* the mail transaction is started and then one or more recipient
* commands may be called followed by a data command.
* Implements RFC 821: MAIL <SP> FROM:<reverse-path> <CRLF>.
* Implements RFC 821: MAIL <SP> FROM:<reverse-path> <CRLF> and
* two extensions, namely XVERP and SMTPUTF8.
*
* The server's EHLO response is not checked. If use of either
* extensions is enabled even though the server does not support
* that, mail submission will fail.
*
* XVERP is documented at https://www.postfix.org/VERP_README.html
* and SMTPUTF8 is specified in RFC 6531.
*
* @param string $from Source address of this message
*
@@ -895,10 +939,11 @@ class SMTP
public function mail($from)
{
$useVerp = ($this->do_verp ? ' XVERP' : '');
$useSmtputf8 = ($this->do_smtputf8 ? ' SMTPUTF8' : '');
return $this->sendCommand(
'MAIL FROM',
'MAIL FROM:<' . $from . '>' . $useVerp,
'MAIL FROM:<' . $from . '>' . $useSmtputf8 . $useVerp,
250
);
}
@@ -964,6 +1009,25 @@ class SMTP
);
}
/**
* Send SMTP XCLIENT command to server and check its return code.
*
* @return bool True on success
*/
public function xclient(array $vars)
{
$xclient_options = "";
foreach ($vars as $key => $value) {
if (in_array($key, SMTP::$xclient_allowed_attributes)) {
$xclient_options .= " {$key}={$value}";
}
}
if (!$xclient_options) {
return true;
}
return $this->sendCommand('XCLIENT', 'XCLIENT' . $xclient_options, 250);
}
/**
* Send an SMTP RSET command.
* Abort any transaction that is currently in progress.
@@ -1124,7 +1188,9 @@ class SMTP
} else {
$this->edebug('CLIENT -> SERVER: ' . $data, self::DEBUG_CLIENT);
}
set_error_handler([$this, 'errorHandler']);
set_error_handler(function () {
call_user_func_array([$this, 'errorHandler'], func_get_args());
});
$result = fwrite($this->smtp_conn, $data);
restore_error_handler();
@@ -1227,7 +1293,9 @@ class SMTP
while (is_resource($this->smtp_conn) && !feof($this->smtp_conn)) {
//Must pass vars in here as params are by reference
//solution for signals inspired by https://github.com/symfony/symfony/pull/6540
set_error_handler([$this, 'errorHandler']);
set_error_handler(function () {
call_user_func_array([$this, 'errorHandler'], func_get_args());
});
$n = stream_select($selR, $selW, $selW, $this->Timelimit);
restore_error_handler();
@@ -1314,6 +1382,26 @@ class SMTP
return $this->do_verp;
}
/**
* Enable or disable use of SMTPUTF8.
*
* @param bool $enabled
*/
public function setSMTPUTF8($enabled = false)
{
$this->do_smtputf8 = $enabled;
}
/**
* Get SMTPUTF8 use.
*
* @return bool
*/
public function getSMTPUTF8()
{
return $this->do_smtputf8;
}
/**
* Set error messages and codes.
*
+67 -40
View File
@@ -1,59 +1,86 @@
<?php
$form = $session->get('form');
/* @var Session $session */
$form = $session->get('form');
?>
<style type="text/css">
#outer-content {
background-image: url('/img/bg_leistungen.jpg');
}
</style>
<div id="kontaktform">
<div class="form-card">
<?php if($session->has('alert')): ?>
<div class="alert <?=$session->get('alert-class')?>">
<?=$session->get('alert')?>
<?php if($session->get('alert-class') === 'alert-success'): ?>
<svg style="width: 22px; height: 22px; fill: currentColor; flex-shrink: 0;" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-2 15l-5-5 1.41-1.41L10 14.17l7.59-7.59L19 8l-9 9z"/></svg>
<?php else: ?>
<svg style="width: 22px; height: 22px; fill: currentColor; flex-shrink: 0;" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
<?php endif; ?>
<div><?=$session->get('alert')?></div>
</div>
<?php $session->remove('alert'); ?>
<?php endif; ?>
<h1>Ihre Kontaktanfrage</h1>
<form action="/contact.php" method="post">
<input type="hidden" name="timestamp" value="<?=time()?>" />
<input type="hidden" name="check" value="<?=(isset($form) && $form['check'] ? 'send' : '0')?>" />
<p style="color: var(--text-muted); margin-bottom: 2rem;">
Hier können Sie, unter Angabe Ihrer Kontaktdaten, eine persönliche Anfrage stellen.
Die mit einem (<span style="color: var(--danger); font-weight: bold;">*</span>) gekennzeichneten Felder sind Pflichtfelder.
Bitte geben Sie entweder eine E-Mailadresse oder Ihre Telefonnummer an, damit wir Sie erreichen können.
</p>
<p>Hier können Sie, unter Angabe ihrer Kontaktdaten, eine persönliche Anfrage stellen. Die mit einem (*) gekennzeichneten Felder sind Pflichtfelder. Bitte geben Sie entweder eine E-Mailadresse oder ihre Telefonnummer an, damit wir Sie erreichen können.</p>
<form action="/contact.php" method="post" id="contactForm">
<input type="hidden" name="timestamp" value="<?=time()?>">
<input type="hidden" name="check" id="formCheck" value="<?=(isset($form) && !empty($form['check']) ? 'send' : '0')?>">
<div style="display: none;"><label for="Company">Firma</label> <input type="text" name="company" id="company" value="" /></div>
<div class="ktColumn"><label for="surname">Vorname</label> <input type="text" name="surname" id="surname" value="<?=isset($form) ? $form['surname'] : ''?>" /></div>
<div class="ktColumn"><label for="name">Nachname*</label> <input type="text" name="name" id="name" value="<?=isset($form) ? $form['name'] : ''?>" /></div>
<div class="clear"></div>
<div class="ktColumn"><label for="email">E-Mail*</label> <input type="text" name="email" id="email" value="<?=isset($form) ? $form['email'] : ''?>" /></div>
<div class="ktColumn"><label for="phone">Telefon*</label> <input type="text" name="phone" id="phone" value="<?=isset($form) ? $form['phone'] : ''?>" /></div>
<div class="clear"></div>
<label for="message">Mitteilung*</label> <textarea name="message" id="message"><?=isset($form) ? $form['message'] : ''?></textarea>
<br />
<!-- Honeypot Bot Field (hidden from real users) -->
<div style="display: none;" aria-hidden="true">
<label for="company">Firma (Bitte freilassen)</label>
<input type="text" name="company" id="company" tabindex="-1" autocomplete="off" value="">
</div>
<?php if(false): ?>
<div class="ktColumn"><label for="captchaImg">&nbsp;</label> <img id="captchaImg" src="/captcha.png?t=<?=time()?>" /> <a href="javascript:void(0);" onclick="reloadCaptcha('captchaImg');" title="Captcha neu laden"><img src="/img/icon_refresh.png" alt="" /></a></div>
<div class="clear"></div>
<div class="ktColumn"><label for="captcha">Captcha*</label> <input type="text" name="captcha" id="captcha" /></div>
<div class="clear"></div>
<?php endif; ?>
<div class="form-row">
<div class="form-group">
<label class="form-label" for="surname">Vorname</label>
<input type="text" class="form-control" name="surname" id="surname" placeholder="Ihr Vorname" value="<?=isset($form) ? htmlspecialchars($form['surname']) : ''?>">
</div>
<div class="form-group">
<label class="form-label" for="name">Nachname <span class="required">*</span></label>
<input type="text" class="form-control" name="name" id="name" required placeholder="Ihr Nachname" value="<?=isset($form) ? htmlspecialchars($form['name']) : ''?>">
</div>
</div>
<p>Ihre persönlichen Daten werden von uns nicht gespeichert und lediglich zur Kontaktaufnahme verwendet. Wir werden ihre persönlichen Daten nicht an Dritte weitergeben.</p>
<div class="form-row">
<div class="form-group">
<label class="form-label" for="email">E-Mail-Adresse <span class="required">*</span></label>
<input type="email" class="form-control" name="email" id="email" required placeholder="ihre.adresse@example.de" value="<?=isset($form) ? htmlspecialchars($form['email']) : ''?>">
</div>
<div class="form-group">
<label class="form-label" for="phone">Telefonnummer <span class="required">*</span></label>
<input type="tel" class="form-control" name="phone" id="phone" required placeholder="030 12345678" value="<?=isset($form) ? htmlspecialchars($form['phone']) : ''?>">
</div>
</div>
<div id="kontaktbuttons">
<input type="button" name="abort" value="Abbrechen" onclick="history.back(-1);" />
<input type="submit" name="send" value="Absenden" />
<div class="form-group">
<label class="form-label" for="message">Ihre Mitteilung <span class="required">*</span></label>
<textarea class="form-control" name="message" id="message" required rows="6" placeholder="Wie können wir Ihnen weiterhelfen?"><?=isset($form) ? htmlspecialchars($form['message']) : ''?></textarea>
</div>
<div class="form-note">
<svg style="width: 16px; height: 16px; fill: currentColor; vertical-align: middle; margin-right: 4px;" viewBox="0 0 24 24"><path d="M12 1L3 5v6c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V5l-9-4zm0 10.99h7c-.53 4.12-3.28 7.79-7 8.94V12H5V6.3l7-3.11v8.8z"/></svg>
Ihre persönlichen Daten werden von uns nicht gespeichert und ausschließlich zur Kontaktaufnahme verwendet. Wir werden Ihre Angaben niemals an Dritte weitergeben.
</div>
<div class="form-actions">
<button type="button" class="btn btn-outline-primary" onclick="history.back();">Abbrechen</button>
<button type="submit" class="btn btn-primary" name="send">
<svg style="width: 18px; height: 18px; fill: currentColor;" viewBox="0 0 24 24"><path d="M2.01 21L23 12 2.01 3 2 10l15 2-15 2z"/></svg>
Anfrage absenden
</button>
</div>
</form>
</div>
<script language="javascript" type="text/javascript">
<!--
function reloadCaptcha(objID) {
var now = new Date().getTime();
var obj = $(objID);
var imageURL = obj.src.split("?")[0];
obj.src = imageURL + "?" + now;
}
//-->
<script type="text/javascript">
$(document).ready(function() {
// Human interaction verification for bot protection
$('#contactForm input, #contactForm textarea').one('focus', function() {
$('#formCheck').val('send');
});
});
</script>
+123 -79
View File
@@ -1,86 +1,130 @@
<style type="text/css">
#outer-content {
background-image: url('/img/bg_kontakt.jpg');
}
</style>
<h1>Kontakt &amp; Anfahrt</h1>
<h1>Kontakt</h1>
<p class="lead" style="font-size: 1.1rem; color: var(--text-muted); margin-bottom: 2rem;">
Wir sind an zwei verkehrsgünstigen Standorten in Berlin für Sie da. Nehmen Sie gern telefonisch, per E-Mail oder über unser Kontaktformular Verbindung mit uns auf.
</p>
<div>
<div style="width:450px;float:left;">
<div id="googlemap" class="profile-map" style="width: 440px; height: 350px;"></div>
<div class="contact-layout">
<!-- Standort-Details -->
<div>
<!-- Zentrumsdialyse Card -->
<div class="location-card">
<div class="location-header">
<div class="location-badge">
<svg viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>
</div>
<h2 class="location-title">Zentrumsdialyse (Hauptstandort)</h2>
</div>
<div class="contact-detail-row">
<svg class="contact-detail-icon" viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>
<div class="contact-detail-label">Adresse:</div>
<div class="contact-detail-value">
Thorner Straße 1<br>
12623 Berlin &ndash; Mahlsdorf<br>
<a href="https://www.google.de/maps/place/Dialysezentrum+Berlin-Mahlsdorf/@52.5078935,13.6126659,16z/data=!4m2!3m1!1s0x47a84991f9c57f7f:0xad4486f559442067" target="_blank" rel="noopener noreferrer" style="font-weight: 600; display: inline-flex; align-items: center; gap: 0.25rem; margin-top: 0.25rem;">
<span>&raquo; In Google Maps öffnen</span>
</a>
</div>
</div>
<script type="text/javascript" src="https://maps.google.com/maps/api/js?key=AIzaSyAN-oM9Tbh_0e3Rojwsa0oP_xny9l8IwTo"></script>
<script type="text/javascript" src="/js/contact.js"></script>
<div class="contact-detail-row">
<svg class="contact-detail-icon" viewBox="0 0 24 24"><path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/></svg>
<div class="contact-detail-label">Telefon (Dialyse):</div>
<div class="contact-detail-value">
<a href="tel:0305662484"><strong>030 / 566 24 84</strong></a>
</div>
</div>
<br />
<small><a href="https://www.google.de/maps/place/Dialysezentrum+Berlin-Mahlsdorf/@52.5078935,13.6126659,16z/data=!4m2!3m1!1s0x47a84991f9c57f7f:0xad4486f559442067" target="_blank">Größere Kartenansicht</a></small>
<div class="contact-detail-row">
<svg class="contact-detail-icon" viewBox="0 0 24 24"><path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/></svg>
<div class="contact-detail-label">Telefon (Ambulanz):</div>
<div class="contact-detail-value">
<a href="tel:0305662539"><strong>030 / 566 25 39</strong></a>
</div>
</div>
<div class="contact-detail-row">
<svg class="contact-detail-icon" viewBox="0 0 24 24"><path d="M19 8h-1V3H6v5H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zM8 5h8v3H8V5zm8 14H8v-4h8v4zm2-6a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></svg>
<div class="contact-detail-label">Telefax:</div>
<div class="contact-detail-value">
030 / 566 25 30
</div>
</div>
<div class="contact-detail-row">
<svg class="contact-detail-icon" viewBox="0 0 24 24"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></svg>
<div class="contact-detail-label">E-Mail:</div>
<div class="contact-detail-value">
<a href="javascript:void(0);" onclick="sending();" style="display: inline-flex; align-items: center; gap: 0.35rem; color: var(--accent); font-weight: 600;">
<span>kontakt@dialyse-berlin.net</span>
</a>
</div>
</div>
</div>
<!-- Satellitendialyse Card -->
<div class="location-card">
<div class="location-header">
<div class="location-badge">
<svg viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>
</div>
<h2 class="location-title">Satellitendialyse</h2>
</div>
<div class="contact-detail-row">
<svg class="contact-detail-icon" viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>
<div class="contact-detail-label">Adresse:</div>
<div class="contact-detail-value">
Blumberger Damm 130<br>
<small style="color: var(--text-muted);">(Eingang: Pritzhagener Weg 21)</small><br>
12685 Berlin<br>
<a href="https://www.google.com/maps/place/Dialysezentrum+Berlin-Mahlsdorf+LC/@52.542799,13.5694855,17z/data=!3m1!4b1!4m5!3m4!1s0x0:0xda0b4785760166c5!8m2!3d52.542799!4d13.5716742" target="_blank" rel="noopener noreferrer" style="font-weight: 600; display: inline-flex; align-items: center; gap: 0.25rem; margin-top: 0.25rem;">
<span>&raquo; In Google Maps öffnen</span>
</a>
</div>
</div>
</div>
<!-- Action Links & Download -->
<div style="display: flex; flex-direction: column; gap: 0.75rem; margin-top: 1rem;">
<a href="/kontakt-formular.html" class="btn btn-primary" style="width: 100%;">
<svg style="width: 18px; height: 18px; fill: currentColor;" viewBox="0 0 24 24"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></svg>
Online-Kontaktformular aufrufen &raquo;
</a>
<a href="/files/dialyse_flyer.pdf" target="_blank" class="btn btn-secondary" style="width: 100%;">
<svg style="width: 18px; height: 18px; fill: currentColor;" viewBox="0 0 24 24"><path d="M19 9h-4V3H9v6H5l7 7 7-7zM5 18v2h14v-2H5z"/></svg>
Praxis-Flyer herunterladen (PDF)
</a>
</div>
</div>
<div style="width:400px;float:left;">
<table border="0" cellpadding="0" cellspacing="2" width="90%" class="kontakt">
<tbody>
<tr class="tdHead">
<td colspan="2">Zentrumsdialyse:</td>
</tr>
<tr>
<td><span>Adresse:</span></td>
<td>Thorner Straße 1</td>
</tr>
<tr>
<td></td>
<td>12623 Berlin - Mahlsdorf</td>
</tr>
<tr>
<td></td>
<td><a title="Hier Klicken" target="_blank" href="https://www.google.de/maps/place/Dialysezentrum+Berlin-Mahlsdorf/@52.5078935,13.6126659,16z/data=!4m2!3m1!1s0x47a84991f9c57f7f:0xad4486f559442067">LAGEPLAN &raquo;</a></td>
</tr>
<tr>
<td><span>Telefon (Dialyse):</span></td>
<td>030 / 5662484</td>
</tr>
<tr>
<td><span>Telefon (Ambulanz):</span></td>
<td>030 / 5662539</td>
</tr>
<tr>
<td><span>Telefax:</span></td>
<td>030 / 5662530</td>
</tr>
<tr>
<td><span>E-Mail:</span></td>
<td><a title="E-Mail schreiben" href="javascript:void(0);" onclick="sending();"><img src="/img/kontakt.jpg" style="margin-top: 3px;" /></td>
</tr>
<tr>
<td colspan="2">&nbsp;</td>
</tr>
<tr class="tdHead">
<td colspan="2">Satellitendialyse:</td>
</tr>
<tr>
<td><span>Adresse:</span></td>
<td>Blumberger Damm 130</td>
</tr>
<tr>
<td></td>
<td>(Eingang: Pritzhagener Weg 21)</td>
</tr>
<tr>
<td></td>
<td>12685 Berlin</td>
</tr>
<tr>
<td></td>
<td><a title="Hier Klicken" target="_blank" href="https://www.google.com/maps/place/Dialysezentrum+Berlin-Mahlsdorf+LC/@52.542799,13.5694855,17z/data=!3m1!4b1!4m5!3m4!1s0x0:0xda0b4785760166c5!8m2!3d52.542799!4d13.5716742">LAGEPLAN &raquo;</td>
</tr>
<tr>
<td colspan="2" align="center"><br /><a title="Kontaktformular" href="/kontakt-formular.html">&#171; Klicken Sie hier, um uns direkt zu kontaktieren &#187;</a></td>
</tr>
<tr>
<td colspan="2" align="center"><br /><a title="Praxis-Flyer" target="_blank" href="/files/dialyse_flyer.pdf">&#171; Praxis-Flyer Download &#187;</a></td>
</tr>
</tbody>
</table>
<!-- Interaktive Karte & Standorte -->
<div>
<div class="map-card">
<div class="map-header">
<span class="map-header-title">Standortkarte &bull; Berlin-Mahlsdorf</span>
<div style="display: flex; gap: 0.5rem;">
<button type="button" id="btnMapMahlsdorf" class="btn btn-sm btn-primary" onclick="showMapLocation('mahlsdorf');">Zentrum</button>
<button type="button" id="btnMapSatellit" class="btn btn-sm btn-outline-primary" onclick="showMapLocation('satellit');">Satellit</button>
</div>
</div>
<div class="map-iframe-wrapper">
<iframe id="mapFrame"
src="https://maps.google.com/maps?q=Thorner+Stra%C3%9Fe+1,+12623+Berlin&t=&z=15&ie=UTF8&iwloc=&output=embed"
loading="lazy"
title="Karte Zentrumsdialyse Berlin-Mahlsdorf"></iframe>
</div>
<div style="padding: 1rem 1.25rem; background-color: #ffffff; border-top: 1px solid var(--border); font-size: 0.85rem; color: var(--text-muted); display: flex; justify-content: space-between; align-items: center; flex-wrap: wrap; gap: 0.5rem;">
<span id="mapAddressText">Thorner Straße 1, 12623 Berlin</span>
<a id="mapExternalLink" href="https://www.google.de/maps/place/Dialysezentrum+Berlin-Mahlsdorf/@52.5078935,13.6126659,16z/" target="_blank" rel="noopener noreferrer" style="font-weight: 600;">
Große Routenkarte &raquo;
</a>
</div>
</div>
</div>
<div class="clear"></div>
</div>
</div>
<script type="text/javascript" src="/js/contact.js"></script>
+10 -7
View File
@@ -1,7 +1,10 @@
<style type="text/css">
#outer-content {
background-image: url('/img/bg_startseite.jpg');
}
</style>
<h2>Die aufgerufene URL ist nicht verfügbar!</h2>
<div style="text-align: center; padding: 3rem 1rem;">
<div style="width: 72px; height: 72px; background: var(--danger-bg); color: var(--danger); border-radius: var(--radius-full); display: inline-flex; align-items: center; justify-content: center; margin-bottom: 1.5rem;">
<svg style="width: 36px; height: 36px; fill: currentColor;" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
</div>
<h1 style="margin-bottom: 1rem;">Seite nicht gefunden (404)</h1>
<p style="font-size: 1.1rem; color: var(--text-muted); max-width: 500px; margin: 0 auto 2rem;">
Die von Ihnen aufgerufene URL ist leider nicht verfügbar oder wurde verschoben.
</p>
<a href="/" class="btn btn-primary">Zur Startseite zurückkehren</a>
</div>
+267 -41
View File
@@ -1,69 +1,295 @@
<?php
/* @var string $action */
/* @var string $content */
/* @var array $config */
/* @var Session $session */
$titles = [
'main' => 'Dialysezentrum Berlin-Mahlsdorf | Praxis für Nephrologie & Dialyse',
'leistungen' => 'Leistungen & Schwerpunkte | Dialysezentrum Berlin-Mahlsdorf',
'praxis' => 'Praxisausstattung & Öffnungszeiten | Dialysezentrum Berlin-Mahlsdorf',
'team' => 'Unser Ärzteteam & Mitarbeiter | Dialysezentrum Berlin-Mahlsdorf',
'kontakt' => 'Kontakt & Anfahrt | Dialysezentrum Berlin-Mahlsdorf',
'kontakt-formular' => 'Kontaktanfrage | Dialysezentrum Berlin-Mahlsdorf',
'impressum' => 'Impressum | Dialysezentrum Berlin-Mahlsdorf',
'datenschutz' => 'Datenschutzerklärung | Dialysezentrum Berlin-Mahlsdorf',
];
$pageTitle = isset($titles[$action]) ? $titles[$action] : 'Dialysezentrum Berlin-Mahlsdorf';
$currentAction = isset($action) ? $action : 'main';
?>
<!DOCTYPE html>
<html lang="de">
<head>
<title>Dialysezentrum Berlin-Mahlsdorf</title>
<meta charset="utf-8">
<META NAME="language" CONTENT="de">
<META NAME="description" CONTENT="Wir bieten ganzjaehrige Feriendialysen in unserem modernen Zentrum für Innere Medizin und Dialyse.">
<META NAME="robots" CONTENT="index, follow">
<link rel="icon" href="/img/favicon.ico" type="image/x-icon" />
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title><?=htmlspecialchars($pageTitle)?></title>
<meta name="language" content="de">
<meta name="description" content="Dialysezentrum Berlin-Mahlsdorf: Ganzjährige Feriendialysen und individuelle Betreuung im modernen Zentrum für Innere Medizin und Dialyse.">
<meta name="robots" content="index, follow">
<link rel="icon" href="/img/favicon.ico" type="image/x-icon">
<link rel="icon" href="/img/favicon.png" type="image/png">
<!-- Modern Stylesheets -->
<link href="/css/frontend.css" rel="stylesheet" media="screen">
<link href="/css/lightbox.min.css" rel="stylesheet" media="screen">
<script src="/js/jquery-3.6.1.min.js" type="text/javascript"></script>
<script src="/js/lightbox-plus-jquery.min.js" type="text/javascript"></script>
<!-- Modern Libraries (Updated) -->
<script src="/js/jquery-3.7.1.min.js" type="text/javascript"></script>
<script src="/js/lightbox.min.js" type="text/javascript"></script>
</head>
</head>
<body id="body">
<body>
<div id="outer-container">
<?php if(Helper::isHoliday($config) && $session->get('dialog') != 'dismissed'): ?>
<div id="holiday-wrapper">
<div class="holiday-bg"></div>
<div class="holiday-dialog">
<p><?=Helper::parseHolidays($config)?></p>
<p class="alignRight"><a href="#" data-dismiss="dialog">[X] Schlie&szlig;en</a></p>
<!-- Top Info Bar -->
<div class="top-bar">
<div class="container top-bar-inner">
<div class="top-bar-left">
<span class="top-bar-item">
<svg class="top-bar-icon" viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>
Thorner Str. 1, 12623 Berlin-Mahlsdorf
</span>
<span class="top-bar-item">
<svg class="top-bar-icon" viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>
Satellit: Blumberger Damm 130, 12685 Berlin
</span>
</div>
<div class="top-bar-right">
<a href="tel:0305662484" title="Telefon Dialyse">
<svg class="top-bar-icon" viewBox="0 0 24 24"><path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/></svg>
Dialyse: 030 / 566 24 84
</a>
<a href="tel:0305662539" title="Telefon Ambulanz">
<svg class="top-bar-icon" viewBox="0 0 24 24"><path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/></svg>
Ambulanz: 030 / 566 25 39
</a>
<span class="top-bar-item" title="Telefax">
<svg class="top-bar-icon" viewBox="0 0 24 24"><path d="M19 8h-1V3H6v5H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zM8 5h8v3H8V5zm8 14H8v-4h8v4zm2-6a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></svg>
Fax: 030 / 566 25 30
</span>
</div>
</div>
</div>
<!-- Main Navigation Header -->
<header class="site-header">
<div class="container header-inner">
<a href="/" class="site-logo">
<div class="logo-badge" aria-hidden="true">
<!-- Medical Cross / Stethoscope SVG -->
<svg viewBox="0 0 24 24"><path d="M19 10.5V6a2 2 0 0 0-2-2h-3V1.5a1.5 1.5 0 0 0-3 0V4H8a2 2 0 0 0-2 2v4.5C6 14.1 8.9 17 12.5 17h.5c3.6 0 6.5-2.9 6.5-6.5zm-5 6.45V19a3 3 0 0 1-6 0v-2.05A8.5 8.5 0 0 1 4 10.5V6h3v4.5a5.5 5.5 0 0 0 11 0V6h3v4.5a8.5 8.5 0 0 1-7 8.45zM12 21a1 1 0 0 0 1-1v-1h-2v1a1 1 0 0 0 1 1z"/></svg>
</div>
<div class="logo-text">
<div class="logo-title">DIALYSEZENTRUM <span>Berlin-Mahlsdorf</span></div>
<div class="logo-sub">Zentrum für Innere Medizin &amp; Dialyse</div>
</div>
</a>
<!-- Navigation Menu -->
<nav id="siteNav">
<?php include('view/navigation.php'); ?>
</nav>
<!-- Actions & Mobile Toggle -->
<div class="header-actions">
<a href="/kontakt.html" class="header-cta-btn">
<svg viewBox="0 0 24 24"><path d="M20 4H4c-1.1 0-1.99.9-1.99 2L2 18c0 1.1.9 2 2 2h16c1.1 0 2-.9 2-2V6c0-1.1-.9-2-2-2zm0 4l-8 5-8-5V6l8 5 8-5v2z"/></svg>
<span>Kontakt / Termin</span>
</a>
<button class="nav-toggle" id="navToggle" aria-label="Menü öffnen" aria-expanded="false">
<svg viewBox="0 0 24 24" id="toggleIcon"><path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/></svg>
</button>
</div>
</div>
</header>
<!-- Holiday / Announcement Dialog (if configured) -->
<?php if(Helper::isHoliday($config) && $session->get('dialog') != 'dismissed'): ?>
<div id="holiday-wrapper" class="holiday-notice-banner">
<div class="container holiday-notice-inner">
<div class="holiday-notice-content">
<svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm1 15h-2v-2h2v2zm0-4h-2V7h2v6z"/></svg>
<div><?=Helper::parseHolidays($config)?></div>
</div>
<button type="button" class="holiday-dismiss-btn" data-dismiss="dialog">
<span>&#x2715; Schließen</span>
</button>
</div>
</div>
<?php endif; ?>
<div id="headertop"><img title="Dialysezentrum Berlin-Mahlsdorf" src="/img/header.jpg"></div>
<div id="menu">
<?php include('view/navigation.php'); ?>
<div class="clear"></div>
</div>
<div id="headerbottom"><img src="/img/header_bottom.jpg"></div>
<div id="wisdom">
<div id="bluebar">
"Die individuelle Dialyse im gr&uuml;nen G&uuml;rtel von Berlin"
<!-- Hero / Motto Banner on Homepage -->
<?php if($currentAction === 'main'): ?>
<section class="hero-banner">
<div class="container">
<div class="hero-content">
<div class="hero-badge">
<span>&#x2714;</span> &bdquo;Die individuelle Dialyse im grünen Gürtel von Berlin&ldquo;
</div>
<h1 class="hero-title">Dialysezentrum Berlin-Mahlsdorf</h1>
<div class="hero-subtitle">
Dr. med. B. Bischoff &bull; Dr. med. J. Hoffzimmer
</div>
<div class="hero-doctors">
Fachärztinnen für Innere Medizin und Nephrologie
</div>
<div class="hero-actions">
<a href="/leistungen.html" class="btn btn-primary">Unsere Leistungen</a>
<a href="/praxis.html" class="btn btn-secondary">Praxis &amp; Öffnungszeiten</a>
<a href="/kontakt.html" class="btn btn-outline">Kontakt aufnehmen</a>
</div>
</div>
</div>
<div class="hero-wave">
<svg viewBox="0 0 1000 100" preserveAspectRatio="none">
<path class="shape-fill" d="M421.9,6.5c22.6-2.5,51.5,0.4,75.5,5.3c23.6,4.9,70.9,23.5,100.5,35.7c75.8,32.2,133.7,44.5,192.6,49.7 c23.6,2.1,48.7,3.5,103.4-2.5c54.7-6,106.2-25.6,106.2-25.6V100H0V30.3c0,0,72,32.6,158.4,30.5c39.2-0.7,92.8-6.7,134-22.4 c21.2-8.1,52.2-18.2,79.7-24.2C399.3,7.9,411.6,7.5,421.9,6.5z"></path>
</svg>
</div>
</section>
<?php else: ?>
<div class="page-banner">
<div class="container page-banner-inner">
<div>
<div class="breadcrumb">
<a href="/">Startseite</a> &rsaquo;
<span><?=htmlspecialchars(explode('|', $pageTitle)[0])?></span>
</div>
</div>
</div>
</div>
<div id="banner"></div>
<div class="clear"></div>
</div>
<div id="outer-content">
<div id="inner-content-bg"></div>
<div id="inner-content">
<?php endif; ?>
<?=$content?>
<!-- Main Content Area -->
<main class="site-main">
<div class="container">
<div class="content-card">
<?=$content?>
</div>
</div>
</div>
<div id="footer">
&copy; www.dialyse-berlin.net &amp; www.dialyse-berlin.com &amp; www.dialyse-berlin.info <br/>
<a href="/impressum.html">Impressum</a> &nbsp; <a href="/datenschutz.html">Datenschutz</a>
</div>
</main>
<!-- Modern Multi-Column Footer -->
<footer class="site-footer">
<div class="container footer-grid">
<!-- Col 1: About Praxis -->
<div>
<div class="footer-col-title">Dialysezentrum Berlin-Mahlsdorf</div>
<p class="footer-desc">
Zentrum für Innere Medizin und Dialyse.<br>
Dr. med. B. Bischoff und Dr. med. J. Hoffzimmer.<br>
Individuelle nephrologische Betreuung und ganzjährige Feriendialysen mit modernster Medizintechnik.
</p>
<div class="footer-contact-item">
<svg viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>
<span><strong>Zentrumsdialyse:</strong> Thorner Straße 1, 12623 Berlin</span>
</div>
<div class="footer-contact-item">
<svg viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>
<span><strong>Satellitendialyse:</strong> Blumberger Damm 130, 12685 Berlin</span>
</div>
</div>
<!-- Col 2: Navigation Links -->
<div>
<div class="footer-col-title">Navigation</div>
<ul class="footer-links">
<li><a href="/">&rsaquo; Startseite</a></li>
<li><a href="/leistungen.html">&rsaquo; Leistungen</a></li>
<li><a href="/praxis.html">&rsaquo; Praxisausstattung</a></li>
<li><a href="/team.html">&rsaquo; Unser Team</a></li>
<li><a href="/kontakt.html">&rsaquo; Kontakt &amp; Anfahrt</a></li>
<li><a href="/kontakt-formular.html">&rsaquo; Kontaktformular</a></li>
</ul>
</div>
<!-- Col 3: Contact & Opening info -->
<div>
<div class="footer-col-title">Kontakt &amp; Erreichbarkeit</div>
<div class="footer-contact-item">
<svg viewBox="0 0 24 24"><path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/></svg>
<span>Dialyse: <strong>030 / 566 24 84</strong></span>
</div>
<div class="footer-contact-item">
<svg viewBox="0 0 24 24"><path d="M6.62 10.79c1.44 2.83 3.76 5.14 6.59 6.59l2.2-2.2c.27-.27.67-.36 1.02-.24 1.12.37 2.33.57 3.57.57.55 0 1 .45 1 1V20c0 .55-.45 1-1 1-9.39 0-17-7.61-17-17 0-.55.45-1 1-1h3.5c.55 0 1 .45 1 1 0 1.25.2 2.45.57 3.57.11.35.03.74-.25 1.02l-2.2 2.2z"/></svg>
<span>Ambulanz: <strong>030 / 566 25 39</strong></span>
</div>
<div class="footer-contact-item">
<svg viewBox="0 0 24 24"><path d="M19 8h-1V3H6v5H5c-1.66 0-3 1.34-3 3v6h4v4h12v-4h4v-6c0-1.66-1.34-3-3-3zM8 5h8v3H8V5zm8 14H8v-4h8v4zm2-6a1 1 0 1 1 0-2 1 1 0 0 1 0 2z"/></svg>
<span>Telefax: <strong>030 / 566 25 30</strong></span>
</div>
<div class="footer-contact-item">
<svg viewBox="0 0 24 24"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-5 14H7v-2h7v2zm3-4H7v-2h10v2zm0-4H7V7h10v2z"/></svg>
<span><a href="/files/dialyse_flyer.pdf" target="_blank" style="color: #38bdf8; font-weight:600;">&raquo; Praxis-Flyer herunterladen (PDF)</a></span>
</div>
</div>
</div>
<!-- Footer Bottom Bar -->
<div class="container footer-bottom">
<div>
&copy; <?=date('Y')?> Dialysezentrum Berlin-Mahlsdorf &bull; Alle Rechte vorbehalten.
</div>
<div>
<a href="/impressum.html">Impressum</a>
<a href="/datenschutz.html">Datenschutz</a>
<a href="/kontakt.html">Kontakt</a>
</div>
</div>
</footer>
</div>
<!-- Interactive Scripts -->
<script type="text/javascript">
$(document).ready(function() {
$('[data-dismiss]').click((e) => {
// Mobile Navigation Toggle
var $navToggle = $('#navToggle');
var $navMenu = $('#navMenu');
$navToggle.on('click', function(e) {
e.stopPropagation();
var isOpen = $navMenu.hasClass('is-open');
$navMenu.toggleClass('is-open');
$navToggle.attr('aria-expanded', !isOpen);
// Toggle hamburger icon to X
if(!isOpen) {
$('#toggleIcon').html('<path d="M19 6.41L17.59 5 12 10.59 6.41 5 5 6.41 10.59 12 5 17.59 6.41 19 12 13.41 17.59 19 19 17.59 13.41 12z"/>');
} else {
$('#toggleIcon').html('<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>');
}
});
// Close menu on click outside
$(document).on('click', function(e) {
if (!$(e.target).closest('#siteNav, #navToggle').length) {
if ($navMenu.hasClass('is-open')) {
$navMenu.removeClass('is-open');
$navToggle.attr('aria-expanded', 'false');
$('#toggleIcon').html('<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>');
}
}
});
// Close on ESC
$(document).on('keydown', function(e) {
if (e.key === 'Escape' && $navMenu.hasClass('is-open')) {
$navMenu.removeClass('is-open');
$navToggle.attr('aria-expanded', 'false');
$('#toggleIcon').html('<path d="M3 18h18v-2H3v2zm0-5h18v-2H3v2zm0-7v2h18V6H3z"/>');
}
});
// Holiday Notice Dismissal
$('[data-dismiss="dialog"]').on('click', function(e) {
e.preventDefault();
$.ajax({
url: '/api.php?action=dialog',
type: 'get',
success: function(response) {
$('#holiday-wrapper').hide();
$('#holiday-wrapper').slideUp(250);
}
});
});
+65 -36
View File
@@ -1,37 +1,66 @@
<script type="text/javascript" src="/js/contact.js"></script>
<style type="text/css">
#outer-content {
background-image: url('/img/bg_impressum.jpg');
}
</style>
<h1>Impressum</h1>
Dialysezentrum Berlin-Mahlsdorf<br />
Dr.med. B. Bischoff und Dr.med. J. Hoffzimmer<br />
Thornerstr.1<br />
12623 Berlin<br />
Telefon: +49 30 5662484<br />
Telefax: +49 30 5662530<br />
E-Mail: <a href="javascript:void();" onclick="sending();"><img src="/img/kontakt.jpg" style="vertical-align: middle;" /></a><br />
Internet: <a href="https://www.dialyse-berlin.net">www.dialyse-berlin.net</a><br />
<br />
Gesetzliche Berufsbezeichnung: Arzt/Ärztin<br />
Berufsbezeichnung verliehen in der Bundesrepublik Deutschland<br />
<br />
Zuständige Ärztekammer:<br />
Landesärztekammer Berlin, Friedrichstraße 16, 10969 Berlin<br />
<br />
Zuständige Aufsichtsbehörde:<br />
Kassenärztliche Vereinigung von Berlin, Masurenallee 6A, 14057 Berlin<br />
<br />
Berufsrechtliche Regelungen:<br />
- Berufsordnung der Landesärztekammer von Berlin<br />
- Heilberufegesetz des Landes Berlin<br />
Die Regelungen finden sich im Gesetzblatt des Landes.<br />
<br />
Haftungshinweis:<br />
Trotz sorgfältiger inhaltlicher Kontrolle übernehmen wir keine Haftung für die Inhalte externer Links.
Für die Inhalte der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.
Wir bemühen uns, auf dieser Website nur vollständige und richtige Informationen zu veröffentlichen.
Wir können jedoch keine Haftung oder Garantie für Aktualität, Richtigkeit und Vollständigkeit der Informationen übernehmen und behalten uns das Recht vor, Änderungen oder Ergänzungen der angebotenen Informationen vorzunehmen.
<div class="grid-2" style="margin-bottom: 2rem;">
<!-- Praxis & Kontaktangaben -->
<div class="card">
<h3 style="color: var(--primary-dark); margin-bottom: 1rem;">Angaben gemäß &sect; 5 TMG</h3>
<p>
<strong>Dialysezentrum Berlin-Mahlsdorf</strong><br>
Dr. med. B. Bischoff und Dr. med. J. Hoffzimmer<br>
Thorner Straße 1<br>
12623 Berlin
</p>
<h4 style="color: var(--primary-dark); margin-top: 1.25rem; margin-bottom: 0.5rem; font-size: 1rem;">Kontakt</h4>
<p style="margin-bottom: 0;">
Telefon: <a href="tel:+49305662484">+49 30 5662484</a><br>
Telefax: +49 30 5662530<br>
E-Mail: <a href="javascript:void(0);" onclick="sending();">kontakt@dialyse-berlin.net</a><br>
Internet: <a href="https://www.dialyse-berlin.net" target="_blank" rel="noopener">www.dialyse-berlin.net</a>
</p>
</div>
<!-- Berufsbezeichnung & Kammern -->
<div class="card">
<h3 style="color: var(--primary-dark); margin-bottom: 1rem;">Berufsbezeichnung &amp; Aufsicht</h3>
<p>
<strong>Gesetzliche Berufsbezeichnung:</strong> Arzt / Ärztin<br>
<em>Berufsbezeichnung verliehen in der Bundesrepublik Deutschland</em>
</p>
<p style="margin-top: 1rem;">
<strong>Zuständige Ärztekammer:</strong><br>
Landesärztekammer Berlin<br>
Friedrichstraße 16, 10969 Berlin
</p>
<p style="margin-top: 1rem; margin-bottom: 0;">
<strong>Zuständige Aufsichtsbehörde:</strong><br>
Kassenärztliche Vereinigung von Berlin<br>
Masurenallee 6A, 14057 Berlin
</p>
</div>
</div>
<div class="card" style="margin-bottom: 2rem;">
<h3 style="color: var(--primary-dark); margin-bottom: 0.75rem;">Berufsrechtliche Regelungen</h3>
<ul style="margin-bottom: 0.75rem;">
<li>Berufsordnung der Landesärztekammer von Berlin</li>
<li>Heilberufegesetz des Landes Berlin</li>
</ul>
<p style="color: var(--text-muted); font-size: 0.9rem; margin-bottom: 0;">
Die Regelungen finden sich im Gesetzblatt des Landes Berlin bzw. auf der Website der Landesärztekammer Berlin.
</p>
</div>
<div class="card">
<h3 style="color: var(--primary-dark); margin-bottom: 0.75rem;">Haftungshinweis</h3>
<p>
Trotz sorgfältiger inhaltlicher Kontrolle übernehmen wir keine Haftung für die Inhalte externer Links. Für die Inhalte der verlinkten Seiten sind ausschließlich deren Betreiber verantwortlich.
</p>
<p style="margin-bottom: 0;">
Wir bemühen uns, auf dieser Website nur vollständige und richtige Informationen zu veröffentlichen. Wir können jedoch keine Haftung oder Garantie für Aktualität, Richtigkeit und Vollständigkeit der Informationen übernehmen und behalten uns das Recht vor, Änderungen oder Ergänzungen der angebotenen Informationen vorzunehmen.
</p>
</div>
<script type="text/javascript" src="/js/contact.js"></script>
+87 -24
View File
@@ -1,32 +1,95 @@
<style type="text/css">
#outer-content {
background-image: url('/img/bg_startseite.jpg');
}
</style>
<h1>Wir wollen, dass Sie sich bei uns wohl fühlen!</h1>
<p>Unser Dialysezentrum bietet Ihnen verschiedene Dialyseverfahren unter Nutzung modernster Technik der
<p class="lead" style="font-size: 1.15rem; color: var(--primary-dark); font-weight: 500; margin-bottom: 2rem;">
Unser Dialysezentrum bietet Ihnen verschiedene Dialyseverfahren unter Nutzung modernster Technik der
Firmen Nikkiso und Fresenius. Sie können gern während eines Berlin-Urlaubes Ihre Dialyse bei uns
durchf&uuml;hren. Auch die Betreuung von Menschen mit Behinderungen oder Einschränkungen stellt für uns kein Problem dar.</p>
durchführen. Auch die Betreuung von Menschen mit Behinderungen oder Einschränkungen stellt für uns kein Problem dar.
</p>
<a href="/img/gallery/praxis1.jpg" data-lightbox="main" data-title="Die Praxis von aussen" class="floatLeftImage">
<img src="/img/gallery/praxis1_thumb.jpg" alt="Die Praxis aussen" />
</a>
<!-- Schwerpunkte / Key Features (Orientierung an hamburg-harburg-dialyse.de) -->
<div class="grid-4" style="margin-bottom: 2.5rem;">
<div class="feature-box">
<div class="feature-icon-wrapper" aria-hidden="true">
<svg viewBox="0 0 24 24"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/></svg>
</div>
<div class="feature-title">Modernste Technik</div>
<p class="feature-text">High-Tech Dialyseverfahren mit modernsten Nikkiso DBB 05/07 Geräten (Hemo-Master) und Fresenius BCM.</p>
</div>
<div class="feature-box">
<div class="feature-icon-wrapper" aria-hidden="true">
<svg viewBox="0 0 24 24"><path d="M12 2C8.13 2 5 5.13 5 9c0 5.25 7 13 7 13s7-7.75 7-13c0-3.87-3.13-7-7-7zm0 9.5a2.5 2.5 0 0 1 0-5 2.5 2.5 0 0 1 0 5z"/></svg>
</div>
<div class="feature-title">2 Standorte</div>
<p class="feature-text">Zentrumsdialyse in Mahlsdorf (16 Plätze) &amp; Satellitendialyse am Blumberger Damm (18 Plätze).</p>
</div>
<p>Unsere Praxis befindet sich seit 1992 im Siedlungsgebiet von Berlin-Mahlsdorf <b>im Stadtbezirk Hellersdorf</b><br/> und ist mit 16 Plätzen
ausgestattet. Die Satellitendialyse, mit 18 Plätzen, befindet sich in 12685 Berlin, Blumberger Damm 130.</p>
<div class="feature-box">
<div class="feature-icon-wrapper" aria-hidden="true">
<svg viewBox="0 0 24 24"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg>
</div>
<div class="feature-title">Feriendialyse</div>
<p class="feature-text">Ganzjährige Feriendialyse für Berlin-Reisende. Barrierefreie Betreuung für alle Patienten.</p>
</div>
<div class="feature-box">
<div class="feature-icon-wrapper" aria-hidden="true">
<svg viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 14H9V8h2v8zm4 0h-2V8h2v8z"/></svg>
</div>
<div class="feature-title">Bester Komfort</div>
<p class="feature-text">Kostenloses WLAN, TV, frischer Imbiss und eine breite Auswahl an Getränken während der Dialyse.</p>
</div>
</div>
<a href="/img/gallery/startseite1.jpg" data-lightbox="main" data-title="Sprechzimmer" class="floatRightImage">
<img src="/img/gallery/startseite1_thumb.jpg" alt="Sprechzimmer" />
</a>
<!-- Praxisbeschreibung mit 2-Spalten Layout und Bildintegration -->
<div class="grid-2" style="align-items: center; margin-bottom: 2rem;">
<div>
<h2>Unsere Praxis &amp; Standorte</h2>
<p>
Unsere Praxis befindet sich seit 1992 im Siedlungsgebiet von Berlin-Mahlsdorf <strong>im Stadtbezirk Hellersdorf</strong> und ist mit 16 Plätzen ausgestattet.
Die Satellitendialyse, mit 18 Plätzen, befindet sich in 12685 Berlin, Blumberger Damm 130.
</p>
<p>
Für eine optimale Betreuung sorgen 3 Fachärztinnen, unser freundliches medizinisches Personal und erfahrene Pflegekräfte.
Während der fachgerechten Behandlung erhalten Sie einen Imbiss und eine breite Auswahl an Getränken.
</p>
</div>
<div>
<a href="/img/gallery/praxis1.jpg" data-lightbox="main" data-title="Die Praxis von aussen" class="gallery-item" style="display: block;">
<img src="/img/gallery/praxis1.jpg" alt="Die Praxis aussen">
<div class="gallery-overlay">
<span class="gallery-caption">Die Praxis von außen &bull; Thorner Straße</span>
</div>
<div class="gallery-zoom-icon">
<svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>
</div>
</a>
</div>
</div>
<p>Für eine optimale Betreuung sorgen 3 Ärzte, unser freundliches medizinisches Personal und Pflegekräfte.
Während der fachgerechten Behandlung erhalten Sie einen Imbiss und eine breite Auswahl an Getränken.</p>
<p>Um die Dialysezeit kurzweilig zu gestalten, können Sie fernsehen oder den hauseigenen Internetzugang gratis nutzen.<br/>
Für eine effiziente Betreuung der Patienten pflegen wir eine enge Zusammenarbeit mit den
Haus- und<br/>
Fachärzten und kooperieren mit den umliegenenden Krankenhäusern, um
Patienten auch während eines Krankenhausaufenthaltes Dialyseleistungen anbieten zu können.</p>
<div class="grid-2" style="align-items: center; margin-bottom: 2.5rem;">
<div>
<a href="/img/gallery/startseite1.jpg" data-lightbox="main" data-title="Sprechzimmer" class="gallery-item" style="display: block;">
<img src="/img/gallery/startseite1.jpg" alt="Sprechzimmer">
<div class="gallery-overlay">
<span class="gallery-caption">Modern ausgestattetes Sprechzimmer</span>
</div>
<div class="gallery-zoom-icon">
<svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg>
</div>
</a>
</div>
<div>
<h2>Patientenkomfort &amp; Kooperationen</h2>
<p>
Um die Dialysezeit kurzweilig zu gestalten, können Sie fernsehen oder den hauseigenen Internetzugang gratis nutzen.
</p>
<p>
Für eine effiziente Betreuung der Patienten pflegen wir eine enge Zusammenarbeit mit den Haus- und Fachärzten und kooperieren mit den umliegenden Krankenhäusern, um Patienten auch während eines Krankenhausaufenthaltes Dialyseleistungen anbieten zu können.
</p>
<div style="margin-top: 1.5rem; display: flex; gap: 0.75rem; flex-wrap: wrap;">
<a href="/leistungen.html" class="btn btn-primary btn-sm">Mehr zu den Leistungen &raquo;</a>
<a href="/praxis.html" class="btn btn-secondary btn-sm">Praxisausstattung &amp; Zeiten &raquo;</a>
</div>
</div>
</div>
+7 -9
View File
@@ -1,13 +1,11 @@
<?php
/* @var string $action */
$nav = ['main' => '', 'leistungen' => '', 'praxis' => '', 'team' => '', 'kontakt' => ''];
$nav[$action] = 'active';
$current = isset($action) ? $action : 'main';
?>
<ul>
<li><a href="/" class="<?=$nav['main']?>">Startseite</a></li>
<li><a href="/leistungen.html" class="<?=$nav['leistungen']?>">Leistungen</a></li>
<li><a href="/praxis.html" class="<?=$nav['praxis']?>">Praxis</a></li>
<li><a href="/team.html" class="<?=$nav['team']?>">Team</a></li>
<li><a href="/kontakt.html" class="<?=$nav['kontakt']?>">Kontakt</a></li>
<ul class="nav-menu" id="navMenu">
<li class="nav-item"><a href="/" class="nav-link <?=$current === 'main' ? 'active' : ''?>">Startseite</a></li>
<li class="nav-item"><a href="/leistungen.html" class="nav-link <?=$current === 'leistungen' ? 'active' : ''?>">Leistungen</a></li>
<li class="nav-item"><a href="/praxis.html" class="nav-link <?=$current === 'praxis' ? 'active' : ''?>">Praxis</a></li>
<li class="nav-item"><a href="/team.html" class="nav-link <?=$current === 'team' ? 'active' : ''?>">Team</a></li>
<li class="nav-item"><a href="/kontakt.html" class="nav-link <?=in_array($current, ['kontakt', 'kontakt-formular']) ? 'active' : ''?>">Kontakt</a></li>
</ul>
+154 -70
View File
@@ -1,75 +1,159 @@
<style type="text/css">
#outer-content {
background-image: url('/img/bg_praxis.jpg');
}
</style>
<h1>Praxisausstattung &amp; Öffnungszeiten</h1>
<h1>Praxisausstattung</h1>
<ul>
<li>Ambulanz: Sonographie, EKG, 24 Std. Blutdruckmessung</li>
<li>Zentrumsdialyse: 16 Plätze</li>
<li>Satellitendialyse: 18 Plätze</li>
<li>Dialysegeräte der Firma Nikkiso DBB 05 / 07 mit Hemo-Master</li>
<li>BCM (Body Composition Monitor) von Fresenius zur Blutvolumenmessung</li>
<li>breite Palette an High- und Low-Flux Dialysatoren</li>
<li>Laborgeräte: Säure-Basen-Meßgerät und Elektrolytemeßgerät </li>
<li>Osmoseaufbereitungsanlage</li>
</ul>
<p class="lead" style="font-size: 1.1rem; color: var(--text-muted); margin-bottom: 2rem;">
Unser Dialysezentrum verfügt über modernste Medizintechnik für eine schonende, sichere und individuelle Behandlung unserer Patienten.
</p>
<div>
<table border="0" cellpadding="0" cellspacing="2" width="500px" class="kontakt" align="center">
<tbody>
<tr class="tdHead">
<td colspan="2">Dialyse:</td>
</tr>
<tr>
<td><span>Mo, Mi, Fr - 3 Schichten:</span></td>
<td>1. Schicht von 07.00 - 13.00 Uhr</td>
</tr>
<tr>
<td></td>
<td>2. Schicht von 13.00 - 18.00 Uhr</td>
</tr>
<tr>
<td></td>
<td>3. Schicht von 14.30 - 20.00 Uhr</td>
</tr>
<tr>
<td><span>Di, Do, Sa - 1 Schicht:</span></td>
<td>1. Schicht von 07.00 - 13.00 Uhr</td>
</tr>
<tr>
<td> &nbsp;</td>
<td> &nbsp;</td>
</tr>
<tr class="tdHead">
<td colspan="2">Ambulanz:</td>
</tr>
<tr>
<td><span>Mo, Mi, Fr</span></td>
<td>08.30 - 11.30 Uhr</td>
</tr>
<tr>
<td>nach Vereinbarung</td>
<td>14.00 - 17.00 Uhr</td>
</tr>
<tr>
<td><span>Di, Do</span></td>
<td>08.30 - 12.00 Uhr</td>
</tr>
<tr>
<td> &nbsp;</td>
<td> &nbsp;</td>
</tr>
</tbody>
</table>
<!-- Praxisausstattung Grid -->
<div class="grid-2" style="margin-bottom: 2.5rem;">
<div class="card">
<h3 style="color: var(--primary-dark); display: flex; align-items: center; gap: 0.5rem; margin-bottom: 1rem;">
<svg style="width: 20px; height: 20px; fill: var(--accent);" viewBox="0 0 24 24"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/></svg>
Diagnostik &amp; Plätze
</h3>
<ul style="list-style: none; padding: 0; margin: 0;">
<li style="display: flex; align-items: flex-start; gap: 0.5rem; margin-bottom: 0.75rem;">
<span style="color: var(--accent); font-weight: bold;">&#x2713;</span>
<span><strong>Ambulanz:</strong> Sonographie, EKG, 24 Std. Blutdruckmessung</span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.5rem; margin-bottom: 0.75rem;">
<span style="color: var(--accent); font-weight: bold;">&#x2713;</span>
<span><strong>Zentrumsdialyse:</strong> 16 Behandlungsplätze</span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.5rem; margin-bottom: 0.75rem;">
<span style="color: var(--accent); font-weight: bold;">&#x2713;</span>
<span><strong>Satellitendialyse:</strong> 18 Behandlungsplätze</span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.5rem;">
<span style="color: var(--accent); font-weight: bold;">&#x2713;</span>
<span><strong>Osmoseaufbereitungsanlage</strong> nach neuesten Standards</span>
</li>
</ul>
</div>
<div class="card">
<h3 style="color: var(--primary-dark); display: flex; align-items: center; gap: 0.5rem; margin-bottom: 1rem;">
<svg style="width: 20px; height: 20px; fill: var(--accent);" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 14H9V8h2v8zm4 0h-2V8h2v8z"/></svg>
Geräte &amp; Dialysetechnik
</h3>
<ul style="list-style: none; padding: 0; margin: 0;">
<li style="display: flex; align-items: flex-start; gap: 0.5rem; margin-bottom: 0.75rem;">
<span style="color: var(--accent); font-weight: bold;">&#x2713;</span>
<span><strong>Nikkiso DBB 05 / 07</strong> Dialysegeräte mit integriertem Hemo-Master</span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.5rem; margin-bottom: 0.75rem;">
<span style="color: var(--accent); font-weight: bold;">&#x2713;</span>
<span><strong>BCM (Body Composition Monitor)</strong> von Fresenius zur Blutvolumenmessung</span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.5rem; margin-bottom: 0.75rem;">
<span style="color: var(--accent); font-weight: bold;">&#x2713;</span>
<span>Breite Palette an <strong>High- und Low-Flux Dialysatoren</strong></span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.5rem;">
<span style="color: var(--accent); font-weight: bold;">&#x2713;</span>
<span><strong>Laborgeräte:</strong> Säure-Basen-Meßgerät und Elektrolytemeßgerät</span>
</li>
</ul>
</div>
</div>
<div class="alignRight">
<a href="/img/gallery/praxis3.jpg" data-lightbox="practice"><img src="/img/gallery/praxis3_thumb.jpg" alt="Praxis" /></a>
<a href="/img/gallery/praxis4.jpg" data-lightbox="practice"><img src="/img/gallery/praxis4_thumb.jpg" alt="Praxis" /></a>
<a href="/img/gallery/praxis5.jpg" data-lightbox="practice"><img src="/img/gallery/praxis5_thumb.jpg" alt="Praxis" /></a>
<a href="/img/gallery/praxis6.jpg" data-lightbox="practice"><img src="/img/gallery/praxis6_thumb.jpg" alt="Praxis" /></a>
<a href="/img/gallery/praxis7.jpg" data-lightbox="practice"><img src="/img/gallery/praxis7_thumb.jpg" alt="Praxis" /></a>
<a href="/img/gallery/praxis8.jpg" data-lightbox="practice"><img src="/img/gallery/praxis8_thumb.jpg" alt="Praxis" /></a>
<!-- Öffnungszeiten & Schichten (Orientierung an hamburg-harburg-dialyse.de) -->
<h2 style="margin-top: 2rem; margin-bottom: 1.5rem;">Behandlungs- &amp; Sprechzeiten</h2>
<div class="grid-2" style="margin-bottom: 3rem;">
<!-- Dialyse Schichten Card -->
<div class="schedule-card">
<div class="schedule-header">
<svg viewBox="0 0 24 24"><path d="M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z"/></svg>
<h3 class="schedule-title">Dialyse-Schichten</h3>
</div>
<ul class="schedule-list">
<li class="schedule-item">
<div class="schedule-day">
Mo, Mi, Fr<br>
<small style="color: var(--text-muted); font-weight: normal;">(3 Schichten)</small>
</div>
<div class="schedule-time">
<div><span class="schedule-shift-tag">1. Schicht</span> 07:00 &ndash; 13:00 Uhr</div>
<div style="margin: 0.35rem 0;"><span class="schedule-shift-tag">2. Schicht</span> 13:00 &ndash; 18:00 Uhr</div>
<div><span class="schedule-shift-tag">3. Schicht</span> 14:30 &ndash; 20:00 Uhr</div>
</div>
</li>
<li class="schedule-item">
<div class="schedule-day">
Di, Do, Sa<br>
<small style="color: var(--text-muted); font-weight: normal;">(1 Schicht)</small>
</div>
<div class="schedule-time">
<div><span class="schedule-shift-tag">1. Schicht</span> 07:00 &ndash; 13:00 Uhr</div>
</div>
</li>
</ul>
</div>
<!-- Ambulanz Zeiten Card -->
<div class="schedule-card">
<div class="schedule-header">
<svg viewBox="0 0 24 24"><path d="M19 3h-1V1h-2v2H8V1H6v2H5c-1.11 0-1.99.9-1.99 2L3 19c0 1.1.89 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm0 16H5V8h14v11zM7 10h5v5H7z"/></svg>
<h3 class="schedule-title">Ambulanz-Sprechzeiten</h3>
</div>
<ul class="schedule-list">
<li class="schedule-item">
<div class="schedule-day">Mo, Mi, Fr</div>
<div class="schedule-time">08:30 &ndash; 11:30 Uhr</div>
</li>
<li class="schedule-item">
<div class="schedule-day">Mo, Mi, Fr</div>
<div class="schedule-time">
14:00 &ndash; 17:00 Uhr<br>
<small style="color: var(--text-muted); font-style: italic;">(nach Vereinbarung)</small>
</div>
</li>
<li class="schedule-item">
<div class="schedule-day">Di, Do</div>
<div class="schedule-time">08:30 &ndash; 12:00 Uhr</div>
</li>
<li class="schedule-item">
<div class="schedule-day">Sa &amp; So</div>
<div class="schedule-time"><span style="color: var(--text-muted);">Geschlossen (außer Dialyse)</span></div>
</li>
</ul>
</div>
</div>
<!-- Praxis Galerie -->
<h2 style="margin-top: 2.5rem; margin-bottom: 1rem;">Eindrücke aus unserer Praxis</h2>
<p style="color: var(--text-muted); margin-bottom: 1.5rem;">Klicken Sie auf ein Bild, um es in voller Größe zu betrachten.</p>
<div class="gallery-grid">
<a href="/img/gallery/praxis3.jpg" data-lightbox="practice" data-title="Praxisräume &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/praxis3.jpg" alt="Praxisraum">
<div class="gallery-overlay"><span class="gallery-caption">Praxisräume</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
<a href="/img/gallery/praxis4.jpg" data-lightbox="practice" data-title="Praxisausstattung &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/praxis4.jpg" alt="Praxisausstattung">
<div class="gallery-overlay"><span class="gallery-caption">Praxisausstattung</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
<a href="/img/gallery/praxis5.jpg" data-lightbox="practice" data-title="Behandlungsbereich &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/praxis5.jpg" alt="Behandlungsbereich">
<div class="gallery-overlay"><span class="gallery-caption">Behandlungsbereich</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
<a href="/img/gallery/praxis6.jpg" data-lightbox="practice" data-title="Dialyseplätze &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/praxis6.jpg" alt="Dialyseplätze">
<div class="gallery-overlay"><span class="gallery-caption">Dialyseplätze</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
<a href="/img/gallery/praxis7.jpg" data-lightbox="practice" data-title="Patientenbereich &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/praxis7.jpg" alt="Patientenbereich">
<div class="gallery-overlay"><span class="gallery-caption">Patientenbereich</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
<a href="/img/gallery/praxis8.jpg" data-lightbox="practice" data-title="Modernste Technik &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/praxis8.jpg" alt="Modernste Technik">
<div class="gallery-overlay"><span class="gallery-caption">Modernste Technik</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
</div>
+147 -41
View File
@@ -1,44 +1,150 @@
<style type="text/css">
#outer-content {
background-image: url('/img/bg_leistungen.jpg');
}
</style>
<h1>Leistungen &amp; Behandlungsschwerpunkte</h1>
<h1>Leistungen</h1>
<ul>
<li>Diagnostik und Therapie von Nierenerkrankungen (nephrologische Ambulanz)</li>
<li>Die optimale Blutdruckeinstellung + Blutzuckereinstellung als Schwerpunkt</li>
<li>Die Betreuung niereninsuffizienter Diabetiker</li>
<li>Ernährungsberatung für Dialysepatienten</li>
<li>Transplantationsvorbereitung von Dialysepatienten</li>
<li>Betreuung transplantierter Patienten</li>
<li>Sonographie Nieren/Abdomen</li>
<li>Hämodialyse (HD) und Hämodiafiltration (HDF und online HDF) mit Hemo-Master</li>
<li>Blutvolumenmessung</li>
</ul>
<p class="lead" style="font-size: 1.1rem; color: var(--text-muted); margin-bottom: 2rem;">
Umfassende Diagnostik, präventive Beratung und hochmoderne Dialyseverfahren für das gesamte Spektrum nephrologischer Erkrankungen.
</p>
<b>Blutvolumenmessung mit dem BCM (Body Composition Monitor) von Fresenius:</b>
<br/>
<br/>
Das BCM ist ein Analysesystem, mit dem zeitnah über bioelektrische Ströme im Menschen der relative Anteil an Fett-, Muskel- und Wassermasse ermittelt und über einen Zeitraum hinweg kontrolliert werden kann.<br/>
In der Dialyse dient das System dazu, am Dialysepatienten ein Optimalgewicht zu bestimmen, um eine "Überwässerung" oder "Unterwässerung" zu erkennen und zu vermeiden.
<ul>
<li>Überwässerung: Ödeme bis zum Lungenödem</li>
<li>Unterwässerung (Hämokonzentration): Blutdruckabfälle, Krämpfe, Kopfschmerz</li>
</ul>
Diese Möglichkeit der Analyse wird nur von wenigen Dialysepraxen angeboten.<br/><br/>
<b>Hemo-Master von Nikkiso:</b>
<br/>
<br/>
Hier handelt es sich um ein Computerprogramm für eine schonende und individuelle Dialyse zur Verhinderung von Blutdruckabfällen, Kopfschmerzen und Krämpfen. Ein zusätzliches Modul für die Dialysemaschinen ist dabei erforderlich.<br/><br/>
Während der Dialyse werden kontinuierlich die Blutvolumenänderungen durch die optische Erfassung der Hämokonzentrationsänderung gemessen und aktiv sowohl über die Leitfähigkeit (Natriumkonzentration) als auch über die Ultrafiltrationsrate (Wasserentzug) geregelt.
Alle Werte werden aufgezeichnet, ausgewertet und für künftige Dialysen angepasst.<br/><br/>
Aufgrund der kostenintensiven Anschaffung und des zusätzlichen Arbeitsaufwandes bieten nicht alle Dialysepraxen diesen Service an.<br/><br/>
<div class="alignCenter">
<a href="/img/gallery/behandlung1.jpg" data-lightbox="services"><img src="/img/gallery/behandlung1_thumb.jpg" alt="Behandlungszimmer" /></a>
<a href="/img/gallery/behandlung2.jpg" data-lightbox="services"><img src="/img/gallery/behandlung2_thumb.jpg" alt="Behandlungszimmer" /></a>
<a href="/img/gallery/leistung1.jpg" data-lightbox="services"><img src="/img/gallery/leistung1_thumb.jpg" alt="Behandlungszimmer" /></a>
<a href="/img/gallery/leistung2.jpg" data-lightbox="services"><img src="/img/gallery/leistung2_thumb.jpg" alt="Behandlungszimmer" /></a>
<a href="/img/gallery/leistung3.jpg" data-lightbox="services"><img src="/img/gallery/leistung3_thumb.jpg" alt="Behandlungszimmer" /></a>
<a href="/img/gallery/leistung4.jpg" data-lightbox="services"><img src="/img/gallery/leistung4_thumb.jpg" alt="Behandlungszimmer" /></a>
<!-- Leistungsübersicht -->
<div class="grid-2" style="margin-bottom: 2.5rem;">
<div class="card">
<h3 style="color: var(--primary-dark); display: flex; align-items: center; gap: 0.5rem; margin-bottom: 1.25rem;">
<svg style="width: 22px; height: 22px; fill: var(--accent);" viewBox="0 0 24 24"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/></svg>
Nephrologische Ambulanz
</h3>
<ul style="list-style: none; padding: 0; margin: 0;">
<li style="display: flex; align-items: flex-start; gap: 0.6rem; margin-bottom: 0.85rem;">
<span style="color: var(--accent); font-weight: bold; font-size: 1.1rem;">&#x2713;</span>
<span><strong>Diagnostik und Therapie</strong> von Nierenerkrankungen (nephrologische Ambulanz)</span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.6rem; margin-bottom: 0.85rem;">
<span style="color: var(--accent); font-weight: bold; font-size: 1.1rem;">&#x2713;</span>
<span>Optimale <strong>Blutdruckeinstellung + Blutzuckereinstellung</strong> als wesentlicher Schwerpunkt</span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.6rem; margin-bottom: 0.85rem;">
<span style="color: var(--accent); font-weight: bold; font-size: 1.1rem;">&#x2713;</span>
<span>Spezialisierte Betreuung <strong>niereninsuffizienter Diabetiker</strong></span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.6rem;">
<span style="color: var(--accent); font-weight: bold; font-size: 1.1rem;">&#x2713;</span>
<span><strong>Sonographie</strong> von Nieren und Abdomen (Ultraschalldiagnostik)</span>
</li>
</ul>
</div>
<div class="card">
<h3 style="color: var(--primary-dark); display: flex; align-items: center; gap: 0.5rem; margin-bottom: 1.25rem;">
<svg style="width: 22px; height: 22px; fill: var(--accent);" viewBox="0 0 24 24"><path d="M12 21.35l-1.45-1.32C5.4 15.36 2 12.28 2 8.5 2 5.42 4.42 3 7.5 3c1.74 0 3.41.81 4.5 2.09C13.09 3.81 14.76 3 16.5 3 19.58 3 22 5.42 22 8.5c0 3.78-3.4 6.86-8.55 11.54L12 21.35z"/></svg>
Dialyse &amp; Betreuung
</h3>
<ul style="list-style: none; padding: 0; margin: 0;">
<li style="display: flex; align-items: flex-start; gap: 0.6rem; margin-bottom: 0.85rem;">
<span style="color: var(--accent); font-weight: bold; font-size: 1.1rem;">&#x2713;</span>
<span><strong>Hämodialyse (HD)</strong> und <strong>Hämodiafiltration (HDF und online HDF)</strong> mit Hemo-Master</span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.6rem; margin-bottom: 0.85rem;">
<span style="color: var(--accent); font-weight: bold; font-size: 1.1rem;">&#x2713;</span>
<span><strong>Präzise Blutvolumenmessung</strong> mit dem Fresenius BCM</span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.6rem; margin-bottom: 0.85rem;">
<span style="color: var(--accent); font-weight: bold; font-size: 1.1rem;">&#x2713;</span>
<span><strong>Transplantationsvorbereitung</strong> und <strong>Betreuung transplantierter Patienten</strong></span>
</li>
<li style="display: flex; align-items: flex-start; gap: 0.6rem;">
<span style="color: var(--accent); font-weight: bold; font-size: 1.1rem;">&#x2713;</span>
<span>Individuelle <strong>Ernährungsberatung</strong> speziell für Dialysepatienten</span>
</li>
</ul>
</div>
</div>
<!-- Highlight 1: BCM Fresenius -->
<div class="highlight-panel">
<span class="highlight-badge">Medizinische Spitzentechnologie</span>
<h2 class="highlight-panel-title">
<svg style="width: 24px; height: 24px; fill: var(--accent);" viewBox="0 0 24 24"><path d="M19 3H5c-1.1 0-2 .9-2 2v14c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V5c0-1.1-.9-2-2-2zm-2 10h-4v4h-2v-4H7v-2h4V7h2v4h4v2z"/></svg>
Blutvolumenmessung mit dem BCM (Body Composition Monitor) von Fresenius
</h2>
<p>
Das BCM ist ein Analysesystem, mit dem zeitnah über bioelektrische Ströme im Menschen der relative Anteil an Fett-, Muskel- und Wassermasse ermittelt und über einen Zeitraum hinweg kontrolliert werden kann.
</p>
<p>
In der Dialyse dient das System dazu, am Dialysepatienten ein Optimalgewicht zu bestimmen, um eine <strong>&bdquo;Überwässerung&ldquo;</strong> oder <strong>&bdquo;Unterwässerung&ldquo;</strong> präzise zu erkennen und zu vermeiden:
</p>
<div class="condition-grid">
<div class="condition-card condition-warning">
<div class="condition-title">
<span>&#x26A0;</span> Überwässerung
</div>
<div>Kann zu Gewebsödemen bis hin zum lebensbedrohlichen Lungenödem führen.</div>
</div>
<div class="condition-card condition-info">
<div class="condition-title">
<span>&#x2139;</span> Unterwässerung (Hämokonzentration)
</div>
<div>Kann schwere Blutdruckabfälle, schmerzhafte Muskelkrämpfe und Kopfschmerzen verursachen.</div>
</div>
</div>
<p style="margin-bottom: 0; font-weight: 600; color: var(--primary);">
<em>Hinweis:</em> Diese Möglichkeit der modernen bioelektrischen Analyse wird nur von wenigen Dialysepraxen angeboten.
</p>
</div>
<!-- Highlight 2: Hemo-Master Nikkiso -->
<div class="highlight-panel">
<span class="highlight-badge">Schonende &amp; Individuelle Dialyse</span>
<h2 class="highlight-panel-title">
<svg style="width: 24px; height: 24px; fill: var(--accent);" viewBox="0 0 24 24"><path d="M12 2C6.48 2 2 6.48 2 12s4.48 10 10 10 10-4.48 10-10S17.52 2 12 2zm-1 14H9V8h2v8zm4 0h-2V8h2v8z"/></svg>
Hemo-Master von Nikkiso
</h2>
<p>
Hier handelt es sich um ein hochmodernes Computerprogramm für eine schonende und individuelle Dialyse zur gezielten Verhinderung von Blutdruckabfällen, Kopfschmerzen und Krämpfen während der Behandlung. Ein zusätzliches Steuermodul für die Dialysemaschinen ist dabei erforderlich.
</p>
<p>
Während der Dialyse werden kontinuierlich die Blutvolumenänderungen durch die optische Erfassung der Hämokonzentrationsänderung gemessen und aktiv sowohl über die <strong>Leitfähigkeit (Natriumkonzentration)</strong> als auch über die <strong>Ultrafiltrationsrate (Wasserentzug)</strong> präzise geregelt.
</p>
<p>
Alle Werte werden digital aufgezeichnet, ausgewertet und für künftige Dialysen individuell angepasst.
</p>
<p style="margin-bottom: 0; font-weight: 600; color: var(--primary);">
<em>Besonderheit:</em> Aufgrund der kostenintensiven Anschaffung und des zusätzlichen qualifizierten Arbeitsaufwandes bieten nicht alle Dialysepraxen diesen exzellenten Service an.
</p>
</div>
<!-- Galerie Behandlungsräume & Technik -->
<h2 style="margin-top: 2.5rem; margin-bottom: 1rem;">Behandlungsräume &amp; Medizintechnik</h2>
<p style="color: var(--text-muted); margin-bottom: 1.5rem;">Einblicke in unsere moderne apparative Ausstattung und Patientenumgebung.</p>
<div class="gallery-grid">
<a href="/img/gallery/behandlung1.jpg" data-lightbox="services" data-title="Behandlungsbereich &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/behandlung1.jpg" alt="Behandlungszimmer">
<div class="gallery-overlay"><span class="gallery-caption">Behandlungsbereich</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
<a href="/img/gallery/behandlung2.jpg" data-lightbox="services" data-title="Dialyseplatz &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/behandlung2.jpg" alt="Behandlungsplatz">
<div class="gallery-overlay"><span class="gallery-caption">Dialyseplatz</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
<a href="/img/gallery/leistung1.jpg" data-lightbox="services" data-title="Nikkiso Dialysetechnik &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/leistung1.jpg" alt="Medizintechnik">
<div class="gallery-overlay"><span class="gallery-caption">Nikkiso Dialysetechnik</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
<a href="/img/gallery/leistung2.jpg" data-lightbox="services" data-title="Hemo-Master Monitor &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/leistung2.jpg" alt="Hemo-Master">
<div class="gallery-overlay"><span class="gallery-caption">Hemo-Master Monitor</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
<a href="/img/gallery/leistung3.jpg" data-lightbox="services" data-title="Patientenüberwachung &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/leistung3.jpg" alt="Patientenüberwachung">
<div class="gallery-overlay"><span class="gallery-caption">Patientenüberwachung</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
<a href="/img/gallery/leistung4.jpg" data-lightbox="services" data-title="Fresenius BCM Messplatz &bull; Dialysezentrum Berlin-Mahlsdorf" class="gallery-item">
<img src="/img/gallery/leistung4.jpg" alt="BCM Messplatz">
<div class="gallery-overlay"><span class="gallery-caption">Fresenius BCM Messplatz</span></div>
<div class="gallery-zoom-icon"><svg viewBox="0 0 24 24"><path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16c1.61 0 3.09-.59 4.23-1.57l.27.28v.79l5 4.99L20.49 19l-4.99-5zm-6 0C7.01 14 5 11.99 5 9.5S7.01 5 9.5 5 14 7.01 14 9.5 11.99 14 9.5 14z"/></svg></div>
</a>
</div>
+78 -21
View File
@@ -1,22 +1,79 @@
<style type="text/css">
#outer-content {
background-image: url('/img/bg_dialyse.jpg');
}
</style>
<h1>Unser Team</h1>
<h1>Team</h1>
<ul>
<li>1 Fachärztin für Innere Medizin und Nephrologie (<b>Approbation:</b> Dr. med. B. Bischoff - 2002 Berlin)</li>
<ul>
<li>Mitglied der Ärztekammer Berlin</li>
</ul>
<li>1 Fachärztin für Innere Medizin und Nephrologie (<b>Approbation:</b> Dr. med. J. Hoffzimmer - 2009 Berlin)</li>
<ul>
<li>Mitglied der Ärztekammer Berlin</li>
</ul>
<li>1 Fachärztin für Innere Medizin (<b>Approbation:</b> Dr. med. C. Körner - 2004 Berlin)</li>
<ul>
<li>Mitglied der Ärztekammer Berlin</li>
</ul>
<li>23 Mitarbeiter (Schwestern, Arzthelferinnen, Servicekräfte) </li>
</ul>
<p class="lead" style="font-size: 1.1rem; color: var(--text-muted); margin-bottom: 2rem;">
Lernen Sie unsere erfahrenen Fachärztinnen und unser engagiertes Pflegeteam kennen. Bei uns steht Ihre Gesundheit, Sicherheit und persönliche Betreuung im Mittelpunkt.
</p>
<!-- Ärztinnen Grid -->
<div class="grid-3" style="margin-bottom: 2.5rem;">
<!-- Dr. med. B. Bischoff -->
<div class="doctor-card" style="flex-direction: column;">
<div class="doctor-avatar">
<svg viewBox="0 0 24 24"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>
</div>
<div class="doctor-info">
<h3 class="doctor-name">Dr. med. B. Bischoff</h3>
<div class="doctor-title">Fachärztin für Innere Medizin &amp; Nephrologie</div>
<div class="doctor-meta">
<div><strong>Approbation:</strong> 2002 in Berlin</div>
</div>
<div class="chamber-badge">
<svg style="width: 14px; height: 14px; fill: currentColor;" viewBox="0 0 24 24"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></svg>
Mitglied der Ärztekammer Berlin
</div>
</div>
</div>
<!-- Dr. med. J. Hoffzimmer -->
<div class="doctor-card" style="flex-direction: column;">
<div class="doctor-avatar">
<svg viewBox="0 0 24 24"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>
</div>
<div class="doctor-info">
<h3 class="doctor-name">Dr. med. J. Hoffzimmer</h3>
<div class="doctor-title">Fachärztin für Innere Medizin &amp; Nephrologie</div>
<div class="doctor-meta">
<div><strong>Approbation:</strong> 2009 in Berlin</div>
</div>
<div class="chamber-badge">
<svg style="width: 14px; height: 14px; fill: currentColor;" viewBox="0 0 24 24"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></svg>
Mitglied der Ärztekammer Berlin
</div>
</div>
</div>
<!-- Dr. med. C. Körner -->
<div class="doctor-card" style="flex-direction: column;">
<div class="doctor-avatar">
<svg viewBox="0 0 24 24"><path d="M12 12c2.21 0 4-1.79 4-4s-1.79-4-4-4-4 1.79-4 4 1.79 4 4 4zm0 2c-2.67 0-8 1.34-8 4v2h16v-2c0-2.66-5.33-4-8-4z"/></svg>
</div>
<div class="doctor-info">
<h3 class="doctor-name">Dr. med. C. Körner</h3>
<div class="doctor-title">Fachärztin für Innere Medizin</div>
<div class="doctor-meta">
<div><strong>Approbation:</strong> 2004 in Berlin</div>
</div>
<div class="chamber-badge">
<svg style="width: 14px; height: 14px; fill: currentColor;" viewBox="0 0 24 24"><path d="M9 16.17L4.83 12l-1.42 1.41L9 19 21 7l-1.41-1.41z"/></svg>
Mitglied der Ärztekammer Berlin
</div>
</div>
</div>
</div>
<!-- Mitarbeiter & Pflegekräfte Card -->
<div class="card" style="background: linear-gradient(135deg, #f8fafc 0%, #e0f2fe 100%); border-left: 4px solid var(--accent); padding: 2rem;">
<div style="display: flex; gap: 1.5rem; align-items: center; flex-wrap: wrap;">
<div style="width: 60px; height: 60px; border-radius: var(--radius-full); background: var(--accent); color: #fff; display: flex; align-items: center; justify-content: center; flex-shrink: 0; box-shadow: 0 4px 10px rgba(2, 132, 199, 0.25);">
<svg style="width: 32px; height: 32px; fill: currentColor;" viewBox="0 0 24 24"><path d="M16 11c1.66 0 2.99-1.34 2.99-3S17.66 5 16 5c-1.66 0-3 1.34-3 3s1.34 3 3 3zm-8 0c1.66 0 2.99-1.34 2.99-3S9.66 5 8 5C6.34 5 5 6.34 5 8s1.34 3 3 3zm0 2c-2.33 0-7 1.17-7 3.5V19h14v-2.5c0-2.33-4.67-3.5-7-3.5zm8 0c-.29 0-.62.02-.97.05 1.16.84 1.97 1.97 1.97 3.45V19h6v-2.5c0-2.33-4.67-3.5-7-3.5z"/></svg>
</div>
<div style="flex: 1; min-width: 250px;">
<h2 style="margin: 0 0 0.5rem 0; font-size: 1.4rem; color: var(--primary-dark);">
23 Mitarbeiterinnen und Mitarbeiter
</h2>
<p style="margin: 0; color: var(--text-main); font-size: 1rem; line-height: 1.5;">
Unser Team umfasst engagierte <strong>Schwestern, Arzthelferinnen und Servicekräfte</strong>, die rund um die Uhr für Ihr Wohlergehen, fachkundige Betreuung und einen angenehmen Aufenthalt während der Behandlung sorgen.
</p>
</div>
</div>
</div>
+72 -46
View File
@@ -1,55 +1,81 @@
<style type="text/css">
#outer-content {
background-image: url('/img/bg_datenschutz.jpg');
}
</style>
<h1>Datenschutzerklärung</h1>
<h1>Datenschutz</h1>
Geltungsbereich:<br />
Diese Datenschutzerklärung klärt Nutzer über die Art, den Umfang und Zwecke der Erhebung und Verwendung personenbezogener
Daten durch den verantwortlichen Anbieter <br /><br />
Dialysezentrum Berlin-Mahlsdorf<br />
Dr.med. B. Bischoff und Dr.med. J. Hoffzimmer<br />
Thornerstr.1<br />
12623 Berlin<br />
Telefon: +49 30 5662484<br />
e-Mail: <img src="/img/kontakt.jpg" style="vertical-align: middle;" /><br />
auf dieser Website (im folgenden "Angebot") auf.<br /><br />
<div class="card" style="margin-bottom: 2rem;">
<h2 style="margin-top: 0;">Geltungsbereich &amp; Verantwortlicher</h2>
<p>
Diese Datenschutzerklärung klärt Nutzer über die Art, den Umfang und Zwecke der Erhebung und Verwendung personenbezogener Daten durch den verantwortlichen Anbieter auf dieser Website (im folgenden &bdquo;Angebot&ldquo;) auf:
</p>
<div style="background-color: var(--bg-alt); padding: 1.25rem; border-radius: var(--radius-md); margin-bottom: 1.25rem;">
<strong>Dialysezentrum Berlin-Mahlsdorf</strong><br>
Dr. med. B. Bischoff und Dr. med. J. Hoffzimmer<br>
Thorner Straße 1, 12623 Berlin<br>
Telefon: <a href="tel:+49305662484">+49 30 5662484</a><br>
E-Mail: <a href="javascript:void(0);" onclick="sending();">kontakt@dialyse-berlin.net</a>
</div>
Datenschutzbeauftragter: Richard Fendt<br />
e-Mail:<img src="/img/datenschutz_email.jpg" style="vertical-align: middle;" /><br /><br />
<p style="margin-bottom: 0;">
<strong>Datenschutzbeauftragter:</strong> Richard Fendt<br>
E-Mail: <a href="mailto:datenschutz@dialyse-berlin.net">datenschutz@dialyse-berlin.net</a>
</p>
</div>
<h2>Zugriffsdaten/ Server-Logfiles:</h2>
<div class="card" style="margin-bottom: 1.5rem;">
<h2>Zugriffsdaten / Server-Logfiles</h2>
<p>
Der Anbieter (beziehungsweise sein Webspace-Provider) erhebt Daten über jeden Zugriff auf das Angebot (so genannte Serverlogfiles). Zu den Zugriffsdaten gehören:
</p>
<ul>
<li>Name der abgerufenen Webseite und Datei</li>
<li>Datum und Uhrzeit des Abrufs</li>
<li>Übertragene Datenmenge und Meldung über erfolgreichen Abruf</li>
<li>Browsertyp nebst Version und das Betriebssystem des Nutzers</li>
<li>Referrer URL (die zuvor besuchte Seite)</li>
<li>IP-Adresse und der anfragende Provider</li>
</ul>
<p style="margin-bottom: 0;">
Der Anbieter verwendet die Protokolldaten nur für statistische Auswertungen zum Zweck des Betriebs, der Sicherheit und der Optimierung des Angebotes. Der Anbieter behält sich jedoch vor, die Protokolldaten nachträglich zu überprüfen, wenn aufgrund konkreter Anhaltspunkte der berechtigte Verdacht einer rechtswidrigen Nutzung besteht.
</p>
</div>
Der Anbieter (beziehungsweise sein Webspace-Provider) erhebt Daten über jeden Zugriff auf das Angebot (so genannte Serverlogfiles).
Zu den Zugriffsdaten gehören:<br />
Name der abgerufenen Webseite, Datei, Datum und Uhrzeit des Abrufs, übertragene Datenmenge, Meldung über erfolgreichen Abruf,
Browsertyp nebst Version, das Betriebssystem des Nutzers, Referrer URL (die zuvor besuchte Seite), IP-Adresse und der anfragende Provider.<br />
Der Anbieter verwendet die Protokolldaten nur für statistische Auswertungen zum Zweck des Betriebs, der Sicherheit und der
Optimierung des Angebotes. Der Anbieterbehält sich jedoch vor, die Protokolldaten nachträglich zu überprüfen, wenn aufgrund
konkreter Anhaltspunkte der berechtigte Verdacht einer rechtswidrigen Nutzung besteht.
<div class="card" style="margin-bottom: 1.5rem;">
<h2>Umgang mit personenbezogenen Daten</h2>
<p>
Personenbezogene Daten sind Informationen, mit deren Hilfe eine Person bestimmbar ist, also Angaben, die zurück zu einer Person verfolgt werden können. Dazu gehören der Name, die Emailadresse oder die Telefonnummer. Aber auch Daten über Vorlieben, Hobbies, Mitgliedschaften oder welche Webseiten von jemandem angesehen wurden, zählen zu personenbezogenen Daten.
</p>
<p style="margin-bottom: 0;">
Personenbezogene Daten werden von dem Anbieter nur dann erhoben, genutzt und weitergegeben, wenn dies gesetzlich erlaubt ist oder die Nutzer in die Datenerhebung einwilligen.
</p>
</div>
<h2>Umgang mit personenbezogenen Daten:</h2>
Personenbezogene Daten sind Informationen, mit deren Hilfe eine Person bestimmbar ist, also Angaben, die zurück zu einer
Person verfolgt werden können. Dazu gehören der Name, die Emailadresse oder die Telefonnummer. Aber auch Daten über Vorlieben,
Hobbies, Mitgliedschaften oder welche Webseiten von jemandem angesehen wurden zählen zu personenbezogenen Daten.<br />
Personenbezogene Daten werden von dem Anbieter nur dann erhoben, genutzt und weiter gegeben, wenn dies gesetzlich erlaubt
ist oder die Nutzer in die Datenerhebung einwilligen.
<div class="card" style="margin-bottom: 1.5rem;">
<h2>Kontaktaufnahme</h2>
<p style="margin-bottom: 0;">
Bei der Kontaktaufnahme mit dem Anbieter (zum Beispiel per Kontaktformular oder E-Mail) werden die Angaben des Nutzers zwecks Bearbeitung der Anfrage sowie für den Fall, dass Anschlussfragen entstehen, gespeichert.
</p>
</div>
<h2>Kontaktaufnahme:</h2>
Bei der Kontaktaufnahme mit dem Anbieter (zum Beispiel per Kontaktformular oder E-Mail) werden die Angaben des Nutzers
zwecks Bearbeitung der Anfrage sowie für den Fall, dass Anschlussfragen entstehen, gespeichert.
<div class="card" style="margin-bottom: 1.5rem;">
<h2>Cookies</h2>
<p>
Auf unserer Homepage werden sogenannte Cookies verwendet. Das sind kleine, auf dem Rechner des Nutzers gespeicherte Daten, um das problemlose und einfache Nutzen der Website zu gewährleisten.
</p>
<p style="margin-bottom: 0;">
Personenbezogene Daten werden im Cookie nicht gespeichert, sondern nur technische Inhalte, die für die Funktion einiger Bereiche auf dieser Webseite notwendig sind (z. B. Sitzungsverwaltung).
</p>
</div>
<h2>Cookies:</h2>
Auf unserer Homepage werden sogenannte Cookies verwendet. Das sind kleine, auf dem Rechner des Nutzers, gespeicherte Daten
um das problemlose und einfache Nutzen der Website zu gewährleisten.<br />
Personenbezogene Daten werden im Cookie nicht gespeichert, sondern nur Inhalte die für die Funktion einiger Bereiche auf
dieser Webseite notwendig sind.
<div class="card" style="margin-bottom: 1.5rem;">
<h2>Weitergabe der Daten an Dritte</h2>
<p style="margin-bottom: 0;">
Ihre Angaben werden grundsätzlich nicht an Dritte weitergegeben.
</p>
</div>
<h2>Weitergabe der Daten an Dritte:</h2>
Ihre Angaben werden nicht an Dritte weitergegeben.
<div class="card">
<h2>Widerruf, Änderungen, Berichtigungen und Aktualisierungen</h2>
<p style="margin-bottom: 0;">
Der Nutzer hat das Recht, auf Antrag unentgeltlich Auskunft zu erhalten über die personenbezogenen Daten, die über ihn gespeichert wurden. Zusätzlich hat der Nutzer das Recht auf Berichtigung unrichtiger Daten, Sperrung und Löschung seiner personenbezogenen Daten, soweit dem keine gesetzliche Aufbewahrungspflicht entgegensteht.
</p>
</div>
<h2>Widerruf, Änderungen, Berichtigungen und Aktualisierungen:</h2>
Der Nutzer hat das Recht, auf Antrag unentgeltlich Auskunft zu erhalten über die personenbezogenen Daten, die über ihn
gespeichert wurden. Zusätzlich hat der Nutzer das Recht auf Berichtigung unrichtiger Daten, Sperrung und Löschung seiner
personenbezogenen Daten, soweit dem keine gesetzliche Aufbewahrungspflicht entgegensteht.
<script type="text/javascript" src="/js/contact.js"></script>