* @version 0.0.0 * @copyright Copyright (c) 2007 - 2009 Roland Haeder, this is free software * @license GNU GPL 3.0 or any newer version * @link http://www.ship-simu.org * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU 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 General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see . */ class WebResendLinkCommand extends BaseCommand implements Commandable { /** * Protected constructor * * @return void */ protected function __construct () { // Call parent constructor parent::__construct(__CLASS__); } /** * Creates an instance of this class * * @param $resolverInstance An instance of a command resolver class * @return $commandInstance An instance a prepared command class */ public final static function createWebResendLinkCommand (CommandResolver $resolverInstance) { // Get new instance $commandInstance = new WebResendLinkCommand(); // Set the application instance $commandInstance->setResolverInstance($resolverInstance); // Return the prepared instance return $commandInstance; } /** * Executes the given command with given request and response objects * * @param $requestInstance An instance of a class with an Requestable interface * @param $responseInstance An instance of a class with an Responseable interface * @return void * @throws InvalidInterfaceException If the user class does not implement ManageableMember */ public function execute (Requestable $requestInstance, Responseable $responseInstance) { // Get user instance from registry $userInstance = Registry::getRegistry()->getInstance('user'); // Does the user instance implement ManageableMember? if (!$userInstance instanceof ManageableMember) { // Throw exception here throw new InvalidInterfaceException(array($userInstance, 'ManageableMember'), self::EXCEPTION_REQUIRED_INTERFACE_MISSING); } // END - if // Get an application instance $appInstance = $this->getResolverInstance()->getApplicationInstance(); // Get a RNG instance (Random Number Generator) $rngInstance = ObjectFactory::createObjectByConfiguredName('rng_class'); // Generate a pseudo-random string $randomString = $rngInstance->randomString(255); // Get a crypto instance $cryptoInstance = ObjectFactory::createObjectByConfiguredName('crypto_class'); // Hash and encrypt the string $hashedString = $cryptoInstance->hashString($cryptoInstance->encryptString($randomString)); // Update the user class $userInstance->updateDatabaseField(UserDatabaseWrapper::DB_COLUMN_CONFIRM_HASH, $hashedString); // Re-set config entry to mailer engine $this->getConfigInstance()->setConfigEntry('template_class', $this->getConfigInstance()->readConfig('mail_template_class')); // Prepare the template engine $templateInstance = $this->prepareTemplateInstance($appInstance); // Assign the application data with the template engine $templateInstance->assignApplicationData($appInstance); // Get a mailer class $mailerInstance = ObjectFactory::createObjectByConfiguredName('mailer_class', array($templateInstance, $appInstance, 'resend_link')); // Set this mailer in our template engine $templateInstance->setMailerInstance($mailerInstance); // Add template variables we shall get $mailerInstance->addConfigTemplateVariable('base_url'); $mailerInstance->addConfigTemplateVariable('admin_email'); $mailerInstance->addValueTemplateVariable('confirm_hash'); $mailerInstance->addValueTemplateVariable('username'); $mailerInstance->addValueTemplateVariable('email'); // Add the value instance for the confirmation hash $mailerInstance->addValueInstance('confirm_hash', $userInstance); $mailerInstance->addValueInstance('username', $userInstance); $mailerInstance->addValueInstance('email', $userInstance); // Add the recipient $mailerInstance->addRecipientByUserInstance($userInstance); // Use subject line from template $mailerInstance->useSubjectFromTemplate(); // Send the email out $mailerInstance->deliverEmail($responseInstance); // Send out notification to admin (depends on settings) $mailerInstance->sendAdminNotification($responseInstance); } /** * Adds extra filters to the given controller instance * * @param $controllerInstance A controller instance * @param $requestInstance An instance of a class with an Requestable interface * @return void */ public function addExtraFilters (Controller $controllerInstance, Requestable $requestInstance) { // Filter for checking if account is unconfirmed $controllerInstance->addPreFilter(ObjectFactory::createObjectByConfiguredName('user_unconfirmed_filter')); } } // [EOF] ?>