_registry->get( 'model.event', $post_id ); if ( $ai1ec_event->get( 'post' ) && $ai1ec_event->get( 'recurrence_rules' ) ) { // when untrashing also get trashed object $children = $this->_registry->get( 'model.event.parent' ) ->get_child_event_objects( $ai1ec_event->get( 'post_id' ), $action === 'untrash' ); $function = 'wp_' . $action . '_post'; foreach ( $children as $child ) { $function( $child->get( 'post_id' ) ); } } } catch ( Ai1ec_Event_Not_Found_Exception $exception ) { // ignore - not an event } } /** * Trashes child posts * * @param int $post_id */ public function trash_children( $post_id ) { $this->_manage_children( $post_id, 'trash' ); } /** * Delete child posts * * @param int $post_id */ public function delete_children( $post_id ) { $this->_manage_children( $post_id, 'delete' ); } /** * Untrashes child posts * * @param int $post_id */ public function untrash_children( $post_id ) { $this->_manage_children( $post_id, 'untrash' ); } /** * Handle PRE (event) trashing. * * @wp_hook trash_post * * @param int $post_id ID of post, which was trashed. * * @return bool Success. */ public function trash_post( $post_id ) { $api = $this->_registry->get( 'model.api.api-ticketing' ); $post = get_post( $post_id ); $restored_status = get_post_meta( $post_id, '_wp_trash_meta_status', true ); $fields = array( 'status' => 'trash' ); $ajax = defined( 'DOING_AJAX' ) && DOING_AJAX; $message = $api->update_api_event_fields( $post, $fields, 'trash', $ajax ); if ( null !== $message ) { if ( $ajax ) { wp_die( $message ); } else { wp_redirect( $this->get_sendback_page( $post_id ) ); exit(); } } return true; } /** * Handle POST (event) trashing. * * @wp_hook trashed_post * * @param int $post_id ID of post, which was trashed. * * @return bool Success. */ public function trashed_post( $post_id ) { return $this->trash_children( $post_id ); } private function get_sendback_page( $post_id ) { $sendback = wp_get_referer(); $page_base = Ai1ec_Wp_Uri_Helper::get_pagebase( $sendback ); //$_SERVER['REQUEST_URI'] ); if ( 'post.php' === $page_base ) { return get_edit_post_link( $post_id, 'url' ); } else { return admin_url( 'edit.php?post_type=ai1ec_event' ); } } /** * Handle PRE (event) untrashing. * * @wp_hook untrash_post * * @param int $post_id ID of post, which was untrashed. * * @return bool Success. Interrupt the action with exit is * the integration with API fails */ public function untrash_post ( $post_id ) { $api = $this->_registry->get( 'model.api.api-ticketing' ); $post = get_post( $post_id ); $restored_status = get_post_meta( $post_id, '_wp_trash_meta_status', true ); $fields = array( 'status' => $restored_status ); $ajax = defined( 'DOING_AJAX' ) && DOING_AJAX; $message = $api->update_api_event_fields( $post, $fields, 'untrash', $ajax ); if ( null !== $message ) { if ( $ajax ) { wp_die( $message ); } else { wp_redirect( $this->get_sendback_page( $post_id ) ); exit(); } } return true; } /** * Handle POST (event) untrashing. * * @wp_hook untrashed_post * * @param int $post_id ID of post, which was untrashed. * * @return bool Success. */ public function untrashed_post( $post_id ) { return $this->untrash_children( $post_id ); } /** * Handle PRE (event) deletion. * * Executed before post is deleted, but after meta is removed. * * @wp_hook delete_post * * @param int $post_id ID of post, which was trashed. * * @return bool Success. Interrupt the action with exit is * the integration with API fails */ public function before_delete_post( $post_id ) { $api = $this->_registry->get( 'model.api.api-ticketing' ); $ajax = defined( 'DOING_AJAX' ) && DOING_AJAX; $message = $api->delete_api_event( $post_id, 'delete', $ajax ); if ( null !== $message ) { if ( $ajax ) { wp_die( $message ); } else { wp_redirect( $this->get_sendback_page( $post_id ) ); exit(); } } return true; } /** * Handle POST (event) deletion. * * Executed before post is deleted, but after meta is removed. * * @wp_hook delete_post * * @param int $post_id ID of post, which was trashed. * * @return bool Success. */ public function delete( $post_id ) { $post_id = (int)$post_id; $where = array( 'post_id' => (int)$post_id ); $format = array( '%d' ); $dbi = $this->_registry->get( 'dbi.dbi' ); $success = $this->delete_children( $post_id ); $success = $dbi->delete( 'ai1ec_events', $where, $format ); $success = $this->_registry->get( 'model.event.instance' )->clean( $post_id ); unset( $where, $dbi ); return $success; } }