array('afar'), 'ab'=>array('abkhazian'), 'af'=>array('afrikaans'), 'am'=>array('amharic'), 'ar'=>array('arabic'), 'as'=>array('assamese'), 'ay'=>array('aymara'), 'az'=>array('azerbaijani'), 'ba'=>array('bashkir'), 'be'=>array('byelorussian'), 'bg'=>array('bulgarian'), 'bh'=>array('bihari'), 'bi'=>array('bislama'), 'bn'=>array('bengali','bangla'), 'bo'=>array('tibetan'), 'br'=>array('breton'), 'ca'=>array('catalan'), 'co'=>array('corsican'), 'cs'=>array('czech'), 'cy'=>array('welsh'), 'da'=>array('danish'), 'de'=>array('german','deutsch'), 'dz'=>array('bhutani'), 'el'=>array('greek'), 'en'=>array('english','american','englisch'), 'eo'=>array('esperanto'), 'es'=>array('spanish','spanisch'), 'et'=>array('estonian'), 'eu'=>array('basque'), 'fa'=>array('persian'), 'fi'=>array('finnish'), 'fj'=>array('fiji'), 'fo'=>array('faeroese'), 'fr'=>array('french', 'französisch', 'francais'), 'fy'=>array('frisian'), 'ga'=>array('irish'), 'gd'=>array('gaelic','scotsgaelic'), 'gl'=>array('galician'), 'gn'=>array('guarani'), 'gu'=>array('gujarati'), 'ha'=>array('hausa'), 'hi'=>array('hindi'), 'hr'=>array('croatian'), 'hu'=>array('hungarian'), 'hy'=>array('armenian'), 'ia'=>array('interlingua'), 'ie'=>array('interlingue'), 'ik'=>array('inupiak'), 'in'=>array('indonesian'), 'is'=>array('icelandic'), 'it'=>array('italian'), 'iw'=>array('hebrew'), 'ja'=>array('japanese'), 'ji'=>array('yiddish'), 'jw'=>array('javanese'), 'ka'=>array('georgian'), 'kk'=>array('kazakh'), 'kl'=>array('greenlandic'), 'km'=>array('cambodian'), 'kn'=>array('kannada'), 'ko'=>array('korean'), 'ks'=>array('kashmiri'), 'ku'=>array('kurdish'), 'ky'=>array('kirghiz'), 'la'=>array('latin'), 'ln'=>array('lingala'), 'lo'=>array('laothian'), 'lt'=>array('lithuanian'), 'lv'=>array('latvian','lettish'), 'mg'=>array('malagasy'), 'mi'=>array('maori'), 'mk'=>array('macedonian'), 'ml'=>array('malayalam'), 'mn'=>array('mongolian'), 'mo'=>array('moldavian'), 'mr'=>array('marathi'), 'ms'=>array('malay'), 'mt'=>array('maltese'), 'my'=>array('burmese'), 'na'=>array('nauru'), 'ne'=>array('nepali'), 'nl'=>array('dutch'), 'no'=>array('norwegian'), 'oc'=>array('occitan'), 'om'=>array('oromo\'afan'), 'or'=>array('oriya'), 'pa'=>array('punjabi'), 'pl'=>array('polish'), 'ps'=>array('pashto\'pushto'), 'pt'=>array('portuguese'), 'qu'=>array('quechua'), 'rm'=>array('rhaeto-romance'), 'rn'=>array('kirundi'), 'ro'=>array('romanian'), 'ru'=>array('russian'), 'rw'=>array('kinyarwanda'), 'sa'=>array('sanskrit'), 'sd'=>array('sindhi'), 'sg'=>array('sangro'), 'sh'=>array('serbo-croatian'), 'si'=>array('singhalese'), 'sk'=>array('slovak'), 'sl'=>array('slovenian'), 'sm'=>array('samoan'), 'sn'=>array('shona'), 'so'=>array('somali'), 'sq'=>array('albanian'), 'sr'=>array('serbian'), 'ss'=>array('siswati'), 'st'=>array('sesotho'), 'su'=>array('sudanese'), 'sv'=>array('swedish'), 'sw'=>array('swahili'), 'ta'=>array('tamil'), 'te'=>array('tegulu'), 'tg'=>array('tajik'), 'th'=>array('thai'), 'ti'=>array('tigrinya'), 'tk'=>array('turkmen'), 'tl'=>array('tagalog'), 'tn'=>array('setswana'), 'to'=>array('tonga'), 'tr'=>array('turkish'), 'ts'=>array('tsonga'), 'tt'=>array('tatar'), 'tw'=>array('twi'), 'uk'=>array('ukrainian'), 'ur'=>array('urdu'), 'uz'=>array('uzbek'), 'vi'=>array('vietnamese'), 'vo'=>array('volapuk'), 'wo'=>array('wolof'), 'xh'=>array('xhosa'), 'yo'=>array('yoruba'), 'zh'=>array('chinese', 'chinesisch'), 'zu'=>array('zulu') ); ?> 'video/mpeg', 'mp4' => 'video/mp4', 'wmv' => 'video/x-ms-wmv', 'avi' => 'video/avi', 'mov' => 'video/quicktime', 'flv' => 'video/x-flv' ); $allowedFileTypes = array('image/gif' => 1, 'image/x-png' => 2, 'image/jpeg' => 3, 'image/pjpeg' => 4, 'audio/x-wav' => 5, 'audio/wav' => 6, 'video/quicktime' => 7, 'video/mpeg' => 8, 'video/mp4' => 40, 'video/avi' => 9, 'application/msword' => 10, 'application/vnd.ms-powerpoint' =>11, 'application/vnd.ms-excel' => 12, 'application/pdf' => 13, 'application/x-zip-compressed' => 14, 'application/x-stuffit' => 15, 'application/octet-stream' => 16, 'application/macbinhex40' => 17, 'text/plain' => 18, 'text/html' => 19, 'text/html' => 20, 'application/zip' => 21, 'image/png' => 22, 'application/x-msexcel' => 23, 'audio/mpeg' => 24, 'audio/x-ms-wma' => 25, 'image/bmp' => 26, 'application/x-tar' => 27, 'text/rtf' => 28, 'video/x-ms-wmv' => 29, 'application/p2m' => 30, 'application/x-shockwave-flash' => 31, //'application/vnd.ms-powerpoint' => 32, 'image/x-eps' => 33, 'image/tiff' => 34, 'video/x-flv' => 37, 'application/postscript' => 38, 'application/x-photoshop' => 39, 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 41, 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 42, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 43, 'application/gpx+xml' => 44, // gpx 'application/vnd.google-earth.kml+xml' => 45, // kml 'application/vnd.google-earth.kmz' => 46, // kmz 'application/vnd.ms-outlook' => 47, // msg 'application/epub+zip' => 48, 'image/svg+xml' => 49 ); $allowedImageFileTypes = array('image/gif' => 1, 'image/x-png' => 2, 'image/jpeg' => 3, 'image/pjpeg' => 4, 'image/tiff' => 7, 'image/tiff' => 8, 'image/png' => 22, 'image/bmp' => 26, 'image/x-eps' => 33, 'image/tiff' => 34, 'image/svg+xml' => 49); $allowedAudioFileTypes = array('audio/x-wav' => 5, 'audio/wav' => 6, 'audio/mpeg' => 24, 'audio/x-ms-wma' => 25); $allowedVideoFileTypes = array('video/quicktime' => 7, 'video/mpeg' => 8, 'video/mpeg' => 40, 'video/avi' => 9, 'video/x-ms-wmv' => 29, 'video/x-flv' => 37); $allowedOfficeFileTypes = array('application/msword' => 10, 'application/vnd.ms-powerpoint' =>11, 'application/vnd.ms-excel' => 12, 'application/pdf' => 13, 'application/x-msexcel' => 23, 'application/p2m' => 30, 'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 41, 'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 42, 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 43, 'application/vnd.ms-outlook' => 47, 'application/epub+zip' => 48 //'application/vnd.ms-powerpoint' => 32 ); $allowedTextFileTypes = array('text/plain' => 18, 'text/html' => 19, 'text/html' => 20, 'text/html' => 28); $allowedArchiveFileTypes = array('application/x-zip-compressed' => 14, 'application/x-stuffit' => 15, 'application/octet-stream' => 16, 'application/macbinhex40' => 17, 'application/zip' => 21, 'application/x-tar' => 27); $fileEndings = array(1 => 'gif', 2 => 'png', 3 => 'jpg', 4 => 'jpg', 5 => 'wav', 6 => 'wav', 7 => 'mov', 8 => 'mpg', 9 => 'avi', 10 => 'doc', 11 => 'ppt', 12 => 'xls', 13 => 'pdf', 14 => 'zip', 15 => 'sit', 16 => 'sea', 17 => 'hqx', 18 => 'txt', 19 => 'htm', 20 => 'html', 21 => 'zip', 22 => 'png', 23 => 'xls', 24 => 'mp3', 25 => 'wma', 26 => 'bmp', 27 => 'tgz', 28 => 'rtf', 29 => 'wmv', 30 => 'p2m', 31 => 'swf', //32 => 'pps', 33 => 'eps', 34 => 'tif', 37 => 'flv', 38 => 'ai', 39 => 'psd', 40 => 'mp4', 41 => 'pptx', 42 => 'docx', 43 => 'xlsx', 44 => 'gpx', 45 => 'kml', 46 => 'kmz', 47 => 'msg', 48 => 'epub', 49 => 'svg', ); $fileTypeName = array(1 => '(GIF)', 2 => '(PNG)', 3 => '(JPEG)', 4 => '(JPEG)', 5 => '(WAV)', 6 => '(WAV)', 7 => '(QT)', 8 => '(MPEG)', 9 => '(AVI)', 10 => '(DOC)', 11 => '(PPT)', 12 => '(XLS)', 13 => '(PDF)', 14 => '(ZIP)', 15 => '(SIT)', 16 => '(SEA)', 17 => '(HQX)', 18 => '(TXT)', 19 => '(HTM)', 20 => '(HTM)', 21 => '(ZIP)', 22 => '(PNG)', 23 => '(XLS)', 24 => '(MP3)', 25 => '(WMA)', 26 => '(BMP)', 27 => '(TGZ)', 28 => '(RTF)', 29 => '(WMV)', 30 => '(P2M)', 31 => '(SWF)', //32 => '(PPS)', 33 => '(EPS)', 34 => '(TIF)', 37 => '(FLV)', 38 => '(AI)', 39 => '(PSD)', 40 => '(MP4)', 41 => '(PPTX)', 42 => '(DOCX)', 43 => '(XLSX)', 44 => '(GPX)', 45 => '(KML)', 46 => '(KMZ)', 47 => '(MSG)', 48 => '(EPUB)', 49 => 'SVG' ); isInAdminGroup()) { return true; } } return false; } ?>get('Uhr'); $date .= $clock; } } else { return ''; } return $date; } # # buildShortDate nimmt die locale Einstellung und # den definierten ShortDateFormat und erzeugt damit # ein gueltiges Datum # function buildShortDate( $languageID = 1, $timestamp = NULL ) { $languageLocales = $GLOBALS['languageLocales']; $languageShortDateFormats = $GLOBALS['languageShortDateFormats']; return formatDate( $languageLocales[$languageID], $languageShortDateFormats[$languageID], $timestamp ); } # # buildNormalDate nimmt die locale Einstellung und # den definierten DateFormat und erzeugt damit # ein gueltiges Datum # function buildNormalDate( $languageID = 1, $timestamp = NULL ) { global $languageLocales; global $languageDateFormats; return 'T:' . $languageLocales[$languageID] . ' D: ' . $languageDateFormats[$languageID] . ' L:' . $languageID; // formatDate( $languageLocales[$languageID], $languageDateFormats[$languageID], $timestamp ); } # # formatDate benutzt keine globalen Daten mehr und bekommt alle # Daten direkt per Parameter uebergeben. Sollte nie direkt aufgerufen # werden, sondern nur ueber die vorher definierten Funktionen (build...Date) # aufgerufen werden. # function formatDate( $locale, $formatString, $timestamp = NULL ) { setlocale(LC_TIME, $locale ); if ( is_null($timestamp) ) { $timestamp = time(); } return date( $formatString, $timestamp ); } # # past prueft, ob ein Datum in der Vergangenheit liegt # function past($date, $time="") { if(!$time) { $time = "23.59"; } else { $time = str_replace(':', '.', $time); } $dateSplit = explode('-', $date); $timeSplit = explode('.', $time); $timestamp = mktime($timeSplit[0], $timeSplit[1], 0, $dateSplit[1], $dateSplit[2], $dateSplit[0]); return $timestamp < time(); } function olderThan($date, $dayCount) { $dateArr = explode("-", $date); $date = mktime(0, 0, 0, $dateArr[1], $dateArr[2], $dateArr[0]); if($date && time()-(60 * 60 * 24 * $dayCount) >= $date){ return true; } else { return false; } } /** Diese Funktion berechnet die Anzahl der Stunden pro Tag. Dies ist für die Sommer- bzw. Winterzeit notwendig, um auch dann die richtige Anzahl der Stunden (23 oder 25h) zu bekommen. Da die Umstellung immer nur im Maerz oder Oktober ist, werden nur diese beiden Monate berücksichtigt. Maerz & Oktober: 23 24 25 26 27 28 29 30 31 sa so mo di mi do fr sa so */ function hoursPerDay($timestamp) { $month = date('n', $timestamp); $result = 24; if ($month == 3) { // Winterzeit -> Sommerzeit $today = localtime ($timestamp, true); if($today['tm_wday'] == 0 && $today['tm_mday'] > 24) { // Umstellung ist immer am letzten Sonntag ('tm_wday' == 0 == Sonntag) $result = 23; } } elseif($month == 10) { // Sommerzeit -> Winterzeit $today = localtime ($timestamp, true); if($today['tm_wday'] == 0 && $today['tm_mday'] > 24) { // Umstellung ist immer am letzten Sonntag ('tm_wday' == 0 == Sonntag) $result = 25; } } return $result; } ?> 0 && substr($result, -1, 1) != '/') { $result .= '/'; } return $result; } /** ASCII Mask for emails */ function maskMail($content) { preg_match_all("/[a-z0-9_-]+(\.[a-z0-9_-]+)*@([0-9a-z][0-9a-z-]*[0-9a-z]\.)+([a-z]{2,6})/i", $content, $emails, PREG_PATTERN_ORDER); for($i=0; $igetUrl($pageId, $languageId); if ($url) { $ampersand = false; if (!is_null($formKey)) { $url .= '/' . $formKey . '.evo'; } } } // // URL erstellen, falls es keine Klarsicht URL gab // if (!$url) { $url = sprintf($urlPattern, (int)$pageId, (int)$languageId); if (!is_null($formKey)) { $parameters[EVO_FORMULAR_KEY] = $formKey; } } // // Parameter und Ampersand oder Question Mark // if (is_array($parameters) && count($parameters) > 0) { $elements = array(); foreach ($parameters as $key => $value) { if ($encodeParameter) { $key = urlencode($key); $value = urlencode($value); } $elements[] = $key . '=' . $value; } $url .= ($ampersand ? '&' : '?') . implode('&', $elements); } return $url; } /** UTF-8 Encoding für JSON */ function jsonUTF8Encode($aString) { if (EVO_HTML_ENCODING == 'utf-8') { return $aString; } return utf8_encode($aString); } /** * Gibt den Adminpfad zurück */ function evoWebAdminPath() { return evoWebPath() . 'admin/'; } /** * Gibt den Bilderpfad für den Adminbereich zurück */ function evoAdminImagesPath() { global $adminImagesPath; if (isset($adminImagesPath) && strlen($adminImagesPath) > 0) { return $adminImagesPath; } return evoWebPath() . 'admin/images/'; } /** * Gibt den AJAX Plugin Pfad zurück */ function evoAdminAjaxPath() { return evoWebPath() . 'admin/ajax/'; } /** * Ermittlung, ob ein Systemwert "wahr" ist */ function isTrue($value) { if (is_numeric($value)) { if (intval($value) > 0) { return true; } return false; } if (in_array(strtolower($value), array('on', 'true'))) { return true; } return false; } /** * Zielseite bzw. URL, an die eine Id angehangen werden kann */ function evoShowPageUrl() { return evoWebPath() . EVO_SHOW_PAGE_URL; } /** * Default Encoding oder gesetztes Encoding zurückgeben */ function getHtmlEncoding() { $result = 'utf-8'; if(defined('EVO_HTML_ENCODING') && strlen(EVO_HTML_ENCODING) > 0) { $result = EVO_HTML_ENCODING; } return $result; } /** Annoying Proxy ... */ function adminOutputHandler($aString, $flags) { return preg_replace_callback('/(href|src|background)=(\"|\')(.*?)(\"|\')/i', 'adminLinkParser', $aString); } function adminLinkParser($matches) { $original = array_shift($matches); $prefix = array_shift($matches) . '=' . array_shift($matches); $url = array_shift($matches); $suffix = array_shift($matches); $result = $prefix . $url . $suffix; // Die URL wird bei aktivierten EVO_PATH_PARSE_HTTP vor der Bearbeitung manipuliert und am Ende // wieder zusammengesetzt. // Lokale Verweise $urlLength = strlen($url); if ($urlLength > 0 && substr($url,0,1) == '#') { return $result; } // Alle Protokolle werden direkt zurueckgelieft if (preg_match('/^[a-z]+:\/\/.*/i', $url)) { return $result; } // // Extension kontrollieren, alles andere wird ignoriert // if (strlen($url) > 4) { $extension = strtolower(getExtension($url)); if (in_array($extension, array('js', 'css', 'jpg', 'png', 'gif'))) { if ($extension != 'gif') { $result = $prefix . $url . '?noproxy=' . time() . $suffix; } else { if (substr($url, -9) == 'pixel.gif') { return $result; } $result = $prefix . $url . '?noproxy=' . time() . $suffix; } } } return $result; } /** Anzahl der Bytes wird berechnet. Gültige Endungen sind 'G', 'M' und 'K'. Kann für ini_get Variablen verwendet werden. */ function returnBytes($value) { $result = null; if (in_array(strtolower(substr($value, -1)), array('k','m','g'))) { $bytes = intval(substr($value, 0, -1)); $type = strtolower(substr($value, -1)); if ($type == 'g') { $result = $bytes * 1073741824; } elseif ($type == 'm') { $result = $bytes * 1048576; } else { $result = $bytes * 1024; } } else { $result = $value; } return $result; } /** Die Anzahl der Bytes wird in einem für Menschen besser verständlichen Format ausgegeben. */ function humanizeFilesize($filesize) { $result = ''; if ($filesize > 1073741824) { $result = round($filesize / 1073741824, 2) . ' GB'; } elseif ($filesize > 1048576) { $result = round($filesize / 1048576, 2) . ' MB'; } elseif ($filesize > 1024) { $result = round($filesize / 1024, 2) . ' KB'; } else { $result = $filesize . ' Bytes'; } return $result; } /** * Schnippelt einen Text zurecht * @param string text Der zu beschneidende Text * @param integer maxlength Die Maximallaenge * @return string text Der beschnittene Text **/ function cutText($text, $maxLength) { $originalLength = strlen($text); if($maxLength == 0 || $maxLength >= $originalLength) { return $text; } $text = substr($text, 0, $maxLength + 1); /** Der Algorithmus sucht nach einem Leerzeichen oder Newline. Hier wird nun kontrolliert, ob diese Zeichen vorkommen. */ $hasWhitespace = false; $position = strpos($text, ' '); if ( $position !== FALSE ) { $hasWhitespace = true; } else { $position = strpos("\n", $text); if ( $position !== FALSE ) { $hasWhitespace = true; } } if ( $hasWhitespace ) { // Rueckwaerts bis Whitespace while(true) { $lastChar = substr($text, strlen($text)-1, 1); $text = substr($text, 0, strlen($text)-1); if($lastChar == " " || $lastChar == "\n") { break; } } } $lastChar = substr($text, strlen($text)-1, 1); while($lastChar == ",") { $text = substr($text, 0, strlen($text)-1); $lastChar = substr($text, strlen($text)-1, 1); } // Punkte? if((strlen($text) < $originalLength) && $lastChar != "." && $lastChar != "!" && $lastChar != "?") { $text .= "..."; } return $text; } /** * Umkehrmethode von nl2br * @param string Umzuwandelnder Text * @return string Umgewandelter Text **/ function convertBr2Nl($text) { return str_replace("<br />", "", $text); } function convertNl2Br($text) { return nl2br($text); } function convertHtmlToText($string) { for($i=162;$i<256;$i++) { $string = str_replace(htmlentities(chr($i)), chr($i), $string); } return $string; } function convertTextToHtml($string) { for($i=162;$i<256;$i++) { $string = str_replace(chr($i), htmlentities(chr($i)), $string); } return $string; } function replaceSpecialChars( $aString ) { # # Ersetzt ein paar Sonderzeichnen. # $search = array( 'ä', 'Ä', 'ä', 'Ä', 'ü', 'Ü', 'ü', 'Ü', 'ö', 'Ö', 'ö', 'Ö', 'ß', ' ' ); $replace = array( 'ae', 'Ae', 'ae', 'Ae', 'ue', 'Ue', 'ue', 'Ue', 'oe', 'Oe', 'oe', 'Oe', 'ss', '_' ); return str_replace($search, $replace, $aString); } function replaceAppleChars( $aString ) { # # Ersetzt ein paar Sonderzeichnen. # $search = array( 'ä', 'Ä', 'ü', 'Ü', 'ö', 'Ö' ); $replace = array( 'ä', 'Ä', 'ü', 'Ü', 'ö', 'Ö' ); return str_replace($search, $replace, $aString); } function replaceAngleBracket( $aString ) { # # Ersetzt ein paar Sonderzeichnen. # $search = array( '>', '<' ); $replace = array( '>', '<' ); return str_replace($search, $replace, $aString); } # # Ersetzt alle Tags, ausser die in $allowedTagsInWebForms # definiert wurden. # function replaceUnwantedTags( $aString ) { global $allowedTagsInWebForms; $allowedTags = explode(',', $allowedTagsInWebForms); $search = array(); $replace = array(); for($i = 0; $i < count($allowedTags); $i++) { $replace[] = trim($allowedTags[$i]); $search[] = htmlspecialchars($replace[$i]); } # # Alles wird übersetzt, anschliessend werden die erlaubten Tags # wieder zurückgesetzt # $result = htmlspecialchars($aString, ENT_QUOTES); return str_replace($search, $replace, $result); } # # Ersetzt die ueblichen vor Link, Link , nach Link if Abfragen # function buildAnchor( $link, $linkName, $isLink = true, $target = NULL, $class = NULL ) { $result = ''; if ( $isLink ) { $result .= " $value ) { $result .= '