Italian (Italy)
Knowledge Base  >  Vik Booking  >  Per Programmatori  >  Personalizzare Cron Job

apply_filters( 'vikbooking_create_cron_jobs_factory', bool $status, VBOCronFactory $factory )

I Fire durante la registrazione/caricamento dei file del driver per ogni Cron Job disponibile su Vik Booking.


Descrizione

I plugin possono usare questo filtro per installare in fase di esecuzione uno o più Cron Job per Vik Booking. I Cron Job registrati saranno disponibili nella sezione wp-admin per la configurazione ed esecuzione programmata via WP-Cron. Questo è il procedimento per registrare/installare i Cron Job personalizzati, ma per ogni file del driver si richiederà di dichiarare la propria classe (per maggiori informazioni, leggere sotto).


Parametri

$status

(bool)  Vero se è riuscito, Falso se non è riuscito.

$factory

(VBOCronFactory)  L'oggetto del Cron Factory di Vik Booking.


Esempio

L'esempio che segue mostra come registrare ulteriori Cron Job su Vik Booking per eseguire task specifici tramite appositi file del driver. Il codice sta aggiungendo un path per includere nuovi Cron Job e, quindi, qualsiasi file del driver PHP valido dentro la director "crons" del plugin sarà caricato come nuovo Cron Job. La directory dovrebbe trovarsi accanto al file del plugin principale

/wp-content/plugins/custom-cron-jobs/custom-cron-jobs.php
/wp-content/plugins/custom-cron-jobs/crons/
/**
 * Trigger action to let Vik Booking install every custom Cron Job inside the
 * "crons" directory of this plugin. This is just an example of how you can 
 * register custom Cron Job driver files into Vik Booking.
 * 
 * @param   VBOCronFactory  $factory    the Cron Factory object of Vik Booking.
 */
add_action('vikbooking_create_cron_jobs_factory', function(VBOCronFactory $factory)
{
    // let Vik Booking register every custom cron job inside this directory
    $factory->addIncludePath(dirname(__FILE__) . DIRECTORY_SEPARATOR . 'crons');

});

A questo punto è necessario creare il file del driver per ogni Cron Job personalizzato che si vuole installare. Ogni file del driver è responsabile di dichiarare la file class PHP del Cron Job definendo le impostazioni ed eseguendo il task effettivo. Il file del driver PHP del Cron Job personalizzato dovrà essere posizionato nella directory del plugin sotto. Il nome del file influenzerà il nome della classe PHP che il driver dovrà dichiarare altrimenti il Cron Job non sarà proprio caricato:

/wp-content/plugins/custom-cron-jobs/crons/sample_task.php
<?php
/**
 * @package     VikBooking
 * @subpackage  custom-cron-job.sample_task
 * @author      E4J srl (VikWP)
 * @copyright   Copyright (C) 2023 E4J srl. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE
 * @link        https://vikwp.com
 */

defined('ABSPATH') or die('No script kiddies please!');

/**
 * This is a copy/clone of the native "Email Reminder" Cron Job.
 * Just the file name, the class name and the Cron title are different.
 * You can do the same to create your custom Cron Job driver file to
 * execute specific tasks.
 */
class VikBookingCronJobSampleTask extends VBOCronJob
{
    // use this Trait when you don't need to keep track of any
    // bookings/customers that were notified by the Cron Job.
    use VBOCronTrackerUnused;

    /**
     * This method should return all the form fields required to collect
     * the settings needed for the execution of the cron job.
     * 
     * @return  array  An associative array of form fields.
     */
    public function getForm()
    {
        return [
            'cron_lbl' => [
                'type'  => 'custom',
                'label' => '',
                'html'  => '<h4>' . $this->getTitle() . '</h4>',
            ],
            'address' => [
                'type'    => 'text',
                'label'   => 'Email Address',
                'default' => '',
            ],
            'subject' => [
                'type'    => 'text',
                'label'   => 'Email Subject',
                'default' => 'Dummy email message',
            ],
            'body' => [
                'type'    => 'visual_html',
                'label'   => 'Email Message',
                'default' => $this->getDefaultTemplate(),
                'attributes' => [
                    'id'    => 'tpl_body',
                    'style' => 'width: 70%; height: 150px;',
                ],
                'editor_opts' => [
                    'modes' => [
                        'text',
                        'modal-visual',
                    ],
                ],
                'editor_btns' => [],
            ],
            'help' => [
                'type'  => 'custom',
                'label' => '',
                'html'  => '<p class="info">Hey, this is just an example.</p>',
            ],
        ];
    }

