<?php // Load Wordpress core require_once __DIR__ . "/../../../../../wp-load.php"; // Set system params date_default_timezone_set(get_option("timezone_string")); // Set params $classes = \Vividcrestrealestate\Core\Libs\Rets::getPossibleClasses(); // Init Lib $Exchange = new \Vividcrestrealestate\Core\Administration\Exchange(); // Fetch properties for all classes if it necessary $current_date = new \Datetime(); foreach ($classes as $class) { $last_fetch_date = new \Datetime(get_option("rets_exchange_last_fetch_date_{$class}", "2000-01-01")); $interval = $current_date->diff($last_fetch_date); if ($interval->format("%d") > 0) { $Exchange->fetchRawData($class); } else { echo date("Y-m-d H:i:s") . " | There is no properties to fetch for class \"{$class}\": Last Fetch Date: " . $last_fetch_date->format("Y-m-d H:i:s") . "; Interval: " . $interval->format("%d") . " days" . PHP_EOL; } } // Process properties $Exchange->processData(200); // Get the messages $messages = array_merge((array) $Exchange->getPositiveMessages(), (array) $Exchange->getNegativeMessages()); // Show messages echo date("Y-m-d H:i:s") . " | " . implode(PHP_EOL . date("Y-m-d H:i:s") . " | ", $messages) . PHP_EOL;
public static function processData($batch_size = null) { // Check params if (empty($batch_size) && empty($_POST['batch_size'])) { self::$negative_messages[] = "Batch size is not defined"; return false; } // Pin the time of start $start = new \Datetime(); // Define vars $options = self::getStoredOptions(); $batch_size = !empty($batch_size) ? $batch_size : $_POST['batch_size']; $credentials = Connection::getStoredOptions(); // Define processing progress status if ($options->is_processing_in_progress) { self::$negative_messages[] = "Properties is already processing"; return; } else { self::storeOptions(['is_processing_in_progress' => true]); } // Init Libs $ProcessingProperties = new Structures\ProcessingProperties(); // Define quantity of processing properties $unprocecced_qty = $ProcessingProperties->getNumberOfUnprocessed(); $processed_qty = $batch_size >= $unprocecced_qty ? $batch_size : $unprocecced_qty; $processed_today_qty = $ProcessingProperties->getNumberOfProcessed(date("Y-m-d")); // Define necessity of processing if ($unprocecced_qty == 0 || $processed_today_qty >= 10000) { // Inform if nothing to do self::$negative_messages[] = $unprocecced_qty == 0 ? "There is no unprocessed properties" : "Daily limit for processing properties is exceeded (limit: 10000, processed: {$processed_today_qty})"; // Remove processing lock self::storeOptions(['is_processing_in_progress' => false]); // Stop working return; } // Process properties try { $Rets = new Libs\Rets($credentials->url, $credentials->login, $credentials->password); if (!$Rets->login()) { self::$negative_messages[] = "Can't connect to RETS server"; return false; } $Rets->processProperties($batch_size); } catch (\Exception $e) { self::$negative_messages[] = "Error due processing properties: {$e->getMessage()}"; $processed_qty = 0; } // Change processing progress status self::storeOptions(['is_processing_in_progress' => false]); // Fetch time info $end = new \Datetime(); $interval = $start->diff($end); $spent_seconds = $interval->format("%s"); // Add message info about processed properties self::$positive_messages[] = "{$batch_size} properties has been processed for the {$spent_seconds} seconds"; // Edit info about number of unprocessed properties $remaining_qty = $ProcessingProperties->getNumberOfUnprocessed(); array_walk(self::$positive_messages, function (&$message) use($remaining_qty) { $message = preg_replace("/^There is (\\d*) unprocessed properties\$/", "There is {$remaining_qty} unprocessed properties", $message); }); }