Search code examples
phppeargcal

Php gcal class Not working


Iam using a php class to add event to google calender.But the class return an error when loading index.php page.

This is the code in index.php page here iam calling class:

<?php
require_once('gcal.class.php');
$g = new gcal('[email protected]','test123$'); 
$cal_url = 'https://www.google.com/calendar/feeds/[email protected]/private-01d281d910a2622c8c2f5899690b9eb5/basic'; 
$eTitle = 'test event'; $eDesc = 'Another Test'; $eAuthorName = 'Justin Burger'; $eAuthorEmail = '[email protected]'; $eLocation = 'LIR Offices'; $eStartTime = date('c'); $eEndTime = date('c',strtotime("+1 hour")); 

//Adding an event.
$g->addEvent($cal_url,$eTitle, $eDesc, $eAuthorName, $eAuthorEmail,$eLocation,$eStartTime, $eEndTime); 

?>

And this is the gcal.class.php code :

 <?php
require_once('HTTP/Request.php');

    class gcal{
        /** Google Auth Token, used to authorize add functions*/
        private $token;

        /** Users Email Address (notice, password is not stored) */
        private $email;
        function __construct($email, $password){
            $this->login($email,$password); 
            $this->email = $email;      
        }
        public function addEvent($cal_url,$eTitle, $eDesc, $eAuthorName, $eAuthorEmail,$eLocation,$eStartTime, $eEndTime){
            /* Make sure we send ONLY valid XML. */
            $eTitle         = htmlentities($eTitle);
            $eDesc          = htmlentities($eDesc);
            $eAuthorName    = htmlentities($eAuthorName);
            $eAuthorEmail   = htmlentities($eAuthorEmail);
            $eLocation      = htmlentities($eLocation);
            $eStartTime     = htmlentities($eStartTime);
            $eEndTime       = htmlentities($eEndTime);

             $xml = "<entry xmlns='http://www.w3.org/2005/Atom' xmlns:gd='http://schemas.google.com/g/2005'>
                <category scheme='http://schemas.google.com/g/2005#kind' term='http://schemas.google.com/g/2005#event'></category>
                <title type='text'>{$eTitle}</title>
                <content type='text'>{$eDesc}</content>
                <author>
                    <name>{$eAuthorName}</name>
                    <email>{$eAuthorEmail}</email>
                </author>
                <gd:transparency value='http://schemas.google.com/g/2005#event.opaque'></gd:transparency>
                <gd:eventStatus
                    value='http://schemas.google.com/g/2005#event.confirmed'>
                </gd:eventStatus>
                <gd:where valueString='{$eLocation}'></gd:where>
                <gd:when startTime='{$eStartTime}'
                    endTime='{$eEndTime}'></gd:when>
            </entry>";

            $http = new HTTP_Request($cal_url,array('allowRedirects' => true));
            $http->setMethod('POST');
            $http->addHeader('Host','www.google.com');
            $http->addHeader('MIME-Version','1.0');
            $http->addHeader('Accept','text/xml');
            $http->addHeader('Content-type','application/atom+xml');
            $http->addHeader('Authorization','GoogleLogin auth=' . $this->token);
            $http->addHeader('Content-length',strlen($xml));
            $http->addHeader('Cache-Control','no-cache');
            $http->addHeader('Connection','close');
            $http->setBody($xml);
            $http->sendRequest();

            switch($http->getResponseCode()){
                case 201: case 200:
                    return true;
                    break;
                default:
                    throw new Exception('Error Adding Google Cal Event. Response From Google:' . $http->getResponseBody(), $http->getResponseCode());
                    return false;
                    break;  
            }

        }

        public function getCalendarList(){
            $url = 'http://www.google.com/calendar/feeds/' . $this->email;

            $http = new HTTP_Request($url,array('allowRedirects' => true));
            $http->addHeader('Authorization','GoogleLogin auth=' . $this->token);
            $http->setMethod('GET');
            $http->sendRequest();
            $xml = new SimpleXMLElement($http->getResponseBody());

            $calendars = array();
            foreach ($xml->entry as $cal){

                foreach($cal->link as $key=>$link){
                    $linkSets = array();
                    $links = $link->attributes();
                    $links = (array) $links;
                    foreach($links as $l){
                        $linkSets[] = array('rel'=>$l['rel'],
                                            'type'=>$l['type'],
                                            'href'=>$l['href']);
                    }
                }
                $calendars[] = array('id'=>strval($cal->id),
                                     'published'=>strval($cal->published),
                                     'updated'=>strval($cal->updated),
                                     'title'=>strval($cal->title),
                                     'authorName'=>strval($cal->author->name),
                                     'authorEmail'=>strval($cal->author->email),
                                     'links'=>$linkSets);
            }
            return $calendars;
        }
        private function login($email, $password){
            $url = 'https://www.google.com/accounts/ClientLogin';


            $http = new HTTP_Request('https://www.google.com/accounts/ClientLogin',
                                     array('allowRedirects' => true));
            $http->setMethod('POST');
            $http->addPostData('Email', $email);
            $http->addPostData('Passwd', $password);
            $http->addPostData('source', 'example-test-2');
            $http->addPostData('service', 'cl');
            $http->addPostData('accountType', 'HOSTED_OR_GOOGLE');
            $http->sendRequest();

            switch($http->getResponseCode()){
                case 403:
                    throw new Exception('Google Auth Failed',403);
                    break;
                case 200: case 201:
                    $this->token = $this->extractAuth($http->getResponseBody());
                    return true;
                    break;
                default:
                    throw new Exception('Unknown Google Auth Failure',$http->getResponseCode());
                    break;  
            }
        }

        private function extractAuth($body){
            $st = strpos($body,'Auth=');
            $token = trim(substr($body,($st+5)));
            return $token;
        }
    }

?>

Then iam taking this in browser it displays error:

Warning: require_once(HTTP/Request.php) [function.require-once]: failed to open stream: No such file or directory in E:\wamp\www\gcal\gcal.class.php on line 2
Fatal error: require_once() [function.require]: Failed opening required 'HTTP/Request.php' (include_path='.;C:\php\pear') in E:\wamp\www\gcal\gcal.class.php on line 2

What is the problem in my code?

When i downloading the class from google code they said that please make sure you have both installed before use (for example: pear install Net and pear install HTTP) . I dont know how to do this?Give me a solution.


Solution

  • You need to install HTTP_Request package in order to make it work. The package can be found here

    See here for installation Hope it helps