Apex Training -- Notification Controller

As you will notice, within our library class, we used dependency injection via annotations to injection the emailer class, then called the $emailer->processor_emails() method within our pick_winner() method. Let's create the notifications controller to send out the e-mails. Within terminal, type:

./apex create controller core:notifications:lottery training

This will create a new PHP file at /src/core/controller/notifications/lottery.php, and will assign it to the "training" package, so upon publishing the package this PHP file will be included. Open this file, and enter the following contents:

<?php declare(strict_types = 1); namespace apex\core\controller\notifications; use apex\app; use apex\libc\db; use apex\users\user; /** * E-amil notifications controller for the lottery package. */ class lottery { // Properties public $display_name = 'Lotteries'; // Set fields public $fields = array( 'status' => array('field' => 'select', 'label' => 'Status', 'data_source' => 'hash:training:status') ); // Senders public $senders = array( 'admin' => 'Administrator', 'user' => 'User' ); // Recipients public $recipients = array( 'user' => 'User', 'admin' => 'Administrator' ); /** * Get available merge fields. Used when creating notification via admin * panel. */ public function get_merge_fields():array { // Set fields $fields = array(); $fields['Lottery'] = array( 'lottery-id' => 'ID', 'lottery-amount' => 'Amount Won', 'lottery-date_added' => 'Date Added' ); // Return return $fields; } /** * Get merge variables * * @param int $userid The ID# of the user e-mails are being processed against. * @param array $data Any extra data needed. */ public function get_merge_vars(int $userid, array $data):array { // Get lottery row if (!$row = db::get_idrow('lotteries', $data['lottery_id'])) { return array(); } // Set variables $vars = array( 'lottery-id' => $row['id'], 'lottery-amount' => fmoney((float) $row['amount']); 'lottery-date_added' => fdate($row['date_added']) ); // Return return $vars; } }

Once the file is saved, you can visit the Settings->Notifications menu of the administration panel, and you will be able to create e-mail notifications for our lottery package. When creating an e-mail notification, on the second page you will see a select list of available merge fields, which will include the fields defined within the get_merge_fields() method in the above controller class.

Within our library class, you will notice on line 63 we have:

$this->emailer->process_emails('lottery', (int) $userid, array('status' => 'complete'), array('lottery_id' => $lottery_id));

This executes the emailer::process_emails() method, which will check any e-mail notifications created by the administrator, and send out the necessary e-mail messages. Upon sending an e-mail, it will execute the above get_merge_vrs() method to retrieve the details on the specific lottery to personalize the e-mail message with.


Next up, within our library class we also added a transaction to the winner's account. Let's go ahead and create the Transaction Controller for it next.

Need a Professional?

Need development work by the creator of Apex? E-mail matt.dizak@gmail.com for a free consultation.

Recent News

Apex v1.5.4 Released!
Added .env file, Remote Access Client, finalized PostgreSQL, and more...
Apex v1.5 Released!
Auto-Install via YAML, Preloading, CRUD Scaffolding, Code ReOrganization, Import / Export between Packages, and more...
Apex v1.4.0 Released!
New Package Format, Service Providers and Adapters, New Theme Tools, and more

Mailing List

Subscribe to the low traffic mailing list to stay updated on Apex.

Admin Screenshot