From 7d8bc5f6744b27aa6179358ce5b99b9341da839b Mon Sep 17 00:00:00 2001 From: Oldperl <44996956+oldperl@users.noreply.github.com> Date: Sat, 15 Feb 2020 14:04:42 +0100 Subject: [PATCH] Delete spider-it.functions.inc.php --- cms/includes/spider-it.functions.inc.php | 859 ----------------------- 1 file changed, 859 deletions(-) delete mode 100644 cms/includes/spider-it.functions.inc.php diff --git a/cms/includes/spider-it.functions.inc.php b/cms/includes/spider-it.functions.inc.php deleted file mode 100644 index 3803fdb..0000000 --- a/cms/includes/spider-it.functions.inc.php +++ /dev/null @@ -1,859 +0,0 @@ - - * @copyright Spider IT Deutschland - * @license MIT - * (see below) - * @link http://www.Spider-IT.de - * @link http://www.conlite.org - * @link http://www.contenido.org - * - * @file spider-it.functions.inc.php - * @version 1.2 - * @date 2012-11-21 - * - * {@internal - * created 2012-09-14 - * modified 2012-10-10 - * modified 2012-10-14 - * modified 2012-10-22 - * modified 2012-10-24 - * modified 2012-10-30 - * modified 2012-11-21 - * - * $Id$: - * } - * - */ - -/* - * Copyright (c) 2012 Spider IT Deutschland - * - * Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated - * documentation files (the "Software"), to deal in the Software without restriction, including without - * limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the - * Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all copies or substantial portions - * of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED - * TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL - * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF - * CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER - * DEALINGS IN THE SOFTWARE. - * - * - * Hiermit wird unentgeltlich, jeder Person, die eine Kopie der Software und der zugehörigen Dokumentationen (die - * "Software") erhält, die Erlaubnis erteilt, sie uneingeschränkt zu benutzen, inklusive und ohne Ausnahme, dem - * Recht, sie zu verwenden, kopieren, ändern, fusionieren, verlegen, verbreiten, unterlizenzieren und/oder zu - * verkaufen, und Personen, die diese Software erhalten, diese Rechte zu geben, unter den folgenden Bedingungen: - * - * Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien oder Teilkopien der Software - * beizulegen. - * - * DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT, EINSCHLIESSLICH DER GARANTIE - * ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT - * DARAUF BESCHRÄNKT. IN KEINEM FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE - * ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES ODER ANDERS IM ZUSAMMENHANG - * MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE ENTSTANDEN. - */ - -# Functions in this file: -# debug() -# sitCascadedArraySort() -# sitConvertCmykJpgToSrgbJpg() -# sitExplodeAssociative() -# sitExplodeCascading() -# sitExplodeLines() -# sitGetFilesInDirectory() -# sitGetImageDescription() -# sitGetRemoteContentToFile() -# sitGetSubdirs() -# sitImgScale() -# sitMoveAllUploadFiles() -# sitSafeStringEscape() -# sitSendHtmlMail() -# sitSetClientProperty() -# sitTeaserText() - -if (!defined('CON_FRAMEWORK')) { - die('Illegal call'); -} - -# debug() -# -# Zeigt Debugging-Informationen auf der Webseite -# -# Parameter: -# $value - Der anzuzeigende Wert -# $type - Der Typ des Wertes (optional) -# Möglichkeiten: -# '' - Text / Array / Object -# 'sql' - SQL-Anweisungen (Aufruf sollte nach $db->query() erfolgen) -# -# Der Wert wird aufbereitet per echo auf der Webseite -# ausgegeben, wobei die Funktion selbstständig zwischen -# einzelnen Werte, Arrays und Objekte unterscheidet. -# Der 2. Parameter $type dient besondere Fälle, wie z.B. -# 'sql' für SQL-Anweisungen, welche dann individuell -# aufbereitet werden. -function debug($value, $type = '') { - global $db, $debug; - - if ($debug) { - echo '
'; - switch (strtolower($type)) { - case 'sql': - echo '
' . str_replace(array(str_repeat(chr(32), 4), chr(9)), '', $value) . '
Records: ' . intval(@$db->num_rows()); - break; - default: - if (is_array($value)) { - echo '
'; var_dump($value); echo '
'; - } elseif (is_object($value)) { - echo 'Object:
'; var_dump($value); echo '
'; - } else { - echo $value; - } - break; - } - echo '
'; - } -} - -# sitCascadedArraySort() -# -# Sortiert ein kaskadiertes Array nach Spalten -# -# Parameter: -# Zu sortierendes Array -# Liste aus Feldnamen, Sortierarten und Sortierrichtungen (siehe -# array_multisort, de.php.net/manual/de/function.array-multisort.php) -# -# Sortiert ein mehrdimentionales Array nach den angegebenen Spalten -# nach den vorgegebenen Sortierarten und -richtungen (je Spalte anzugeben) -# Beispiel: -# $x = sitCascadedArraySort($x, 'Name', SORT_STRING, SORT_ASC, 'Vorname', SORT_STRING, SORT_ASC); -function sitCascadedArraySort() { - $args = func_get_args(); - $marray = array_shift($args); - if (count($marray)) { - $msortline = 'return(array_multisort('; - foreach ($args as $arg) { - $i ++; - if (is_string($arg)) { - foreach ($marray as $row) { - $sortarr[$i][] = $row[$arg]; - } - } else { - $sortarr[$i] = $arg; - } - $msortline .= '$sortarr['.$i.'],'; - } - $msortline .= '$marray));'; - eval($msortline); - } - return $marray; -} - -# sitConvertCmykJpgToSrgbJpg() -# -# Wandelt JPG-Bilder mit CMYK Farbprofil in sRGB Farbprofil um -# -# Parameter: -# $path - Kompletter Pfad zum Bild -# -# Da der Internet Explorer keine JPG-Bilder (.jpg / .jpeg) mit CMYK Farbprofil -# darstellen kann, müssen diese Bilder in das sRGB Farbprofil (für das Web) -# umgewandelt werden. Diese Funktion prüft das Bild und wandelt es ggf. um. -function sitConvertCmykJpgToSrgbJpg($path) { - if ((strtolower(substr($path, -4)) == '.jpg') || (strtolower(substr($path, -5)) == '.jpeg')) { - exec('identify -verbose ' . $path . ' >' . $path . '.txt'); - $tmp = file($path . '.txt'); - unlink($path . '.txt'); - for ($i = 0, $n = count($tmp); $i < $n; $i ++) { - $a = explode(':', $tmp[$i]); - if (trim($a[0]) == 'Colorspace') { - if (strpos($a[1], 'RGB') === false) { - # Bild ist in CMYK - exec('convert ' . $path . ' -profile sRGB.icc -colorspace sRGB ' . $path . '.jpg'); - unlink($path); - rename($path . '.jpg', $path); - } - break; - } - } - } -} - -# sitExplodeAssociative() -# -# Zerlegt eine Zeichenfolge in ein assoziatives Array. -# -# Parameter: -# $delimiter - Array mit Trennzeichen zum Zerlegen der Zeichenfolge -# $string - Zu zerlegende Zeichenfolge -# -# Das erste Trennzeichen bildet das Array, das zweite Trennzeichen -# splittet auf Key und Value. -function sitExplodeAssociative($delimiters = array(), $string = '') { - $tmp = explode($delimiters[0], $string); - $ret = array(); - for ($i = 0, $n = count($tmp); $i < $n; $i ++) { - $t = explode($delimiters[1], $tmp[$i]); - $ret[$t[0]] = $t[1]; - } - return $ret; -} - -# sitExplodeCascading() -# -# Zerlegt eine Zeichenfolge in ein kaskadiertes Array. -# -# Parameter: -# $delimiter - Array mit Trennzeichen zum Zerlegen der Zeichenfolge -# $string - Zu zerlegende Zeichenfolge -# -# Das erste Trennzeichen bildet das Hauptarray, jedes weitere -# Trennzeichen darin ein Unterarray (mehrere Ebenen). -function sitExplodeCascading($delimiters = array(), $string = '') { - $tmp = explode($delimiters[0], $string); - array_shift($delimiters); - for ($i = 0, $n = count($tmp); $i < $n; $i ++) { - $tmp[$i] = sitMultipleExplode($delimiters, $tmp[$i]); - } - return $tmp; -} - -# sitExplodeLines() -# -# Zerlegt einen Text in einzelnen Zeilen -# -# Parameter: -# $string - Zu zerlegende Zeichenfolge -# -# Zerlegt den Text unabhängig der Zeilenumbruchart in ein Array -# mit den einzelnen Zeilen. -function sitExplodeLines($string) { - return explode("\n", str_replace("\r\n", "\n", $string)); -} - -# sitGetFilesInDirectory() -# -# Liest Dateien in ein Verzeichnis -# -# Parameter: -# $path - Kompletter Pfad des zu lesenden Verzeichnisses -# $filter - Filter für gefundenen Dateien (optional) -# $sort - Sortierreihenfolge (optional) -# -# Liest die Dateien in ein Verzeichnis und filtert und sortiert diese bei Bedarf. -# $filter kann ein Array mit mehrere Filter sein, z.B. array('*.jp*g', '*.gif', '*.png'). -# $sort kann 'asc', 'desc', SORT_ASC oder SORT_DESC sein, oder weggelassen werden. -function sitGetFilesInDirectory($path, $filter = '*', $sort = '') { - define('FNM_CASEFOLD', 16); - $aFiles = array(); - if (is_dir($path)) { - if (!is_array($filter)) { - $filter = array($filter); - } - if ($oDir = opendir($path)) { - while (($sFile = readdir($oDir)) !== false) { - if (is_dir($path . $sFile)) { - continue; - } else { - for ($i = 0, $n = count($filter); $i < $n; $i ++) { - if (fnmatch($filter[$i], $sFile, FNM_CASEFOLD)) { - $aFiles[] = $sFile; - break; - } - } - } - } - closedir($oDir); - if (strlen($sort)) { - sort($aFiles, SORT_STRING); - if (($sort == 'desc') || ($sort == SORT_DESC)) { - $aFiles = array_reverse($aFiles); - } - } - } - } - return $aFiles; -} - -# sitGetImageDescription() -# -# Liest die Bildbeschreibung aus der Datenbank -# -# Parameter: -# $idupl - ID des Bildeintrags in der Datenbank -# -# Liest die zum Bild gehörenden Beschreibung entweder aus der Tabelle ..._upl_meta -# oder (falls leer) aus der Tabelle ..._upl und liefert diese zurück. -function sitGetImageDescription($idupl) { - global $db, $cfg; - - $sDesc = ''; - $sql = 'SELECT description - FROM ' . $cfg['tab']['upl_meta'] . ' - WHERE (idupl=' . $idupl . ')'; - $db->query($sql); - if ($db->next_record()) { - $sDesc = urldecode(str_replace(array('%0D%0A', '%0D', '%0A'), '
', $db->f('description'))); - } - if (strlen(trim($sDesc)) == 0) { - $sql = 'SELECT description - FROM ' . $cfg['tab']['upl'] . ' - WHERE (idupl=' . $idupl . ')'; - $db->query($sql); - if ($db->next_record()) { - $sDesc = $db->f('description'); - } - } - return $sDesc; -} - -# sitGetRemoteContentToFile() -# -# Holt entfernten Inhalt ab und speichert diesen lokal -# -# Parameter: -# $url - Die Adresse von wo der Inhalt geholt werden soll -# $file - Die Datei in der gespeichert werden soll (inkl. Pfad) -# $errno - Die Fehlernummer (Rückgabe) -# $errmsg - Die Fehlerbeschreibung (Rückgabe) -# -# Die Daten (Webseite, Bild, Feed usw) werden per cURL geholt, -# wobei Weiterleitungen gefolgt werden. -# Diese Methode ist unabhängig von allow_url_fopen und verarbeitet -# auch Anfragen per https (SSL). -function sitGetRemoteContentToFile($url, $file, $errno, $errmsg) { - $options = array( - CURLOPT_RETURNTRANSFER => true, // return web page - CURLOPT_HEADER => false, // don't return headers - CURLOPT_FOLLOWLOCATION => true, // follow redirects - CURLOPT_ENCODING => "", // handle compressed - CURLOPT_USERAGENT => "spider", // who am i - CURLOPT_AUTOREFERER => true, // set referer on redirect - CURLOPT_CONNECTTIMEOUT => 10, // timeout on connect - CURLOPT_TIMEOUT => 10, // timeout on response - CURLOPT_MAXREDIRS => 10, // stop after 10 redirects - ); - - $ch = curl_init($url); - curl_setopt_array($ch, $options); - $content = curl_exec($ch); - $errno = curl_errno($ch); - $errmsg = curl_error($ch); - $header = curl_getinfo($ch); - curl_close($ch); - - if (($errno == 0) && ($header['http_code'] == 200)) { - # Content in Datei speichern - if ($fp = fopen($file, 'w')) { - fputs($fp, $content); - fclose($fp); - return true; - } else { - $errno = -1; - $errmsg = 'Can\'t write to file ' . $file; - return false; - } - } else { - return false; - } -} - -# sitGetSubdirs() -# -# Listet Unterverzeichnisse eines Verzeichnisses -# -# Parameter: -# $dir - Übergeordnetes Verzeichnis -# $levels - Anzahl Ebenen an Unterverzeichnisse die mit aufgelistet werden sollen -# $__dirs - interner Parameter für Rekursion -# -# Listet die Unterverzeichnisse eines Verzeichnisses inkl. aller Unterverzeichnisse -# bis zu der angegebenen Anzahl an Ebenen (die Tiefe). -function sitGetSubdirs($dir, $levels = 1, $__dirs = array()) { - $a = array(); - $p = opendir($dir); - while (($s = readdir($p)) !== false) { - if (($s == '.') || ($s == '..')) { - continue; - } - if (is_dir($dir . ((substr($dir, -1) == '/') ? '' : '/') . $s)) { - $a[] = $dir . ((substr($dir, -1) == '/') ? '' : '/') . $s . '/'; - } - } - closedir($p); - sort($a, SORT_STRING); - for ($i = 0; $i < count($a); $i ++) { - $__dirs[] = $a[$i]; - if ($levels > 1) { - $__dirs = sitGetSubdirs($a[$i], ($levels - 1), $__dirs); - } - } - return $__dirs; -} - -# sitImgScale() -# -# Skaliert oder zoomt ein Bild auch mit Transparenz -# -# Parameter: -# $img - Pfad und Dateiname der Originaldatei relativ zum Mandantenverzeichnis -# $maxX - Maximale Breite des neuen Bildes -# $maxY - Maximale Höhe des neuen Bildes -# $crop - Bild darf beschnitten werden (optional) -# $expand - Bild darf vergrößert werden -# $cacheTime - Ältere Version nutzen oder überschreiben -# $wantHQ - Bild soll in hoher Qualität sein -# $quality - Qualität bei JPG und GIF -# $keepType - Dateityp beibehalten -# $fixedSize - Zielbild wird auf angegebene Größe erstellt und transparent (GIF und PNG) gefüllt -# $fixedBG - Bei $fixedSize und JPG wird dies die Hintergrundfarbe des umgebenden Bereichs -# -# Erstellt im cache Verzeichnis eine skalierte Version des Originalbildes -# wie auch die Con-Funktion capiImgScale(), aber behält Transparenz in GIF -# und PNG Bilder bei. Der zusätzliche Parameter $fixedSize ermöglicht es, -# das Zielbild mit fixe Abmessungen zu erstellen und das skalierte Bild -# darin zu zentrieren, wobei der umgebenden Bereich bei GIF und PNG Bilder -# transparent, bei JPG Bilder mit der in $fixedBG angegebenen Farbe gefüllt -# wird. Ist $fixedBG nicht angegeben, wird weiß (#FFF) angenommen. -function sitImgScale($img, $maxX = 0, $maxY = 0, $crop = false, $expand = false, $cacheTime = 10, $wantHQ = true, $quality = 75, $keepType = false, $fixedSize = false, $fixedBG = 'FFFFFF') { - global $cfgClient, $client, $lang; - - if (($maxX <= 0) && ($maxY <= 0)) { - return false; - } - - # Cache - $md5 = capiImgScaleGetMD5CacheFile($img, $maxX, $maxY, $crop, $expand); - list($oWidth, $oHeight, $oType) = @getimagesize($cfgClient[$client]['path']['frontend'] . $img); - switch ($oType) { - case IMAGETYPE_GIF: - $cfileName = $md5 . '.gif'; - break; - case IMAGETYPE_JPEG: - if ($keepType) { - $cfileName = $md5 . '.jpg'; - } else { - $cfileName = $md5 . '.png'; - } - break; - case IMAGETYPE_PNG: - $cfileName = $md5 . '.png'; - break; - default: - return false; - } - $cacheFile = $cfgClient[$client]['path']['frontend'] . 'cache/' . $cfileName; - $webFile = $cfgClient[$client]['path']['htmlpath'] . 'cache/' . $cfileName; - if (file_exists($cacheFile)) { - if ($cacheTime == 0) { - # Datei läuft nicht ab, also direkt ausgeben - return $webFile; - } elseif ((filemtime($cacheFile) + (60 * $cacheTime)) < time()) { - # Datei ist abgelaufen - unlink($cacheFile); - } else { - # Datei ist noch nicht abgelaufen - return $webFile; - } - } - - # Bild neu aufbauen - $nLeft = 0; - $nTop = 0; - $nWidth = 0; - $nHeight = 0; - if ($fixedSize) { - $iWidth = $maxX; - $iHeight = $maxY; - # Abmessung und Position in neues Bild berechnen - if (($oWidth > $maxX) || ($oHeight > $maxY) || ($expand)) { - # Bild ist größer oder soll vergrößert werden - if ($crop) { - $faktor = max($maxX / $oWidth, $maxY / $oHeight); - } else { - $faktor = min($maxX / $oWidth, $maxY / $oHeight); - } - if ($faktor == ($maxX / $oWidth)) { - $nLeft = 0; - $nWidth = $maxX; - $nHeight = floor($oHeight * $faktor); - $nTop = floor(($maxY - $nHeight) / 2); - } else { - $nTop = 0; - $nHeight = $maxY; - $nWidth = floor($oWidth * $faktor); - $nLeft = floor(($maxX - $nWidth) / 2); - } - } else { - $nLeft = floor(($maxX - $oWidth) / 2); - $nTop = floor(($maxY / $oHeight) / 2); - $nWidth = $oWidth; - $nHeight = $oHeight; - } - } else { - # Abmessung des neuen Bildes berechnen - if (($oWidth > $maxX) || ($oHeight > $maxY) || ($expand)) { - if ($crop) { - $faktor = max($maxX / $oWidth, $maxY / $oHeight); - } else { - $faktor = min($maxX / $oWidth, $maxY / $oHeight); - } - if ($faktor == ($maxX / $oWidth)) { - $nWidth = $maxX; - $nHeight = floor($oHeight * $faktor); - $iWidth = $maxX; - $iHeight = (($nHeight > $maxY) ? $maxY : $nHeight); - $nTop = (($nHeight > $maxY) ? floor(($maxY - $nHeight) / 2) : 0); - } else { - $nHeight = $maxY; - $nWidth = floor($oWidth * $faktor); - $iHeight = $maxY; - $iWidth = (($nWidth > $maxX) ? $maxX : $nWidth); - $nLeft = (($nWidth > $maxX) ? floor(($maxX - $nWidth) / 2) : 0); - } - } else { - # Bild ist kleiner und soll nicht vergrößert werden - $iWidth = $nWidth = $oWidth; - $iHeight = $nHeight = $oHeight; - } - } - # Bild einlesen - switch ($oType) { - case IMAGETYPE_GIF: - $image = imagecreatefromgif($img); - break; - case IMAGETYPE_JPEG: - $image = imagecreatefromjpeg($img); - break; - case IMAGETYPE_PNG: - $image = imagecreatefrompng($img); - break; - default: - return false; - } - # Neues Bild erzeugen und Hintergrundfarbe einstellen - $nImage = imagecreatetruecolor($iWidth, $iHeight); - if (($oType == IMAGETYPE_GIF) || ($oType == IMAGETYPE_PNG)) { - $transIdx = imagecolortransparent($image); - if ($transIdx >= 0) { - # Es gibt eine transparente Farbe (GIF oder PNG8) - $transColor = imagecolorsforindex($image, $transIdx); - $transIdx = imagecolorallocate($nImage, $transColor['red'], $transColor['green'], $transColor['blue']); - imagefill($nImage, 0, 0, $transIdx); - imagecolortransparent($nImage, $transIdx); - } elseif ($oType == IMAGETYPE_PNG) { - # Ein PNG24 kriegt ein transparenter Hintergrund per Alpha-Kanal - imagealphablending($nImage, false); - $oColor = imagecolorallocatealpha($nImage, 0, 0, 0, 127); - imagefill($nImage, 0, 0, $oColor); - imagesavealpha($nImage, true); - } - } else { -$debug = 1; - if ($keepType) { - # Andere Bilder (JPG) kriegen eine Hintergrundfarbe - $oColor = imagecolorallocate($nImage, hexdec(substr($fixedBG, 0, 2)), hexdec(substr($fixedBG, 2, 2)), hexdec(substr($fixedBG, 4, 2))); -#debug('imagecolorallocate($nImage, ' . hexdec(substr($fixedBG, 0, 2)) . ', ' . hexdec(substr($fixedBG, 2, 2)) . ', ' . hexdec(substr($fixedBG, 4, 2)) . ') = ' . $oColor); -# imagefill($nImage, 0, 0, $oColor); - imagefilledrectangle($nImage, 0, 0, $iWidth, $iHeight, $oColor); - } else { - # JPG-Bilder werden in PNG24 umgewandelt - $oType = IMAGETYPE_PNG; - imagealphablending($nImage, false); - $oColor = imagecolorallocatealpha($nImage, 0, 0, 0, 127); -# imagefill($nImage, 0, 0, $oColor); - imagefilledRectangle($nImage, 0, 0, $iWidth, $iHeight, $oColor); - imagesavealpha($nImage, true); - } - } - # Das Originalbild skaliert hinein kopieren - imagecopyresampled($nImage, $image, $nLeft, $nTop, 0, 0, $nWidth, $nHeight, $oWidth, $oHeight); - # Das neue Bild speichern - switch ($oType) { - case IMAGETYPE_GIF: - imagegif($nImage, $cacheFile); - break; - case IMAGETYPE_JPEG: - imagejpeg($nImage, $cacheFile); - break; - case IMAGETYPE_PNG: - imagepng($nImage, $cacheFile); - break; - } - # Aufräumen - imagedestroy($image); - imagedestroy($nImage); - # Pfad zurück liefern - return $webFile; -} - -# sitMoveAllUploadFiles() -# -# Verschiebt alle Dateien eines Verzeichnisses -# -# Parameter: -# $source - Quellverzeichnis -# $dest - Zielverzeichnis -# -# Verschiebt alle Dateien eines Verzeichnisses im Upload-Bereich (unter /upload/) -# und passt die Einträge in der Datenbank entsprechend an. -function sitMoveAllUploadFiles($source, $dest) { - global $cfgClient, $client, $db, $cfg; - - $source .= ((substr($source, -1) == '/') ? '' : '/'); - $dest .= ((substr($dest, -1) == '/') ? '' : '/'); - - $a = array(); - $p = opendir($cfgClient[$client]['upl']['path'] . $source); - while (($s = readdir($p)) !== false) { - if (is_dir($cfgClient[$client]['upl']['path'] . $source . $s)) { - continue; - } elseif (strlen($s) > 2) { - $a[] = $s; - } - } - for ($i = 0, $n = count($a); $i < $n; $i ++) { - rename($cfgClient[$client]['upl']['path'] . $source . $a[$i], $cfgClient[$client]['upl']['path'] . $dest . $a[$i]); - $sql = 'UPDATE ' . $cfg['tab']['upl'] . ' - SET dirname = "' . $dest . '" - WHERE ((dirname="' . $source . '") - AND (filename="' . $a[$i] . '"))'; - $db->query($sql); - } -} - -# sitSafeStringEscape() -# -# Escaped eine Zeichenfolge für SQL-Anweisungen -# -# Parameter: -# $string - Zu escapenden Zeichenfolge -# -# Escaped eine Zeichenfolge so, dass diese sicher in die Datenbank eingetragen -# werden kann. -function sitSafeStringEscape($string) { - $escapeCount = 0; - $targetString = ''; - for($offset = 0; $offset < strlen($string); $offset ++) { - switch ($c = $string{$offset}) { - case "'": - if ($escapeCount % 2 == 0) { - $targetString .= "\\"; - } - $escapeCount = 0; - $targetString .= $c; - break; - case '"': - if ($escapeCount % 2 == 0) { - $targetString .= "\\"; - } - $escapeCount = 0; - $targetString .= $c; - break; - case '\\': - $escapeCount ++ ; - $targetString .= $c; - break; - default: - $escapeCount = 0; - $targetString .= $c; - } - } - return $targetString; -} - -# sitSendHtmlMail() -# -# Sendet eine HTML-Mail mit HTML- und Textteil -# -# Parameter: -# $html - HTML-Teil der Mail -# $subject - Betreffzeile der Mail -# $receipients - Array von Empfänger ('name' und 'email', mehrere möglich) -# $attachments - Dateipfad oder Array von Dateipfade für Anhänge (optional) -# $sname - Absendername (optional) -# $smail - Absenderadresse (optional) -# $mailer - Versandmethode ('mail' / 'qmail' / 'sendmail' / 'smtp') (optional) -# $sserver - SMTP-Server Adresse (optional) -# $slogin - SMTP Login (optional) -# $spass - SMTP Passwort (optional) -# $sport - SMTP Port (optional) -# -# Sendet eine HTML-Mail mit HTML- und Textteil an einen oder mehrere Empfänger -# mit keinen oder mehrere Anhänge und liefert den Erfolgsstatus zurück. -# Die Angaben zum Absender und den Mailer werden, sofern sie nicht mit angegeben -# sind, aus den Mandanten- bzw. Systemeinstellungen ausgelesen. -# - email - absende-name -# - email - absender-email -# - email - mailer -# - email - smtp-server -# - email - smtp-login -# - email - smtp-passwort -# - email - smtp-port - 25 -# Die Empfänger werden als Array aus Name(n) und Email-Adresse(n) übergeben. -# Beispiel 1: array('name' => 'xyz', 'email' => 'xyz@abc.de'); -# Beispiel 2: array(array('name' => 'xyz', 'email' => 'xyz@abc.de'), array('name'... -function sitSendHtmlMail($html, $subject, $receipients, $attachments = '', $sname = '', $smail = '', $mailer = '', $sserver = '', $slogin = '', $spass = '', $sport = '') { - # Eingaben ergänzen - if (!is_array($attachments)) { - $attachments = array($attachments); - } - $sname = ((strlen($sname)) ? $sname : getEffectiveSetting('email', 'absender-name')); - $smail = ((strlen($smail)) ? $smail : getEffectiveSetting('email', 'absender-email')); - if (strlen($sname) == 0) { - $sname = $smail; - } - $mailer = strtolower(((strlen($mailer)) ? $mailer : getEffectiveSetting('email', 'mailer'))); - if (strlen($mailer) == 0) { - $mailer = 'mail'; - } - if ($mailer == 'smtp') { - $sserver = ((strlen($sserver)) ? $sserver : getEffectiveSetting('email', 'smtp-server')); - $slogin = ((strlen($slogin)) ? $slogin : getEffectiveSetting('email', 'smtp-login')); - $spass = ((strlen($spass)) ? $spass : getEffectiveSetting('email', 'smtp-passwort')); - $sport = intval(((strlen($sport)) ? $sport : getEffectiveSetting('email', 'smtp-port'))); - if ($sport == 0) { - $sport = 25; - } - } - # Prüfen, ob genügend Angaben vorliegen - if ((strlen($html) == 0) || (strlen($subject) == 0)) { - return false; - } - if ((!is_array($receipients)) || ((strlen($receipients['email']) == 0) && (strlen($receipients[0]['email']) == 0))) { - return false; - } - if (strlen($smail) == 0) { - return false; - } - if (($mailer == 'smtp') && ((strlen($sserver) == 0) || (strlen($slogin) == 0) || (strlen($spass) == 0))) { - return false; - } - # Mail aufbereiten und versenden - $oMail = new PHPMailer(); - $oMail->IsHTML(true); - $oMail->Mailer = $mailer; - if ($mailer == 'smtp') { - $oMail->SMTPAuth = true; - $oMail->Host = $sserver; - $oMail->Port = $sport; - $oMail->Username = $slogin; - $oMail->Password = $spass; - } - $oMail->Subject = $subject; - $oMail->From = $smail; - $oMail->FromName = $sname; - if (is_array($receipients[0])) { - for ($i = 0, $n = count($receipients); $i < $n; $i ++) { - if (strlen($receipients[$i]['email'])) { - $oMail->AddAddress($receipients[$i]['email'], ((strlen($receipients[$i]['name'])) ? $receipients[$i]['name'] : $receipients[$i]['email'])); - } - } - } else { - $oMail->AddAddress($receipients['email'], ((strlen($receipients['name'])) ? $receipients['name'] : $receipients['email'])); - } - $oMail->Body = $html; - # Nur-Text-Bereich --> - $sMsg = substr($html, strpos($html, '', '
', '
'), array('', "

