first steps for email summary
This commit is contained in:
		
							
								
								
									
										119
									
								
								plugins/EmailSummary/EmailSummaryPlugin.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										119
									
								
								plugins/EmailSummary/EmailSummaryPlugin.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,119 @@ | ||||
| <?php | ||||
| /** | ||||
|  * StatusNet - the distributed open-source microblogging tool | ||||
|  * Copyright (C) 2010, StatusNet, Inc. | ||||
|  * | ||||
|  * Sends an email summary of the inbox to users in the network | ||||
|  * | ||||
|  * PHP version 5 | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU Affero General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
|  * GNU Affero General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Affero General Public License | ||||
|  * along with this program.  If not, see <http://www.gnu.org/licenses/>. | ||||
|  * | ||||
|  * @category  Sample | ||||
|  * @package   StatusNet | ||||
|  * @author    Evan Prodromou <evan@status.net> | ||||
|  * @copyright 2010 StatusNet, Inc. | ||||
|  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 | ||||
|  * @link      http://status.net/ | ||||
|  */ | ||||
|  | ||||
| if (!defined('STATUSNET')) { | ||||
|     exit(1); | ||||
| } | ||||
|  | ||||
| /** | ||||
|  * Plugin for sending email summaries to users | ||||
|  * | ||||
|  * @category  Email | ||||
|  * @package   StatusNet | ||||
|  * @author    Brion Vibber <brionv@status.net> | ||||
|  * @author    Evan Prodromou <evan@status.net> | ||||
|  * @copyright 2010 StatusNet, Inc. | ||||
|  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html AGPL 3.0 | ||||
|  * @link      http://status.net/ | ||||
|  */ | ||||
|  | ||||
| class EmailSummaryPlugin extends Plugin | ||||
| { | ||||
|     /** | ||||
|      * Database schema setup | ||||
|      * | ||||
|      * @return boolean hook value | ||||
|      */ | ||||
|  | ||||
|     function onCheckSchema() | ||||
|     { | ||||
|         $schema = Schema::get(); | ||||
|  | ||||
|         // For storing user-submitted flags on profiles | ||||
|  | ||||
|         $schema->ensureTable('email_summary_status', | ||||
|                              array(new ColumnDef('user_id', 'integer', null, | ||||
|                                                  false, 'PRI'), | ||||
|                                    new ColumnDef('send_summary', 'tinyint', null, | ||||
| 						 false, null, 1), | ||||
|                                    new ColumnDef('last_summary', 'datetime', null, | ||||
| 						 true), | ||||
|                                    new ColumnDef('created', 'datetime', null, | ||||
| 						 false), | ||||
|                                    new ColumnDef('modified', 'datetime', null, | ||||
| 						 false), | ||||
| 				   ) | ||||
| 			     ); | ||||
|         return true; | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Load related modules when needed | ||||
|      * | ||||
|      * @param string $cls Name of the class to be loaded | ||||
|      * | ||||
|      * @return boolean hook value; true means continue processing, false means stop. | ||||
|      *  | ||||
|      */ | ||||
|      | ||||
|     function onAutoload($cls) | ||||
|     { | ||||
|         $dir = dirname(__FILE__); | ||||
|  | ||||
|         switch ($cls) | ||||
|         { | ||||
| 	 case 'Email_summary_status': | ||||
|             include_once $dir . '/'.$cls.'.php'; | ||||
|             return false; | ||||
| 	 default: | ||||
|             return true; | ||||
|         } | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Version info for this plugin | ||||
|      * | ||||
|      * @param array &$versions array of version data | ||||
|      * | ||||
|      * @return boolean hook value; true means continue processing, false means stop. | ||||
|      *  | ||||
|      */ | ||||
|      | ||||
|     function onPluginVersion(&$versions) | ||||
|     { | ||||
|         $versions[] = array('name' => 'EmailSummary', | ||||
|                             'version' => STATUSNET_VERSION, | ||||
|                             'author' => 'Evan Prodromou', | ||||
|                             'homepage' => 'http://status.net/wiki/Plugin:EmailSummary', | ||||
|                             'rawdescription' => | ||||
|                             _m('Send an email summary of the inbox to users.')); | ||||
|         return true; | ||||
|     } | ||||
| } | ||||
							
								
								
									
										167
									
								
								plugins/EmailSummary/Email_summary_status.php
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										167
									
								
								plugins/EmailSummary/Email_summary_status.php
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,167 @@ | ||||
| <?php | ||||
| /** | ||||
|  * Data class for email summary status | ||||
|  * | ||||
|  * PHP version 5 | ||||
|  * | ||||
|  * @category Data | ||||
|  * @package  StatusNet | ||||
|  * @author   Evan Prodromou <evan@status.net> | ||||
|  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 | ||||
|  * @link     http://status.net/ | ||||
|  * | ||||
|  * StatusNet - the distributed open-source microblogging tool | ||||
|  * Copyright (C) 2010, StatusNet, Inc. | ||||
|  * | ||||
|  * This program is free software: you can redistribute it and/or modify | ||||
|  * it under the terms of the GNU Affero General Public License as published by | ||||
|  * the Free Software Foundation, either version 3 of the License, or | ||||
|  * (at your option) any later version. | ||||
|  * | ||||
|  * This program is distributed in the hope that it will be useful, | ||||
|  * but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
|  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.     See the | ||||
|  * GNU Affero General Public License for more details. | ||||
|  * | ||||
|  * You should have received a copy of the GNU Affero General Public License | ||||
|  * along with this program. If not, see <http://www.gnu.org/licenses/>. | ||||
|  */ | ||||
|  | ||||
| if (!defined('STATUSNET')) { | ||||
|     exit(1); | ||||
| } | ||||
|  | ||||
| require_once INSTALLDIR . '/classes/Memcached_DataObject.php'; | ||||
|  | ||||
| /** | ||||
|  * Data class for email summaries | ||||
|  *  | ||||
|  * Email summary information for users | ||||
|  * | ||||
|  * @category Action | ||||
|  * @package  StatusNet | ||||
|  * @author   Evan Prodromou <evan@status.net> | ||||
|  * @license  http://www.fsf.org/licensing/licenses/agpl.html AGPLv3 | ||||
|  * @link     http://status.net/ | ||||
|  * | ||||
|  * @see      DB_DataObject | ||||
|  */ | ||||
|  | ||||
| class Email_summary_status extends Memcached_DataObject | ||||
| { | ||||
|     public $__table = 'email_summary_status'; // table name | ||||
|     public $user_id;                         // int(4)  primary_key not_null | ||||
|     public $send_summary;                    // tinyint not_null | ||||
|     public $last_summary;                    // int(4)  primary_key not_null | ||||
|     public $created;                         // int(4)  primary_key not_null | ||||
|     public $modified;                        // int(4)  primary_key not_null | ||||
|  | ||||
|     /** | ||||
|      * Get an instance by key | ||||
|      * | ||||
|      * @param string $k Key to use to lookup (usually 'user_id' for this class) | ||||
|      * @param mixed  $v Value to lookup | ||||
|      * | ||||
|      * @return Email_summary_status object found, or null for no hits | ||||
|      * | ||||
|      */ | ||||
|     function staticGet($k, $v=null) | ||||
|     { | ||||
|         return Memcached_DataObject::staticGet('email_summary_status', $k, $v); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * return table definition for DB_DataObject | ||||
|      * | ||||
|      * DB_DataObject needs to know something about the table to manipulate | ||||
|      * instances. This method provides all the DB_DataObject needs to know. | ||||
|      * | ||||
|      * @return array array of column definitions | ||||
|      */ | ||||
|  | ||||
|     function table() | ||||
|     { | ||||
|         return array('user_id' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, | ||||
| 		     'send_summary' => DB_DATAOBJECT_INT + DB_DATAOBJECT_NOTNULL, | ||||
| 		     'last_summary' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, | ||||
| 		     'created' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME, | ||||
| 		     'modified' => DB_DATAOBJECT_DATE + DB_DATAOBJECT_TIME); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * return key definitions for DB_DataObject | ||||
|      * | ||||
|      * @return array list of key field names | ||||
|      */ | ||||
|  | ||||
|     function keys() | ||||
|     { | ||||
|         return array_keys($this->keyTypes()); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * return key definitions for Memcached_DataObject | ||||
|      * | ||||
|      * Our caching system uses the same key definitions, but uses a different | ||||
|      * method to get them. This key information is used to store and clear | ||||
|      * cached data, so be sure to list any key that will be used for static | ||||
|      * lookups. | ||||
|      * | ||||
|      * @return array associative array of key definitions, field name to type: | ||||
|      *         'K' for primary key: for compound keys, add an entry for each component; | ||||
|      *         'U' for unique keys: compound keys are not well supported here. | ||||
|      */ | ||||
|     function keyTypes() | ||||
|     { | ||||
|         return array('user_id' => 'K'); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Magic formula for non-autoincrementing integer primary keys | ||||
|      * | ||||
|      * @return array magic three-false array that stops auto-incrementing. | ||||
|      */ | ||||
|      | ||||
|     function sequenceKey() | ||||
|     { | ||||
|         return array(false, false, false); | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Helper function | ||||
|      * | ||||
|      * @param integer $user_id ID of the user to get a count for | ||||
|      * | ||||
|      * @return int flag for whether to send this user a summary email | ||||
|      */ | ||||
|  | ||||
|     static function getSendSummary($user_id) | ||||
|     { | ||||
|         $ess = Email_summary_status::staticGet('user_id', $user_id); | ||||
|  | ||||
| 	if (!empty($ess)) { | ||||
| 	    return $ess->send_summary; | ||||
| 	} else { | ||||
| 	    return 1; | ||||
| 	} | ||||
|     } | ||||
|  | ||||
|     /** | ||||
|      * Get email summary status for a user | ||||
|      * | ||||
|      * @param integer $user_id ID of the user to get a count for | ||||
|      * | ||||
|      * @return Email_summary_status instance for this user, with count already incremented. | ||||
|      */ | ||||
|  | ||||
|     static function getLastSummary($user_id) | ||||
|     { | ||||
|         $ess = Email_summary_status::staticGet('user_id', $user_id); | ||||
| 	 | ||||
| 	if (!empty($ess)) { | ||||
| 	    return $ess->last_summary; | ||||
| 	} else { | ||||
| 	    return 1; | ||||
| 	} | ||||
|     } | ||||
| } | ||||
		Reference in New Issue
	
	Block a user