PDA

Zobacz pełną wersję : wysyłanie maila userowi z informacją, że jego konto zostało odblokowane



tom3cz3k
22-09-2010, 14:05
Witam,
tym razem staram się zrobić wysyłanie maila do użytkownika z informacją, że ich konto zostało odblokowane.
(Użytkownik po zarejestrowaniu się z sklepie musi zostać odblokowany przez administratora w sklepie - moderacja użytkowników).

Mail powinien się wysyłać w chwili, gdy admin kliknie na ikonkę (czerwony X) na stronie /administrator/index.php?option=com_users.

Znalazłem plik, który wydaje mi się, że właśnie za to odpowiada:
/administrator/components/com_users/controller.php
W nim jest funkcja block() i wydawało mi się, że to ona odpowiada za blokowanie i odblokowywanie (włączanie/wyłączanie) usera. Umieściłem w tej funkcji echo, zeby sprawdzić czy aby na pewno to jest to miejsce i się rozczarowałem.

Czy ktoś wie, gdzie powinienem tego szukać? Pozdrawiam serdecznie

Jola
23-09-2010, 03:40
Witam,
proponuje zmianę w funkcji activateUser() plik libraries/joomla/user/helper.php
Za odblokowanie użytkownika odpowiada wpis: $user->set('block', '0');
:)

tom3cz3k
23-09-2010, 10:18
Bardzo dziękuję za odpowiedź, jednak chyba to nie jest to miejsce.
Dodałem na początku tej funkcji wpis:

die("test!");I niestety nie zatrzymało się aktywowanie usera.
Natomiast w pliku o którym pisałem wcześniej: /administrator/components/com_users/controller.php gdy dodałem taki sam wpis w funkcji block w miejscu:


else
{
$user =& JUser::getInstance((int)$id);
$user->block = $block;
$user->save();

if($block)
{
JRequest::setVar( 'task', 'block' );
JRequest::setVar( 'cid', array($id) );

// delete user acounts active sessions
$this->logout();

die("test");
}
To zatrzymała mi się strona w chwili gdy chciałem usera zablokować. Niestety nadal nie wiem gdzie jest odblokowywanie go.

Nie mam pojęcia gdzie jest funkcja unblock?! Próbowałem wyszukać ją pełnotekstowo, ale bez skutku.

---------- Post dodany o 10:18 ---------- Poprzedni post był o 09:09 ----------

Właśnie wpadłem na rozwiązanie, więc się od razu nim podzielę. Wystarczyło dodać malutki kod do funkcji block().

if(!$block){
$user1 =& JUser::getInstance((int)$id);
$config= new jConfig();
$mailSender =& JFactory::getMailer();
$mailSender ->setSender( array( $config->mailfrom ,$config->fromname) );
$mailSender ->addRecipient( $user1->email );
$mailSender ->setSubject( 'Sklep - użytkownik został aktywowany' );
$mailSender->isHTML(true);
$mailSender ->setBody( 'Witamy w sklepie internetowym <br />Konto użytkownika '.$user1->name.' ('.$user1->username.') zostało aktywowane. <br /><br /><br />Wiadomość wygenerowana automatycznie, prosimy nie odpowiadać na nią.');
$mailSender ->Send();
}

Na wszelki wypadek wklejam całą funkcję.

/**
* Disables the user account
*/
function block( )
{

// Check for request forgeries
JRequest::checkToken() or jexit( 'Invalid Token' );

$db =& JFactory::getDBO();
$acl =& JFactory::getACL();
$currentUser =& JFactory::getUser();

$cid = JRequest::getVar( 'cid', array(), '', 'array' );
$block = $this->getTask() == 'block' ? 1 : 0;


JArrayHelper::toInteger( $cid );

if (count( $cid ) < 1) {
JError::raiseError(500, JText::_( 'Select a User to '.$this->getTask(), true ) );

}
foreach ($cid as $id)
{

// check for a super admin ... can't delete them
$objectID = $acl->get_object_id( 'users', $id, 'ARO' );
$groups = $acl->get_object_groups( $objectID, 'ARO' );
$this_group = strtolower( $acl->get_group_name( $groups[0], 'ARO' ) );

$success = false;
if ( $this_group == 'super administrator' )
{
$msg = JText::_( 'You cannot block a Super Administrator' );
}
else if ( $id == $currentUser->get( 'id' ) )
{
$msg = JText::_( 'You cannot block Yourself!' );
}
else if ( ( $this_group == 'administrator' ) && ( $currentUser->get( 'gid' ) == 24 ) )
{
$msg = JText::_( 'WARNBLOCK' );
}
else
{
$user =& JUser::getInstance((int)$id);
$count = 2;

if ( $user->get( 'gid' ) == 25 )
{
// count number of active super admins
$query = 'SELECT COUNT( id )'
. ' FROM #__users'
. ' WHERE gid = 25'
. ' AND block = 0'
;
$db->setQuery( $query );
$count = $db->loadResult();
}

if ( $count <= 1 && $user->get( 'gid' ) == 25 )
{
// cannot delete Super Admin where it is the only one that exists
$msg = "You cannot block this Super Administrator as it is the only active Super Administrator for your site";
}
else
{
$user =& JUser::getInstance((int)$id);
$user->block = $block;
$user->save();

if(!$block){
$user1 =& JUser::getInstance((int)$id);
$config= new jConfig();

$mailSender =& JFactory::getMailer();
$mailSender ->setSender( array( $config->mailfrom ,$config->fromname) );
$mailSender ->addRecipient( $user1->email );
$mailSender ->setSubject( 'Sklep - użytkownik został aktywowany' );
$mailSender->isHTML(true);
$mailSender ->setBody( 'Witamy w sklepie internetowym <br />
Konto użytkownika '.$user1->name.' ('.$user1->username.') zostało aktywowane. <br /><br /><br />Wiadomość wygenerowana automatycznie, prosimy nie odpowiadać na nią.');
$mailSender ->Send();
}

if($block)
{
JRequest::setVar( 'task', 'block' );
JRequest::setVar( 'cid', array($id) );

// delete user acounts active sessions
$this->logout();
}
}
}
}

$this->setRedirect( 'index.php?option=com_users', $msg);
}
Może komuś się kiedyś przyda. :) Pozdrawiam wszystkich

zwiastun
23-09-2010, 11:35
Proszę Cię, umieść tę informację na wiki w poradach dla Virtuemart
http://www.wiki.joomla.pl/index.php/VirtueMart/R%C3%B3%C5%BCne_rozwi%C4%85zania