====== Birthdays: Main page widget ====== Here's how we create a widget on the main page that shows the upcoming birthdays of site users. **Objective** * Create "Birthdays" widget for Index page * Use standard BASE_CMP_UsersWidget component {{:dev-tuts:birthdays_widget.png|}} **Implementation - Server Side (PHP)** birthdays/components/birthdays_widget.php class BIRTHDAYS_CMP_BirthdaysWidget extends BASE_CMP_UsersWidget { public function getData( $count ) { //$language - helps our site to be multilingual $language = OW::getLanguage(); // $userService - contain basic user functionality $userService = BOL_UserService::getInstance(); // $toolbar - widget's toolbar $toolbar = self::getToolbar(); //set date bounds for birthdays $period = array( 'start' => date('Y-m-d'), 'end' => date('Y-m-d', strtotime('+7 day')) ); // getting users $users = $userService->findListByBirthdayPeriod($period['start'], $period['end'], 0, $count); if ( !$this->isCustomizeMode && empty($users) ) { //hide widget if there are no Birthdays this week $this->setVisible(false); } return array( array( 'key' => 'birthdays', 'menu-label' => $language->text('birthdays', 'user_list_menu_item_birthdays'), 'users' => $users, 'toolbar' => $toolbar['birthdays'][0], ), ); } //returns array of toolbar items public static function getToolbar() { return array( 'birthdays' => array( array( 'label' => OW::getLanguage()->text('base', 'view_all'), 'href' => OW::getRouter()->urlForRoute('birthdays_users') ) ), ); } //default settings public static function getSettingList() { $settingList = array(); $settingList['count'] = array( 'presentation' => 'number', 'label' => 'Count', 'value' => '10' ); return $settingList; } // set title and toolbar public static function getStandardSettingValueList() { $toolbars = self::getToolbar(); return array( self::SETTING_TITLE => OW::getLanguage()->text('birthdays', 'widget_title'), self::SETTING_TOOLBAR => $toolbars['birthdays'] ); } // set who allowed to see widget public static function getAccess() { /* ACCESS_GUEST - for guests only, ACCESS_ALL - everyone, ACCESS_MEMBER - only for registered users ) */ return self::ACCESS_ALL; } } birthdays/activate.php //add 'birthdays' widget to index page when plugin activated $placeWidget = BOL_ComponentAdminService::getInstance()->addWidgetToPlace( BOL_ComponentAdminService::getInstance()->addWidget('BIRTHDAYS_CMP_BirthdaysWidget', false), BOL_ComponentAdminService::PLACE_INDEX ); //place widget on index page's left section BOL_ComponentAdminService::getInstance()->addWidgetToPosition($placeWidget, BOL_ComponentAdminService::SECTION_LEFT); birthdays/deactivate.php //remove 'birthdays' widget when plugin deactivated BOL_ComponentAdminService::getInstance()->deleteWidget('BIRTHDAYS_CMP_BirthdaysWidget');