    /**
     * Returns the title of the cron job.
     * 
     * @return  string
     */
    public function getTitle()
    {
        return 'Sample Task - Custom Cron Job';
    }
    
    /**
     * Executes the cron job.
     * 
     * @return  boolean  True on success, false otherwise.
     */
    protected function execute()
    {
        // collect the settings for this Cron Job instance
        $email_recipient = $this->params->get('address', '');
        $email_subject   = $this->params->get('subject', 'Default subject');
        $email_message   = $this->params->get('body');

        if (!$email_recipient) {
            // append execution log
            $this->appendLog('eMail address is empty');

            return false;
        }

        // for manual executions of the Cron Job, messages can be sent to output
        $this->output('<p>Sending an email to ' . $email_recipient . '</p>');

        /**
         * Here you could query the database or perform any kind of task.
         * In this example we send an email message according to the settings specified.
         */

        // get the sender email address from the settings of Vik Booking
        $admin_sendermail = VikBooking::getSenderMail();

        // decorate the email object
        $mail_data = new VBOMailWrapper([
            'sender'      => [$admin_sendermail, $admin_sendermail],
            'recipient'   => $email_recipient,
            'subject'     => $email_subject,
            'content'     => $email_message,
        ]);

        // dispatch the email sending command
        $result = VBOFactory::getPlatform()->getMailer()->send($mail_data);

        if ($result) {
            // log the successful event
            $this->appendLog('Message was sent correctly');
        }

        // return the result
        return $result;
    }

    /**
     * Returns the default e-mail message.
     * 
     * @return  string
     */
    protected function getDefaultTemplate()
    {
        static $tmpl = '';

        if (!$tmpl)
        {
            $sitelogo     = VBOFactory::getConfig()->get('sitelogo');
            $company_name = VikBooking::getFrontTitle();

            if ($sitelogo && is_file(VBO_ADMIN_PATH . DIRECTORY_SEPARATOR . 'resources'. DIRECTORY_SEPARATOR . $sitelogo))
            {
                $tmpl .= '<p style="text-align: center;">'
                    . '<img src="' . VBO_ADMIN_URI . 'resources/' . $sitelogo . '" alt="' . htmlspecialchars($company_name) . '" /></p>'
                    . "\n";
            }

            $tmpl .= 
<<<HTML
<h1 style="text-align: center;">
    <span style="font-family: verdana;">$company_name</span>
</h1>
<hr class="vbo-editor-hl-mailwrapper">
<h4>Dear Vik Booking User,</h4>
<p><br></p>
<p>This is an automated message to inform you that we are building a custom Cron Job.</p>
<p>You can always drop your luggage at the Hotel, should you arrive earlier.</p>
<p><br></p>
<p><br></p>
<p>Thank you.</p>
<p>$company_name</p>
<hr class="vbo-editor-hl-mailwrapper">
<p><br></p>
HTML
            ;
        }

        return $tmpl;
    }
}

È tutto. Si può racchiudere il plugin in un file zip che contiene il file"custom-cron-jobs.php" del plugin principale e la cartella "crons" che contiene l'effettivo file Cron Job fornito nell'esempio di codice sopra ("sample_task.php"). Il plugin è pronto per essere installato nel proprio sito Wordpress e poi si può procedere con la configurazione del/dei Cron Job tramite Vik Booking.

Ultimo aggiornamento: 2024-01-30
Utile?
67% delle persone lo ha trovato utile.