Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Fetching contributors…

Cannot retrieve contributors at this time

166 lines (155 sloc) 6.157 kB
<?php
/**
* eMail Notification Library
*
* @package kernel
* @version $Header$
* @author awcolley
*
* created 2003/06/03
*
* Copyright (c) 2004 bitweaver.org
* Copyright (c) 2003 tikwiki.org
* Copyright (c) 2002-2003, Luis Argerich, Garland Foster, Eduardo Polidor, et. al.
* All Rights Reserved. See below for details and a complete list of authors.
* Licensed under the GNU LESSER GENERAL PUBLIC LICENSE. See http://www.gnu.org/copyleft/lesser.html for details
*/
/**
* A library use to store email addresses registered for specific notification events.
*
* Currently used in articles, trackers, users register and wiki.
*
* @package kernel
* @todo does not need to inherit BitBase class. Should hold a BitDb connection as a
* global variable.
*/
class NotificationLib extends BitBase
{
/**
* Lists registered notification events
* @param offset the location to begin listing from
* @param max_records the maximum number of records returned
* @param sort_mode the method of sorting used in the listing
* @param find text used to filter listing
* @return array of registered notification events
*/
function list_mail_events($offset, $max_records, $sort_mode, $find)
{
if ($find)
{
$findesc = '%' . strtoupper( $find ) . '%';
$mid = " where (UPPER(`event`) like ? or UPPER(`email`) like ?)";
$bindvars=array($findesc,$findesc);
}
else
{
$mid = " ";
$bindvars=array();
}
$query = "select * from `".BIT_DB_PREFIX."mail_notifications` $mid order by ".$this->mDb->convertSortmode($sort_mode);
$query_cant = "select count(*) from `".BIT_DB_PREFIX."mail_notifications` $mid";
$result = $this->mDb->query($query,$bindvars,$max_records,$offset);
$cant = $this->mDb->getOne($query_cant,$bindvars);
$ret = array();
while ($res = $result->fetchRow())
{
$ret[] = $res;
}
$retval = array();
$retval["data"] = $ret;
$retval["cant"] = $cant;
return $retval;
}
/**
* Adds an email address for a specified event notification
* @param event the specified event
* @param object the specified object
* @param email the email to remove
* @return array of the notification record
*/
function add_mail_event($event, $object, $email)
{
$query = "insert into `".BIT_DB_PREFIX."mail_notifications`(`event`,`object`,`email`) values(?,?,?)";
$result = $this->mDb->query($query, array($event,$object,$email) );
}
/**
* Removes an email address for a specified event notification
* @param event the specified event
* @param object the specified object
* @param email the email to remove
*/
function remove_mail_event($event, $object, $email)
{
$query = "delete from `".BIT_DB_PREFIX."mail_notifications` where `event`=? and `object`=? and `email`=?";
$result = $this->mDb->query($query,array($event,$object,$email));
}
/**
* Retrieves the email addresses for a specific event
* @param event the specified event
* @param object the specified object
* @return array of email addresses
*/
function get_mail_events($event, $object)
{
$query = "select `email` from `".BIT_DB_PREFIX."mail_notifications` where `event`=? and (`object`=? or `object`='*')";
$result = $this->mDb->query($query, array($event,$object) );
$ret = array();
while ($res = $result->fetchRow())
{
$ret[] = $res["email"];
}
return $ret;
}
/**
* Post changes to registered email addresses related to a change event
* @param object number of the content item being updated
* @param object content_type of the item
* @param object the package that is being updated
* @param object the name of the object
* @param object the name of user making the change
* @param object any comment added to the change
* @param object the content of the change
*
* @todo Improve the generic handling of the messages
* Param information probably needs to be passed as an array, or accessed from Content directly
*/
function post_content_event($contentid, $type, $package, $name, $user, $comment, $data)
{ global $gBitSystem;
$emails = $this->get_mail_events($package.'_page_changes', $type . $contentid);
foreach ($emails as $email) {
global $gBitSmarty;
$gBitSmarty->assign('mail_site', $_SERVER["SERVER_NAME"]);
$gBitSmarty->assign('mail_page', $name );
$gBitSmarty->assign('mail_date', $gBitSystem->getUTCTime());
$gBitSmarty->assign('mail_user', $user );
$gBitSmarty->assign('mail_comment', $comment );
$gBitSmarty->assign('mail_last_version', 1);
$gBitSmarty->assign('mail_data', $data );
$gBitSmarty->assign('mail_machine', httpPrefix());
$gBitSmarty->assign('mail_pagedata', $data );
$mail_data = $gBitSmarty->fetch('bitpackage:'.$package.'/'.$package.'_change_notification.tpl');
@mail($email, $package . tra(' page'). ' ' . $name . ' ' . tra('changed'), $mail_data, "From: ".$gBitSystem->getConfig( 'site_sender_email' )."\r\nContent-type: text/plain;charset=utf-8\r\n" );
}
}
/**
* Notifies registered list of eMail recipients of new user registrations
* @param object name of the new user
*/
function post_new_user_event( $user )
{ global $gBitSystem, $gBitSmarty;
$emails = $this->get_mail_events('user_registers','*');
foreach($emails as $email) {
$gBitSmarty->assign('mail_user',$user);
$gBitSmarty->assign('mail_date',$gBitSystem->getUTCTime());
$gBitSmarty->assign('mail_site',$_SERVER["SERVER_NAME"]);
$mail_data = $gBitSmarty->fetch('bitpackage:users/new_user_notification.tpl');
mail( $email, tra('New user registration'),$mail_data,"From: ".$gBitSystem->getConfig('site_sender_email')."\r\nContent-type: text/plain;charset=utf-8\r\n");
}
}
}
/**
* @global NotificationLib Notification library
*/
global $notificationlib;
$notificationlib = new NotificationLib();
?>
Jump to Line
Something went wrong with that request. Please try again.