Turning PHP page calling Zend functions procedurally into Zend Framework MVC-help!
- by Joel
Hi guys,
I posted much of this question, but if didn't include all the Zend stuff because I thought it'd be overkill, but now I'm thinking it's not easy to figure out an OO way of doing this without that code...
So with that said, please forgive the verbose code.
I'm learning how to use MVC and OO in general, and I have a website that is all in PHP but most of the pages are basic static pages.
I have already converted them all to views in Zend Framework, and have the Controller and layout set. All is good there.
The one remaining page I have is the main reason I did this...it in fact uses Zend library (for gData connection and pulling info from a Google Calendar and displaying it on the page.
I don't know enough about this to know where to begin to refactor the code to fit in the Zend Framework MVC model. Any help would be greatly appreciated!!
.phtml view page:
<div id="dhtmltooltip" align="left"></div>
<script src="../js/tooltip.js" type="text/javascript">
</script>
<div id="container">
<div id="conten">
<a name="C4"></a>
<?php
function get_desc_second_part(&$value) {
list(,$val_b) = explode('==',$value);
$value = trim($val_b);
}
function filterEventDetails($contentText) {
$data = array();
foreach($contentText as $row) {
if(strstr($row, 'When: ')) {
##cleaning "when" string to get date in the format "May 28, 2009"##
$data['duration'] = str_replace('When: ','',$row);
list($when, ) = explode(' to ',$data['duration']);
$data['when'] = substr($when,4);
if(strlen($data['when'])>13)
$data['when'] = trim(str_replace(strrchr($data['when'], ' '),'',$data['when']));
$data['duration'] = substr($data['duration'], 0, strlen($data['duration'])-4); //trimming time zone identifier (UTC etc.)
}
if(strstr($row, 'Where: ')) {
$data['where'] = str_replace('Where: ','',$row);
//pr($row);
//$where = strstr($row, 'Where: ');
//pr($where);
}
if(strstr($row, 'Event Description: ')) {
$event_desc = str_replace('Event Description: ','',$row);
//$event_desc = strstr($row, 'Event Description: ');
## Filtering event description and extracting venue, ticket urls etc from it.
//$event_desc = str_replace('Event Description: ','',$contentText[3]);
$event_desc_array = explode('|',$event_desc);
array_walk($event_desc_array,'get_desc_second_part');
//pr($event_desc_array);
$data['venue_url'] = $event_desc_array[0];
$data['details'] = $event_desc_array[1];
$data['tickets_url'] = $event_desc_array[2];
$data['tickets_button'] = $event_desc_array[3];
$data['facebook_url'] = $event_desc_array[4];
$data['facebook_icon'] = $event_desc_array[5];
}
}
return $data;
}
// load library
require_once 'Zend/Loader.php';
Zend_Loader::loadClass('Zend_Gdata');
Zend_Loader::loadClass('Zend_Gdata_ClientLogin');
Zend_Loader::loadClass('Zend_Gdata_Calendar');
Zend_Loader::loadClass('Zend_Http_Client');
// create authenticated HTTP client for Calendar service
$gcal = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$user = "[email protected]";
$pass = "xxxxxxxx";
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $gcal);
$gcal = new Zend_Gdata_Calendar($client);
$query = $gcal->newEventQuery();
$query->setUser('[email protected]');
$secondary=true;
$query->setVisibility('private');
$query->setProjection('basic');
$query->setOrderby('starttime');
$query->setSortOrder('ascending');
//$query->setFutureevents('true');
$startDate=date('Y-m-d h:i:s');
$endDate="2015-12-31";
$query->setStartMin($startDate);
$query->setStartMax($endDate);
$query->setMaxResults(30);
try {
$feed = $gcal->getCalendarEventFeed($query);
} catch (Zend_Gdata_App_Exception $e) {
echo "Error: " . $e->getResponse();
}
?>
<h1><?php echo $feed->title; ?></h1>
<?php echo $feed->totalResults; ?> event(s) found.
<table width="90%" border="3" align="center">
<tr>
<td width="20%" align="center" valign="middle"><b>;DATE</b></td>
<td width="25%" align="center" valign="middle"><b>VENUE</b></td>
<td width="20%" align="center" valign="middle"><b>CITY</b></td>
<td width="20%" align="center" valign="middle"><b>DETAILS</b></td>
<td width="15%" align="center" valign="middle"><b>LINKS</b></td>
</tr>
<?php
if((int)$feed->totalResults>0) { //checking if at least one event is there in this date range
foreach ($feed as $event) { //iterating through all events
//pr($event);die;
$contentText = stripslashes($event->content->text); //striping any escape character
$contentText = preg_replace('/\<br \/\>[\n\t\s]{1,}\<br \/\>/','<br />',stripslashes($event->content->text)); //replacing multiple breaks with a single break
//die();
$contentText = explode('<br />',$contentText); //splitting data by break tag
$eventData = filterEventDetails($contentText);
$when = $eventData['when'];
$where = $eventData['where'];
$duration = $eventData['duration'];
$venue_url = $eventData['venue_url'];
$details = $eventData['details'];
$tickets_url = $eventData['tickets_url'];
$tickets_button = $eventData['tickets_button'];
$facebook_url = $eventData['facebook_url'];
$facebook_icon = $eventData['facebook_icon'];
$title = stripslashes($event->title);
echo '<tr>';
echo '<td width="20%" align="center" valign="middle" nowrap="nowrap">';
echo $when;
echo '</td>';
echo '<td width="20%" align="center" valign="middle">';
if($venue_url!='') {
echo '<a href="'.$venue_url.'" target="_blank">'.$title.'</a>';
} else {
echo $title;
}
echo '</td>';
echo '<td width="20%" align="center" valign="middle">';
echo $where;
echo '</td>';
echo '<td width="20%" align="center" valign="middle">';
$details = str_replace("\n","<br>",htmlentities($details));
$duration = str_replace("\n","<br>",$duration);
$detailed_description = "<b>When</b>: <br>".$duration."<br><br>";
$detailed_description .= "<b>Description</b>: <br>".$details;
echo '<a href="javascript:void(0);" onmouseover="ddrivetip(\''.$detailed_description.'\')" onmouseout="hideddrivetip()" onclick="return false">View Details</a>';
echo '</td>';
echo '<td width="20%" valign="middle">';
if(trim($tickets_url) !='' && trim($tickets_button)!='') {
echo '<a href="'.$tickets_url.'" target="_blank"><img src="'.$tickets_button.'" border="0" ></a>';
}
if(trim($facebook_url) !='' && trim($facebook_icon)!='') {
echo '<a href="'.$facebook_url.'" target="_blank"><img src="'.$facebook_icon.'" border="0" ></a>';
} else {
echo '......';
}
echo '</td>';
echo '</tr>';
}
} else { //else show 'no event found' message
echo '<tr>';
echo '<td width="100%" align="center" valign="middle" colspan="5">';
echo "No event found";
echo '</td>';
}
?>
</table>
<h3><a href="#pastevents">Scroll down for a list of past shows.</a></h3>
<br />
<a name="pastevents"></a>
<ul class="pastShows">
<?php
$startDate='2005-01-01';
$endDate=date('Y-m-d');
/*$gcal = Zend_Gdata_Calendar::AUTH_SERVICE_NAME;
$user = "[email protected]";
$pass = "silverroof10";
$client = Zend_Gdata_ClientLogin::getHttpClient($user, $pass, $gcal);
$gcal = new Zend_Gdata_Calendar($client);
$query = $gcal->newEventQuery();
$query->setUser('[email protected]');
$query->setVisibility('private');
$query->setProjection('basic');*/
$query->setOrderby('starttime');
$query->setSortOrder('descending');
$query->setFutureevents('false');
$query->setStartMin($startDate);
$query->setStartMax($endDate);
$query->setMaxResults(1000);
try {
$feed = $gcal->getCalendarEventFeed($query);
} catch (Zend_Gdata_App_Exception $e) {
echo "Error: " . $e->getResponse();
}
if((int)$feed->totalResults>0) { //checking if at least one event is there in this date range
foreach ($feed as $event) { //iterating through all events
$contentText = stripslashes($event->content->text); //striping any escape character
$contentText = preg_replace('/\<br \/\>[\n\t\s]{1,}\<br \/\>/','<br />',stripslashes($event->content->text)); //replacing multiple breaks with a single break
$contentText = explode('<br />',$contentText); //splitting data by break tag
$eventData = filterEventDetails($contentText);
$when = $eventData['when'];
$where = $eventData['where'];
$duration = $eventData['duration'];
$title = stripslashes($event->title);
echo '<li class="pastShows">' . $when . " - " . $title . ", " . $where . '</li>';
}
}
?>
</div>
</div>