recordNumber = $recordNumber; } public function handle(){ $error = $this->getLastError(); $trace = $this->trace(); if($error && strpos($error['file'], 'functions.php') !== false){ $wp_uploads = $this->getUploadsDir(); $functions = 'in '.$wp_uploads['basedir'] . DIRECTORY_SEPARATOR . WP_ALL_EXPORT_UPLOADS_BASE_DIRECTORY . DIRECTORY_SEPARATOR . 'functions.php:'.$error['line']; $error['message'] = str_replace($functions, '', $error['message']); $error['message'] = str_replace("\\n",'',$error['message']); $errorParts = explode('Stack trace', $error['message']); $error['message'] = $errorParts[0]; $error['message'] .=' on line '.$error['line']; $error['message'] = str_replace("\n",'',$error['message']); $error['message'] = str_replace("Uncaught Error:", '', $error['message']); $error['message'] = 'PHP Error: ' . $error['message']; $error['message'] = str_replace(' ', ' ', $error['message']); echo "[[ERROR]]"; if($error['message'] == '') { $error['message'] = __('An unknown error occured', 'wp_all_import_plugin'); } $this->terminate(json_encode(array('error' => ''.$error['message'].' of the Functions Editor'.'', 'line' => $error['line'], 'title' => __('PHP Error','wp_all_import_plugin')))); } else if(strpos($error['file'], 'XMLWriter.php') !== false ) { if(strpos($error['message'],'syntax error, unexpected') !== false) { echo "[[ERROR]]"; $this->terminate(json_encode(array('error'=>__('You probably forgot to close a quote', 'wp_all_import_plugin'),'title' => __('PHP Error','wp_all_import_plugin')))); } } } /** * @return array */ protected function getLastError() { return error_get_last(); } /** * @return mixed */ protected function getUploadsDir() { return wp_upload_dir(); } /** * Hack to be able to test the class in isolation * * @param $message */ protected function terminate($message) { exit($message); } protected function trace(){ $e = new Exception(); return $e->getTraceAsString(); // return debug_backtrace(); } public function import_data_handler($errno, $errstr, $errfile, $errline) { error_log('Found import exception: ' . $errstr . ' ' . $errno . ' ' . $errfile . ' ' . $errline . ' for record #' . $this->recordNumber); // trigger_error('TEST'); // throw new XmlImportException($errstr, $errno, 0, $errfile, $errline); } public function parse_data_handler($errno, $errstr, $errfile, $errline) { error_log('Found parse exception: ' . $errstr . ' ' . $errno . ' ' . $errfile . ' ' . $errline); throw new XmlImportException($errstr, $errno); } }