Перейти к содержимому


Публикации z0ddak

9 публикаций создано z0ddak (учитываются публикации только с 24-Апрель 23)


#33076 Очищаем от старых записей таблицу - вычисление для Cron

Отправлено от z0ddak в 07 Май 2017 - 06:00 in Разработчикам

Задача была убирать все записи определённого пользователя, которые старше 1 часа. Составил конструкцию, в которой по условию сверки двух временных штампов происходит изменение статуса записи. В принципе, всё просто. Обходим циклом по таблице и по условию меняем статус, но чего то не работает.
В кроне другие вычисления прекрасно отрабатывают, а это ни в какую.. Может кто подскажет способ спрятать условие в сам запрос и "укоротить код". Спасибо.

// Выбираем из таблицы активные платежи со статусом -В ожидании- и сверяем время - когда добавлены
$result = data_select(330, "`status`=0 and `f5690`=0"); // Поле f5690 - Флаг статуса: 0, 1 или 2 (В ожидании, Оплачен, Не проведён)
while ($row = sql_fetch_assoc($result)) {

	// вычисляем время...
	$dt = date("d-m-y h:i:s", strtotime($row['add_time']));
	$dtt = date("d-m-y h:i:s");
	$dt_strok  = explode(' ',$dt);
	$dt_data   = explode('.',$dt_strok[0]);
	$dt_time   = explode(':',$dt_strok[1]);
	$dtt_strok = explode(' ',$dtt);
	$dtt_data  = explode('.',$dtt_strok[0]);
	$dtt_time  = explode(':',$dtt_strok[1]);
  
	$timestamp_dt = mktime($dt_time[0],$dt_time[1],$dt_time[2],$dt_data[0],$dt_data[1],$dt_data[2]);
	$timestamp_dtt = mktime($dtt_time[0],$dtt_time[1],$dtt_time[2],$dtt_data[0],$dtt_data[1],$dtt_data[2]);
	$diff = $timestamp_dtt - $timestamp_dt;

		// тут считаем минуты, часы
	$secund = $diff / 60;
	$minut  = $secund / 60;
	$chasov = $minut / 60;
  
	// Если прошло уже более 1 часа - перемещаем в архив и ставим статус -Не проведено-
	if ($chasov > 1) {
  
		$data = Array();
		$data['f5660']  = "Не проведено";
		$data['status'] = 1;
		data_update(330, EVENTS_ENABLE, $data, "`id`=",$row['id']);
	 }
}

P.S.: В верхнем примере кода проблема была в запросе data_select - не хватало кавычек у значения поля: `f5690`='0' , а так всё работало.
Но немного повозившись, переписал свой "говнокод" в более приличную конструкцию:

// Выбираем из таблицы активные платежи со статусом -В ожидании- и сверяем время - когда добавлены
$time_later = form_eng_time(date("d.m.Y H:i", time()-3600));
$sqlQuery = "SELECT * FROM ".DATA_TABLE."330 WHERE `status`=0 and `add_time`<'".$time_later."' and `f5690`='0'";
$result = mysql_query($sqlQuery);
while ($row = mysql_fetch_assoc($result)) {
  
	$data = Array();
	$data['f5660']  = "Не проведено";
	$data['status'] = 1;
	data_update(330, EVENTS_ENABLE, $data, "`id`=",$row['id']);
}

Может кому пригодится - спасибо за оперативную помощь))



#32657 При попытке отправить шаблон -

Отправлено от z0ddak в 21 Февраль 2017 - 17:42 in Как это сделать

Просмотр сообщенияCbCoder (15 Февраль 2017 - 10:19) писал:

Откорректированный полный вариант, отправка по текущей записи в вычислении:

$form = sql_select_array(FORMS_TABLE, "id=270");
$subject = form_template($form, $line, 'subj_mail');
$body = form_template($form, $line, 'body_form');
$to = $line[form_int_name($form['to_mail'])];
sendmail($subject, $body, $to);

Примечание: тут не учитывается вариант адресата из поля связи и не прикрепляются файлы.

Спасибо, принял к сведению...



#32532 При попытке отправить шаблон -

Отправлено от z0ddak в 07 Февраль 2017 - 09:55 in Как это сделать

Просмотр сообщенияAntonKravchenko (05 Декабрь 2016 - 17:42) писал:

ревизия от 2.12.16 исправила этот баг

Антон, вы пишете что баг был исправлен, но обновившись до последней ревизии я обнаружил что всё те же ошибки остались...
У меня версия WEB: php 5.6 и максимум на что можно обновить ревизию - это на 17174 от 2017-01-31...


?зображение

----------------------------------------

?зображение

----------------------------------------

...и никакие корректировки прав отправляющего send_template(270, "id=$ID", 0, 0, 1) ;) не спасают ситуацию...



#32272 При попытке отправить шаблон -

Отправлено от z0ddak в 02 Декабрь 2016 - 15:50 in Как это сделать

Просмотр сообщенияAntonKravchenko (02 Декабрь 2016 - 11:47) писал:

аналогичная проблема. Мало того, что "No access to template", так ещё и генерирует по 50-200 страниц (!) этих уведомлений. Заявка в ТП, пока в работе у них

