View Issue Details
ID | Project | Category | View Status | Date Submitted | Last Update |
---|---|---|---|---|---|
4707 | Composr | core_cns | public | 2021-11-03 02:11 | 2022-08-15 18:01 |
Reporter | Chris Graham | Assigned To | PDStig | ||
Priority | normal | Severity | feature | ||
Status | resolved | Resolution | fixed | ||
Summary | 4707: Notifications for member's own birthdays | ||||
Description | Add support for sending out notifications to members when it is their own birthday. This is a little marketing opportunity to show the webmasters of the site care. | ||||
Tags | Has Patch, Roadmap: v11 | ||||
Attach Tags | |||||
Attached Files | self_birthday_notification.diff (6,699 bytes)
diff --git a/sources/hooks/systems/notifications/cns_self_birthday.php b/sources/hooks/systems/notifications/cns_self_birthday.php new file mode 100644 index 0000000..694b33e --- /dev/null +++ b/sources/hooks/systems/notifications/cns_self_birthday.php @@ -0,0 +1,58 @@ +<?php /* + + Composr + Copyright (c) ocProducts, 2004-2016 + + See text/EN/licence.txt for full licencing information. + + + NOTE TO PROGRAMMERS: + Do not edit this file. If you need to make changes, save your changed file to the appropriate *_custom folder + **** If you ignore this advice, then your website upgrades (e.g. for bug fixes) will likely kill your changes **** + +*/ + +/** + * @license http://opensource.org/licenses/cpal_1.0 Common Public Attribution License + * @copyright ocProducts Ltd + * @package core_cns + */ + +/** + * Hook class. + */ +class Hook_notification_cns_self_birthday extends Hook_Notification +{ + /** + * Get a list of all the notification codes this hook can handle. + * (Addons can define hooks that handle whole sets of codes, so hooks are written so they can take wide authority) + * + * @return array List of codes (mapping between code names, and a pair: section and labelling for those codes) + */ + public function list_handled_codes() + { + $list = array(); + if (get_option('enable_birthdays') != '0') { + $list['cns_self_birthday'] = array(do_lang('MEMBERS'), do_lang('cns:NOTIFICATION_TYPE_cns_self_birthday')); + } + return $list; + } + + /** + * Get a list of members who have enabled this notification (i.e. have permission to AND have chosen to or are defaulted to). + * + * @param ID_TEXT $notification_code Notification code + * @param ?SHORT_TEXT $category The category within the notification code (null: none) + * @param ?array $to_member_ids List of member IDs we are restricting to (null: no restriction). This effectively works as a intersection set operator against those who have enabled. + * @param integer $start Start position (for pagination) + * @param integer $max Maximum (for pagination) + * @return array A pair: Map of members to their notification setting, and whether there may be more + */ + public function list_members_who_have_enabled($notification_code, $category = null, $to_member_ids = null, $start = 0, $max = 300) + { + $members = $this->_all_members_who_have_enabled($notification_code, $category, $to_member_ids, $start, $max); + $members = $this->_all_members_who_have_enabled_with_page_access($members, 'members', $notification_code, $category, $to_member_ids, $start, $max); + + return $members; + } +} diff --git a/sources/hooks/systems/cron/cns_birthdays.php b/sources/hooks/systems/cron/cns_birthdays.php index e77a6a9..7bf922b 100644 --- a/sources/hooks/systems/cron/cns_birthdays.php +++ b/sources/hooks/systems/cron/cns_birthdays.php @@ -71,16 +71,38 @@ class Hook_cron_cns_birthdays ) ); + // Randoms (if not batched)... + + if (count($_birthdays) == 1) { + dispatch_notification('cns_birthday', null, $subject, $mail); + } + + // Friend... + if (addon_installed('chat')) { $friends = $GLOBALS['SITE_DB']->query_select('chat_friends', array('member_likes'), array('member_liked' => $_birthday['id'])); dispatch_notification('cns_friend_birthday', null, $subject, $mail, collapse_1d_complexity('member_likes', $friends)); } - if (count($_birthdays) == 1) { - dispatch_notification('cns_birthday', null, $subject, $mail); - } + // Self... + + $subject_self = do_lang('SELF_BIRTHDAY_NOTIFICATION_MAIL_SUBJECT', get_site_name(), $displayname, $username); + $mail_self = do_notification_lang( + 'SELF_BIRTHDAY_NOTIFICATION_MAIL', + comcode_escape(get_site_name()), + comcode_escape($username), + array( + $member_url->evaluate(), + $birthday_url->evaluate(), + comcode_escape($displayname) + ) + ); + + dispatch_notification('cns_self_birthday', null, $subject_self, $mail_self, array($_birthday['id'])); } + // Randoms (if batched)... + if (count($_birthdays) > 1) { $combined_birthdays_subject = do_lang('COMBINED_BIRTHDAY_NOTIFICATION_MAIL_SUBJECT', get_site_name(), integer_format(count($_birthdays))); $combined_birthdays_mail = do_notification_lang('COMBINED_BIRTHDAY_NOTIFICATION_MAIL', comcode_escape(get_site_name()), $combined_birthdays_mail, comcode_escape(integer_format(count($_birthdays)))); diff --git a/lang_custom/EN/cns.ini b/lang_custom/EN/cns.ini new file mode 100644 index 0000000..6e0be91 --- /dev/null +++ b/lang_custom/EN/cns.ini @@ -0,0 +1,47 @@ +SELF_BIRTHDAY_NOTIFICATION_MAIL=Happy Birthday {2}, from your committee members at {1}. We hope you enjoy your special day. diff --git a/lang/EN/cns.ini b/lang/EN/cns.ini index 77b9741..70ae286 100644 --- a/lang/EN/cns.ini +++ b/lang/EN/cns.ini @@ -811,6 +792,7 @@ NOTIFICATION_TYPE_cns_group_declined=Your usergroup join request was declined NOTIFICATION_TYPE_cns_username_changed=Your username changed NOTIFICATION_TYPE_cns_password_changed=Your password changed NOTIFICATION_TYPE_cns_friend_birthday=Your friend's birthday is today +NOTIFICATION_TYPE_cns_self_birthday=Happy Birthday to you NOTIFICATION_TYPE_cns_birthday=A member's birthday today NOTIFICATION_TYPE_cns_club=New club added NOTIFICATION_TYPE_cns_member_joined_group=A member joined a usergroup @@ -822,6 +804,8 @@ NEW_MEMBER_NOTIFICATION_MAIL_SUBJECT={1} has joined {2} NEW_MEMBER_NOTIFICATION_MAIL=A new member, {1}, has joined {2}. You can view his/her profile at:\n[url="{3}"]{3}[/url] BIRTHDAY_NOTIFICATION_MAIL_SUBJECT=It's {2}'s birthday BIRTHDAY_NOTIFICATION_MAIL=It's {{{2}}}'s birthday. Come congratulate them on {1}:\n[url="{4}"]{4}[/url] +SELF_BIRTHDAY_NOTIFICATION_MAIL_SUBJECT=Happy Birthday +SELF_BIRTHDAY_NOTIFICATION_MAIL=Happy Birthday {2}, from all the staff at {1}. We hope you enjoy your special day. COMBINED_BIRTHDAY_NOTIFICATION_MAIL_SUBJECT=Birthday Bonanza COMBINED_BIRTHDAY_NOTIFICATION_MAIL=It is the birthday of {3} members on {1}. Wish them Happy Birthday...{2} COMBINED_BIRTHDAY_NOTIFICATION_MAIL_ITEM=\n - {{{2}}} -- [url="{4}"]{4}[/url] | ||||
Time estimation (hours) | 2.5 | ||||
Sponsorship open | |||||
Date Modified | Username | Field | Change |
---|---|---|---|
2021-11-03 02:11 | Chris Graham | New Issue | |
2021-11-03 02:11 | Chris Graham | Tag Attached: Has Patch | |
2021-11-03 02:11 | Chris Graham | File Added: self_birthday_notification.diff | |
2021-11-03 02:11 | Chris Graham | Tag Attached: Roadmap: v12 | |
2022-08-15 00:35 | Chris Graham | Assigned To | => user4172 |
2022-08-15 00:35 | Chris Graham | Status | Not Assigned => Assigned |
2022-08-15 00:35 | Chris Graham | Note Added: 0007443 | |
2022-08-15 15:49 | Chris Graham | Tag Attached: Roadmap: v11 | |
2022-08-15 15:49 | Chris Graham | Tag Detached: Roadmap: v12 | |
2022-08-15 18:01 | PDStig | Status | Assigned => Resolved |
2022-08-15 18:01 | PDStig | Resolution | open => fixed |