forked from GNUsocial/gnu-social
		
	Add a "grandfather" creation date cutoff to RequireValidatedEmail plugin; will allow us to use this for temporary emergency moderation of new registrations without affecting older accounts.
This commit is contained in:
		
							
								
								
									
										21
									
								
								plugins/RequireValidatedEmail/README
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										21
									
								
								plugins/RequireValidatedEmail/README
									
									
									
									
									
										Normal file
									
								
							| @@ -0,0 +1,21 @@ | |||||||
|  | This plugin disables posting for accounts that do not have a | ||||||
|  | validated email address. | ||||||
|  |  | ||||||
|  | Example: | ||||||
|  |  | ||||||
|  |   addPlugin('RequireValidatedEmail'); | ||||||
|  |  | ||||||
|  | If you don't want to apply the validationr equirement to existing | ||||||
|  | accounts, you can specify a cutoff date to grandfather in users | ||||||
|  | registered prior to that timestamp. | ||||||
|  |  | ||||||
|  |   addPlugin('RequireValidatedEmail', | ||||||
|  |             array('grandfatherCutoff' => 'Dec 7, 2009'); | ||||||
|  |  | ||||||
|  |  | ||||||
|  | Todo: | ||||||
|  | * make email field required on registration form | ||||||
|  | * add a more visible indicator that validation is still outstanding | ||||||
|  | * localization for UI strings | ||||||
|  | * test with XMPP, API posting | ||||||
|  |  | ||||||
| @@ -21,7 +21,7 @@ | |||||||
|  * |  * | ||||||
|  * @category  Plugin |  * @category  Plugin | ||||||
|  * @package   StatusNet |  * @package   StatusNet | ||||||
|  * @author    Craig Andrews <candrews@integralblue.com> |  * @author    Craig Andrews <candrews@integralblue.com>, Brion Vibber <brion@status.net> | ||||||
|  * @copyright 2009 Craig Andrews http://candrews.integralblue.com |  * @copyright 2009 Craig Andrews http://candrews.integralblue.com | ||||||
|  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 |  * @license   http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 | ||||||
|  * @link      http://status.net/ |  * @link      http://status.net/ | ||||||
| @@ -33,20 +33,68 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { | |||||||
|  |  | ||||||
| class RequireValidatedEmailPlugin extends Plugin | class RequireValidatedEmailPlugin extends Plugin | ||||||
| { | { | ||||||
|  |     // Users created before this time will be grandfathered in | ||||||
|  |     // without the validation requirement. | ||||||
|  |     public $grandfatherCutoff=null; | ||||||
|  |  | ||||||
|     function __construct() |     function __construct() | ||||||
|     { |     { | ||||||
|         parent::__construct(); |         parent::__construct(); | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Event handler for notice saves; rejects the notice | ||||||
|  |      * if user's address isn't validated. | ||||||
|  |      * | ||||||
|  |      * @param Notice $notice | ||||||
|  |      * @return bool hook result code | ||||||
|  |      */ | ||||||
|     function onStartNoticeSave($notice) |     function onStartNoticeSave($notice) | ||||||
|     { |     { | ||||||
|         $user = User::staticGet('id', $notice->profile_id); |         $user = User::staticGet('id', $notice->profile_id); | ||||||
|         if (!empty($user)) { // it's a remote notice |         if (!empty($user)) { // it's a remote notice | ||||||
|             if (empty($user->email)) { |             if (!$this->validated($user)) { | ||||||
|                 throw new ClientException(_("You must validate your email address before posting.")); |                 throw new ClientException(_("You must validate your email address before posting.")); | ||||||
|             } |             } | ||||||
|         } |         } | ||||||
|         return true; |         return true; | ||||||
|     } |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Check if a user has a validated email address or has been | ||||||
|  |      * otherwise grandfathered in. | ||||||
|  |      * | ||||||
|  |      * @param User $user | ||||||
|  |      * @return bool | ||||||
|  |      */ | ||||||
|  |     protected function validated($user) | ||||||
|  |     { | ||||||
|  |         if ($this->grandfathered($user)) { | ||||||
|  |             return true; | ||||||
|  |         } | ||||||
|  |  | ||||||
|  |         // The email field is only stored after validation... | ||||||
|  |         // Until then you'll find them in confirm_address. | ||||||
|  |         return !empty($user->email); | ||||||
|  |     } | ||||||
|  |  | ||||||
|  |     /** | ||||||
|  |      * Check if a user was created before the grandfathering cutoff. | ||||||
|  |      * If so, we won't need to check for validation. | ||||||
|  |      * | ||||||
|  |      * @param User $user | ||||||
|  |      * @return bool | ||||||
|  |      */ | ||||||
|  |     protected function grandfathered($user) | ||||||
|  |     { | ||||||
|  |         if ($this->grandfatherCutoff) { | ||||||
|  |             $created = strtotime($user->created . " GMT"); | ||||||
|  |             $cutoff = strtotime($this->grandfatherCutoff); | ||||||
|  |             if ($created < $cutoff) { | ||||||
|  |                 return true; | ||||||
|  |             } | ||||||
|  |         } | ||||||
|  |         return false; | ||||||
|  |     } | ||||||
| } | } | ||||||
|  |  | ||||||
|   | |||||||
		Reference in New Issue
	
	Block a user