diff -urp birthdays/birthdays.admin.inc birthdays_new/birthdays.admin.inc --- birthdays/birthdays.admin.inc 2008-10-05 11:18:37.000000000 +0200 +++ birthdays_new/birthdays.admin.inc 2009-08-04 14:36:51.000000000 +0200 @@ -77,6 +77,7 @@ function birthdays_admin_settings() { '#options' => array( BIRTHDAYS_PAGE_FILTER_SORT_DATE => t('Filter users, sort by date'), BIRTHDAYS_PAGE_FILTER_SORT_USER => t('Filter users, sort by username'), + BIRTHDAYS_PAGE_FILTER_SORT_UPCOMING => t('Filter users, sort by upcoming birthdays'), BIRTHDAYS_PAGE_NOFILTER_SORT_USER => t('Do not filter users, sort by username'), ), ); diff -urp birthdays/birthdays.module birthdays_new/birthdays.module --- birthdays/birthdays.module 2009-02-03 10:33:27.000000000 +0100 +++ birthdays_new/birthdays.module 2009-08-04 13:30:03.000000000 +0200 @@ -99,6 +99,12 @@ define('BIRTHDAYS_PAGE_FILTER_SORT_USER' define('BIRTHDAYS_PAGE_NOFILTER_SORT_USER', '2'); /** + * Do not show users without a birthday on the Birthdays listing + * and sort by upcoming birthday + */ +define('BIRTHDAYS_PAGE_FILTER_SORT_UPCOMING', '3'); + +/** * Do not send an e-mail to the user on their birthday. Default. */ define('BIRTHDAYS_USER_MAIL_NO', '0'); diff -urp birthdays/birthdays.page.inc birthdays_new/birthdays.page.inc --- birthdays/birthdays.page.inc 2008-10-08 17:59:24.000000000 +0200 +++ birthdays_new/birthdays.page.inc 2009-08-04 14:57:05.000000000 +0200 @@ -32,14 +32,31 @@ function birthdays_view_page() { case 'mysqli': // Right join = filtering out $join = variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) != BIRTHDAYS_PAGE_NOFILTER_SORT_USER || !empty($filter_month) || !empty($filter_year) ? 'RIGHT JOIN' : 'LEFT JOIN'; - $sort = variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_DATE || !empty($filter_month) || !empty($filter_year) ? 'MONTH({dob}.birthday), DAYOFMONTH({dob}.birthday), YEAR({dob}.birthday), ' : ''; + if (variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_DATE || !empty($filter_month) || !empty($filter_year)) { + $sort = 'MONTH({dob}.birthday), DAYOFMONTH({dob}.birthday), YEAR({dob}.birthday), '; + } + else if (variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_UPCOMING || !empty($filter_month) || !empty($filter_year)) { + $sort = '(DAYOFYEAR({dob}.birthday) - DAYOFYEAR(CURRENT_DATE())) > 0 DESC, DAYOFYEAR({dob}.birthday) - DAYOFYEAR(CURRENT_DATE()), '; + } + else { + $sort = ''; + } $filter .= !empty($filter_month) ? " AND MONTH({dob}.birthday) = ". $filter_month : ''; $filter .= !empty($filter_year) ? " AND YEAR({dob}.birthday) = ". $filter_year : ''; break; case 'pgsql': // Right join = filtering out $join = variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) != BIRTHDAYS_PAGE_NOFILTER_SORT_USER || !empty($filter_month) || !empty($filter_year) ? 'RIGHT JOIN' : 'LEFT JOIN'; - $sort = variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_DATE || !empty($filter_month) || !empty($filter_year) ? "date_part('month', {dob}.birthday), date_part('day', {dob}.birthday), date_part('year', {dob}.birthday), " : ''; + if (variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_DATE || !empty($filter_month) || !empty($filter_year)) { + $sort = "date_part('month', {dob}.birthday), date_part('day', {dob}.birthday), date_part('year', {dob}.birthday), "; + } + else if (variable_get('birthdays_page_settings', BIRTHDAYS_PAGE_FILTER_SORT_DATE) == BIRTHDAYS_PAGE_FILTER_SORT_UPCOMING || !empty($filter_month) || !empty($filter_year)) { + // This part of the query is untested for psql + $sort = "(date_part('doy', {dob}.birthday) - date_part('doy', CURRENT_DATE())) > 0 DESC, date_part('doy', {dob}.birthday) - date_part('doy', CURRENT_DATE()), "; + } + else { + $sort = ''; + } $filter .= !empty($filter_month) ? " AND date_part('month', {dob}.birthday) = ". $filter_month : ''; $filter .= !empty($filter_year) ? " AND date_part('year', {dob}.birthday) = ". $filter_year : ''; break;