<?php 
/** 
 * A simple PHP class to track whether or not an email was opened. 
 * 
 * EmailTrack 
 * 
 * LICENSE: 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. 
 * 
 * @category   HTML,PHP5,Databases,Tracking 
 * @author     Tyler Heshka <[email protected]> 
 * @see        http://keybase.io/theshka 
 * @license    http://opensource.org/licenses/MIT 
 * @version    0.00.30 
 */ 
 
 /** 
  * Example 1 
  * 
  * This example demonstrates how the class is to be used. 
  * It will output the tracking graphic, and display all 
  * database results in an html table. 
  */ 
 
 
/** 
 * Get your variables. 
 * 
 * These could come from a form, database, hardcoded, or elsewhere.. 
 * this example will just generate a random test email address and subject. 
 * each time you refresh the page you can simulate someone opening 
 * the email containing the ghost graphic. 
 */ 
$subject = randomSubject(); 
$email = 'test_'.substr(md5(rand()), 0, 7).'@example.com'; 
 
/** 
 * Build the ghost graphic. 
 * 
 * Ideally, you would inlcude the graphic in a script that is emailing 
 * something using sendmail, phpMailer, or another transport class. 
 */ 
$trackingGraphic = '<img src="../src/blank.php?log=true&subject='.urlencode($subject).'&email='.urlencode($email).'" alt="EmailTrack"/>'; 
 
/** 
 * Output the tracking graphic. 
 * 
 * Ideally, this graphic would have been inlucded in the body of an email. 
 * the loading of the graphic will trigger the class and insert the $_GET 
 * data in the database. Thus, knowing the recipient has seen the message. 
 */ 
echo $trackingGraphic; 
 
/** 
 * Output the database table... 
 * 
 * Ideally, you would have a view in your application where the tracking 
 * information would be output. The possibilites here are endless, however, 
 * I will just quickly output the data from the database. 
 */ 
function outputHTML() 
{ 
    //Output the HTML table... 
    echo '<table class="u-full-width">'; 
    echo '<caption><h2>SQLite Database Output</h2></caption>'; 
    echo '<thead>'; 
    echo '<th>Email</th>'; 
    echo '<th>Subject</th>'; 
    echo '<th>Opened</th>'; 
    echo '</thead>'; 
    echo '<tbody>'; 
 
    $db = new PDO('sqlite:../data/_main.db'); 
    $result = $db->query('SELECT email, subject, opened FROM email_log'); 
    foreach ($result as $row) { 
        echo '<tr>'; 
        echo '<td>'.$row['email'].'</td>'; 
        echo '<td>'.$row['subject'].'</td>'; 
        echo '<td>'.$row['opened'].'</td>'; 
        echo '</tr>'; 
    } 
    echo '</tbody>'; 
    echo '</table>'; 
 
    //Reset the database 
    resetDatabase($db); 
} 
 
/** 
 * Reset Database 
 * 
 * Used in the example to reset the example database, 
 * you do not need to keep this function in your app. 
 * 
 * @param resource $db the database connection 
 */ 
function resetDatabase($db) 
{ 
    //if database > 15 , drop table. 
    $result = $db->query('SELECT COUNT(*) FROM email_log'); 
    foreach ($result as $row) { 
        if ($row[0] > 15) { 
            //Reset the table 
            $delete = $db->exec('DELETE FROM email_log'); 
            $vacuum = $db->exec('VACUUM'); 
        } 
    } 
} 
/** 
 * Generate Random Subject 
 * 
 * Used in the example to create a random subject, 
 * you do not need to keep this function in your app. 
 * 
 * @param string a short sentence is returned 
 */ 
function randomSubject() 
{ 
    //Parts of Speach & Words 
    $articles = array("my", "the", "their", "a", "this", "that", "his", "her"); 
    $adjective = array("lame", "giant", "good", "bad", "angry", "scary", "magnificient", "interesting"); 
    $noun = array("dog", "bear", "cat", "dude", "bird", "girl", "boy", "person"); 
    $verb = array("fell", "walked", "lived", "went", "flew", "ran", "hustled", "hid"); 
    $preposition= array("through", "around", "behind", "near", "over", "below", "beneath", "above"); 
 
    //Randomize the array 
    $random_article = array_rand($articles, 2); 
    $random_adjective = array_rand($adjective, 2); 
    $random_noun = array_rand($noun, 2); 
    $random_verb = array_rand($verb, 2); 
    $random_perposition = array_rand($preposition, 2); 
 
    //Build the sentence. 
    $sentence = ucfirst($articles[$random_article[0]]) . " " 
    . $adjective[$random_adjective[0]] . " " 
    . $noun[$random_noun[0]] . " " 
    . $verb[$random_verb[0]] . " " 
    . $preposition[$random_perposition[0]] . " " 
    . $articles[$random_article[1]] . " " 
    . $noun[$random_noun[1]] . "."; 
 
    //Return the sentence. 
    return $sentence; 
} 
?> 
 
<!-- // HTML //--> 
<!doctype html> 
<html lang="en"> 
<head> 
    <meta charset="utf-8"> 
 
    <title> EmailTrack by tHeshka - Output Example</title> 
    <meta name="description" content="This class will output a ghost image and update a SQLite database."> 
    <meta name="author" content="Tyler Heshka <theshka>"> 
 
    <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/skeleton/2.0.4/skeleton.min.css"> 
    <link rel="stylesheet" href="assets/custom.css"> 
 
    <!--[if lt IE 9]> 
    <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script> 
    <![endif]--> 
</head> 
<body> 
    <div class="container"> 
        <div class="row"> 
            <div class="twelve columns"> 
                <div class="row"> 
                    <div class="twelve columns"> 
                        <a href="form.php" class="button" title="EmailTrack Test">Send Mail</a> 
                        <a href="../index.html" class="button button-primary u-pull-right" title="EmailTrack Demo">Main</a> 
                    </div> 
                </div> 
                <div class="row"> 
                    <?php outputHTML(); ?> 
                </div> 
            </div> 
        </div> 
    </div> 
</body> 
</html> 
 
 |