From c757506a0a598593115c377a6e4acf399f4d2b83 Mon Sep 17 00:00:00 2001 From: Arun Persaud Date: Sun, 21 Jun 2009 23:23:15 -0700 Subject: [PATCH] added option for email digest you can now select to get emails only every N hours. They are saved in the database and a cron script will send them out. --- create_database.sql | 12 +++++ digest.php | 104 ++++++++++++++++++++++++++++++++++++++++ include/db.php | 54 +++++++++++++++++++-- include/functions.php | 79 ++++++++++++++++-------------- include/preferences.php | 70 +++++++++++++++++++++++++-- update_db.php | 42 ++++++++++++++++ 6 files changed, 315 insertions(+), 46 deletions(-) create mode 100644 digest.php create mode 100644 update_db.php diff --git a/create_database.sql b/create_database.sql index 339c337..40a008a 100644 --- a/create_database.sql +++ b/create_database.sql @@ -465,3 +465,15 @@ create table user_openids ( user_id int not null, index (user_id) ); + +DROP TABLE IF EXISTS `digest_email`; +create table digest_email ( + `id` int(11) NOT NULL auto_increment, + `email` varchar(255) default null, + `create_date` timestamp NOT NULL default '0000-00-00 00:00:00', + `content` text, + UNIQUE KEY `id` (`id`), + index (email) +); + + diff --git a/digest.php b/digest.php new file mode 100644 index 0000000..c93117a --- /dev/null +++ b/digest.php @@ -0,0 +1,104 @@ + \ No newline at end of file diff --git a/include/db.php b/include/db.php index b8b184d..cc40f67 100644 --- a/include/db.php +++ b/include/db.php @@ -114,6 +114,12 @@ function DB_query_array_all($query) return $result; } +function DB_get_version() +{ + $version = DB_query_array('SELECT version FROM Version'); + return $version[0]; +} + function DB_get_passwd_by_name($name) { $r = DB_query_array("SELECT password FROM User WHERE fullname=".DB_quote_smart($name).""); @@ -700,6 +706,7 @@ function DB_get_PREF($myid) /* set defaults */ $PREF['cardset'] = 'english'; $PREF['email'] = 'emailnonaddict'; + $PREF['digest'] = 'digest-off'; $PREF['autosetup'] = 'no'; $PREF['sorting'] = 'high-low'; $PREF['open_for_games'] = 'yes'; @@ -716,13 +723,18 @@ function DB_get_PREF($myid) { case 'cardset': /* licence only valid until then */ - if($pref[1]=="altenburg" && (time()-strtotime( "2009-12-31 23:59:59")<0) ) - $PREF["cardset"]="altenburg"; + if($pref[1]=='altenburg' && (time()-strtotime( '2009-12-31 23:59:59')<0) ) + $PREF['cardset']='altenburg'; break; case 'email': - if($pref[1]=="emailaddict") - $PREF["email"]="emailaddict"; + if($pref[1]=='emailaddict') + $PREF['email']='emailaddict'; + break; + + case 'digest': + if($pref[1]) + $PREF['digest'] = $pref[1]; break; case 'autosetup': @@ -1155,4 +1167,38 @@ function DB_get_number_of_tricks($gameid,$position) $r = DB_query_array("SELECT COUNT(winner) FROM Trick Where game_id='$gameid' and winner='$position'"); return $r[0]; } + +function DB_digest_insert_email($To,$message) +{ + DB_query("INSERT INTO digest_email VALUES (NULL,".DB_quote_smart($To).",NULL,".DB_quote_smart($message).")"); + return; +} + +function DB_get_digest_users() +{ + $users = array(); + + $result = DB_query("SELECT user_id FROM User_Prefs WHERE pref_key='digest' and value <> 'digest-off'"); + while($r = DB_fetch_array($result)) + $users[]=$r[0]; + + return $users; +} + +function DB_get_digest_message_by_email($email) +{ + $messages = array(); + + $result = DB_query("SELECT id,content FROM digest_email Where email='$email'"); + while($r = DB_fetch_array($result)) + $messages[]=$r; + + return $messages; +} + +function DB_digest_delete_message($id) +{ + DB_query("Delete from digest_email where id='$id'"); +} + ?> \ No newline at end of file diff --git a/include/functions.php b/include/functions.php index 3e21e6d..43fbb24 100644 --- a/include/functions.php +++ b/include/functions.php @@ -58,51 +58,56 @@ function mymail($uid,$subject,$message) { global $EmailName; - /* check if user wants email right away or if we should save it in - * the database for later delivery - */ - if(0) + /* do we send the email right away or save it in the database? */ + $send_now = 1; + + /* add standard header and footer */ + $subject = "$EmailName".$subject; + + /* standard goodbye */ + $footer = "\nHave a nice day\n". + " your E-Doko service department\n\n". + "-- \n". + "You can change your mail delivery mode in the preference menu.\n". + 'web: http://doko.nubati.net '. + 'help: http://wiki.nubati.net/EmailDoko '. + 'bugs: http://wiki.nubati.net/EmailDokoIssues'; + + if(is_array($uid)) { - /* send to database (not yet implemented)*/ - } - else - { - /* send email right away */ - - /* add standard header and footer */ - $subject = "$EmailName".$subject; + /* send email to more than one person */ - /* standard goodbye */ - $footer = "\nHave a nice day\n". - " your E-Doko service department\n\n". - "-- \n". - "You can change your mail delivery mode in the preference menu.\n". - 'web: http://doko.nubati.net '. - 'help: http://wiki.nubati.net/EmailDoko '. - 'bugs: http://wiki.nubati.net/EmailDokoIssues'; + $header = "Hello all\n\n"; - if(is_array($uid)) + foreach($uid as $user) { - /* send email to more than one person */ + $all[] = DB_get_email('userid',$user); + } + $To = implode(",",$all); + } + else + { + /* standard greeting */ + $name = DB_get_name('userid',$uid); + $header = "Hello $name\n\n"; - $header = "Hello all\n\n"; + $To = DB_get_email('userid',$uid); - foreach($uid as $user) - { - $all[] = DB_get_email('userid',$user); - } - $To = implode(",",$all); - } - else - { - /* standard greeting */ - $name = DB_get_name('userid',$uid); - $header = "Hello $name\n\n"; + /* check if user wants email right away or if we should save it in + * the database for later delivery + */ - $To = DB_get_email('userid',$uid); - } + $PREF = DB_get_PREF($uid); + if( $PREF['digest'] != 'digest-off' ) + $send_now = 0; + } - sendmail($To,$subject,$header.$message.$footer); + if($send_now) + sendmail($To,$subject,$header.$message.$footer); + else + { + /* store email in database */ + DB_digest_insert_email($To,$message); } } diff --git a/include/preferences.php b/include/preferences.php index 4abaf3b..8b3937d 100644 --- a/include/preferences.php +++ b/include/preferences.php @@ -23,6 +23,7 @@ $changed_sorting = 0; $changed_openforgames = 0; $changed_vacation = 0; $changed_openid = 0; +$changed_digest = 0; display_user_menu($myid); @@ -172,6 +173,24 @@ if(myisset("notify")) } } +if(myisset("digest")) + { + $digest=$_REQUEST['digest']; + if($digest != $PREF['digest']) + { + /* check if we already have an entry for the user, if so change it, if not create new one */ + $result = DB_query("SELECT * from User_Prefs". + " WHERE user_id='$myid' AND pref_key='digest'" ); + if( DB_fetch_array($result)) + $result = DB_query("UPDATE User_Prefs SET value=".DB_quote_smart($digest). + " WHERE user_id='$myid' AND pref_key='digest'" ); + else + $result = DB_query("INSERT INTO User_Prefs VALUES(NULL,'$myid','digest',". + DB_quote_smart($digest).")"); + $changed_digest=1; + } + } + if(myisset("autosetup")) { $autosetup = $_REQUEST['autosetup']; @@ -301,15 +320,56 @@ if($PREF['email']=="emailaddict") echo " \n"; echo " \n"; } - else - { - echo " \n"; - echo " \n"; - } +else + { + echo " \n"; + echo " \n"; + } echo " "; if($changed_notify) echo "changed"; echo " \n"; +echo " Digest: \n"; +echo " "; +if($changed_digest) echo "changed"; +echo " \n"; + + echo " Autosetup: \n"; echo "