add_meta_box( new Verification_Box() ); return $containers; } /** * @throws Repository_Exception */ public function enqueue_assets_for_records() { /** @var Module $module */ $module = jet_form_builder()->module( 'verification' ); $script_asset = require_once $module->get_dir( 'assets/build/admin/form-records.asset.php' ); wp_enqueue_script( $this->get_handle(), $module->get_url( 'assets/build/admin/form-records.js' ), $script_asset['dependencies'], $script_asset['version'], true ); } /** * @throws Repository_Exception */ public function enqueue_assets_for_record_single() { /** @var Module $module */ $module = jet_form_builder()->module( 'verification' ); $script_asset = require_once $module->get_dir( 'assets/build/admin/form-record-single.asset.php' ); wp_enqueue_script( $this->get_handle(), $module->get_url( 'assets/build/admin/form-record-single.js' ), $script_asset['dependencies'], $script_asset['version'], true ); } public function modify_columns_for_records_page( array $list ): array { $ids = array(); foreach ( $list as &$record ) { $ids[] = (int) $record['choose']['value']; } try { $tokens = Token_By_Record_View::find( array( array( 'type' => Query_Conditions_Builder::TYPE_IN, 'values' => array( 'record_id', $ids ), ), ) )->query()->query_all(); } catch ( Query_Builder_Exception $exception ) { return $list; } $sorted_tokens = array(); $labels = $this->get_verification_labels(); foreach ( $tokens as &$token_row ) { $sorted_tokens[ $token_row['main']['record_id'] ] = $token_row; } $verify_manually_action = $this->get_verification_action(); foreach ( $list as &$record ) { if ( empty( $record['actions']['value'] ) || ! is_array( $record['actions']['value'] ) || empty( $sorted_tokens[ $record['choose']['value'] ] ) ) { continue; } $token_status = new Admin\Columns\Status_Column(); $column_status = $token_status->get_value( $sorted_tokens[ $record['choose']['value'] ] ); $column_status['text'] = $labels[ $column_status['status'] ] ?? $column_status['text']; $record['status']['value'] = $column_status; if ( Admin\Columns\Status_Column::PENDING !== $column_status['status'] ) { continue; } $delete_action = array_pop( $record['actions']['value'] ); array_push( $record['actions']['value'], $verify_manually_action, $delete_action ); } return $list; } public function add_actions_for_records_page( array $config ): array { $delete_action = array_pop( $config['actions'] ); array_push( $config['actions'], $this->get_verification_action(), $delete_action ); return $config; } protected function get_verification_action(): array { return array( 'value' => 'verify', 'label' => __( 'Verify manually', 'jet-form-builder' ), 'endpoint' => ( new Rest_Endpoint( new Verify_Manually() ) )->to_array(), ); } public function remove_verify_button_for_records_single_page( array $config ): array { $box = false; foreach ( $config['containers'][1]['boxes'] as &$current_box ) { if ( 'verification' !== ( $current_box['slug'] ?? '' ) ) { continue; } $box =& $current_box; } if ( ! $box || Status_Column::PENDING === $box['list']['status']['value']['status'] || empty( $box['box_actions'] ) ) { return $config; } foreach ( $box['box_actions'] as $index => $action ) { if ( 'verify' !== $action['slug'] ) { continue; } unset( $box['box_actions'][ $index ] ); } $box['box_actions'] = array_values( $box['box_actions'] ); return $config; } /** * @param $record_id * @param $record_columns * * @throws Sql_Exception */ public function connect_record_or_delete_token( $record_id, $record_columns ) { $token_id = jet_fb_context()->get_value( Verification::TOKEN_ID ); if ( ! $token_id ) { return; } $status = new Status_Info( $record_columns['status'] ); if ( ! $status->is_success() ) { ( new Tokens_Model() )->delete( array( 'id' => $token_id ) ); return; } ( new Tokens_To_Records_Model() )->insert( array( 'token_id' => $token_id, 'record_id' => $record_id, ) ); } private function get_verification_labels(): array { return array( Admin\Columns\Status_Column::VERIFIED => __( 'Verified', 'jet-form-builder' ), Admin\Columns\Status_Column::PENDING => __( 'Waiting verification', 'jet-form-builder' ), Admin\Columns\Status_Column::EXPIRED => __( 'Verification token expired', 'jet-form-builder' ), ); } }