format('Y'), $this->format('m'), $this->format('d')); } /** * Creates an event in an iCalendar * * @param vcalendar $cal * @return vevent */ public function createVevent($cal) { $event = $cal->newComponent('vevent'); $event->setProperty('dtstart', $this->makeDateArray()); // End date must be the day after to make it an all-day event $endDate = clone $this; $endDate->addDays(1); $event->setProperty('dtend', $endDate->makeDateArray() ); return $event; } /** * Adds the number of days to the current date * * @param numeric $numOfDays */ public function addDays($numOfDays) { $this->add(new DateInterval('P' . $numOfDays .'D')); } } /** * Creates a URL to a brewBlog * * @param int $id * @param string $brewer * @param string $page * @return string */ function urlForBrew($id, $brewer, $page = 'brewBlogDetail') { return 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . 'index.php?page=' . urlencode($page) . '&filter=' . urlencode($brewer) . '&id=' . urlencode($id); } require_once('paths.php'); //set up brewers, themes, etc. include(INCLUDES.'db_connect_universal.inc.php'); include(INCLUDES.'url_variables.inc.php'); require_once(VENDORS_DIR . 'icalcreator' . DIRECTORY_SEPARATOR . 'iCalcreator.class.php'); // Set up the Calendar $cal = new vcalendar(); $cal->setMethod('PUBLISH'); mysql_select_db($database_brewing, $brewing); // This is a fun one, we add all the dates together to find out if the beer is going to have any upcoming dates in the future: $query_brewLogs =<<= CURRENT_DATE() OR brewTapDate >= CURRENT_DATE() ) EOSQL; $query_upcoming =<<= CURRENT_DATE() EOSQL; $title = 'BrewBlogger ' . $row_pref['menuCalendar']; // Optionally filter down to specific brewer if (isset($filter) && !empty($filter) && 'all' != $filter) { $query_brewLogs .= sprintf(' AND brewBrewerID = \'%s\'', $filter); $query_upcoming .= sprintf(' AND brewBrewerID = \'%s\'', $filter); // Update the title $user_query = 'SELECT realFirstName, realLastName FROM users WHERE user_name = \'%s\''; $user_result = mysql_query(sprintf($user_query, $filter)); if (!$user_result) { throw new Exception(mysql_error()); } $user = mysql_fetch_assoc($user_result); $title = $user['realFirstName'] . ' ' . $user['realLastName']."'s ".$row_pref['menuCalendar']; } $cal->setProperty('x-wr-calname', $title); // BrewBlogs with upcoming dates $brews = mysql_query($query_brewLogs); if (!$brews) { throw new Exception(mysql_error()); } while ($row = mysql_fetch_assoc($brews)) { $brewDate = new BrewDate($row['brewDate']); $event = $brewDate->createVevent($cal); $event->setProperty('summary', 'Brew ' . $row['brewName']); $event->setProperty('description', urlForBrew($row['id'], $row['brewBrewerId'])); // See what other steps we have $steps = array(); foreach (array('brewPrimary', 'brewSecondary', 'brewTertiary', 'brewLager', 'brewAge') as $key) { if (!empty($row[$key])) { $steps[] = $key; } } $numOfSteps = count($steps); for ($i=0; $i < ($numOfSteps - 1); $i++) { $period = $row[$steps[$i]]; $nextStepName = substr($steps[$i + 1], 4); $brewDate->addDays($period); $event = $brewDate->createVevent($cal); $event->setProperty('summary', $nextStepName. ': ' . $row['brewName']); $event->setProperty('description', urlForBrew($row['id'], $row['brewBrewerId'])); } $brewDate->addDays($row[$steps[$i]]); $brewDate->createVevent($cal, 'Tap: ' . $row['brewName']); } // Upcoming recipes $upcoming = mysql_query($query_upcoming); if (!$upcoming) { throw new Exception(mysql_error()); } while ($row = mysql_fetch_assoc($upcoming)) { $upcomingDate = new BrewDate($row['upcomingDate']); $event = $upcomingDate->createVevent($cal); $event->setProperty('summary', 'Upcoming: ' . $row['upcoming']); echo urlForBrew($row['upcomingRecipeID'], $row['brewBrewerID'], 'recipeDetail'); $event->setProperty('description', urlForBrew($row['upcomingRecipeID'], $row['brewBrewerID'], 'recipeDetail')); } $cal->returnCalendar();