Em nosso fórum, que não possui fins lucrativos, uma colaboração é válida por 1 ano e após esse tempo, o colaborador sai do grupo Colaboradores e a colaboração é marcada como inativa.
Portanto, todas as colaborações são cadastradas e existe uma interface de gestão das colaborações.
Criei 2 botões: um verifica a data da colaboração e ativa e insere no grupo ou desativa e remove do grupo; o segundo botão manda mensagens privadas para os colaboradores que estão próximos do vencimento.
Tudo isso funciona.
Porém, estou com um problema na cron que faz o controle. Esta é a primeira cron que implemento.
No banco de dados, o valor de donations_check_last_gc não é atualizado pela function run, como se ela não executasse.
Mas, não dá erro nenhum e a extensão é implantada normalmente.
Ela aparece no Cron Status e se eu mando rodar, ela roda, mas não apresenta erro em tela ou no log. Não consigo entender o porquê.
Não estou usando um debbuger, pois não sei instalar e comecei a programar em php só para este pequeno projeto, que estou fazendo sem fins lucrativos. Já desenvolvi em java, vb, delphi, etc.
Alguém pode me ajudar?
Estou disposto a colocar os fontes das 2 extensões (uma já está na lista das em desenvolvimento no fórum do phpBB) aqui para uso de quem quiser.
Obrigado.
/ext/marcosfpo/donation/config/cron.yml
Código: Selecionar todos
services:
# ----- Cron tasks -----
marcosfpo.donation.cron.donations.check:
class: marcosfpo\donation\cron\donations_check
arguments:
- @config
- @log
- @marcosfpo.donation.admin.controller
calls:
- [set_name, [cron.task.donations_check]]
tags:
- { name: cron.task }
Código: Selecionar todos
imports:
- { resource: tables.yml }
- { resource: cron.yml }
services:
marcosfpo.donation.controller:
class: marcosfpo\donation\controller\donation
arguments:
- @config
- @controller.helper
- @template
- @log
- @user
- @dbal.conn
- @request
- %marcosfpo.donation.table.donation_config%
- %marcosfpo.donation.table.donation_doles%
marcosfpo.donation.admin.controller:
class: marcosfpo\donation\controller\admin_controller
arguments:
- @config
- @template
- @log
- @user
- @dbal.conn
- @request
- %marcosfpo.donation.table.donation_config%
- %marcosfpo.donation.table.donation_doles%
marcosfpo.donation.listener:
class: marcosfpo\donation\event\listener
arguments:
- @config
- @controller.helper
- @template
- @user
- @dbal.conn
- %marcosfpo.donation.table.donation_doles%
tags:
- { name: event.listener }
Código: Selecionar todos
<?php
namespace marcosfpo\donation\cron;
/**
* Donation cron task.
*/
class donations_check extends \phpbb\cron\task\base
{
protected $config;
protected $log;
protected $controller;
public function __construct(\phpbb\config\config $config, \phpbb\log\log_interface $log, \marcosfpo\donation\controller\admin_controller $controller)
{
$this->config = $config;
$this->log = $log;
$this->controller = $controller;
}
protected function do_donations_check()
{
$begin = time();
$syncary = $this->controller->do_sync_donations();
$msgary = $this->controller->do_msg_donors();
$donors = $syncary['donors'];
$inactive = $syncary['inactive'];
$added = $syncary['added'];
$removed = $syncary['removed'];
$added_list = implode(", ", $syncary['added_ary']);
$removed_list = implode(", ", $syncary['removed_ary']);
$messages = $msgary['messages'];
$msg1_list = implode(", ", $msgary['msg1_ary']);
$msg2_list = implode(", ", $msgary['msg2_ary']);
$msg3_list = implode(", ", $msgary['msg3_ary']);
$msg4_list = implode(", ", $msgary['msg4_ary']);
$end = time();
$duration = $end - $begin;
$logary = array(
$donors,
$inactive,
$added,
$removed,
$added_list,
$removed_list,
$messages,
$msg1_list,
$msg2_list,
$msg3_list,
$msg4_list,
date_format($duration, "H:i:s"),
);
$this->log->add('admin', $this->user->data['user_id'], $this->user->ip, 'DONATION_CRON_LOG', time(), $logary);
}
/**
Runs this cron task.
*/
public function run()
{
$this->do_donations_check();
$this->config->set('donations_check_last_gc', time());
}
/**
Returns whether this cron task should run now, because enough time has passed since it was last run.
*/
public function should_run()
{
return $this->config['donations_check_last_gc'] < time() - $this->config['donations_check_gc'];
}
}
Código: Selecionar todos
<?php
namespace marcosfpo\donation\migrations;
class donation_schema_1_1_2 extends \phpbb\db\migration\migration
{
static public function depends_on()
{
return array(
'\marcosfpo\donation\migrations\donation_schema_1_1_1',
);
}
public function update_data()
{
return array(
array('config.update', array('mfpo_donation_version', '1.1.2')),
array('config.add', array('donations_check_last_gc', 0, true)),
array('config.add', array('donations_check_gc', (60 * 60 * 24))),
);
}
}