'notifications-lite', 'subject' => $subject, 'body' => empty($body) ? $subject : $body, 'language' => user_preferred_language($account), ); return messaging_message_send_user($account, $message); } else { // We don't have anything else so we use Drupal's mail $account = user_load(array('uid' => $uid)); $params = array( 'type' => 'notifications-lite', 'subject' => $subject, 'body' => empty($body) ? $subject : $body, ); return drupal_mail('notifications_lite', 'notifications-lite-'.$action, $account->mail, user_preferred_language($account), $params); } } /** * Put simple notification into queue * * @param $uid * User id for destination * @param $subject * Notification subject * @param $body * Optional notification body * @param $action * Optional action name, so other modules can define specific message parts for their actions */ function notifications_lite_add_to_queue($uid, $subject, $body = '', $action = 'default', $params = array()) { // Build and store simple event $event = array( 'module' => 'notifications', 'uid' => 0, 'oid' => $uid, 'type' => 'lite', 'action' => $action, 'params' => array('for-uid' => $uid, 'subject' => $subject, 'body' => $body), ); $event['params'] = array_merge($event['params'], $params); $event = notifications_event($event); } /** * Implementation of hook_mail() */ function notifications_lite_mail($key, &$message, $params) { $message['subject'] = $params['subject']; $message['body'] = $params['body']; } /** * Implementation of hook_notifications() * * It handles event texts */ function notifications_lite_notifications($op, &$arg0, $arg1 = NULL, $arg2 = NULL) { switch ($op) { case 'event load': // $arg0 is event $event = &$arg0; if ($event->type == 'lite') { if (!empty($event->params['subject'])) { $event->text['subject'] = $event->params['subject']; $event->text['digest'] = $event->params['subject']; } if (!empty($event->params['body'])) { $event->text['main'] = $event->params['body']; } } break; // By queueing the event here we gain access to some features, like immediate sending case 'event queued': // $event is arg0 $event = &$arg0; if ($event->type == 'lite') { notifications_lite_queue_event($event); } break; } } /** * Insert lite notification into queue */ function notifications_lite_queue_event($event) { $uid = $event->params['for-uid']; $account = user_load(array('uid' => $uid)); $send_interval = notifications_user_setting('send_interval', $account); $send_method = notifications_user_setting('send_method', $account); $sql = 'INSERT INTO {notifications_queue} (uid, sid, module, eid, send_interval, send_method, cron, created, conditions) '; $sql .= " VALUES(%d, 0, 'notifications', %d, %d, '%s', 1, %d, 0) "; db_query($sql, $uid , $event->eid, $send_interval, $send_method, time()); } /** * Implementation of hook_messaging() */ function notifications_lite_messaging($op, $arg1 = NULL, $arg2 = NULL, $arg3 = NULL, $arg4 = NULL) { switch ($op) { case 'message groups': // Generic notifications event $info['notifications-event-lite'] = array( 'module' => 'notifications_lite', 'name' => t('Simple notifications'), 'help' => t('The subject and main body will be provided by the event itself'), 'description' => t('Simple notifications triggered by other modules using the Notifications Lite API module.'), 'fallback' => 'notifications-event', ); return $info; case 'message keys': $type = $arg1; switch ($type) { case 'notifications-event-lite': // The other parts for these messages will be given by the event itself return array( 'header' => t('Header'), 'footer' => t('Footer'), ); break; } break; case 'messages': $type = $arg1; // Event notifications switch ($type) { case 'notifications-event-lite': return array( 'header' => t("Greetings, [user]."), 'footer' => array( t('This is an automatic message from [site-name]'), t('To manage your subscriptions, browse to [subscriptions-manage]'), ), ); } break; } }