Subversion-Projekte lars-tiefland.php_share

Revision

Blame | Letzte Änderung | Log anzeigen | RSS feed

<?php

    //$Id: mail_func.php 763 2011-10-13 08:06:44Z tiefland $

    /**
     * @author Lars Tiefland <tiefland@weban.de>
     * @copyright 2009 Webagentur Niewerth
     * @package content-management
     * @version $Rev: 763 $
     * @license propietary
     * @filesource
     * 
     */

    /**
     * 
     * @author Lars Tiefland <tiefland@weban.de>
     * @copyright 2009 Webagentur Niewerth
     * @package content-management
     */

    if ( !defined( "__USE_MDB2__" ) )
    {
        define( "__USE_MDB2__", false );
    }
    require_once ( "fpdf/fpdf.php" );
    class PDF extends FPDF
    {
        //Page header
        function Header()
        {
        }

        //Page footer
        function Footer()
        {
        }
    }

    function create_html_pdf( $bestell_id, $adminMail, $mailto, $body, $art, $ln =
        1, $site, $user = "", $db = "" )
    {
        if ( empty( $user ) )
        {
            $user = $_SERVER["PHP_AUTH_USER"];
        }
        $date = date( "Y-m-d_H-i" );
        $f_name = $art . "_" . $bestell_id . "_" . $date . "_" . $ln . ".html";
        $f = fopen( "images/dokumente/" . $f_name, "w" );
        fwrite( $f, $body );
        fclose( $f );
        if ( $db )
        {
            $db .= ".";
        }
        $table = $db . "dokumente";
        $GLOBALS["user"] = $user;
        save_document( $f_name, $bestell_id, $table );
        return true;
    }

    function save_document( $f_name, $bestell_id, $table = "dokumente", $b_table =
        "Bestellung" )
    {
        if ( empty( $GLOBALS["user"] ) )
        {
            $GLOBALS["user"] = $_SERVER["PHP_AUTH_USER"];
        }
        $sql = "
            REPLACE INTO 
                $table 
                (
                    table_foreign, 
                    row_foreign, 
                    data_foreign, 
                    document, 
                    letzte_Aenderung_am, 
                    letzte_Aenderung_von
                )
                VALUES
                (
                    '$b_table', 
                    'ID', 
                    $bestell_id, 
                    '$f_name', 
                    NOW(), 
                    '" . $GLOBALS["user"] . "'
                )
        ";
        if ( __USE_MDB2__ )
        {
            $res = $GLOBALS["db"]->query( $sql );
            if ( PEAR::isError( $res ) )
            {
                mail( "tiefland@weban.de",
                    "Fehler beim hinzufgen der PDF-Datei zur Bestellung!", $res->
                    getUserInfo(), "From: redaktion@$site" );
            }
        }
        else
        {
            $res = mysql_query( $sql );
            if ( !$res )
            {
                mail( "tiefland@weban.de",
                    "Fehler beim hinzufgen der PDF-Datei zur Bestellung!",
                    mysql_error() . "\n$sql", "From: redaktion@$site" );
            }
        }
    }
    function create_pdf( $bestell_id, $adminMail, $mailto, $body, $art, $ln = 1,
        $site, $user = "", $db = "", $return_fname = false )
    {

        if ( empty( $user ) )
        {
            $user = $_SERVER["PHP_AUTH_USER"];
        }

        if ( $db )
        {
            $db .= ".";
        }
        $table = $db . "Bestellung";
        //Instanciation of inherited class
        $pdf = new PDF();
        $sql = "
            SELECT 
                shops_ID 
            FROM 
                $table 
            WHERE 
                ID=$bestell_id
        ";
        if ( __USE_MDB2__ )
        {
            $res = $GLOBALS["db"]->query( $sql );
            $row = $res->FetchRow();
            $shops_ID = $row["shops_id"];

        }
        else
        {
            $res = mysql_query( $sql );
            $row = mysql_fetch_assoc( $res );
            $shops_ID = $row["shops_ID"];
        }
        require_once ( "/web/apache/content-management/Warenwirtschaft/includes/rechnung/body_" .
            $site . ".inc.php" );
        $pdf->setSubject( "E-Mail zur Bestellung " . $_GET["Bestellung"] );
        $pdf->setAuthor( $haendler_name );
        $pdf->setCreator( "fpdf PHP Library" );
        $pdf->AliasNbPages();
        $pdf->AddPage();
        $pdf->setY( 45 );
        $pdf->setFont( 'Arial', '', 10 );
        $pdf->multicell( 0, 4, "$body", "", "L", 0 );
        $date = date( "Y-m-d_H-i-s" );
        $f_name = $art . "_" . $bestell_id . "_" . $date . "_" . $ln . ".pdf";
        $pdf->Output( "images/dokumente/$f_name" );

        $table = $db . "dokumente";

        $GLOBALS["user"] = $user;
        save_document( $f_name, $bestell_id, $table );

        if ( $return_fname === true )
        {
            return $f_name;
        }
        return true;
    }
    function generate_LN( $bestell_id, $art )
    {
        $db = $GLOBALS["INI"]["dbConnect"]["order_db"];


        if ( $db )
        {
            $db .= ".";
        }

        $date = date( "Y-m-d_H-i-s" );
        $f_name = $art . "_" . $bestell_id . "_" . $date;
        $sql = "
            SELECT 
                MAX(document) AS dokument 
            FROM 
                " . $db . "dokumente 
            WHERE 
                document LIKE '$f_name%'
        ";
        if ( __USE_MDB2__ )
        {
            $res = $GLOBALS["db"]->query( $sql );
            if ( !PEAR::isError( $res ) )
            {
                if ( $res->NumRows() )
                {
                    $row = $res->FetchRow( $res );
                    $dokument = substr( $row["dokument"], 0, strlen( $row["dokument"] ) -
                        4 );
                    $dokument = explode( "_", $dokument );
                    $ln = $dokument[count( $dokument ) - 1];
                    $ln++;
                }
                else
                {
                    $ln = 1;
                }
            }
            else
            {
                $ln = 1;
            }
        }
        else
        {
            $res = mysql_query( $sql );
            if ( $res )
            {
                if ( mysql_num_rows( $res ) )
                {
                    $row = mysql_fetch_assoc( $res );
                    $dokument = substr( $row["dokument"], 0, strlen( $row["dokument"] ) -
                        4 );
                    $dokument = explode( "_", $dokument );
                    $ln = $dokument[count( $dokument ) - 1];
                    $ln++;
                }
                else
                {
                    $ln = 1;
                }
            }
            else
            {
                $ln = 1;
            }
        }
        return $ln;
    }

    function send_email( $to, $subject, &$body, $extra = array() )
    {
        require_once ( "PEAR.php" );
        PEAR::setErrorHandling( PEAR_ERROR_CALLBACK, 'errorHandler' );
        if ( !defined( "CRON" ) )
        {
            define( "CRON", false );
        }
        global $web_rechte;
        $headers = "";
        $params = "";
        $vorlage = false;
        if ( array_key_exists( "headers", $extra ) )
        {
            $headers = $extra["headers"];

            $headers["Return"] = preg_replace( "/.*<(.*)>/", "$1", $headers["From"] );
            /*$test = preg_split( "/<|>/", $headers["From"] );
            $name = trim( $test[0] );
            $email = $test[1];
            $headers["From"] = sprintf( '=?ISO-8859-1?Q?%s <%s>', imap_8bit
            ( $name ), $email );*/
        }
        if ( array_key_exists( "params", $extra ) )
        {
            $params = $extra["params"];
        }
        if ( $extra["db"] )
        {
            $dbase = $extra["db"] . ".";
        }
        $files = array();
        if ( array_key_exists( "files", $extra ) )
        {
            $files = $extra["files"];
        }
        $shops_table = $dbase . "shops";
        $settings_table = $dbase . "web_settings";

        $sql = "
            SELECT
                *
            FROM
                " . $shops_table . "
            WHERE
                ID='" . $extra["shops_ID"] . "'
        ";

        if ( __USE_MDB2__ )
        {
            $res = $GLOBALS["db"]->query( $sql );
            if ( $_SERVER["REMOTE_ADDR"] == "89.245.130.99" || preg_match( "/192\.168\.0/",
                $_SERVER["REMOTE_ADDR"] ) || CRON === true )
            {
                if ( PEAR::isError( $res ) )
                {
                    die( $res->getUserInfo() );
                }
            }
            $row = $res->FetchRow();
        }
        else
        {
            $res = mysql_query( $sql );
            if ( $_SERVER["REMOTE_ADDR"] == "89.245.130.99" || preg_match( "/192\.168\.0/",
                $_SERVER["REMOTE_ADDR"] ) || CRON === true )
            {
                if ( !$res )
                {
                    die( mysql_error() . "<br>$sql<br>" );
                }
            }
            $row = mysql_fetch_assoc( $res );
        }
        if ( $row["mail_server"] )
        {
            $smtp_opts = array( "host" => $row["mail_server"], "port" => "25",
                "auth" => true, "username" => $row["mail_user"], "password" => $row["mail_passwort"] );
            define( "__USE_SMTP__", true );
        }
        else
        {
            define( "__USE_SMTP__", false );
        }

        if ( $_SERVER["REMOTE_ADDR"] == "89.245.130.99" || preg_match( "/192\.168\.0/",
            $_SERVER["REMOTE_ADDR"] ) || CRON === true )
        {
            //var_dump( $row, $smtp_opts );
        }
        $sql = "
            SELECT 
                inhalt 
            FROM 
                $settings_table 
            WHERE 
                shops_ID=" . $extra["shops_ID"] . "
            AND
                ID=1000 
        ";

        $sql .= ( isset( $web_rechte["Warenwirtschaft"]["bestellung"]["bestellart"] ) ) ?
            " AND bestellart_id=1" : "";

        if ( __USE_MDB2__ )
        {
            $res = $GLOBALS["db"]->query( $sql );
            if ( $_SERVER["REMOTE_ADDR"] == "89.245.130.99" || preg_match( "/192\.168\.0/",
                $_SERVER["REMOTE_ADDR"] ) || CRON === true )
            {
                if ( PEAR::isError( $res ) )
                {
                    die( $res->getUserInfo() );
                }
            }
            $row = $res->FetchRow();
        }
        else
        {
            $res = mysql_query( $sql );
            if ( $_SERVER["REMOTE_ADDR"] == "89.245.130.99" || preg_match( "/192\.168\.0/",
                $_SERVER["REMOTE_ADDR"] ) || CRON === true )
            {
                if ( !$res )
                {
                    die( mysql_error() . "<br>$sql<br>" );
                }
            }
            $row = mysql_fetch_assoc( $res );
        }
        if ( $row["inhalt"] )
        {
            $vorlage = true;
        }

        $recipients = array( $to, );
        require_once "Mail.php";
        require_once "Mail/mime.php";
        $mime = new Mail_mime( "\n" );

        if ( __USE_SMTP__ )
        {
            $mail = &Mail::factory( 'smtp', $smtp_opts );
        }
        else
        {
            $mail = &Mail::factory( 'sendmail' );
        }

        $text = "";
        if ( is_array( $extra["files"] ) )
        {
            foreach ( $extra["files"] as $document )
            {
                if ( file_exists( $document ) )
                {
                    $mtype = mime_content_type( $document );
                    $mime->addAttachment( $document, $mtype, basename( $document ) );
                    //$anlagen[] = basename( $document );
                }
            }
        }
        if ( $vorlage && $to != $headers["From"] )
        {
            $shops_ID = ( int )$extra["shops_ID"];
            require_once ( "libs/Smarty.class.php" );

            $sql = "
                SELECT 
                    l.* 
                FROM 
                    Logins l 
                JOIN 
                    Bestellung b 
                ON 
                    b.Login=l.ID 
                AND 
                    b.ID=" . ( int )$extra["bestellung"];
            if ( __USE_MDB2__ )
            {
                $res = $GLOBALS["db"]->query( $sql );
                if ( $_SERVER["REMOTE_ADDR"] == "89.245.130.99" || preg_match( "/192\.168\.0/",
                    $_SERVER["REMOTE_ADDR"] ) || CRON === true )
                {
                    if ( PEAR::isError( $res ) )
                    {
                        die( $res->getUserInfo() );
                    }
                }
                $Userdata = $res->FetchRow();
            }
            else
            {
                $res = mysql_query( $sql );
                if ( $_SERVER["REMOTE_ADDR"] == "89.245.130.99" || preg_match( "/192\.168\.0/",
                    $_SERVER["REMOTE_ADDR"] ) || CRON === true )
                {
                    if ( !$res )
                    {
                        die( mysql_error() . "<br>$sql<br>" );
                    }
                }
                $Userdata = mysql_fetch_assoc( $res );
            }
            $smarty = new Smarty();
            $smarty->assign( "heading", $subject );
            $smarty->assign( "inhalt", stripslashes( $body ) );
            $smarty->assign( "Userdata", $Userdata );
            $smarty->assign( "to", $to );
            $smarty->assign( "date", time() );

            if ( __USE_MDB2__ )
            {
                $prot = "mdb2";
            }
            else
            {
                $prot = "db";
            }
            $html = $smarty->fetch( $prot . ":" . $shops_ID . "_1000" );

            $text = strip_tags( $html, "<br><br />" );
            $text = str_replace( array( "<br>", "<br />" ), "\n", $text );
            $mime->setTXTBody( $text );
            $mime->setHTMLBody( $html );

            $body = $html;

        }
        else
        {
            $body = str_replace( "\r", "", $body );
            $body = str_replace( "\n\n", "\n", $body );

            $text = $body;
            $mime->setTXTBody( $text );
            /*$res = mail( $to, $subject, $body, "FROM: " . $headers["From"],
            $params );*/
            /*$res = mail( "tiefland@weban.de", $subject, $body, "FROM: " . $headers["From"],
            $params );*/
        }
        unset( $hdrs, $m_headers );
        $hdrs = array( 'From' => $headers["Return"], 'Return-Path' => $headers["Return"],
            'Subject' => $subject, "To" => "$to", "Date" => date( "r" ), );
        /*        $hdrs = array( 'From' => $headers["Return"], 'Return-Path' => $headers["Return"],
        'Subject' => $subject, "To" => $Userdata["Vorname"] . " " . $Userdata["Name1"] .
        "<$to>", "Date" => date( "r" ), );/*/
        //do not ever try to call these lines in reverse order
        $text = $mime->get();
        $m_headers = $mime->headers( $hdrs, true );

        $res = $mail->send( $to, $m_headers, $text );
        if ( is_array( $headers ) )
        {
            if ( array_key_exists( "BCC", $headers ) )
            {
                $m_headers["Subject"] = $subject . " (Blindkopie)";
                $m_headers["To"] = $headers["BCC"];
                $mail->send( $headers["BCC"], $m_headers, $text );
            }
            if ( array_key_exists( "CC", $headers ) )
            {
                $m_headers["Subject"] = $subject . " (Kopie)";
                $m_headers["To"] = $headers["CC"];
                $mail->send( $headers["CC"], $m_headers, $text );
            }
        }
        return $res;
    }

    function errorHandler( $error )
    {
        $message = $error->getUserInfo();
        if ( !$message )
        {
            $message = $error->getMessage();
        }
        if ( !empty( $error->backtrace[1]['file'] ) )
        {
            $message .= ' (' . $error->backtrace[1]['file'];
            if ( !empty( $error->backtrace[1]['line'] ) )
            {
                $message .= ' in Zeile ' . $error->backtrace[1]['line'];
            }
            $message .= ')';
        }
        mail_admin( $message );
    }

    function mail_admin( $message )
    {
        $site = $_SERVER["SERVER_NAME"];
        if ( substr_count( $site, '.' ) >= 2 )
        {
            $site = substr( $site, strpos( $site, '.' ) + 1 );
        }
        mail( "tiefland@weban.de", "Fehler auf www.$site", $message,
            "From: info@$site" );
        mail( "niewerth@weban.de", "Fehler auf www.$site", $message,
            "From: info@$site" );
    }
?>