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