Problema desenvolvendo uma cron para uma extensão

Suporte as extensões phpBB 3.3.
marcosfpo
Novato
Novato
Mensagens: 1
Registrado em: 18 Fev 2016, 20:09
Você favoritou esta postagem

Problema desenvolvendo uma cron para uma extensão

  • Remover marcador da postagem
  • Mensagem por marcosfpo »

    Estou desenvolvendo uma extensão (é a segunda extensão que faço e a mais complexa) para gerenciamento de colaborações, a partir da extensão phpBB Paypal Donation, do dmzx.

    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 }
    
    /ext/marcosfpo/donation/config/services.yml

    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 }
    
    ext/marcosfpo/donation/cron/donations_check.php

    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'];
    	}
    
    }
    
    /ext/marcosfpo/donation/migrations/donation_schema_1_1_2.php

    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))),
    		);
    	}
    	
    }
    
    Responder