Files
grzanieplus.pl/plugins/stCronPlugin/lib/stCron.class.php
2025-03-12 17:06:23 +01:00

144 lines
5.2 KiB
PHP

<?php
/**
* SOTESHOP/stCronPlugin
*
* Ten plik należy do aplikacji stCronPlugin opartej na licencji (Open License SOTE) Otwarta Licencja SOTE.
* Nie zmieniaj tego pliku, jeśli chcesz korzystać z automatycznych aktualizacji oprogramowania.
* Jeśli chcesz wprowadzać swoje modyfikacje do programu, zapoznaj się z dokumentacją, jak zmieniać
* oprogramowanie bez zmiany kodu bazowego http://www.sote.pl/modifications
*
* @package stCronPlugin
* @subpackage libs
* @copyright SOTE (www.sote.pl)
* @license http://www.sote.pl/license/open (Open License SOTE) Otwarta Licencja SOTE
* @version $Id: stCron.class.php 3018 2008-12-09 17:15:25Z michal $
* @author Michal Prochowski <michal.prochowski@sote.pl>
*/
/**
* Klasa do obsługi pseudo crona
*
* @package stCronPlugin
* @subpackage libs
*/
class stCron
{
/**
* Dodawanie metod jakie mają zostać wywołane w cron'ie
*
* @param string $class nazwa klasy
* @param string $method nazwa metody
* @param array $parameters tablica z parametrami
* @param array $dayAndTime data i czas wykonania operacji
* Tablica $dayAndTime wygląda następująco:
* array('d' => numer_dnia_tygodnia, 'h' => godzina, 'm'=> minuta);
* Dozwolone parametry w $dayAndTime to:
* - d - dzień tygodnia (poniedziałek - 1, wtorek - 2, ..., niedziela - 7) - nie wymagane
* - h - godzina (0, 1, 2, ..., 21, 22, 23) - wymagane
* - m - minuta (00, 01, 02, ..., 57, 58, 59) - wymagane
* np. array('d' => "4", 'h' => "13", 'm' => "15"); - czwartek, godzina 13:15
*
* @package stCronPlugin
* @subpackage libs
*/
public static function addMethod($class, $method, $parameters = array(), $dayAndTime = array())
{
$cronJobs = sfConfig::get('st_cron_plugin_methods');
if (!is_array($cronJobs))
{
$cronJobs = array();
}
$job = array('class' => $class, 'method' => $method, 'parameters' => $parameters, 'dayAndTime' => $dayAndTime);
$cronJobs = array_merge($cronJobs, array($job));
sfConfig::add(array('st_cron_plugin_methods' => $cronJobs));
}
/**
* Dodawanie uri jakie mają zostać wywołane w cron'ie
*
* @param string $uri adres strony
* @param array $dayAndTime data i czas wykonania operacji
* Tablica $dayAndTime wygląda następująco:
* array('d' => numer_dnia_tygodnia, 'h' => godzina, 'm'=> minuta);
* Dozwolone parametry w $dayAndTime to:
* - d - dzień tygodnia (poniedziałek - 1, wtorek - 2, ..., niedziela - 7) - nie wymagane
* - h - godzina (0, 1, 2, ..., 21, 22, 23) - wymagane
* - m - minuta (00, 01, 02, ..., 57, 58, 59) - wymagane
* np. array('d' => "4", 'h' => "13", 'm' => "15"); - czwartek, godzina 13:15
*/
public static function addUri($uri, $dayAndTime = array())
{
$cronJobs = sfConfig::get('st_cron_plugin_uri');
if (!is_array($cronJobs))
{
$cronJobs = array();
}
$job = array('uri' => $uri, 'dayAndTime' => $dayAndTime);
$cronJobs = array_merge($cronJobs, array($job));
sfConfig::add(array('st_cron_plugin_uri' => $cronJobs));
}
/**
* Wykonywanie zadań z cron'a
*
* @return bool wynik wykonania zadań
* Zwracana jest wartość TRUE w przypadku przeprowadzenia zadań z cron'a,
* w przypadku braku zadań lub błędu zwracana jest wartość FALSE
*/
public static function execute()
{
$methodJobs = false;
$uriJobs = false;
$cronJobs = sfConfig::get('st_cron_plugin_methods');
if (is_array($cronJobs))
{
foreach ($cronJobs as $cronJob)
{
if (@$cronJob['dayAndTime']['d'] == date('N') || !isset($cronJob['dayAndTime']['d']))
{
if ($cronJob['dayAndTime']['h'] == date('G') && $cronJob['dayAndTime']['m'] == date('i'))
{
if (class_exists($cronJob['class']))
{
$class = new $cronJob['class'];
if (method_exists($class, $cronJob['method']))
{
$class->$cronJob['method']($cronJob['parameters']);
}
}
}
}
}
$methodJobs = true;
}
$cronJobs = sfConfig::get('st_cron_plugin_uri');
if (is_array($cronJobs))
{
foreach ($cronJobs as $cronJob)
{
if ($cronJob['dayAndTime']['d'] == date('N') || !isset($cronJob['dayAndTime']['d']))
{
if ($cronJob['dayAndTime']['h'] == date('G') && $cronJob['dayAndTime']['m'] == date('i'))
{
$web = new sfWebBrowser();
$web->get($cronJob['uri']);
}
}
}
$uriJobs = true;
}
if ($methodJobs || $uriJobs) return true;
return false;
}
}