Антон, вы как нибудь по другому решили этот вопрос или надеетесь всё таки получить ответ в "скором времени" от горе-разработчиков КБ? Одно лечат, другое калечат..
Просто проект горит, а рассылка почтовых оповещений в нём ключевой элемент. В какой уже раз "наступил на грабли", связавшись с разработкой на базе кб.

"Втюхивают" сырой продукт под эгидой борьбы с кровососущими насекомыми...



#32265 При попытке отправить шаблон -

Отправлено от z0ddak в 30 Ноябрь 2016 - 16:22 in Как это сделать

Я так и не добился отправки...
Выяснилось ещё следующее - отправка работает только под учетной записью из КБ,
отправка же с внешнего обработчика так же вызывает No access to template

раньше слал почту с внешнего обработчика таким вычислением

	/******** Найдем нужную запись по email ************/
	$record_id = 0; // Инициализируем переменную
	//Выборка из базы
	$sqlQuery = "SELECT `id`,`f3721`,`f3850`,`f3860`,`f1470`,`f3870` FROM `" . DATA_TABLE . "42` WHERE `f442`='" . $vote_email . "' AND `status`=0 LIMIT 1";
	$result = sql_query($sqlQuery) or user_error(mysql_error() . "<br>" . $sqlQuery . "<br>", E_USER_ERROR);
	while ($row = sql_fetch_assoc($result)) {
		// Присваиваем значения переменным из массива части значений строки
		$record_id = $row['id'];
		$smarty_name = $row['f3721'];
		$smarty_patronymic = $row['f3850'];
		$smarty_sponsname = $row['f3860'];
		$smarty_login = $row['f1470'];
		$smarty_password = $row['f3870'];
		// Передаём значения Smarty в шаблон письма
		$smarty->assign("smarty_name", $smarty_name);
		$smarty->assign("smarty_patronymic", $smarty_patronymic);
		$smarty->assign("smarty_sponsname", $smarty_sponsname);
		$smarty->assign("smarty_login", $smarty_login);
		$smarty->assign("smarty_password", $smarty_password);
		// Отправляем шаблон письма
		send_template(190, "`id`=" . $record_id);
		// Создаём массив части значений строки
		$data = Array();
		$data['f4080'] = $record_id;
		$data['f4090'] = 'Напоминание пароля';
		$data['f4100'] = 'На Ваш e-mail отправлены учётные данные';
		// Добавляем в таблицу новую запись значениями из массива
		data_insert(280, EVENTS_ENABLE, $data);
	}
	echo 'DONE'; // Возвращаем сайту сообщение, что все в порядке
	if ($record_id == 0) {
		echo 'Нет такого E-mail в базе';
		exit;
	}



#32263 Отправка рассылки пользователем "Система"

Отправлено от z0ddak в 29 Ноябрь 2016 - 18:54 in Как это сделать

Просмотр сообщенияDinak (03 Октябрь 2016 - 10:42) писал:

У админа права есть, возможно баг!

Здравствуйте. Как нибудь побороли ошибку No access to template? У меня точно такая же история...



#32261 При попытке отправить шаблон -

Отправлено от z0ddak в 29 Ноябрь 2016 - 17:18 in Как это сделать

никто не сталкивался с такой проблемой?..



#32260 При попытке отправить шаблон -

Отправлено от z0ddak в 29 Ноябрь 2016 - 13:36 in Как это сделать

Вы правы, отправилось от имени пользователя, но не помогло, к сожалению. Всё такая же ошибка No access to template

?зображение

...что ещё может такое вызывать?



#32258 При попытке отправить шаблон -

Отправлено от z0ddak в 29 Ноябрь 2016 - 10:44 in Как это сделать

Добрый день.

Помогите разобраться, что за ошибка и что её вызывает.
Имеется такое элементарное вычисление,

if ($line['Статус платежа'] == "В процессе") {
	// заполняем поле
	$line['Время оплаты'] = date("Y-m-d H:i:s");
	// шлём оповещение  - На оплату
	send_template(270, "id=$ID");
} elseif ($line['Статус платежа'] == "Оплачено") {
	// заполняем поле
	$line['Время оплаты'] = date("Y-m-d H:i:s");
	// шлём оповещение  - Оплачено
	send_template(240, "id=$ID");
	// меняем Статус заявки в таблице Платежи
	$data = Array();
	$data['f4660'] = 'В работе';
	data_update(280, EVENTS_ENABLE, $data, "`id`= ",$line['ID Заказа']);
} elseif ($line['Статус платежа'] == "Не проведён") {
	// заполняем поле
	$line['Время оплаты'] = date("Y-m-d H:i:s");
	// шлём оповещение - платёж не проведён
	send_template(250, "id=$ID");
}

...запускаемое по событию: изменение поля Статус платежа. Поле Статус платежа, в свою очередь переключается внешним вычислением - добавлением записи с EVENTS_ENABLE

Всё работает, только не отправляются шаблоны. Вернее отправляются, но от пользователя Система (см. ниже) с вываливанием в ошибку: No access to template

?зображение
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
?зображение
Если шаблоны попробовать отправить из таблицы вручную, дополнительным действием всё отправляется отлично... Как исправит?