X-Git-Url: https://git.mxchange.org/?a=blobdiff_plain;f=plugins%2FRequireValidatedEmail%2FRequireValidatedEmailPlugin.php;h=c14ace1f1e4be5c9e9aa72812e0dfe3e87297ecb;hb=3b3671b228fc271e83a1b2b65276936eda831d28;hp=6c0ef37d519b4f44d5d4b0636069ec6964fbe71e;hpb=9abe6fa66632f1a0ddbfa028e51c6676a4357d5c;p=quix0rs-gnu-social.git diff --git a/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php b/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php index 6c0ef37d51..c14ace1f1e 100644 --- a/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php +++ b/plugins/RequireValidatedEmail/RequireValidatedEmailPlugin.php @@ -24,6 +24,8 @@ * @package StatusNet * @author Craig Andrews * @author Brion Vibber + * @author Evan Prodromou + * @copyright 2011 StatusNet Inc. http://status.net/ * @copyright 2009 Free Software Foundation, Inc http://www.fsf.org * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ @@ -48,14 +50,12 @@ if (!defined('STATUSNET') && !defined('LACONICA')) { * @license http://www.fsf.org/licensing/licenses/agpl-3.0.html GNU Affero General Public License version 3.0 * @link http://status.net/ */ - class RequireValidatedEmailPlugin extends Plugin { /** * Users created before this time will be grandfathered in * without the validation requirement. */ - public $grandfatherCutoff = null; /** @@ -72,9 +72,34 @@ class RequireValidatedEmailPlugin extends Plugin * ), * )); */ - public $trustedOpenIDs = array(); + /** + * Whether or not to disallow login for unvalidated users. + */ + public $disallowLogin = false; + + function onAutoload($cls) + { + $dir = dirname(__FILE__); + + switch ($cls) + { + case 'ConfirmfirstemailAction': + include_once $dir . '/' . strtolower(mb_substr($cls, 0, -6)) . '.php'; + return false; + default: + return true; + } + } + + function onRouterInitialized($m) + { + $m->connect('main/confirmfirst/:code', + array('action' => 'confirmfirstemail')); + return true; + } + /** * Event handler for notice saves; rejects the notice * if user's address isn't validated. @@ -83,13 +108,13 @@ class RequireValidatedEmailPlugin extends Plugin * * @return bool hook result code */ - function onStartNoticeSave($notice) { $user = User::staticGet('id', $notice->profile_id); if (!empty($user)) { // it's a remote notice if (!$this->validated($user)) { - $msg = _m("You must validate your email address before posting."); + // TRANS: Client exception thrown when trying to post notices before validating an e-mail address. + $msg = _m('You must validate your email address before posting.'); throw new ClientException($msg); } } @@ -104,17 +129,15 @@ class RequireValidatedEmailPlugin extends Plugin * * @return bool hook result code */ - function onStartRegistrationTry($action) + function onStartRegisterUser(&$user, &$profile) { - $email = $action->trimmed('email'); + $email = $user->email; if (empty($email)) { - $action->showForm(_m('You must provide an email address to register.')); - return false; + // TRANS: Client exception thrown when trying to register without providing an e-mail address. + throw new ClientException(_m('You must provide an email address to register.')); } - // Default form will run address format validation and reject if bad. - return true; } @@ -137,8 +160,7 @@ class RequireValidatedEmailPlugin extends Plugin // Give other plugins a chance to override, if they can validate // that somebody's ok despite a non-validated email. - // FIXME: This isn't how to do it! Use Start*/End* instead - + // @todo FIXME: This isn't how to do it! Use Start*/End* instead Event::handle('RequireValidatedEmailPlugin_Override', array($user, &$knownGood)); @@ -174,7 +196,6 @@ class RequireValidatedEmailPlugin extends Plugin * * @return bool true if user has a trusted OpenID. */ - function hasTrustedOpenID($user) { if ($this->trustedOpenIDs && class_exists('User_openid')) { @@ -201,7 +222,6 @@ class RequireValidatedEmailPlugin extends Plugin * * @return boolean hook value */ - function onPluginVersion(&$versions) { $versions[] = @@ -213,7 +233,9 @@ class RequireValidatedEmailPlugin extends Plugin 'homepage' => 'http://status.net/wiki/Plugin:RequireValidatedEmail', 'rawdescription' => + // TRANS: Plugin description. _m('Disables posting without a validated email address.')); + return true; } @@ -224,7 +246,6 @@ class RequireValidatedEmailPlugin extends Plugin * * @return boolean hook value */ - function onStartShowNoticeForm($action) { $user = common_current_user(); @@ -235,4 +256,34 @@ class RequireValidatedEmailPlugin extends Plugin } return true; } + + /** + * Prevent unvalidated folks from creating spam groups. + * + * @param Profile $profile User profile we're checking + * @param string $right rights key + * @param boolean $result if overriding, set to true/false has right + * @return boolean hook result value + */ + function onUserRightsCheck(Profile $profile, $right, &$result) + { + if ($right == Right::CREATEGROUP || + ($this->disallowLogin && ($right == Right::WEBLOGIN || $right == Right::API))) { + $user = User::staticGet('id', $profile->id); + if ($user && !$this->validated($user)) { + $result = false; + return false; + } + } + return true; + } + + function onLoginAction($action, &$login) + { + if ($action == 'confirmfirstemail') { + $login = true; + return false; + } + return true; + } }