Here we create a separate page with upcoming birthdays of site users.
Objective
Implementation - Server Side (PHP)
birthdays/init.php
// class that contains all data and functionality to add new type of members listing
class BIRTHDAYS_UsersPageData implements BASE_CLASS_IusersPageData
{
//set menu item for "Birthdays" page
public function getMenuItem()
{
//$language - helps our site to be multilingual
$language = OW::getLanguage();
//initializing menu item
$item = new BASE_MenuItem();
$item->setLabel($language->text('base', 'user_list_menu_item_birthdays'))
->setKey('birthdays')
->setUrl(OW::getRouter()
->urlForRoute('birthdays_users'))
->setOrder(5)
->setIconClass('ow_ic_calendar');
if ( $this->isCase() )
{
$item->setActive(true); // activate menu if "Birthdays" selected
}
return $item;
}
// check if URL is belong to "Birthdays" page
public function isCase()
{
return false !== strstr(OW::getRequest()->getRequestUri(), OW::getRouter()->uriForRoute('birthdays_users'));
}
// "Birthdays" page's unique key
public function getCase()
{
return 'birthdays';
}
// get data for "Birthdays" user listing
public function getData( $first, $count )
{
$service = BOL_UserService::getInstance();
//set date bounds for birthdays
$period = array(
'start' => date('Y-m-d'),
'end' => date('Y-m-d', strtotime('+7 day'))
);
return array(
$service->findListByBirthdayPeriod($period['start'], $period['end'], $first, $count), // get users
$service->countByBirthdayPeriod($start, $end) // count users
);
}
}
// register data for "Birthdays" page.
OW::getRegistry()->addToArray('users_page_data', new BIRTHDAYS_UsersPageData());