cakephp-email-queue icon indicating copy to clipboard operation
cakephp-email-queue copied to clipboard

Options being ignored

Open PhantomWatson opened this issue 9 years ago • 3 comments

These lines appear to have the effect of "if the specified layout is default, then the specified configName, template, and layout will be ignored when the email is being sent and replaced with values provided in the command line or defined in SenderShell::getOptionParser()".

I'm trying to use this plugin and I'm not able to use any template file or config value other than default while the layout is default.

Can you confirm that this is a bug, or is this the expected behavior?

PhantomWatson avatar May 18 '16 15:05 PhantomWatson

That's how I thought the feature should work when I implemented it a long time ago. The idea was that, since default basically means that it was no changed on purpose by the developer, then the shell would have a chance to say otherwise.

But, if the developer took the time to specify a different layout, then it would not make a lot of sense to change it from the command line, since that would result in an error.

I'm not attached at all to the current implementation, so you can send a pull request if you strongly feel it should be implemented in another way.

lorenzo avatar May 19 '16 20:05 lorenzo

So if I add an email to the queue with these options

$to = '[email protected]';
$view_vars = [
    'variable_name' => $variable_value
];
$send_at = Time::now();
$options = [
    'subject' => __('Email Subject'),
    'send_at' => $send_at->i18nFormat('yyyy-MM-dd HH:mm:ss'),
    'template' => 'custom_template',
    'layout' => 'custom_layout',
    'format' => 'both'
];
EmailQueue::enqueue($to, $view_vars, $options);

and then send the email using

bin/cake EmailQueue.sender

It shouldn't work? Right now, it sends an empty email. It seems I have to define the --template and --layout options in the bin/cake EmailQueue.sender command for it to work correctly.

I would expect bin/cake EmailQueue.sender to only fall back to default if those fields were empty in the database. In my opinion lines

foreach ($emails as $e) {
    $configName = $e->layout === 'default' ? $this->params['config'] : $e->config;
    $template = $e->layout === 'default' ? $this->params['template'] : $e->template;
    $layout = $e->layout === 'default' ? $this->params['layout'] : $e->layout;
    ...

should be changed to

foreach ($emails as $e) {
    $configName = $e->config === 'default' ? $this->params['config'] : $e->config;
    $template = $e->template === 'default' ? $this->params['template'] : $e->template;
    $layout = $e->layout === 'default' ? $this->params['layout'] : $e->layout;
    ...

... which looks like what it already is. composer must have downloaded some old version. hmm.

waspinator avatar Nov 15 '16 22:11 waspinator

It will send only if the current time is now or after the send_time

lorenzo avatar Nov 16 '16 08:11 lorenzo