Roych Posted February 1, 2023 Share Posted February 1, 2023 Hello, I'm working on a restaurant site that deletes (puts in a trash) one children every day (daily menu). And I would like to send mail to administrator (of choice) that he has to add new children when there is only 7 left. As a reminder so that he doesn't forget about adding some new ones. We always show seven daily menus on frontend and we don't want go below this as it would look weird. Everything works great so far, I only need help with the mail sending as I never worked on something like this. Can this be done somehow? (I have FormBuilder, but maybe some hook would be better for something like this.) Im using Templates Daily menu (template=calendar-list) - day 1 (template=calendar-post) - day 2 (template=calendar-post) - ..... Thank you R Link to comment Share on other sites More sharing options...
Jan Romero Posted February 1, 2023 Share Posted February 1, 2023 Hi, you can add a hook to execute code whenever a page is moved to the trash. You can use this to check how many children are left and send an e-mail using WireMail. Put this in your ready.php: $this->addHookAfter('Pages::trashed(template=calendar-post)', function(HookEvent $event) { $numberOfItems = wire('pages')->count('parent=/daily-menu/'); if ($numberOfItems <= 7) { $m = new WireMail(); $m->to('chefdecuisine@example.com'); // specify CSV string or array for multiple addresses $m->from('noreply@example.com'); $m->subject("Uh-oh, there are only {$numberOfItems} dishes left on the menu"); $m->bodyHTML("<html><marquee><blink><a href='" . wire('config')->urls->admin . "'>DO SOMETHING QUICK!!!</a></blink></marquee></html>"); $m->send(); } }); Obviously if you trash items one by one, you’ll get one e-mail for every item as long as the total is under 8. A more proper way to do this may be a cron job that only checks once a day. Alternatively you may not need to send an e-mail at all? Perhaps it will suffice to show a message to the user who did the trashing? wire()->message('Please remember to complete the daily menu! There are currently only {$numberOfItems} dishes.'); You could show this just after trashing or simply all the time whenever there are too few items. 3 Link to comment Share on other sites More sharing options...
Roych Posted February 1, 2023 Author Share Posted February 1, 2023 Hi, nice, this one works and sends mails exactly what I need. But is it possible to only get one mail if the number of remaining events is 7or lower, not for every event that goes to trash? maybe something like if ($numberOfItems = 7) { Just thinking here, I tried it and it still sends mails for every event that was put in a trash. And {$numberOfItems} doesn't work in the sent mail, but don't really need it if the mail would come just once when the number is 7. Thank you R Link to comment Share on other sites More sharing options...
zoeck Posted February 1, 2023 Share Posted February 1, 2023 1 hour ago, Roych said: doesn't work in the sent mail, but don't really need it if the mail would come just once when the number is 7. Use " instead of ' ? (in wire()->message) 1 Link to comment Share on other sites More sharing options...
Roych Posted February 1, 2023 Author Share Posted February 1, 2023 29 minutes ago, zoeck said: Use " instead of ' ? (in wire()->message) I used the first method not the message option, so not sure how to fix this, thank you. Link to comment Share on other sites More sharing options...
Jan Romero Posted February 1, 2023 Share Posted February 1, 2023 32 minutes ago, zoeck said: Use " instead of ' ? (in wire()->message) whoops, sorry, I typed that straight into the forum textbox, pretty happy anything works at all ? I’ve changed the quotes above, so you should be able to copy it, @Roych 1 hour ago, Roych said: if ($numberOfItems = 7) { Just thinking here, I tried it and it still sends mails for every event that was put in a trash. PHP’s equality operators are == and ===. This is a classic foot gun, there’s probably even a name for it… Your idea should be fine unless there’s some sort of bulk-trash feature that I don’t know about where the number of children could go from 8 to 6 in one go. 1 Link to comment Share on other sites More sharing options...
Roych Posted February 1, 2023 Author Share Posted February 1, 2023 43 minutes ago, Jan Romero said: I’ve changed the quotes above, so you should be able to copy it Thanks for the update ? Just noticed it always gives number 1, Right now I have 12 events all together if I add some new ones with older date (just for testing) it deletes them but the message in mail still says "there are only 1 ...." Link to comment Share on other sites More sharing options...
Roych Posted February 2, 2023 Author Share Posted February 2, 2023 13 hours ago, Jan Romero said: Your idea should be fine unless there’s some sort of bulk-trash feature that I don’t know about where the number of children could go from 8 to 6 in one go. Im trashin pages every day automaticaly with: <?php $theDayBeforeYesterday = strtotime("-1 day"); // get our pages $reallyOldEvents = $pages->find("template=calendar-post, Start_date<=$theDayBeforeYesterday"); foreach($reallyOldEvents as $oldEvent){ $pages->trash($oldEvent); } ?> Maybe this helps here. I still get mail for every trashed item, no matter how many is there. Thank you Link to comment Share on other sites More sharing options...
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now