/wp-content/plugins/wp-lister-for-ebay/classes/WPL_AjaxHandler.php
PHP | 452 lines | 285 code | 104 blank | 63 comment | 20 complexity | 8a92bfd722de9c0828cff647698cc379 MD5 | raw file
Possible License(s): GPL-2.0, BSD-3-Clause, AGPL-1.0, GPL-3.0, LGPL-2.1
- <?php
- class WPL_AjaxHandler extends WPL_Core {
- public function __construct() {
- parent::__construct();
-
- // called from category tree
- add_action('wp_ajax_e2e_get_ebay_categories_tree', array( &$this, 'ajax_get_ebay_categories_tree' ) );
- add_action('wp_ajax_e2e_get_store_categories_tree', array( &$this, 'ajax_get_store_categories_tree' ) );
- // called from edit products page
- add_action('wp_ajax_wpl_getCategorySpecifics', array( &$this, 'ajax_getCategorySpecifics' ) );
-
- // called from jobs window
- add_action('wp_ajax_wpl_jobs_load_tasks', array( &$this, 'jobs_load_tasks' ) );
- add_action('wp_ajax_wpl_jobs_run_task', array( &$this, 'jobs_run_task' ) );
- add_action('wp_ajax_wpl_jobs_complete_job', array( &$this, 'jobs_complete_job' ) );
- // handle incoming ebay notifications
- add_action('wp_ajax_handle_ebay_notify', array( &$this, 'ajax_handle_ebay_notify' ) );
- add_action('wp_ajax_nopriv_handle_ebay_notify', array( &$this, 'ajax_handle_ebay_notify' ) );
- }
-
- // fetch category specifics
- public function ajax_getCategorySpecifics() {
-
- $category_id = $_REQUEST['id'];
- $this->initEC();
- $result = $this->EC->getCategorySpecifics( $category_id );
- $this->EC->closeEbay();
- $this->returnJSON( $result );
- exit();
- }
-
- // run single task
- public function jobs_run_task() {
- // quit if no job name provided
- if ( ! isset( $_REQUEST['job'] ) ) return false;
- if ( ! isset( $_REQUEST['task'] ) ) return false;
- $job = $_REQUEST['job'];
- $task = $_REQUEST['task'];
- $this->logger->info('running task: '.print_r($task,1));
- // handle job name
- switch ( $task['task'] ) {
- case 'loadShippingServices':
-
- // call EbayController
- $this->initEC();
- $result = $this->EC->loadShippingServices();
- $this->EC->closeEbay();
- // build response
- $response = new stdClass();
- $response->job = $job;
- $response->task = $task;
- $response->result = $result;
- $response->errors = array();
- $response->success = true;
-
- $this->returnJSON( $response );
- exit();
-
- case 'loadPaymentOptions':
-
- // call EbayController
- $this->initEC();
- $result = $this->EC->loadPaymentOptions();
- $this->EC->closeEbay();
- // build response
- $response = new stdClass();
- $response->job = $job;
- $response->task = $task;
- $response->result = $result;
- $response->errors = array();
- $response->success = true;
-
- $this->returnJSON( $response );
- exit();
-
- case 'loadStoreCategories':
-
- // call EbayController
- $this->initEC();
- $result = $this->EC->loadStoreCategories();
- $this->EC->closeEbay();
- // build response
- $response = new stdClass();
- $response->job = $job;
- $response->task = $task;
- $response->result = $result;
- $response->errors = array();
- $response->success = true;
-
- $this->returnJSON( $response );
- exit();
-
- case 'loadEbayCategoriesBranch':
-
- // call EbayController
- $this->initEC();
- $result = $this->EC->loadEbayCategoriesBranch( $task['cat_id'] );
- $this->EC->closeEbay();
- // build response
- $response = new stdClass();
- $response->job = $job;
- $response->task = $task;
- $response->result = $result;
- $response->errors = array();
- $response->success = true;
-
- $this->returnJSON( $response );
- exit();
-
- case 'verifyItem':
-
- // call EbayController
- $this->initEC();
- $results = $this->EC->verifyItems( $task['id'] );
- $this->EC->closeEbay();
- // build response
- $response = new stdClass();
- $response->job = $job;
- $response->task = $task;
- $response->errors = $results[0]->errors;
- $response->success = $results[0]->success;
-
- $this->returnJSON( $response );
- exit();
-
- case 'publishItem':
-
- // call EbayController
- $this->initEC();
- $results = $this->EC->sendItemsToEbay( $task['id'] );
- $this->EC->closeEbay();
- // build response
- $response = new stdClass();
- $response->job = $job;
- $response->task = $task;
- $response->errors = $results[0]->errors;
- $response->success = $results[0]->success;
-
- $this->returnJSON( $response );
- exit();
-
- case 'reviseItem':
-
- // call EbayController
- $this->initEC();
- $results = $this->EC->reviseItems( $task['id'] );
- $this->EC->closeEbay();
- // build response
- $response = new stdClass();
- $response->job = $job;
- $response->task = $task;
- $response->errors = $results[0]->errors;
- $response->success = $results[0]->success;
-
- $this->returnJSON( $response );
- exit();
-
- case 'updateItem':
-
- // call EbayController
- $this->initEC();
- $results = $this->EC->updateItemsFromEbay( $task['id'] );
- $this->EC->closeEbay();
- // build response
- $response = new stdClass();
- $response->job = $job;
- $response->task = $task;
- $response->errors = $results[0]->errors;
- $response->success = $results[0]->success;
-
- $this->returnJSON( $response );
- exit();
-
- default:
- // echo "unknown task";
- // exit();
- }
- }
-
- // load task list
- public function jobs_load_tasks() {
- // quit if no job name provided
- if ( ! isset( $_REQUEST['job'] ) ) return false;
- $jobname = $_REQUEST['job'];
- // handle job name
- switch ( $jobname ) {
- case 'updateEbayData':
-
- // call EbayController
- $this->initEC();
- $tasks = $this->EC->initCategoriesUpdate();
- $this->EC->closeEbay();
- // build response
- $response = new stdClass();
- $response->tasklist = $tasks;
- $response->total_tasks = count( $tasks );
- $response->error = '';
- $response->success = true;
-
- // create new job
- $newJob = new stdClass();
- $newJob->jobname = $jobname;
- $newJob->tasklist = $tasks;
- $job = new JobsModel( $newJob );
- $response->job_key = $job->key;
- $this->returnJSON( $response );
- exit();
-
- case 'verifyAllPreparedItems':
-
- // get prepared items
- $sm = new ListingsModel();
- $items = $sm->getAllPrepared();
-
- // create job from items and send response
- $response = $this->_create_bulk_listing_job( 'verifyItem', $items, $jobname );
- $this->returnJSON( $response );
- exit();
-
- case 'publishAllVerifiedItems':
-
- // get verified items
- $sm = new ListingsModel();
- $items = $sm->getAllVerified();
-
- // create job from items and send response
- $response = $this->_create_bulk_listing_job( 'publishItem', $items, $jobname );
- $this->returnJSON( $response );
- exit();
-
- case 'reviseAllChangedItems':
-
- // get changed items
- $sm = new ListingsModel();
- $items = $sm->getAllChanged();
-
- // create job from items and send response
- $response = $this->_create_bulk_listing_job( 'reviseItem', $items, $jobname );
- $this->returnJSON( $response );
- exit();
-
- case 'updateAllPublishedItems':
-
- // get published items
- $sm = new ListingsModel();
- $items = $sm->getAllPublished();
-
- // create job from items and send response
- $response = $this->_create_bulk_listing_job( 'updateItem', $items, $jobname );
- $this->returnJSON( $response );
- exit();
-
- default:
- // echo "unknown job";
- // break;
- }
- // exit();
- }
- // create bulk listing job
- public function _create_bulk_listing_job( $taskname, $items, $jobname ) {
- // create tasklist
- $tasks = array();
- foreach( $items as $item ) {
- $this->logger->info('adding task for item #'.$item['id'] . ' - '.$item['auction_title']);
-
- $task = array(
- 'task' => $taskname,
- 'displayName' => $item['auction_title'],
- 'id' => $item['id']
- );
- $tasks[] = $task;
- }
- // build response
- $response = new stdClass();
- $response->tasklist = $tasks;
- $response->total_tasks = count( $tasks );
- $response->error = '';
- $response->success = true;
-
- // create new job
- $newJob = new stdClass();
- $newJob->jobname = $jobname;
- $newJob->tasklist = $tasks;
- $job = new JobsModel( $newJob );
- $response->job_key = $job->key;
- return $response;
- }
- // load task list
- public function jobs_complete_job() {
- // quit if no job name provided
- if ( ! isset( $_REQUEST['job'] ) ) return false;
- // mark job as completed
- $job = new JobsModel( $_REQUEST['job'] );
- $job->completeJob();
- if ( 'updateEbayData' == $job->item['job_name'] ) {
- // if we were updating ebay details as part of setup, move to next step
- if ( '2' == self::getOption('setup_next_step') ) self::updateOption('setup_next_step', 3);
- }
- // build response
- $response = new stdClass();
- $response->msg = $job->item['job_name'].' comleted';
- $response->error = '';
- $response->success = true;
- $response->job_key = $job->key;
- $this->returnJSON( $response );
- exit();
- }
- public function returnJSON( $data ) {
- header('content-type: application/json; charset=utf-8');
- echo json_encode( $data );
- }
-
- // get categories tree node - used on ProfilesPage
- public function ajax_get_ebay_categories_tree() {
-
- $path = $_POST["dir"];
- $parent_cat_id = basename( $path );
- $categories = EbayCategoriesModel::getChildrenOf( $parent_cat_id );
-
- if( count($categories) > 0 ) {
- echo "<ul class=\"jqueryFileTree\" style=\"display: none;\">";
- // All dirs
- foreach( $categories as $cat ) {
- if ( $cat['leaf'] == '0' ) {
- echo '<li class="directory collapsed"><a href="#" rel="'
- . ($_POST['dir'] . $cat['cat_id']) . '/">'. ($cat['cat_name']) . '</a></li>';
- }
- }
- // All files
- foreach( $categories as $cat ) {
- if ( $cat['leaf'] == '1' ) {
- $ext = 'txt';
- echo '<li class="file ext_txt"><a href="#" rel="'
- . ($_POST['dir'] . $cat['cat_id']) . '">' . ($cat['cat_name']) . '</a></li>';
- }
- }
- echo "</ul>";
- }
- exit();
- }
- // get categories tree node - used on ProfilesPage
- public function ajax_get_store_categories_tree() {
-
- $path = $_POST["dir"];
- $parent_cat_id = basename( $path );
- $categories = EbayCategoriesModel::getChildrenOfStoreCategory( $parent_cat_id );
-
- if( count($categories) > 0 ) {
- echo "<ul class=\"jqueryFileTree\" style=\"display: none;\">";
- // All dirs
- foreach( $categories as $cat ) {
- if ( $cat['leaf'] == '0' ) {
- echo '<li class="directory collapsed"><a href="#" rel="'
- . ($_POST['dir'] . $cat['cat_id']) . '/">'. ($cat['cat_name']) . '</a></li>';
- }
- }
- // All files
- foreach( $categories as $cat ) {
- if ( $cat['leaf'] == '1' ) {
- $ext = 'txt';
- echo '<li class="file ext_txt"><a href="#" rel="'
- . ($_POST['dir'] . $cat['cat_id']) . '">' . ($cat['cat_name']) . '</a></li>';
- }
- }
- echo "</ul>";
- }
- exit();
- }
- // there are still problems with eBay's notification system.
- // this handler is for debugging purposes - it will send request details to the developer
- // for manual test call: www.example.com/wp-admin/admin-ajax.php?action=handle_ebay_notify
- public function ajax_handle_ebay_notify() {
- require_once 'EbatNs_NotificationClient.php';
- require_once 'EbatNs_ResponseError.php';
- $handler = new EbatNs_NotificationClient();
- $body = file_get_contents('php://input');
- $res = $handler->getResponse($body);
-
- $this->logger->info('handle_ebay_notify() - time: '.date('Y-m-d H:i:s') );
- #$this->logger->info('POST:'.print_r($_POST,1));
- $this->logger->info('REQUEST:'.print_r($_REQUEST,1));
- $this->logger->info('SERVER:'.print_r($_SERVER,1));
-
- $headers = getallheaders();
- $this->logger->info('headers:'.print_r($headers,1));
- $this->logger->info('body:'.print_r($body,1));
- $this->logger->info('response:'.print_r($res,1));
- $msg = 'I received a notification at '.$_SERVER['HTTP_HOST'].$_SERVER['REQUEST_URI']."\n\n";
- $msg .= 'Body: '.print_r($body,1)."\n\n";
- $msg .= 'Response: '.print_r($res,1)."\n";
- $msg .= 'REQUEST: '.print_r($_REQUEST,1)."\n";
- $msg .= 'SERVER: '.print_r($_SERVER,1)."\n";
- $msg .= 'Headers: '.print_r($headers,1)."\n";
- $to = get_option('admin_email', 'support@wplab.com');
- $subject = 'New eBay platform notification';
- wp_mail($to, $subject, $msg);
-
- echo 'OK';
- exit();
- }
-
- }
- // instantiate object
- $oWPL_AjaxHandler = new WPL_AjaxHandler();