Files
doitinpoland.com/wp-content/plugins/sitepress-multilingual-cms/classes/translation-feedback/hooks/wpml-tf-backend-ajax-feedback-edit-hooks.php
2023-09-12 21:41:04 +02:00

83 lines
2.1 KiB
PHP

<?php
/**
* Class WPML_TF_Backend_AJAX_Feedback_Edit_Hooks
*
* @author OnTheGoSystems
*/
class WPML_TF_Backend_AJAX_Feedback_Edit_Hooks implements IWPML_Action {
/** @var WPML_TF_Feedback_Edit $feedback_edit */
private $feedback_edit;
/** @var WPML_TF_Backend_Feedback_Row_View $row_view */
private $row_view;
/** @var array $post_data */
private $post_data;
/**
* WPML_TF_Backend_AJAX_Feedback_Edit_Hooks constructor.
*
* @param WPML_TF_Feedback_Edit $feedback_edit
* @param WPML_TF_Backend_Feedback_Row_View $row_view
* @param array $post_data
*/
public function __construct(
WPML_TF_Feedback_Edit $feedback_edit,
WPML_TF_Backend_Feedback_Row_View $row_view,
array $post_data
) {
$this->feedback_edit = $feedback_edit;
$this->row_view = $row_view;
$this->post_data = $post_data;
}
public function add_hooks() {
add_action(
'wp_ajax_' . WPML_TF_Backend_AJAX_Feedback_Edit_Hooks_Factory::AJAX_ACTION,
array( $this, 'edit_feedback_callback' )
);
}
public function edit_feedback_callback() {
try {
$this->check_post_data_key( 'feedback_id' );
$feedback_id = filter_var( $this->post_data['feedback_id'], FILTER_SANITIZE_NUMBER_INT );
$feedback = $this->feedback_edit->update( $feedback_id, $this->post_data );
if ( ! $feedback ) {
throw new WPML_TF_AJAX_Exception( esc_html__( 'Failed to update the feedback.', 'sitepress' ) );
}
$response = array(
'summary_row' => $this->row_view->render_summary_row( $feedback ),
'details_row' => $this->row_view->render_details_row( $feedback ),
);
wp_send_json_success( $response );
} catch ( WPML_TF_AJAX_Exception $e ) {
wp_send_json_error( $e->getMessage() );
} catch ( WPML_TF_Feedback_Update_Exception $e ) {
wp_send_json_error( $e->getMessage() );
}
}
/**
* @param string $key
*
* @throws WPML_TF_AJAX_Exception
*/
private function check_post_data_key( $key ) {
if ( ! isset( $this->post_data[ $key ] ) ) {
$message = sprintf(
esc_html__( 'Missing key "%s".', 'sitepress' ),
$key
);
throw new WPML_TF_AJAX_Exception( $message );
}
}
}