WIP: schedulers..
This commit is contained in:
@@ -236,7 +236,7 @@ $sugar_config = array (
|
|||||||
'log_memory_usage' => false,
|
'log_memory_usage' => false,
|
||||||
'logger' =>
|
'logger' =>
|
||||||
array (
|
array (
|
||||||
'level' => 'debug',
|
'level' => 'bimit',
|
||||||
'file' =>
|
'file' =>
|
||||||
array (
|
array (
|
||||||
'ext' => '.log',
|
'ext' => '.log',
|
||||||
|
|||||||
9
cron.php
9
cron.php
@@ -68,7 +68,6 @@ $current_user->getSystemUser();
|
|||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////
|
||||||
//// PREP FOR SCHEDULER PID
|
//// PREP FOR SCHEDULER PID
|
||||||
$GLOBALS['log']->debug('--------------------------------------------> at cron.php <--------------------------------------------');
|
|
||||||
|
|
||||||
$cachePath = $GLOBALS['sugar_config']['cache_dir'].'modules/Schedulers';
|
$cachePath = $GLOBALS['sugar_config']['cache_dir'].'modules/Schedulers';
|
||||||
$pid = 'pid.php';
|
$pid = 'pid.php';
|
||||||
@@ -79,14 +78,10 @@ if(!is_file($cachePath.'/'.$pid)) {
|
|||||||
if(is_writable($cachePath)) { // the "file" does not yet exist
|
if(is_writable($cachePath)) { // the "file" does not yet exist
|
||||||
write_array_to_file('timestamp', array(strtotime(date('H:i'))) , $cachePath.'/'.$pid);
|
write_array_to_file('timestamp', array(strtotime(date('H:i'))) , $cachePath.'/'.$pid);
|
||||||
require_once($cachePath.'/'.$pid);
|
require_once($cachePath.'/'.$pid);
|
||||||
} else {
|
|
||||||
$GLOBALS['log']->fatal('Scheduler cannot write PID file. Please check permissions on '.$cachePath);
|
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
if(is_writable($cachePath.'/'.$pid)) {
|
if(is_writable($cachePath.'/'.$pid)) {
|
||||||
require_once($cachePath.'/'.$pid);
|
require_once($cachePath.'/'.$pid);
|
||||||
} else {
|
|
||||||
$GLOBALS['log']->fatal('Scheduler cannot read the PID file. Please check permissions on '.$cachePath);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//// END PREP FOR SCHEDULER PID
|
//// END PREP FOR SCHEDULER PID
|
||||||
@@ -102,11 +97,7 @@ if($timestamp[0] < strtotime(date('H:i'))) {
|
|||||||
$s = new Scheduler();
|
$s = new Scheduler();
|
||||||
$s->flushDeadJobs();
|
$s->flushDeadJobs();
|
||||||
$s->checkPendingJobs();
|
$s->checkPendingJobs();
|
||||||
} else {
|
|
||||||
$GLOBALS['log']->fatal('Scheduler cannot write PID file. Please check permissions on '.$cachePath);
|
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
$GLOBALS['log']->fatal('If you see a whole string of these, there is a chance someone is attacking your system.');
|
|
||||||
}
|
}
|
||||||
$exit_on_cleanup = true;
|
$exit_on_cleanup = true;
|
||||||
sugar_cleanup($exit_on_cleanup);
|
sugar_cleanup($exit_on_cleanup);
|
||||||
|
|||||||
@@ -65,6 +65,7 @@ class LoggerManager {
|
|||||||
'error' => 25,
|
'error' => 25,
|
||||||
'fatal' => 10,
|
'fatal' => 10,
|
||||||
'security' => 5,
|
'security' => 5,
|
||||||
|
'bimit' => 2,
|
||||||
'off' => 0,
|
'off' => 0,
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|||||||
@@ -2,8 +2,10 @@
|
|||||||
$id = $_REQUEST['apilo_details'];
|
$id = $_REQUEST['apilo_details'];
|
||||||
|
|
||||||
$apilo_config = loadApiloConfiguration();
|
$apilo_config = loadApiloConfiguration();
|
||||||
|
brecho('halo');
|
||||||
brecho(loadApiloOrder($apilo_config['token'], $id));
|
brecho(loadApiloOrder($apilo_config['token'], $id));
|
||||||
function loadApiloOrder($token, $orderId) {
|
function loadApiloOrder($token, $orderId) {
|
||||||
|
brecho($token);
|
||||||
$url = "https://twinpol.apilo.com/rest/api/orders/".$orderId."/";
|
$url = "https://twinpol.apilo.com/rest/api/orders/".$orderId."/";
|
||||||
$headers = [
|
$headers = [
|
||||||
'Authorization: Bearer ' . $token,
|
'Authorization: Bearer ' . $token,
|
||||||
@@ -17,6 +19,7 @@ function loadApiloOrder($token, $orderId) {
|
|||||||
$response = curl_exec($curl);
|
$response = curl_exec($curl);
|
||||||
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
$httpCode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
|
||||||
curl_close($curl);
|
curl_close($curl);
|
||||||
|
brecho($response);
|
||||||
if ($httpCode !== 200) {
|
if ($httpCode !== 200) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -39,7 +39,7 @@ function getOrder($token, $orderId)
|
|||||||
function brecho($msg)
|
function brecho($msg)
|
||||||
{
|
{
|
||||||
echo '<br><pre>';
|
echo '<br><pre>';
|
||||||
var_dump($msg);
|
print_r($msg);
|
||||||
echo PHP_EOL;
|
echo PHP_EOL;
|
||||||
echo '</pre><br>';
|
echo '</pre><br>';
|
||||||
}
|
}
|
||||||
@@ -111,7 +111,7 @@ function copyToClipboard(text) {
|
|||||||
}
|
}
|
||||||
function openDetails(id, origin) {
|
function openDetails(id, origin) {
|
||||||
window.console.log(origin);
|
window.console.log(origin);
|
||||||
if (origin.startsWith('apilo')) {
|
if (origin.startsWith('Apilo')) {
|
||||||
window.open("index.php?module=EcmInvoiceOuts&action=ecommerce&apilo_details="+id, "_blank");
|
window.open("index.php?module=EcmInvoiceOuts&action=ecommerce&apilo_details="+id, "_blank");
|
||||||
} else {
|
} else {
|
||||||
window.open("index.php?module=EcmInvoiceOuts&action=ecommerce&baselinker_details="+id, "_blank");
|
window.open("index.php?module=EcmInvoiceOuts&action=ecommerce&baselinker_details="+id, "_blank");
|
||||||
|
|||||||
@@ -109,12 +109,17 @@
|
|||||||
{$ROW.document_no}
|
{$ROW.document_no}
|
||||||
{if $ROW.origin == 'amazon'}
|
{if $ROW.origin == 'amazon'}
|
||||||
<img src="modules/EcmSales/images/pdf.gif" onclick="copyToClipboard('{$ROW.url}')"
|
<img src="modules/EcmSales/images/pdf.gif" onclick="copyToClipboard('{$ROW.url}')"
|
||||||
style="cursor:pointer;"></a>
|
style="cursor:pointer;"/>
|
||||||
{/if}
|
{/if}
|
||||||
{if $ROW.origin == 'allegro'}
|
{if $ROW.origin == 'allegro'}
|
||||||
<img src="modules/EcmSales/images/pdf.gif"
|
<img src="modules/EcmSales/images/pdf.gif"
|
||||||
onclick="window.open('https://panel-g.baselinker.com/printouts/printout_invoices.php?id={$ROW.id}')"
|
onclick="window.open('https://panel-g.baselinker.com/printouts/printout_invoices.php?id={$ROW.id}')"
|
||||||
style="cursor:pointer;" {/if} </td>
|
style="cursor:pointer;"/>
|
||||||
|
{/if}
|
||||||
|
<img src="modules/EcmSales/images/convert.gif"
|
||||||
|
onclick="openDetails('{$ROW.order_no}', '{$ROW.origin}')"
|
||||||
|
style="cursor:pointer;"/>
|
||||||
|
</td>
|
||||||
<td>
|
<td>
|
||||||
<a target="_blank"
|
<a target="_blank"
|
||||||
href="index.php?module=EcmStockDocOuts&action=DetailView&record={$ROW.wz_id}">{$ROW.wz_document_no}</a>
|
href="index.php?module=EcmStockDocOuts&action=DetailView&record={$ROW.wz_id}">{$ROW.wz_document_no}</a>
|
||||||
|
|||||||
@@ -1,36 +1,31 @@
|
|||||||
<?php
|
<?php
|
||||||
// enable error reporting
|
// enable error reporting
|
||||||
error_reporting(LC_ALL);
|
//error_reporting(LC_ALL);
|
||||||
ini_set('display_errors', 1);
|
//ini_set('display_errors', 1);
|
||||||
// ?XDEBUG_SESSION_START=PHPSTORM
|
// ?XDEBUG_SESSION_START=PHPSTORM
|
||||||
importInvoices();
|
//importInvoices();
|
||||||
function importInvoices()
|
function apilo_importInvoices()
|
||||||
{
|
{
|
||||||
$apilo_config = loadApiloConfiguration();
|
$apilo_config = apilo_loadConfiguration();
|
||||||
$db = $GLOBALS['db'];
|
$db = $GLOBALS['db'];
|
||||||
|
|
||||||
$GLOBALS['log']->info('----- Importing invoices from Apilo, config', $apilo_config);
|
|
||||||
|
|
||||||
$dbRes = $db->query("SELECT COUNT(id) as last_id FROM ecommerce_invoices WHERE origin LIKE 'apilo%'");
|
$dbRes = $db->query("SELECT COUNT(id) as last_id FROM ecommerce_invoices WHERE origin LIKE 'apilo%'");
|
||||||
$offset = intval($db->fetchByAssoc($dbRes)['last_id']);
|
$offset = intval($db->fetchByAssoc($dbRes)['last_id']);
|
||||||
|
|
||||||
$GLOBALS['log']->info('----- Importing invoices from Apilo, offset', $offset);
|
$invoices = apilo_loadInvoices($apilo_config['token'], $offset);
|
||||||
|
|
||||||
$invoices = loadApiloInvoices($apilo_config['token'], $offset);
|
|
||||||
if (isset($invoices->error)) {
|
if (isset($invoices->error)) {
|
||||||
if (refreshApiloToken($apilo_config['refreshToken'], $apilo_config['clientId'], $apilo_config['clientSecret']) == true) {
|
if (apilo_refreshToken($apilo_config['refreshToken'], $apilo_config['clientId'], $apilo_config['clientSecret']) == true) {
|
||||||
$apilo_config = loadApiloConfiguration();
|
//$apilo_config = apilo_loadConfiguration();
|
||||||
$invoices = loadApiloInvoices($apilo_config['token'], $offset);
|
//$invoices = apilo_loadInvoices($apilo_config['token'], $offset);
|
||||||
} else {
|
} else {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
brecho(count($invoices->documents));
|
$GLOBALS['log']->bimit('----- Importing invoices from Apilo, documents count', count($invoices->documents));
|
||||||
|
|
||||||
$GLOBALS['log']->info('----- Importing invoices from Apilo, documents count', count($invoices->documents));
|
$platforms = apilo_loadPlatformsList($apilo_config['token']);
|
||||||
|
|
||||||
$platforms = loadApiloPlatformsList($apilo_config['token']);
|
|
||||||
|
|
||||||
if (!$platforms) {
|
if (!$platforms) {
|
||||||
return false;
|
return false;
|
||||||
@@ -38,15 +33,15 @@ function importInvoices()
|
|||||||
|
|
||||||
if (isset($invoices->documents) && count($invoices->documents) > 0) {
|
if (isset($invoices->documents) && count($invoices->documents) > 0) {
|
||||||
foreach ($invoices->documents as $invoice) {
|
foreach ($invoices->documents as $invoice) {
|
||||||
addapiloInvoice($invoice, $platforms, $apilo_config['token']);
|
apilo_addInvoice($invoice, $platforms, $apilo_config['token']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
$GLOBALS['log']->info('----- Importing invoices from Apilo, all processed, return TRUE');
|
$GLOBALS['log']->bimit('----- Importing invoices from Apilo, all processed, return TRUE');
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
function loadApiloConfiguration()
|
function apilo_loadConfiguration()
|
||||||
{
|
{
|
||||||
global $db;
|
$db = $GLOBALS['db'];
|
||||||
$dbRes = $db->query("SELECT * FROM config WHERE category='apilo'");
|
$dbRes = $db->query("SELECT * FROM config WHERE category='apilo'");
|
||||||
$config = [];
|
$config = [];
|
||||||
while ($row = $db->fetchByAssoc($dbRes)) {
|
while ($row = $db->fetchByAssoc($dbRes)) {
|
||||||
@@ -54,7 +49,7 @@ function loadApiloConfiguration()
|
|||||||
}
|
}
|
||||||
return $config;
|
return $config;
|
||||||
}
|
}
|
||||||
function loadApiloInvoices($token, $offset)
|
function apilo_loadInvoices($token, $offset)
|
||||||
{
|
{
|
||||||
$url = "https://twinpol.apilo.com/rest/api/finance/documents/";
|
$url = "https://twinpol.apilo.com/rest/api/finance/documents/";
|
||||||
$params = [
|
$params = [
|
||||||
@@ -81,7 +76,7 @@ function loadApiloInvoices($token, $offset)
|
|||||||
}
|
}
|
||||||
return json_decode($response);
|
return json_decode($response);
|
||||||
}
|
}
|
||||||
function refreshApiloToken($refreshToken, $clientId, $clientSecret)
|
function apilo_refreshToken($refreshToken, $clientId, $clientSecret)
|
||||||
{
|
{
|
||||||
$url = "https://twinpol.apilo.com/rest/auth/token/";
|
$url = "https://twinpol.apilo.com/rest/auth/token/";
|
||||||
|
|
||||||
@@ -126,11 +121,11 @@ function refreshApiloToken($refreshToken, $clientId, $clientSecret)
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
function addApiloInvoice($invoice, $platforms, $token)
|
function apilo_addInvoice($invoice, $platforms, $token)
|
||||||
{
|
{
|
||||||
$db = $GLOBALS['db'];
|
$db = $GLOBALS['db'];
|
||||||
|
|
||||||
$platformId = loadApiloOrderPlatformId($token, $invoice->orderId);
|
$platformId = apilo_loadOrderPlatformId($token, $invoice->orderId);
|
||||||
if (!$platformId) {
|
if (!$platformId) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@@ -231,12 +226,12 @@ function addApiloInvoice($invoice, $platforms, $token)
|
|||||||
if (isset($invoice->documentItems) && is_array($invoice->documentItems)) {
|
if (isset($invoice->documentItems) && is_array($invoice->documentItems)) {
|
||||||
$db->query(sprintf("DELETE FROM ecommerce_invoices_products WHERE invoice_id='%s'", $db->quote($invoice->id)));
|
$db->query(sprintf("DELETE FROM ecommerce_invoices_products WHERE invoice_id='%s'", $db->quote($invoice->id)));
|
||||||
foreach ($invoice->documentItems as $item) {
|
foreach ($invoice->documentItems as $item) {
|
||||||
addApiloInvoiceProduct($invoice->id, $item);
|
apilo_addInvoiceProduct($invoice->id, $item);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
function addApiloInvoiceProduct($invoiceId, $item)
|
function apilo_addInvoiceProduct($invoiceId, $item)
|
||||||
{
|
{
|
||||||
$db = $GLOBALS['db'];
|
$db = $GLOBALS['db'];
|
||||||
|
|
||||||
@@ -290,7 +285,7 @@ function addApiloInvoiceProduct($invoiceId, $item)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function loadApiloPlatformsList($token) {
|
function apilo_loadPlatformsList($token) {
|
||||||
$url = "https://twinpol.apilo.com/rest/api/orders/platform/map/";
|
$url = "https://twinpol.apilo.com/rest/api/orders/platform/map/";
|
||||||
$headers = [
|
$headers = [
|
||||||
'Authorization: Bearer ' . $token,
|
'Authorization: Bearer ' . $token,
|
||||||
@@ -309,7 +304,7 @@ function loadApiloPlatformsList($token) {
|
|||||||
}
|
}
|
||||||
return json_decode($response);
|
return json_decode($response);
|
||||||
}
|
}
|
||||||
function loadApiloOrderPlatformId($token, $orderId) {
|
function apilo_loadOrderPlatformId($token, $orderId) {
|
||||||
$url = "https://twinpol.apilo.com/rest/api/orders/".$orderId."/";
|
$url = "https://twinpol.apilo.com/rest/api/orders/".$orderId."/";
|
||||||
$headers = [
|
$headers = [
|
||||||
'Authorization: Bearer ' . $token,
|
'Authorization: Bearer ' . $token,
|
||||||
|
|||||||
@@ -106,7 +106,6 @@ class Scheduler extends SugarBean {
|
|||||||
*/
|
*/
|
||||||
function fire() {
|
function fire() {
|
||||||
if(empty($this->job)) { // only execute when valid
|
if(empty($this->job)) { // only execute when valid
|
||||||
$GLOBALS['log']->fatal('Scheduler tried to fire an empty job!!');
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -126,16 +125,18 @@ class Scheduler extends SugarBean {
|
|||||||
$job->retrieve($jobId);
|
$job->retrieve($jobId);
|
||||||
|
|
||||||
if($exJob[0] == 'function') {
|
if($exJob[0] == 'function') {
|
||||||
$GLOBALS['log']->debug('----->Scheduler found a job of type FUNCTION');
|
|
||||||
require_once('modules/Schedulers/_AddJobsHere.php');
|
require_once('modules/Schedulers/_AddJobsHere.php');
|
||||||
|
|
||||||
$job->setJobFlag(1);
|
$job->setJobFlag(1);
|
||||||
|
|
||||||
$func = $exJob[1];
|
$func = $exJob[1];
|
||||||
$GLOBALS['log']->debug('----->SchedulersJob firing '.$func);
|
|
||||||
|
$GLOBALS['log']->bimit('Starting function', $job->scheduler->id, $job->scheduler->name, $func);
|
||||||
|
|
||||||
$res = call_user_func($func);
|
$res = call_user_func($func);
|
||||||
if($res) {
|
if($res) {
|
||||||
|
$GLOBALS['log']->bimit('Setting JOB as finished', $job->scheduler->id, $job->scheduler->name, $res);
|
||||||
$job->setJobFlag(2);
|
$job->setJobFlag(2);
|
||||||
$job->finishJob();
|
$job->finishJob();
|
||||||
return true;
|
return true;
|
||||||
@@ -340,22 +341,15 @@ class Scheduler extends SugarBean {
|
|||||||
$this->cleanJobLog();
|
$this->cleanJobLog();
|
||||||
$allSchedulers = $this->get_full_list('', 'schedulers.status=\'Active\'');
|
$allSchedulers = $this->get_full_list('', 'schedulers.status=\'Active\'');
|
||||||
|
|
||||||
|
|
||||||
$GLOBALS['log']->info('-----> Scheduler found [ '.count($allSchedulers).' ] ACTIVE jobs');
|
|
||||||
|
|
||||||
if(!empty($allSchedulers)) {
|
if(!empty($allSchedulers)) {
|
||||||
foreach($allSchedulers as $focus) {
|
foreach($allSchedulers as $focus) {
|
||||||
if($focus->fireQualified()) {
|
if($focus->fireQualified()) {
|
||||||
if($focus->fire()) {
|
$GLOBALS['log']->bimit('Starting job', $focus->id, $focus->name);
|
||||||
$GLOBALS['log']->debug('----->Scheduler Job completed successfully');
|
$res = $focus->fire();
|
||||||
} else {
|
$GLOBALS['log']->bimit('Finished job', $focus->id, $focus->name, $res);
|
||||||
$GLOBALS['log']->fatal('----->Scheduler Job FAILED');
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} else {
|
|
||||||
$GLOBALS['log']->debug('----->No Schedulers found');
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -71,27 +71,33 @@ $job_strings = array(
|
|||||||
|
|
||||||
function importApiloInvoices() {
|
function importApiloInvoices() {
|
||||||
try {
|
try {
|
||||||
$GLOBALS['log']->info('----- Importing invoices from Apilo, _addJobsHereReturn, starting');
|
$GLOBALS['log']->bimit('_addJobsHere, importApiloInvoices started');
|
||||||
$GLOBALS['db']->query("USE preDb_0dcc87940d3655fa574b253df04ca1c3;");
|
$GLOBALS['db']->query("USE preDb_0dcc87940d3655fa574b253df04ca1c3;");
|
||||||
|
$GLOBALS['log']->bimit('_addJobsHere, importApiloInvoices db query done');
|
||||||
require_once('modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/importApiloInvoices.php');
|
require_once('modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/importApiloInvoices.php');
|
||||||
|
$GLOBALS['log']->bimit('_addJobsHere, importApiloInvoices file loadded');
|
||||||
|
$GLOBALS['log']->bimit('_addJobsHere, importApiloInvoices importInvoices() fired');
|
||||||
$res = importInvoices();
|
$res = importInvoices();
|
||||||
$GLOBALS['log']->info('----- Importing invoices from Apilo, _addJobsHereReturn', $res);
|
$GLOBALS['log']->bimit('_addJobsHere, importApiloInvoices finished', $res);
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
$GLOBALS['log']->info('----- Importing invoices from Apilo, _addJobsHereReturn, error catched', $e);
|
$GLOBALS['log']->bimit('_addJobsHere, importApiloInvoices error', $e);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
function importBaselinkerInvoices()
|
function importBaselinkerInvoices()
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
|
$GLOBALS['log']->bimit('_addJobsHere, importBaselinkerInvoices started');
|
||||||
$GLOBALS['db']->query("USE preDb_0dcc87940d3655fa574b253df04ca1c3;");
|
$GLOBALS['db']->query("USE preDb_0dcc87940d3655fa574b253df04ca1c3;");
|
||||||
require_once('modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/importBaselinkerInvoices.php');
|
require_once('modules/EcmInvoiceOuts/BimIT-eCommerceInvoices/importBaselinkerInvoices.php');
|
||||||
importFV('7688'); // FV Polska
|
importFV('7688'); // FV Polska
|
||||||
//importFV('15356'); // FV Polska (stare)
|
//importFV('15356'); // FV Polska (stare)
|
||||||
importFV('53096'); // FV Temu
|
importFV('53096'); // FV Temu
|
||||||
|
$GLOBALS['log']->bimit('_addJobsHere, importBaselinkerInvoices finished');
|
||||||
return true;
|
return true;
|
||||||
} catch (Exception $e) {
|
} catch (Exception $e) {
|
||||||
|
$GLOBALS['log']->bimit('_addJobsHere, importBaselinkerInvoices error', $e);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
<?php
|
<?php
|
||||||
$logger = $GLOBALS['log'];
|
$logger = $GLOBALS['log'];
|
||||||
$logger->debug('test');
|
$logger->bimit('test');
|
||||||
echo 'test';
|
echo 'test';
|
||||||
Reference in New Issue
Block a user