\n\n", "\n", "\n"), $sMsg); - $sMsg = trim(strip_tags($sMsg)); - $sMsg = explode("\n", $sMsg); - for ($i = 0, $n = count($sMsg); $i < $n; $i ++) { - $sMsg[$i] = trim($sMsg[$i]); - } - $sMsg = implode("\n", $sMsg); - $sMsg = html_entity_decode($sMsg); - $sMsg = capiStrReplaceDiacritics($sMsg); - # <-- Nur-Text-Bereich - $oMail->AltBody = $sMsg; - for ($i = 0, $n = count($attachments); $i < $n; $i ++) { - if (is_file($attachments[$i])) { - $oMail->AddAttachment($attachments[$i]); - } - } - $oMail->WordWrap = 76; - return $oMail->Send(); -} - -# sitSetClientProperty() -# -# Speichert eine Mandanteneinstellung -# -# Parameter: -# $type - Typ des Entrags (Text) -# $name - Name des Eintrags -# $value - Wert des Eintrags (Text) -# -# Speichert ein Eintrag in den Mandanteneinstellungen, überschreibt dabei -# eine gleichnamige vorhandene Einstellung. -function sitSetClientProperty($type, $name, $value) { - global $client, $cfg; - - if ((strlen($type)) && (strlen($name))) { - $type = sitSafeStringEscape($type); - $name = sitSafeStringEscape($name); - $value = sitSafeStringEscape($value); - $db = new DB_Contenido(); - $sql = 'SELECT value - FROM ' . $cfg['tab']['properties'] . ' - WHERE ((idclient=' . $client . ') - AND (itemtype="clientsetting") - AND (type="' . $type . '") - AND (name="' . $name . '"))'; - $db->query($sql); - if ($db->next_record()) { - $sql = 'UPDATE ' . $cfg['tab']['properties'] . ' - SET value = "' . $value . '", - modified = "' . date('Y-m-d H:i:n') . '", - modifiedby = "' . $auth->auth['uid'] . '" - WHERE ((idclient=' . $client . ') - AND (itemtype="clientsetting") - AND (type="' . $type . '") - AND (name="' . $name . '"))'; - } else { - $sql = 'INSERT INTO ' . $cfg['tab']['properties'] . ' (idclient, itemtype, itemid, type, name, value, author, created, modified, modifiedby) - VALUES (' . $client . ', "clientsetting", 1, "' . $type . '", "' . $name . '", "' . $value . '", "' . $auth->auth['uid'] . '", "' . date('Y-m-d H:i:n') . '", "' . date('Y-m-d H:i:n') . '", "' . $auth->auth['uid'] . '")'; - } - $db->query($sql); - } -} - -# sitTeaserText() -# -# Teasert einen Text an -# -# Parameter: -# $text - Zu teasernden Text -# $maxlength - Maximale Länge des Textes -# -# Der Text wird auf die maximale Anzahl Zeichen gekürzt, wobei der Schnitt nicht -# mitten im Wort erfolgt, sondern davor. -# Zuvor werden aus dem Text noch alle HTML-Tags entfernt. -# Wenn der Text gekürzt wird (nur wenn der Text länger als der maximalen Anzahl -# Zeichen ist), wird ein HTML-Zeichen … (...) angehängt. -function sitTeaserText($text, $maxlength) { - $sText1 = strip_tags(str_replace(array("\r\n", "\n"), ' ', $text)); - $sText2 = capiStrTrimAfterWord($sText1, intval($maxlength)); - if (strlen($sText2) < strlen($sText1)) { - $sText2 .= '…'; - } - return $sText2; -} -?> \ No newline at end of file