Skip to content

google

Google being evil … slightly?

So, I was looking at Google’s homepage in IE8 today and I noticed something funny. I was curious, so I decided to open up Google in the other major browsers to see if the funniness followed. Nope! Only in IE. Below are screenshots of the major browsers (save Google Chrome of course). See if you can spot the difference. I realize that Google can do whatever it wants with its one home page(even though Microsoft can’t do what it wants with its OS, but don’t get me started) and granted IE has its faults, but this seems a bit mean to me … especially since I was using IE8, which is the most standards compliant IE to date(meaning the features that they have implemented conform to industry standards). What do you think, is it “evil” to single out one competing browser in this way?
Firefox:
FF

Opera:
Opera

Safari:
Safari

IE8:
IE8

Google Calendar

So, I’ve been working on creating a php script that pulls Google Calendar data. I couldn’t find many examples of how to do it on the web. So, after much trial and error here is what I’ve come up with. Use as you wish.

<?php
/**********************************************************/
/* The username/password used to login to Google Calendar */
/*                                                        */
/* This is the only part you should have to edit in this  */
/* script.                                                */
/**********************************************************/
$google_username = '???';
$google_password = '???';

/**************************************************************************/
/* Include Zend framework and load libraries, used to interact with Gdata */
/* Get the Zend framework at http://framework.zend.com/download           */
/**************************************************************************/
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_AuthSub');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');

/******************/
/* Login to Gdata */
/******************/
$authService = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$httpClient = Zend_Gdata_ClientLogin::getHttpClient($google_username, $google_password, $authService);

/***********************************************************************/
/* Replaces [link:url]Text[/link] with a properly formatted anchor tag */
/* The url must have the http:// or https:// at the front              */
/*                                                                     */
/* Params:                                                             */
/*  $text - String of text                                             */
/***********************************************************************/
function createLink($text) {
    $pattern1 = '/\[\/link\]/';
    $pattern2 = '/(\[link:)([^\]]*)(\])/';

    $replacement1 = '</a>';
    $replacement2 = '<a href="$2" target="_blank" rel="noopener">';

    $text = preg_replace($pattern1 , $replacement1, $text);
    $text = preg_replace($pattern2 , $replacement2, $text);

    return $text;
}

/*****************************************************************************************/
/* Replaces [email:email address]Text[/email] with a properly formatted email anchor tag */
/*                                                                                       */
/* Params:                                                                               */
/*  $text - String of text                                                               */
/*****************************************************************************************/
function createEmail($text) {
    $pattern1 = '/\[\/email\]/';
    $pattern2 = '/(\[email:)([^\]]*)(\])/';

    $replacement1 = '</a>';
    $replacement2 = '<a href="mailto:$2">';

    $text = preg_replace($pattern1 , $replacement1, $text);
    $text = preg_replace($pattern2 , $replacement2, $text);

    return $text;
}

/*****************************************************/
/* Replaces line breaks in the text with <br /> tags */
/*                                                   */
/* Params:                                           */
/*  $text - String of text                           */
/*****************************************************/
function createLineBreaks($text) {
    $text = str_replace("\n", "<br />", $text);

    return $text;
}

/*****************************************************************/
/* This function applies the formatting functions defined above. */
/*                                                               */
/* Params:                                                       */
/*  $text - String of text                                       */
/*****************************************************************/
function formatText($text) {
    $text = createLink($text);
    $text = createEmail($text);
    $text = createLineBreaks($text);

    return $text;
}

/*****************************************************************/
/* This function formats the date/time shown to the user.        */
/*                                                               */
/* Params:                                                       */
/*  $start - Starting date/time                                  */
/*  $end - Ending date/time                                      */
/*****************************************************************/
function formatDate($start, $end) {
    if (date("H:i:s", $start) == "00:00:00" && date("H:i:s", $end) == "00:00:00") //All day event
    {
        $end = $end - 1; //For all day events the end day is one greater than it really is

        if(date("M j, Y", $start) == date("M j, Y", $end)) //Single day all day event
        {
            $date = date("M j, Y", $start);
        }
        else //All day event spanning multiple days
        {
            if (date("Y", $start) == date("Y", $end))
            {
                if (date("M", $start) == date("M", $end)) //All day event spanning multiple days in same month
                {
                    $date = date("M j", $start) . " - " . date("j, Y", $end);
                }
                else //All day event spanning multiple months
                {
                    $date = date("M j", $start) . " - " . date("M j, Y", $end);
                }
            }
            else // All day event spanning multiple years
            {
                $date = date("M j, Y", $start) . " - " . date("M j, Y", $end);
            }
        }
    }
    else //Time range event
    {
        if(date("M j, Y", $start) == date("M j, Y", $end)) //Single day range event
        {
            $date = date("M j, Y (g:i a", $start) . " - " . date("g:i a)", $end);
        }
        else //Range event spanning multiple days
        {
            if (date("Y", $start) == date("Y", $end))
            {
                if (date("M", $start) == date("M", $end)) //Range event spanning multiple days in same month
                {
                    $date = date("M j (g:i a)", $start) . " - " . date("M j (g:i a), Y", $end);
                }
                else //Range  event spanning multiple months
                {
                    $date = date("M j (g:i a)", $start) . " - " . date("M j (g:i a), Y", $end);
                }
            }
            else //Range event spanning multiple years
            {
                $date = date("M j, Y (g:i a)", $start) . " - " . date("M j, Y (g:i a)", $end);
            }
        }
    }

    return $date;
}

/******************************************************************/
/* Create a definition list of the events in human-readable form. */
/* You can use CSS to style the list.                             */
/*                                                                */
/* Params:                                                        */
/* $client - GData $httpClient created above                      */
/*  $feed - The GData feed to read                                */
/******************************************************************/
function listEvents($client, $feed)
{
    $gdataCal = new Zend_Gdata_Calendar($client);
    $eventFeed = $gdataCal->getCalendarEventFeed($feed);

    $html = $html . "<dl>\n";

    foreach ($eventFeed as $event)
    {
        foreach ($event->when as $when)
        {
            $start = strtotime($when->startTime);
            $end = strtotime($when->endTime);
        }
        $date = formatDate($start, $end);

        foreach ($event->where as $where)
        {
            $location = $where->valueString;
        }

        $title = $event->title->text;
        if ($location != "")
        {
            $title = "<a href=\"" . $location . "\" target=\"_blank\">" . $title . "</a>";
        }
        $content = formatText($event->content->text);

        $html = $html . " <dt><span class=\"eventdate\">" . $date . "</span><span class=\"eventtitle\"> - " . $title . "</span></dd>\n";
        $html = $html . " <dd><span class=\"eventcontent\">" . $content . quot;</span></dd>\n";
    }

    $html = $html . "</dl>\n";

    return $html;
}
?>
<html>
    <body>
<?php
Echo listEvents($httpClient, "http://www.google.com/calendar/feeds/yourfeedhere");
?>
    </body>
</html>