Welcome, Guest
Username: Password: Remember me
  • Page:
  • 1

TOPIC:

Mail Publishers only after form submission. 17 Feb 2014 03:20 #12210

Hi all, I see how to add a mail function into a component, and thanks for those who helped the user in the post below. I am still learning php code and joomla core and I must admit I am learning slowly.

Forum Post 6821- send mail after saving

// Init mail send
$mail =& JFactory::getMailer();
$config =& JFactory::getConfig();
$mail->isHTML(true);
$mail->addRecipient('This email address is being protected from spambots. You need JavaScript enabled to view it.');
$body = "Here is my text";
$mailSubject = "This is my subject"
$mail->setBody($body);
$mail->setSubject($mailSubject);
$mail->Encoding = 'base64';

if ($mail->Send()) {
echo "Mail sent successfully.";
$app = JFactory::getApplication();
$app->enqueueMessage('Mail sent');
} else {
echo "An error occurred. Mail was not sent.";
}


What I am trying to determine is if the mail code in the above example could be modified to mail to everyone that has publisher access on the joomla site and how you would also provide a link in the email back to the specific entry that was submitted, regardless of what form the mail has been sent from.

I really wish I knew how to do this myself. Appreciate any help.

Thanks in advance..

Please Log in or Create an account to join the conversation.

Last edit: by jonathanbell. Reason: URL wrong in post

Mail Publishers only after form submission. 17 Feb 2014 11:55 #12212

  • admin
  • admin's Avatar
  • Offline
  • Administrator
  • Administrator
  • Chef
  • Posts: 3711
  • Thank you received: 986
Firstly, replace the '=&' per '=' only. (Better php syntax because it is already a pointer)

$mail->addRecipient()

is the function you must use to add more recipients.
If you want to get all publishers, you need to do it manually with a SQL proper query.
It is possible to check ACL of a user, but not to load all users FROM an ACL.
Coding is now a piece of cake
The following user(s) said Thank You: jonathanbell

Please Log in or Create an account to join the conversation.

Mail Publishers only after form submission. 18 Feb 2014 09:31 #12220

  • JoomGuy
  • JoomGuy's Avatar
  • Offline
  • Moderator
  • Moderator
  • Joomla Enthusiast, Lover of Cooking
  • Posts: 1115
  • Thank you received: 195
This should get you your authors:
jimport( 'joomla.access.access' ); // import access
$authors = JAccess::getUsersByGroup(3); // get all users by group
Simply replace the argument (3) with your authors group id and you're good to go.

This will give you an indexed array of user ids like:
array(
    '0' =>  71
    '1' =>  75
    '2' =>  79
);
Therefore, you can easily iterate it in a foreach loop to grab the user's email like:
$authorEmails = array();                        // To store emails 
foreach($authors as $userId){                   // Loop through all user ID's we just got
    $email = JFactory::getUser($userId)->email; // Get the user email from JUser Object
    if($email !== '')                           // If it's not an empty string
        $authorEmails[] = $email;               // Push the value into the array
}

This will result in another indexed array like
array(
    '0' =>  "user71@domain.com"
    '1' =>  "user75@domain.com"
    '2' =>  "user79@domain.com"
);
So now you can easily access all of the author emails to pipe in to your email.

PUTTING IT ALL TOGETHER
The whole thing should look something like:
// Get the authors 
jimport( 'joomla.access.access' );                  // import JAccess
$authors = JAccess::getUsersByGroup(2);             // replace the argument (3) with your authors group id
$app = JFactory::getApplication();                  // Get application
// iterate $authors to get all authors user ID's
if(!empty($authors)){
    // Init mail send
    $mail   = JFactory::getMailer();                   // New mailer object instance
    $config = JFactory::getConfig();                   // get the config (don't know why because this is not referenced anywhere below)
    $mail->isHTML(true);                               // set the mode to HTML
    
    // iterate $authors to get all authors user ID's
    foreach($authors as $userId){                       // Loop through all user ID's we just got
        $email = JFactory::getUser($userId)->email;     // Get the user email from JUser Object
        if($email !== '')                               // If it's not an empty string
            $mail->addRecipient($email);                // Add the authors email as a recipient
    }// End foreach

    // Continue setting email properties
    $body = "Here is my text";                          // Build the Message Body string
    $mailSubject = "This is my subject";                // Build the Subject string
    $mail->setBody($body);                              // Set body in the mail object
    $mail->setSubject($mailSubject);                    // Set subject in the mail object
    $mail->Encoding = 'base64';                         // Set mail encoding

    // Send email(s)
    if($mail->Send())                                   // If success         
        $app->enqueueMessage('Mail sent');              // Output a success message
    else                                                // Otherwise,
        $app->enqueueMessage(                           // Output a failure message
            "An error occurred. Mail was not sent.",    // Add Message
            "error"                                     // Set message type to error
        ); 
}else{
    $app->enqueueMessage(                           // Output a failure message
            "Error: No recipients. Mail cancelled. ",    // Add Message
            "error"                                     // Set message type to error
        ); 
}
N.B. When you put this into production, it would be a good idea to remove the last else statement as you wouldn't really want to output this message to your users. (
else{
    $app->enqueueMessage(                           // Output a failure message
            "Error: No recipients. Mail cancelled. ",    // Add Message
            "error"                                     // Set message type to error
        ); 
}
) The same could also be said about all other messages too since there's no real reason to let your users know that an email has been sent/not sent if it is simply for the purpose of informing publishers that new content is waiting for them to publish.

Hope it helps,

Gez
Need help with your Cook/Joomla Project? . PM me to find out what I can help with. NO time wasters please!!!
The following user(s) said Thank You: admin, jonathanbell

Please Log in or Create an account to join the conversation.

Last edit: by JoomGuy. Reason: updated to output error if no authors

Mail Publishers only after form submission. 23 May 2015 01:26 #13165

Sorry I did not reply earlier. Gez, thanks heaps. I have so much to learn.

Please Log in or Create an account to join the conversation.

  • Page:
  • 1
Time to create page: 0.056 seconds

This Component Generator is the REAL component generator. This tool is very easy to use and in a matter of minutes I was building a fully working extension. I was amazed with the end result... worth every cent...
Griiettner (JED)

         

Get Started