Александр Туниеков

Александр Туниеков

С нами с 19 декабря 2015; Место в рейтинге пользователей: #15
Александр Туниеков
09 июля 2018, 17:11
0
К сожалению, я чисто программист и подавать красиво не сильно умею :(. На практике, можно отправить отправку сообщения администратору. Что и сделано. Но в сообщении, можно, не только итоговый балл, как сейчас, отправлять но еще и отправить отчет со всеми ответами пользователя. Можно прикрутить счетчик пройденных тестов. Больше вариантов, пока, в голову не приходит :). Событие сделано чтоб программисты не лезя в основной код могли что угодно сделать по окончании сеанса тестирования. Мне в голову не приходит что еще можно, но Думаю что-нибудь оригинально придумают.
Александр Туниеков
09 июля 2018, 16:12
0
Ну когда топик выкладываешь, лучше покупают. Обновление маленькое, но повод напомнить :). Стараюсь не спамить, но что-то по краю спама пошел :(. Извиняюсь если что не так.
Александр Туниеков
25 июня 2018, 13:04
+1
Похоже я понял в чем косяк. $modx внутри функции вызывается. А внутри функции его нет. Попробуйте перед if (is_email($user['email'])) { вставить global $modx;

->each(function($user, $idx) {
       global $modx;
	 if (is_email($user['email'])) {
           $queue_email = $modx->newObject('EmailQueueItem');
Александр Туниеков
25 июня 2018, 12:59
0
Поставил Cron Manager. Запустил такой код. И все успешно.
<?php
error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);


if (!$EmailQueue = $modx->getService('emailqueue', 'EmailQueue', $modx->getOption('emailqueue_core_path', null,
	$modx->getOption('core_path') . 'components/emailqueue/') . 'model/emailqueue/', array())) {
	return;
}
$user['email'] = 'a@b.ru';
$queue_email = $modx->newObject('EmailQueueItem');
$data1 = array(
	'sender_package'=>'UsersSend', //дополнение отправитель письма
	'to'=>$user['email'], //емаил
	'from_name'=>'Тест',
	'subject'=>'Поздравляем с Днём рождения!', // тема письма
	'body'=>$modx->getChunk('email_ru', $user), // тело письма
	'date'=>date("Y-m-d H:i:s"), // дата в очереди. Нужно чтоб письма удалялись по истечении срока хранения.
);
$queue_email->fromArray($data1);
if(!$queue_email->save())
	$modx->log(1,"Письмо для ".$user['email']." не удалось добавить в очередь писем!");
Александр Туниеков
25 июня 2018, 12:35
0
Не работал с Cron Manager. По идее в нем не надо $modx подключать. он уже должен быть подключен. Надо разбираться. Так ничего не понятно. Мой скайп touols. Можите доступ скинуть?
странно что на $modx->getService не ругается
Александр Туниеков
25 июня 2018, 12:04
0
Полностью код можно? И путь до файла
Александр Туниеков
25 июня 2018, 11:32
0
Fatal error: Call to a member function getChunk() on a non-object
У вас в начале скрипта сам $modx подключен?
что то вроде такого
require_once dirname(dirname(dirname(dirname(dirname(__FILE__))))) . '/config.core.php';
require_once MODX_CORE_PATH . 'config/' . MODX_CONFIG_KEY . '.inc.php';
require_once MODX_CONNECTORS_PATH . 'index.php';
Александр Туниеков
25 июня 2018, 11:26
0
Блин поторопился. Конечно
$queue_email=$modx->newObject('EmailQueueItem');
Александр Туниеков
25 июня 2018, 10:42
0
Ну это известная проблема. Позже переделаю на выпадающий список
Александр Туниеков
25 июня 2018, 10:06
+1
ошибку заметил
if (!$EmailQueue = $modx->getService('emailqueue', 'EmailQueue', $modx->getOption('emailqueue_core_path', null,
	$modx->getOption('core_path') . 'components/emailqueue/') . 'model/emailqueue/', array())) {
	return;
}
users()
    ->members('en')
    ->profile()
    ->where('modUser.active = 1 AND DAYOFMONTH(FROM_UNIXTIME(Profile.dob)) = DAYOFMONTH(now()) AND MONTH(FROM_UNIXTIME(Profile.dob)) = MONTH(now())')
    ->joinGroup('group2')
    ->each(function($user, $idx) {
        if (is_email($user['email'])) {
            	$queue_email->newObject('EmailQueueItem'); //забыл создать объект :(
		$data1 = array(
			'sender_package'=>'UsersSend', //дополнение отправитель письма
			'to'=>$user['email'], //емаил
			'subject'=>'Поздравляем с Днём рождения!', // тема письма
			'body'=>$modx->getChunk('chunkName', $user), // тело письма
			'date'=>date("Y-m-d H:i:s"), // дата в очереди. Нужно чтоб письма удалялись по истечении срока хранения.
		);
		$queue_email->fromArray($data1);
		if(!$queue_email->save())
			$modx->log(1,"Письмо для ".$user['email']." не удалось добавить в очередь писем!");
        }
    });
Александр Туниеков
25 июня 2018, 09:52
0
Примерно так думаю
if (!$EmailQueue = $modx->getService('emailqueue', 'EmailQueue', $modx->getOption('emailqueue_core_path', null,
	$modx->getOption('core_path') . 'components/emailqueue/') . 'model/emailqueue/', array())) {
	return;
}
users()
    ->members('en')
    ->profile()
    ->where('modUser.active = 1 AND DAYOFMONTH(FROM_UNIXTIME(Profile.dob)) = DAYOFMONTH(now()) AND MONTH(FROM_UNIXTIME(Profile.dob)) = MONTH(now())')
    ->joinGroup('group2')
    ->each(function($user, $idx) {
        if (is_email($user['email'])) {
            $data1 = array(
			'sender_package'=>'UsersSend', //дополнение отправитель письма
			'to'=>$user['email'], //емаил
			'subject'=>'Поздравляем с Днём рождения!', // тема письма
			'body'=>$modx->getChunk('chunkName', $user), // тело письма
			'date'=>date("Y-m-d H:i:s"), // дата в очереди. Нужно чтоб письма удалялись по истечении срока хранения.
		);
		$queue_email->fromArray($data1);
		if(!$queue_email->save())
			$modx->log(1,"Письмо для ".$user['email']." не удалось добавить в очередь писем!");
        }
    });
sender_package Нужно только чтоб видеть откуда письмо в очереди. Если вдруг несколько компонентов сразу отправляют. Можно написать что угодно или даже оставить пустым.
Александр Туниеков
18 июня 2018, 19:50
0
Ну тут идея компонента не совсем такая :). В очереди хранятся уже готовые письма. А письма в очередь добавляются кодом, в котором как раз письмо красиво и оформляется.
'body'=>$modx->getChunk('tpl.UserTest.InviteEmail',array('test_name' => $test->name,'link'=>$invite->url)),
Создание и редактирование писем в компоненте это просто на всякий случай. Чтоб протестировать компонент или просто отправку писем. Посмотреть что вообше в очереди лежит.
Александр Туниеков
18 июня 2018, 19:32
0
Кнопки Ошибки и Все — это не кнопки вообще. Это подписи что следующие кнопки к Ошибкам относяться и к всем письмам. Мда… замученный у меня дизайн получился. Буду выпадающим списком делать, но не пока занят через неделю думаю сделаю.
Александр Туниеков
18 июня 2018, 19:26
0
Хорошая идея. Только выпадающие списки я такие еще не делал. посмотрю как там в этом компоненте сделано.
Развития компонента пока не планируется :). В смысле, а есть куда его развивать? Рассылки все равно лучше делать через специализированные сервисы. Хостеры, если блокируют письма, то ничего не сообщают и не понятно ушло письмо или нет. Этот компонент на случай если сервис еще не имеет смысла подключать.
Александр Туниеков
18 июня 2018, 19:15
0
В новой версии еще и 2 значка удаления. 1 удаляет письма с ошибками. Другой очищает всю очередь.
Александр Туниеков
18 июня 2018, 19:10
0
Хм… плохо у меня с дизайном :(. Воображения на картинки не хватает. Если есть идеи какие значки повешать на эти действия, напишите плиз :). Если писать словами, то в 1 слово не обойдешься и ширины экрана в итоге не хватит.
Александр Туниеков
18 июня 2018, 18:53
+1
Это такая дата по умолчанию была. Так 0000-00-00 00:00:00 mysql записывает. Модераторы модсторе тоже сказали это поменять. В новой версии по умолчанию дата отправки null и в поле пусто. Сейчас обновил компонент на демо, чтоб вас это не смущало.
Александр Туниеков
18 июня 2018, 16:21
0
Спасибо. Как-то из головы вылетело.
Александр Туниеков
13 июня 2018, 17:49
+2
Еще дополнение на модерации и его еще в глаза никто не видел, а уже 3 спасибо :). Всем пожалуйста. Сейчас думаю на всякий случай в гитхаб выложу. Вдруг кому-то уже надо.