2017-07-26 14:57:52 +03:00
< ? php
namespace um\admin\core ;
2019-08-08 00:36:33 +03:00
2017-07-26 14:57:52 +03:00
if ( ! defined ( 'ABSPATH' ) ) exit ;
2019-08-08 00:36:33 +03:00
2018-03-26 01:27:46 +03:00
if ( ! class_exists ( 'um\admin\core\Admin_Builder' ) ) {
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
* Class Admin_Builder
* @package um\admin\core
*/
class Admin_Builder {
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
* @var
*/
var $form_id ;
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
* Admin_Builder constructor.
*/
function __construct () {
2018-04-03 12:53:41 +03:00
add_action ( 'um_admin_field_modal_header' , array ( & $this , 'add_message_handlers' ) );
add_action ( 'um_admin_field_modal_footer' , array ( & $this , 'add_conditional_support' ), 10 , 4 );
2019-11-13 13:41:07 +02:00
add_filter ( 'um_admin_builder_skip_field_validation' , array ( & $this , 'skip_field_validation' ), 10 , 3 );
2018-04-03 12:53:41 +03:00
add_filter ( 'um_admin_pre_save_field_to_form' , array ( & $this , 'um_admin_pre_save_field_to_form' ), 1 );
add_filter ( 'um_admin_pre_save_fields_hook' , array ( & $this , 'um_admin_pre_save_fields_hook' ), 1 );
add_filter ( 'um_admin_field_update_error_handling' , array ( & $this , 'um_admin_field_update_error_handling' ), 1 , 2 );
}
/**
* Apply a filter to handle errors for field updating in backend
*
* @param $errors
* @param $array
*
* @return mixed
*/
function um_admin_field_update_error_handling ( $errors , $array ) {
/**
* @var $field_type
*/
extract ( $array );
$field_attr = UM () -> builtin () -> get_core_field_attrs ( $field_type );
if ( isset ( $field_attr [ 'validate' ] ) ) {
$validate = $field_attr [ 'validate' ];
foreach ( $validate as $post_input => $arr ) {
2019-08-23 22:47:04 +03:00
$skip = apply_filters ( 'um_admin_builder_skip_field_validation' , false , $post_input , $array );
if ( $skip ) {
2019-07-19 15:10:23 +03:00
continue ;
}
2018-04-03 12:53:41 +03:00
$mode = $arr [ 'mode' ];
switch ( $mode ) {
case 'numeric' :
2019-08-08 00:36:33 +03:00
if ( ! empty ( $array [ 'post' ][ $post_input ] ) && ! is_numeric ( $array [ 'post' ][ $post_input ] ) ){
$errors [ $post_input ] = $validate [ $post_input ][ 'error' ];
2018-04-03 12:53:41 +03:00
}
break ;
case 'unique' :
2019-08-08 00:36:33 +03:00
if ( ! isset ( $array [ 'post' ][ 'edit_mode' ] ) ) {
if ( UM () -> builtin () -> unique_field_err ( $array [ 'post' ][ $post_input ] ) ) {
$errors [ $post_input ] = UM () -> builtin () -> unique_field_err ( $array [ 'post' ][ $post_input ] );
2018-04-03 12:53:41 +03:00
}
}
break ;
case 'required' :
2019-08-08 00:36:33 +03:00
if ( $array [ 'post' ][ $post_input ] == '' ) {
$errors [ $post_input ] = $validate [ $post_input ][ 'error' ];
}
2018-04-03 12:53:41 +03:00
break ;
case 'range-start' :
2019-08-08 00:36:33 +03:00
if ( UM () -> builtin () -> date_range_start_err ( $array [ 'post' ][ $post_input ] ) && $array [ 'post' ][ '_range' ] == 'date_range' ) {
$errors [ $post_input ] = UM () -> builtin () -> date_range_start_err ( $array [ 'post' ][ $post_input ] );
}
2018-04-03 12:53:41 +03:00
break ;
case 'range-end' :
2019-08-08 00:36:33 +03:00
if ( UM () -> builtin () -> date_range_end_err ( $array [ 'post' ][ $post_input ], $array [ 'post' ][ '_range_start' ] ) && $array [ 'post' ][ '_range' ] == 'date_range' ) {
$errors [ $post_input ] = UM () -> builtin () -> date_range_end_err ( $array [ 'post' ][ $post_input ], $array [ 'post' ][ '_range_start' ] );
}
2018-04-03 12:53:41 +03:00
break ;
}
}
}
return $errors ;
}
/**
* Some fields may require extra fields before saving
*
* @param $array
*
* @return mixed
*/
function um_admin_pre_save_fields_hook ( $array ) {
/**
* @var $form_id
* @var $field_type
*/
extract ( $array );
2019-08-20 16:11:01 +03:00
$fields_without_metakey = UM () -> builtin () -> get_fields_without_metakey ();
$fields = UM () -> query () -> get_attr ( 'custom_fields' , $form_id );
2018-04-03 12:53:41 +03:00
$count = 1 ;
2019-08-08 00:36:33 +03:00
if ( ! empty ( $fields ) ) {
$count = count ( $fields ) + 1 ;
}
2018-04-03 12:53:41 +03:00
// set unique meta key
2019-08-20 16:11:01 +03:00
if ( in_array ( $field_type , $fields_without_metakey ) && ! isset ( $array [ 'post' ][ '_metakey' ] ) ) {
2018-04-03 12:53:41 +03:00
$array [ 'post' ][ '_metakey' ] = " um_ { $field_type } _ { $form_id } _ { $count } " ;
}
// set position
2019-08-08 00:36:33 +03:00
if ( ! isset ( $array [ 'post' ][ '_position' ] ) ) {
2018-04-03 12:53:41 +03:00
$array [ 'post' ][ '_position' ] = $count ;
}
return $array ;
}
/**
* Modify field args just before it is saved into form
*
* @param $array
*
* @return mixed
*/
function um_admin_pre_save_field_to_form ( $array ){
unset ( $array [ 'conditions' ] );
2019-08-08 00:36:33 +03:00
if ( isset ( $array [ 'conditional_field' ]) && ! empty ( $array [ 'conditional_action' ] ) && ! empty ( $array [ 'conditional_operator' ] ) ) {
2018-06-03 00:58:11 +03:00
$array [ 'conditional_value' ] = isset ( $array [ 'conditional_value' ] ) ? $array [ 'conditional_value' ] : '' ;
2018-12-05 10:50:08 +02:00
$array [ 'conditions' ][] = array ( $array [ 'conditional_action' ], $array [ 'conditional_field' ], $array [ 'conditional_operator' ], $array [ 'conditional_value' ] );
2018-04-03 12:53:41 +03:00
}
2019-08-08 00:36:33 +03:00
if ( isset ( $array [ 'conditional_field1' ] ) && ! empty ( $array [ 'conditional_action1' ] ) && ! empty ( $array [ 'conditional_operator1' ] ) ) {
2018-06-03 00:58:11 +03:00
$array [ 'conditional_value1' ] = isset ( $array [ 'conditional_value1' ] ) ? $array [ 'conditional_value1' ] : '' ;
2018-12-05 10:50:08 +02:00
$array [ 'conditions' ][] = array ( $array [ 'conditional_action1' ], $array [ 'conditional_field1' ], $array [ 'conditional_operator1' ], $array [ 'conditional_value1' ] );
2018-04-03 12:53:41 +03:00
}
2019-08-08 00:36:33 +03:00
if ( isset ( $array [ 'conditional_field2' ] ) && ! empty ( $array [ 'conditional_action2' ] ) && ! empty ( $array [ 'conditional_operator2' ] ) ) {
2018-06-03 00:58:11 +03:00
$array [ 'conditional_value2' ] = isset ( $array [ 'conditional_value2' ] ) ? $array [ 'conditional_value2' ] : '' ;
2018-12-05 10:50:08 +02:00
$array [ 'conditions' ][] = array ( $array [ 'conditional_action2' ], $array [ 'conditional_field2' ], $array [ 'conditional_operator2' ], $array [ 'conditional_value2' ] );
2018-04-03 12:53:41 +03:00
}
2019-08-08 00:36:33 +03:00
if ( isset ( $array [ 'conditional_field3' ] ) && ! empty ( $array [ 'conditional_action3' ] ) && ! empty ( $array [ 'conditional_operator3' ] ) ) {
2018-06-03 00:58:11 +03:00
$array [ 'conditional_value3' ] = isset ( $array [ 'conditional_value3' ] ) ? $array [ 'conditional_value3' ] : '' ;
2018-12-05 10:50:08 +02:00
$array [ 'conditions' ][] = array ( $array [ 'conditional_action3' ], $array [ 'conditional_field3' ], $array [ 'conditional_operator3' ], $array [ 'conditional_value3' ] );
2018-04-03 12:53:41 +03:00
}
2019-08-08 00:36:33 +03:00
if ( isset ( $array [ 'conditional_field4' ] ) && ! empty ( $array [ 'conditional_action4' ] ) && ! empty ( $array [ 'conditional_operator4' ] ) ) {
2018-06-03 00:58:11 +03:00
$array [ 'conditional_value4' ] = isset ( $array [ 'conditional_value4' ] ) ? $array [ 'conditional_value4' ] : '' ;
2018-12-05 10:50:08 +02:00
$array [ 'conditions' ][] = array ( $array [ 'conditional_action4' ], $array [ 'conditional_field4' ], $array [ 'conditional_operator4' ], $array [ 'conditional_value4' ] );
2018-04-03 12:53:41 +03:00
}
return $array ;
}
/**
* Put status handler in modal
*/
function add_message_handlers () {
?>
<div class="um-admin-error-block"></div>
<div class="um-admin-success-block"></div>
<?php
}
/**
* Footer of modal
*
* @param $form_id
* @param $field_args
* @param $in_edit
* @param $edit_array
*/
function add_conditional_support( $form_id, $field_args, $in_edit, $edit_array ) {
$metabox = UM()->metabox();
if ( isset( $field_args['conditional_support'] ) && $field_args['conditional_support'] == 0 ) {
return;
} ?>
<div class="um-admin-btn-toggle">
<?php if ( $in_edit ) { $metabox->in_edit = true; $metabox->edit_array = $edit_array; ?>
2019-08-08 00:36:33 +03:00
<a href="javascript:void(0);"><i class="um-icon-plus"></i><?php _e( 'Manage conditional fields support' ); ?></a> <?php UM()->tooltip( __( 'Here you can setup conditional logic to show/hide this field based on specific fields value or conditions', 'ultimate-member' ) ); ?>
2018-04-03 12:53:41 +03:00
<?php } else { ?>
2019-08-08 00:36:33 +03:00
<a href="javascript:void(0);"><i class="um-icon-plus"></i><?php _e( 'Add conditional fields support' ); ?></a> <?php UM()->tooltip( __( 'Here you can setup conditional logic to show/hide this field based on specific fields value or conditions', 'ultimate-member' ) ); ?>
2018-04-03 12:53:41 +03:00
<?php } ?>
<div class="um-admin-btn-content">
2019-08-08 00:36:33 +03:00
<div class="um-admin-cur-condition-template">
2018-07-02 17:53:33 +03:00
<?php $metabox->field_input( '_conditional_action', $form_id ); ?>
<?php $metabox->field_input( '_conditional_field', $form_id ); ?>
<?php $metabox->field_input( '_conditional_operator', $form_id ); ?>
<?php $metabox->field_input( '_conditional_value', $form_id ); ?>
2018-04-03 12:53:41 +03:00
2019-08-08 00:36:33 +03:00
<p><a href="javascript:void(0);" class="um-admin-remove-condition button um-admin-tipsy-n" title="Remove condition"><i class="um-icon-close" style="margin-right:0!important"></i></a></p>
2018-07-02 17:53:33 +03:00
2019-08-08 00:36:33 +03:00
<div class="um-admin-clear"></div>
</div>
2020-12-04 03:54:59 +02:00
<p class="um-admin-conditions-notice">
<small>
<?php _e( 'Use the condition operator `equals to` or `not equals` if the parent field has a single option.', 'ultimate-member' ); ?>
<br><?php _e( 'Use the condition operator `greater than` or `less than` if the parent field is a number.', 'ultimate-member' ); ?>
<br><?php _e( 'Use the condition operator `contains` if the parent field has multiple options.', 'ultimate-member' ); ?>
</small>
</p>
2019-08-08 00:36:33 +03:00
<p><a href="javascript:void(0);" class="um-admin-new-condition button button-primary um-admin-tipsy-n" title="Add new condition"><?php _e( 'Add new rule', 'ultimate-member' ); ?></a></p>
<p class="um-admin-reset-conditions"><a href="javascript:void(0);" class="button"><?php _e( 'Reset all rules', 'ultimate-member' ); ?></a></p>
2020-12-04 03:54:59 +02:00
2018-04-03 12:53:41 +03:00
<div class="um-admin-clear"></div>
2018-12-05 10:50:08 +02:00
<?php if ( isset( $edit_array['conditions'] ) && count( $edit_array['conditions'] ) != 0 ) {
2018-04-03 12:53:41 +03:00
2018-12-05 10:50:08 +02:00
foreach ( $edit_array['conditions'] as $k => $arr ) {
2018-04-03 12:53:41 +03:00
2018-12-05 10:50:08 +02:00
if ( $k == 0 ) $k = ''; ?>
2018-04-03 12:53:41 +03:00
2018-12-05 10:50:08 +02:00
<div class="um-admin-cur-condition">
2018-04-03 12:53:41 +03:00
2018-12-05 10:50:08 +02:00
<?php $metabox->field_input( '_conditional_action' . $k, $form_id ); ?>
<?php $metabox->field_input( '_conditional_field' . $k , $form_id ); ?>
<?php $metabox->field_input( '_conditional_operator' . $k, $form_id ); ?>
<?php $metabox->field_input( '_conditional_value' . $k, $form_id ); ?>
2018-04-03 12:53:41 +03:00
2019-08-08 00:36:33 +03:00
<p><a href="#" class="um-admin-remove-condition button um-admin-tipsy-n" title="Remove condition"><i class="um-icon-close" style="margin-right:0!important"></i></a></p>
2018-04-03 12:53:41 +03:00
2018-12-05 10:50:08 +02:00
<div class="um-admin-clear"></div>
</div>
2018-04-03 12:53:41 +03:00
2018-12-05 10:50:08 +02:00
<?php
}
2018-04-03 12:53:41 +03:00
2018-12-05 10:50:08 +02:00
} else { ?>
2018-04-03 12:53:41 +03:00
2018-12-05 10:50:08 +02:00
<div class="um-admin-cur-condition">
2018-04-03 12:53:41 +03:00
2018-12-05 10:50:08 +02:00
<?php $metabox->field_input( '_conditional_action', $form_id ); ?>
<?php $metabox->field_input( '_conditional_field', $form_id ); ?>
<?php $metabox->field_input( '_conditional_operator', $form_id ); ?>
<?php $metabox->field_input( '_conditional_value', $form_id ); ?>
2018-04-03 12:53:41 +03:00
2019-08-08 00:36:33 +03:00
<p><a href="#" class="um-admin-remove-condition button um-admin-tipsy-n" title="Remove condition"><i class="um-icon-close" style="margin-right:0!important"></i></a></p>
2018-04-03 12:53:41 +03:00
2018-12-05 10:50:08 +02:00
<div class="um-admin-clear"></div>
</div>
<?php } ?>
</div>
2018-04-03 12:53:41 +03:00
</div>
2017-07-26 14:57:52 +03:00
2018-04-03 12:53:41 +03:00
<?php
2018-03-16 09:37:19 +02:00
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
* Update the builder area
*/
function update_builder() {
2018-11-21 14:01:18 +02:00
UM()->admin()->check_ajax_nonce();
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) {
2018-11-21 14:01:18 +02:00
wp_send_json_error( __( 'Please login as administrator', 'ultimate-member' ) );
2018-03-16 09:37:19 +02:00
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
ob_start();
2017-07-26 14:57:52 +03:00
2020-02-28 15:51:45 +02:00
$this->form_id = absint( $_POST['form_id'] );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$this->show_builder();
2017-07-26 14:57:52 +03:00
2018-09-28 17:14:50 +03:00
$output = ob_get_clean();
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
if ( is_array( $output ) ) {
print_r( $output );
} else {
echo $output;
}
die;
2018-03-16 09:37:19 +02:00
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
* Sort array function
*
* @param array $arr
* @param string $col
* @param int $dir
*
* @return array
*/
function array_sort_by_column( $arr, $col, $dir = SORT_ASC ) {
$sort_col = array();
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
foreach ( $arr as $key => $row ) {
if ( ! empty( $row[ $col ] ) ) {
$sort_col[ $key ] = $row[ $col ];
}
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( ! empty( $sort_col ) ) {
array_multisort( $sort_col, $dir, $arr );
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
return $arr;
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
* Get fields in row
*
* @param $row_id
*
* @return string
*/
function get_fields_by_row( $row_id ) {
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( empty( $this->global_fields ) || ! is_array( $this->global_fields ) ) {
$this->global_fields = array();
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
foreach ( $this->global_fields as $key => $array ) {
if ( ! isset( $array['in_row'] ) || ( isset( $array['in_row'] ) && $array['in_row'] == $row_id ) ) {
$results[ $key ] = $array;
unset( $this->global_fields[ $key ] );
}
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
return ( isset ( $results ) ) ? $results : '';
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
* Get fields by sub row
*
* @param $row_fields
* @param $subrow_id
*
* @return string
*/
function get_fields_in_subrow( $row_fields, $subrow_id ) {
if ( ! is_array( $row_fields ) ) {
return '';
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
foreach( $row_fields as $key => $array ) {
if ( ! isset( $array['in_sub_row'] ) || ( isset( $array['in_sub_row'] ) && $array['in_sub_row'] == $subrow_id ) ) {
$results[ $key ] = $array;
unset( $this->global_fields[ $key ] );
}
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
return ( isset ( $results ) ) ? $results : '';
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
* Display the builder
*/
function show_builder() {
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$fields = UM()->query()->get_attr( 'custom_fields', $this->form_id );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( !isset( $fields ) || empty( $fields ) ) { ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-drag-row">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<!-- Master Row Actions -->
<div class="um-admin-drag-row-icons">
2019-08-08 00:36:33 +03:00
<a href="javascript:void(0);" class="um-admin-drag-rowsub-add um-admin-tipsy-n" title="<?php esc_attr_e( 'Add Row', 'ultimate-member' ); ?>" data-row_action="add_subrow"><i class="um-icon-plus"></i></a>
<a href="javascript:void(0);" class="um-admin-drag-row-edit um-admin-tipsy-n" title="<?php esc_attr_e( 'Edit Row', 'ultimate-member' ); ?>" data-modal="UM_edit_row" data-modal-size="normal" data-dynamic-content="um_admin_edit_field_popup" data-arg1="row" data-arg2="<?php echo esc_attr( $this->form_id ); ?>" data-arg3="_um_row_1"><i class="um-faicon-pencil"></i></a>
2018-03-16 09:37:19 +02:00
<span class="um-admin-drag-row-start"><i class="um-icon-arrow-move"></i></span>
2019-08-08 00:36:33 +03:00
</div>
<div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-drag-rowsubs">
<div class="um-admin-drag-rowsub">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<!-- Column Layout -->
<div class="um-admin-drag-ctrls columns">
2019-08-08 00:36:33 +03:00
<a href="javascript:void(0);" class="active" data-cols="1"></a>
<a href="javascript:void(0);" data-cols="2"></a>
<a href="javascript:void(0);" data-cols="3"></a>
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<!-- Sub Row Actions -->
<div class="um-admin-drag-rowsub-icons">
<span class="um-admin-drag-rowsub-start"><i class="um-icon-arrow-move"></i></span>
</div><div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<!-- Columns -->
<div class="um-admin-drag-col">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-drag-col-dynamic"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
} else {
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
if ( empty( $fields ) || ! is_array( $fields ) ) {
2018-03-16 09:37:19 +02:00
$this->global_fields = array();
2019-08-08 00:36:33 +03:00
} else {
2018-03-16 09:37:19 +02:00
$this->global_fields = $fields;
}
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
foreach ( $this->global_fields as $key => $array ) {
2018-03-16 09:37:19 +02:00
if ( $array['type'] == 'row' ) {
2019-08-08 00:36:33 +03:00
$rows[ $key ] = $array;
2018-03-16 09:37:19 +02:00
unset( $this->global_fields[ $key ] ); // not needed now
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
}
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
if ( ! isset( $rows ) ) {
$rows = array(
'_um_row_1' => array(
'type' => 'row',
'id' => '_um_row_1',
'sub_rows' => 1,
'cols' => 1
),
2018-03-16 09:37:19 +02:00
);
}
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
foreach ( $rows as $row_id => $array ) { ?>
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<div class="um-admin-drag-row" data-original="<?php echo esc_attr( $row_id ); ?>">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<!-- Master Row Actions -->
<div class="um-admin-drag-row-icons">
2019-08-08 00:36:33 +03:00
<a href="javascript:void(0);" class="um-admin-drag-rowsub-add um-admin-tipsy-n" title="<?php esc_attr_e( 'Add Row', 'ultimate-member' ); ?>" data-row_action="add_subrow"><i class="um-icon-plus"></i></a>
<a href="javascript:void(0);" class="um-admin-drag-row-edit um-admin-tipsy-n" title="<?php esc_attr_e( 'Edit Row', 'ultimate-member'); ?>" data-modal="UM_edit_row" data-modal-size="normal" data-dynamic-content="um_admin_edit_field_popup" data-arg1="row" data-arg2="<?php echo esc_attr( $this->form_id ); ?>" data-arg3="<?php echo esc_attr( $row_id ); ?>"><i class="um-faicon-pencil"></i></a>
2018-03-16 09:37:19 +02:00
<span class="um-admin-drag-row-start"><i class="um-icon-arrow-move"></i></span>
<?php if ( $row_id != '_um_row_1' ) {?>
2019-08-08 00:36:33 +03:00
<a href="javascript:void(0);" class="um-admin-tipsy-n" title="<?php esc_attr_e( 'Delete Row', 'ultimate-member' ); ?>" data-remove_element="um-admin-drag-row"><i class="um-faicon-trash-o"></i></a>
2018-03-16 09:37:19 +02:00
<?php } ?>
</div><div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-drag-rowsubs">
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<?php $row_fields = $this->get_fields_by_row( $row_id );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$sub_rows = ( isset( $array['sub_rows'] ) ) ? $array['sub_rows'] : 1;
2019-08-08 00:36:33 +03:00
for ( $c = 0; $c < $sub_rows; $c++ ) {
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$subrow_fields = $this->get_fields_in_subrow( $row_fields, $c );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-drag-rowsub">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<!-- Column Layout -->
<div class="um-admin-drag-ctrls columns">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( !isset( $array['cols'] ) ){
$col_num = 1;
} else {
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$col_split = explode(':', $array['cols'] );
$col_num = $col_split[$c];
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
for ( $i = 1; $i <= 3; $i++ ) {
2019-08-08 00:36:33 +03:00
echo '<a href="javascript:void(0);" data-cols="'.$i.'" ';
2018-03-16 09:37:19 +02:00
if ( $col_num == $i ) echo 'class="active"';
echo '></a>';
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<!-- Sub Row Actions -->
<div class="um-admin-drag-rowsub-icons">
<span class="um-admin-drag-rowsub-start"><i class="um-icon-arrow-move"></i></span>
2019-08-08 00:36:33 +03:00
<?php if ( $c > 0 ) { ?><a href="javascript:void(0);" class="um-admin-tipsy-n" title="Delete Row" data-remove_element="um-admin-drag-rowsub"><i class="um-faicon-trash-o"></i></a><?php } ?>
</div>
<div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<!-- Columns -->
<div class="um-admin-drag-col">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( is_array( $subrow_fields ) ) {
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$subrow_fields = $this->array_sort_by_column( $subrow_fields, 'position');
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
foreach( $subrow_fields as $key => $keyarray ) {
2019-08-08 00:36:33 +03:00
/**
* @var $type
* @var $title
*/
2018-03-16 09:37:19 +02:00
extract( $keyarray );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-drag-fld um-admin-delete-area um-field-type-<?php echo $type; ?> <?php echo $key; ?>" data-group="<?php echo (isset($keyarray['in_group'])) ? $keyarray['in_group'] : ''; ?>" data-key="<?php echo $key; ?>" data-column="<?php echo ( isset($keyarray['in_column']) ) ? $keyarray['in_column'] : 1; ?>">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-drag-fld-title um-field-type-<?php echo $type; ?>">
<?php if ( $type == 'group' ) { ?>
<i class="um-icon-plus"></i>
<?php } else if ( isset($keyarray['icon']) && !empty( $keyarray['icon'] ) ) { ?>
<i class="<?php echo $keyarray['icon']; ?>"></i>
2019-10-23 13:13:11 +03:00
<?php } ?><?php echo ! empty( $keyarray['title'] ) ? $keyarray['title'] : __( '(no title)', 'ultimate-member' ); ?></div>
2018-03-16 09:37:19 +02:00
<?php $field_name = isset( UM()->builtin()->core_fields[$type]['name'] ) ? UM()->builtin()->core_fields[$type]['name'] : ''; ?>
<div class="um-admin-drag-fld-type um-field-type-<?php echo $type; ?>"><?php echo $field_name; ?></div>
<div class="um-admin-drag-fld-icons um-field-type-<?php echo $type; ?>">
2017-07-26 14:57:52 +03:00
2019-10-23 13:13:11 +03:00
<a href="javascript:void(0);" class="um-admin-tipsy-n" title="<?php esc_attr_e( 'Edit', 'ultimate-member' ) ?>" data-modal="UM_edit_field" data-modal-size="normal" data-dynamic-content="um_admin_edit_field_popup" data-arg1="<?php echo $type; ?>" data-arg2="<?php echo $this->form_id; ?>" data-arg3="<?php echo $key; ?>"><i class="um-faicon-pencil"></i></a>
2017-07-26 14:57:52 +03:00
2019-10-23 13:13:11 +03:00
<a href="javascript:void(0);" class="um-admin-tipsy-n um_admin_duplicate_field" title="<?php esc_attr_e( 'Duplicate', 'ultimate-member' ) ?>" data-silent_action="um_admin_duplicate_field" data-arg1="<?php echo $key; ?>" data-arg2="<?php echo $this->form_id; ?>"><i class="um-faicon-files-o"></i></a>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php if ( $type == 'group' ) { ?>
2017-07-26 14:57:52 +03:00
2019-10-23 13:13:11 +03:00
<a href="javascript:void(0);" class="um-admin-tipsy-n" title="<?php esc_attr_e( 'Delete Group', 'ultimate-member' ) ?>" data-remove_element="um-admin-drag-fld.um-field-type-group" data-silent_action="um_admin_remove_field" data-arg1="<?php echo $key; ?>" data-arg2="<?php echo $this->form_id; ?>"><i class="um-faicon-trash-o"></i></a>
2018-03-16 09:37:19 +02:00
<?php } else { ?>
2017-07-26 14:57:52 +03:00
2019-10-23 13:13:11 +03:00
<a href="javascript:void(0);" class="um-admin-tipsy-n" title="<?php esc_attr_e( 'Delete', 'ultimate-member' ) ?>" data-silent_action="um_admin_remove_field" data-arg1="<?php echo $key; ?>" data-arg2="<?php echo $this->form_id; ?>"><i class="um-faicon-trash-o"></i></a>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div><div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php if ( $type == 'group' ) { ?>
<div class="um-admin-drag-group">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
<?php } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
} // end foreach
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
} // end if
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-drag-col-dynamic"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
} // rows loop
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
} // if fields exist
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
*
*/
function update_field() {
2018-11-21 14:01:18 +02:00
UM()->admin()->check_ajax_nonce();
if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( __( 'Please login as administrator', 'ultimate-member' ) );
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$output['error'] = null;
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$array = array(
2021-07-15 13:50:23 +03:00
'field_type' => sanitize_key( $_POST['_type'] ),
'form_id' => absint( $_POST['post_id'] ),
'args' => UM()->builtin()->get_core_field_attrs( sanitize_key( $_POST['_type'] ) ),
'post' => UM()->admin()->sanitize_builder_field_meta( $_POST ),
2018-03-16 09:37:19 +02:00
);
/**
* UM hook
*
* @type filter
* @title um_admin_pre_save_fields_hook
* @description Filter field data before save
* @input_vars
* [{"var":"$array","type":"array","desc":"Save Field data"}]
* @change_log
* ["Since: 2.0"]
* @usage add_filter( 'um_admin_pre_save_fields_hook', 'function_name', 10, 1 );
* @example
* <?php
* add_filter( 'um_admin_pre_save_fields_hook', 'my_admin_pre_save_fields', 10, 1 );
* function my_admin_pre_save_fields( $array ) {
* // your code here
* return $array;
* }
* ?>
*/
2020-01-06 11:05:32 +02:00
$array = apply_filters( 'um_admin_pre_save_fields_hook', $array );
2018-03-16 09:37:19 +02:00
/**
* UM hook
*
* @type filter
* @title um_admin_field_update_error_handling
* @description Change error string on save field
* @input_vars
* [{"var":"$error","type":"string","desc":"Error String"},
* {"var":"$array","type":"array","desc":"Save Field data"}]
* @change_log
* ["Since: 2.0"]
* @usage add_filter( 'um_admin_field_update_error_handling', 'function_name', 10, 2 );
* @example
* <?php
* add_filter( 'um_admin_field_update_error_handling', 'my_admin_field_update_error', 10, 2 );
* function my_admin_field_update_error( $error, $array ) {
* // your code here
* return $error;
* }
* ?>
*/
$output['error'] = apply_filters( 'um_admin_field_update_error_handling', $output['error'], $array );
2019-08-08 00:36:33 +03:00
/**
* @var $_metakey
* @var $post_id
*/
2018-03-16 09:37:19 +02:00
extract( $array['post'] );
2018-06-03 00:58:11 +03:00
2020-01-06 11:05:32 +02:00
if ( empty( $output['error'] ) ) {
2018-03-16 09:37:19 +02:00
$save = array();
$save[ $_metakey ] = null;
2020-01-06 11:05:32 +02:00
foreach ( $array['post'] as $key => $val ) {
2018-03-16 09:37:19 +02:00
2020-01-06 11:05:32 +02:00
if ( substr( $key, 0, 1 ) === '_' && $val != '' ) { // field attribute
2018-03-16 09:37:19 +02:00
$new_key = ltrim ($key,'_');
if ( $new_key == 'options' ) {
//$save[ $_metakey ][$new_key] = explode(PHP_EOL, $val);
2020-01-06 11:05:32 +02:00
$save[ $_metakey ][ $new_key ] = preg_split( '/[\r\n]+/', $val, -1, PREG_SPLIT_NO_EMPTY );
2018-03-16 09:37:19 +02:00
} else {
2020-01-06 11:05:32 +02:00
$save[ $_metakey ][ $new_key ] = $val;
2018-03-16 09:37:19 +02:00
}
2020-01-06 11:05:32 +02:00
} elseif ( strstr( $key, 'um_editor' ) ) {
2018-03-16 09:37:19 +02:00
$save[ $_metakey ]['content'] = $val;
}
}
$field_ID = $_metakey;
$field_args = $save[ $_metakey ];
2018-07-03 15:55:24 +03:00
2018-03-16 09:37:19 +02:00
/**
* UM hook
*
* @type filter
* @title um_admin_pre_save_field_to_form
* @description Change field options before save to form
* @input_vars
* [{"var":"$field_args","type":"array","desc":"Field Options"}]
* @change_log
* ["Since: 2.0"]
* @usage add_filter( 'um_admin_pre_save_field_to_form', 'function_name', 10, 1 );
* @example
* <?php
* add_filter( 'um_admin_pre_save_field_to_form', 'my_admin_pre_save_field_to_form', 10, 1 );
* function my_admin_pre_save_field_to_form( $field_args ) {
* // your code here
* return $field_args;
* }
* ?>
*/
2020-01-06 11:05:32 +02:00
$field_args = apply_filters( 'um_admin_pre_save_field_to_form', $field_args );
2018-03-16 09:37:19 +02:00
UM()->fields()->update_field( $field_ID, $field_args, $post_id );
/**
* UM hook
*
* @type filter
* @title um_admin_pre_save_field_to_db
* @description Change field options before save to DB
* @input_vars
* [{"var":"$field_args","type":"array","desc":"Field Options"}]
* @change_log
* ["Since: 2.0"]
* @usage add_filter( 'um_admin_pre_save_field_to_db', 'function_name', 10, 1 );
* @example
* <?php
* add_filter( 'um_admin_pre_save_field_to_db', 'my_admin_pre_save_field_to_db', 10, 1 );
* function my_admin_pre_save_field_to_form( $field_args ) {
* // your code here
* return $field_args;
* }
* ?>
*/
2020-01-06 11:05:32 +02:00
$field_args = apply_filters( 'um_admin_pre_save_field_to_db', $field_args );
2018-03-16 09:37:19 +02:00
if ( ! isset( $array['args']['form_only'] ) ) {
if ( ! isset( UM()->builtin()->predefined_fields[ $field_ID ] ) ) {
UM()->fields()->globally_update_field( $field_ID, $field_args );
}
}
}
$output = json_encode( $output );
if ( is_array( $output ) ) {
print_r( $output );
} else {
echo $output;
}
die;
}
/**
*
*/
function dynamic_modal_content() {
2018-11-21 14:01:18 +02:00
UM()->admin()->check_ajax_nonce();
2018-03-16 09:37:19 +02:00
if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) {
2018-11-21 14:01:18 +02:00
wp_send_json_error( __( 'Please login as administrator', 'ultimate-member' ) );
2018-03-16 09:37:19 +02:00
}
2018-11-21 14:01:18 +02:00
$metabox = UM()->metabox();
2018-03-16 09:37:19 +02:00
/**
* @var $act_id
* @var $arg1
* @var $arg2
* @var $arg3
*/
extract( $_POST );
2021-06-29 02:51:54 +03:00
if ( isset( $arg1 ) ) {
$arg1 = sanitize_text_field( $arg1 );
}
if ( isset( $arg2 ) ) {
$arg2 = sanitize_text_field( $arg2 );
}
if ( isset( $arg3 ) ) {
$arg3 = sanitize_text_field( $arg3 );
}
switch ( sanitize_key( $act_id ) ) {
2018-03-16 09:37:19 +02:00
default:
ob_start();
/**
* UM hook
*
* @type action
* @title um_admin_ajax_modal_content__hook
* @description Integration hook on ajax popup admin builder modal content
* @input_vars
* [{"var":"$act_id","type":"string","desc":"Ajax Action"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_admin_ajax_modal_content__hook', 'function_name', 10, 1 );
* @example
* <?php
* add_action( 'um_admin_ajax_modal_content__hook', 'my_admin_custom_hook', 10, 1 );
* function um_admin_ajax_modal_content__hook( $act_id ) {
* // your code here
* }
* ?>
*/
2021-06-29 02:51:54 +03:00
do_action( 'um_admin_ajax_modal_content__hook', sanitize_key( $act_id ) );
2018-03-16 09:37:19 +02:00
/**
* UM hook
*
* @type action
* @title um_admin_ajax_modal_content__hook_{$act_id}
* @description Integration hook on ajax popup admin builder modal content
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_admin_ajax_modal_content__hook_{$act_id}', 'function_name', 10 );
* @example
* <?php
* add_action( 'um_admin_ajax_modal_content__hook_{$act_id}', 'my_admin_ajax_modal_content', 10 );
* function my_admin_ajax_modal_content() {
* // your code here
* }
* ?>
*/
2021-06-29 02:51:54 +03:00
do_action( "um_admin_ajax_modal_content__hook_" . sanitize_key( $act_id ) );
2018-03-16 09:37:19 +02:00
2018-09-28 17:14:50 +03:00
$output = ob_get_clean();
2018-03-16 09:37:19 +02:00
break;
case 'um_admin_fonticon_selector':
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
ob_start(); ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-metabox">
2019-08-08 00:36:33 +03:00
<p class="_icon_search"><input type="text" name="_icon_search" id="_icon_search" value="" placeholder="<?php esc_attr_e('Search Icons...', 'ultimate-member' ); ?>" /></p>
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-icons">
<?php foreach( UM()->fonticons()->all as $icon ) { ?>
2019-08-08 00:36:33 +03:00
<span data-code="<?php echo esc_attr( $icon ); ?>" title="<?php echo esc_attr( $icon ); ?>" class="um-admin-tipsy-n"><i class="<?php echo $icon; ?>"></i></span>
2018-03-16 09:37:19 +02:00
<?php } ?>
</div><div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2018-09-28 17:14:50 +03:00
<?php $output = ob_get_clean();
2018-03-16 09:37:19 +02:00
break;
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
case 'um_admin_show_fields':
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
ob_start();
$form_fields = UM()->query()->get_attr( 'custom_fields', $arg2 );
$form_fields = array_values( array_filter( array_keys( $form_fields ) ) );
//$form_fields = array_keys( $form_fields );
?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<h4><?php _e('Setup New Field','ultimate-member'); ?></h4>
<div class="um-admin-btns">
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<?php if ( UM()->builtin()->core_fields ) {
2018-03-16 09:37:19 +02:00
foreach ( UM()->builtin()->core_fields as $field_type => $array ) {
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
if ( isset( $array['in_fields'] ) && $array['in_fields'] == false ) {
continue;
} ?>
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<a href="javascript:void(0);" class="button" data-modal="UM_add_field" data-modal-size="normal" data-dynamic-content="um_admin_new_field_popup" data-arg1="<?php echo esc_attr( $field_type ); ?>" data-arg2="<?php echo esc_attr( $arg2 ) ?>"><?php echo esc_html( $array['name'] ); ?></a>
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<?php }
} ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<h4><?php _e('Predefined Fields','ultimate-member'); ?></h4>
<div class="um-admin-btns">
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<?php if ( UM()->builtin()->predefined_fields ) {
2018-03-16 09:37:19 +02:00
foreach ( UM()->builtin()->predefined_fields as $field_key => $array ) {
2019-08-08 00:36:33 +03:00
if ( ! isset( $array['account_only'] ) && ! isset( $array['private_use'] ) ) { ?>
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<a href="javascript:void(0);" class="button" <?php disabled( in_array( $field_key, $form_fields, true ) ) ?> data-silent_action="um_admin_add_field_from_predefined" data-arg1="<?php echo esc_attr( $field_key ); ?>" data-arg2="<?php echo esc_attr( $arg2 ); ?>"><?php echo um_trim_string( stripslashes( $array['title'] ), 20 ); ?></a>
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<?php }
}
} else {
echo '<p>' . __( 'None', 'ultimate-member' ) . '</p>';
} ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2019-10-23 13:13:11 +03:00
<h4><?php _e( 'Custom Fields', 'ultimate-member' ); ?></h4>
2018-03-16 09:37:19 +02:00
<div class="um-admin-btns">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php
if ( UM()->builtin()->custom_fields ) {
2019-10-23 13:13:11 +03:00
foreach ( UM()->builtin()->custom_fields as $field_key => $array ) {
if ( empty( $array['title'] ) || empty( $array['type'] ) ) {
continue;
} ?>
2017-07-26 14:57:52 +03:00
2020-12-16 13:41:31 +02:00
<a href="javascript:void(0);" class="button with-icon" <?php disabled( in_array( $field_key, $form_fields, true ) ) ?> data-silent_action="um_admin_add_field_from_list" data-arg1="<?php echo esc_attr( $field_key ); ?>" data-arg2="<?php echo esc_attr( $arg2 ); ?>" title="<?php echo __( 'Meta Key', 'ultimate-member' ) . ' - ' . esc_attr( $field_key ); ?>"><?php echo um_trim_string( stripslashes( $array['title'] ), 20 ); ?> <small>(<?php echo ucfirst( $array['type'] ); ?>)</small><span class="remove"></span></a>
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<?php }
} else {
echo '<p>' . __( 'You did not create any custom fields', 'ultimate-member' ) . '</p>';
} ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-09-28 17:14:50 +03:00
<?php $output = ob_get_clean();
2018-03-16 09:37:19 +02:00
break;
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
case 'um_admin_edit_field_popup':
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
ob_start();
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$args = UM()->builtin()->get_core_field_attrs( $arg1 );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$form_fields = UM()->query()->get_attr( 'custom_fields', $arg2 );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$metabox->set_field_type = $arg1;
$metabox->in_edit = true;
$metabox->edit_array = $form_fields[ $arg3 ];
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( !isset( $metabox->edit_array['metakey'] ) ){
$metabox->edit_array['metakey'] = $metabox->edit_array['id'];
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( !isset( $metabox->edit_array['position'] ) ){
$metabox->edit_array['position'] = $metabox->edit_array['id'];
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
extract( $args );
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
if ( ! isset( $col1 ) ) {
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
echo '<p>'. __( 'This field type is not setup correcty.', 'ultimate-member' ) . '</p>';
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
} else {
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php if ( isset( $metabox->edit_array['in_group'] ) ) { ?>
<input type="hidden" name="_in_row" id="_in_row" value="<?php echo $metabox->edit_array['in_row']; ?>" />
<input type="hidden" name="_in_sub_row" id="_in_sub_row" value="<?php echo $metabox->edit_array['in_sub_row']; ?>" />
<input type="hidden" name="_in_column" id="_in_column" value="<?php echo $metabox->edit_array['in_column']; ?>" />
<input type="hidden" name="_in_group" id="_in_group" value="<?php echo $metabox->edit_array['in_group']; ?>" />
<?php } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<input type="hidden" name="_type" id="_type" value="<?php echo $arg1; ?>" />
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<input type="hidden" name="post_id" id="post_id" value="<?php echo $arg2; ?>" />
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<input type="hidden" name="edit_mode" id="edit_mode" value="true" />
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<input type="hidden" name="_metakey" id="_metakey" value="<?php echo $metabox->edit_array['metakey']; ?>" />
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<input type="hidden" name="_position" id="_position" value="<?php echo $metabox->edit_array['position']; ?>" />
2017-07-26 14:57:52 +03:00
2020-01-21 15:13:33 +02:00
<?php if ( isset( $args['mce_content'] ) ) { ?>
<div class="dynamic-mce-content"><?php echo ! empty( $metabox->edit_array['content'] ) ? $metabox->edit_array['content'] : ''; ?></div>
<?php } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php $this->modal_header(); ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-half">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php if ( isset( $col1 ) ) { foreach( $col1 as $opt ) $metabox->field_input ( $opt, null, $metabox->edit_array ); } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-half um-admin-right">
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php if ( isset( $col2 ) ) { foreach( $col2 as $opt ) $metabox->field_input ( $opt, null, $metabox->edit_array ); } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div><div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php if ( isset( $col3 ) ) { foreach( $col3 as $opt ) $metabox->field_input ( $opt, null, $metabox->edit_array ); } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php if ( isset( $col_full ) ) {foreach( $col_full as $opt ) $metabox->field_input ( $opt, null, $metabox->edit_array ); } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php $this->modal_footer( $arg2, $args, $metabox ); ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
}
2017-07-26 14:57:52 +03:00
2018-09-28 17:14:50 +03:00
$output = ob_get_clean();
2018-03-16 09:37:19 +02:00
break;
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
case 'um_admin_new_field_popup':
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
ob_start();
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$args = UM()->builtin()->get_core_field_attrs( $arg1 );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
$metabox->set_field_type = $arg1;
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
* @var $in_row
* @var $in_sub_row
* @var $in_column
* @var $in_group
*/
extract( $args );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( ! isset( $col1 ) ) {
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
echo '<p>'. __( 'This field type is not setup correcty.', 'ultimate-member' ) . '</p>';
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
} else {
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( $in_column ) { ?>
<input type="hidden" name="_in_row" id="_in_row" value="_um_row_<?php echo $in_row + 1; ?>" />
<input type="hidden" name="_in_sub_row" id="_in_sub_row" value="<?php echo $in_sub_row; ?>" />
<input type="hidden" name="_in_column" id="_in_column" value="<?php echo $in_column; ?>" />
<input type="hidden" name="_in_group" id="_in_group" value="<?php echo $in_group; ?>" />
<?php } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<input type="hidden" name="_type" id="_type" value="<?php echo $arg1; ?>" />
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<input type="hidden" name="post_id" id="post_id" value="<?php echo $arg2; ?>" />
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php $this->modal_header(); ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-half">
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<?php if ( isset( $col1 ) ) { foreach( $col1 as $opt ) $metabox->field_input ( $opt ); } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-half um-admin-right">
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<?php if ( isset( $col2 ) ) { foreach( $col2 as $opt ) $metabox->field_input ( $opt ); } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
</div><div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php if ( isset( $col3 ) ) { foreach( $col3 as $opt ) $metabox->field_input ( $opt ); } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<div class="um-admin-clear"></div>
2017-07-26 14:57:52 +03:00
2019-08-08 00:36:33 +03:00
<?php if ( isset( $col_full ) ) { foreach( $col_full as $opt ) $metabox->field_input ( $opt ); } ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php $this->modal_footer( $arg2, $args, $metabox ); ?>
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
<?php
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
}
2017-07-26 14:57:52 +03:00
2018-09-28 17:14:50 +03:00
$output = ob_get_clean();
2018-03-16 09:37:19 +02:00
break;
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
case 'um_admin_preview_form':
2017-07-26 14:57:52 +03:00
2019-10-23 17:40:35 +03:00
UM()->user()->preview = true;
2018-03-16 09:37:19 +02:00
$mode = UM()->query()->get_attr('mode', $arg1 );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( $mode == 'profile' ) {
UM()->fields()->editing = true;
}
2017-07-26 14:57:52 +03:00
2019-11-29 19:08:17 +02:00
$output = '<div class="um-admin-preview-overlay"></div>';
2020-04-03 11:21:35 +03:00
if ( version_compare( get_bloginfo('version'),'5.4', '<' ) ) {
$output .= do_shortcode('[ultimatemember form_id="' . $arg1 . '" /]');
} else {
$output .= apply_shortcodes('[ultimatemember form_id="' . $arg1 . '" /]');
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
break;
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
case 'um_admin_review_registration':
//$user_id = $arg1;
2020-08-31 18:05:54 +03:00
if ( ! current_user_can( 'administrator' ) ) {
if ( ! um_can_view_profile( $arg1 ) ) {
$output = '';
break;
}
}
2018-03-16 09:37:19 +02:00
um_fetch_user( $arg1 );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
UM()->user()->preview = true;
2017-07-26 14:57:52 +03:00
2020-01-28 20:57:14 +08:00
$output = um_user_submitted_registration_formatted( true );
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
um_reset_user();
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
break;
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
if ( is_array( $output ) ) {
print_r( $output );
} else {
echo $output;
}
die;
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
*
*/
function modal_header() {
/**
* UM hook
*
* @type action
* @title um_admin_field_modal_header
* @description Modal Window Header
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_admin_field_modal_header', 'function_name', 10 );
* @example
* <?php
* add_action( 'um_admin_field_modal_header', 'my_admin_field_modal_header', 10 );
* function my_admin_field_modal_header() {
* // your code here
* }
* ?>
*/
do_action( 'um_admin_field_modal_header' );
}
2017-07-26 14:57:52 +03:00
2018-03-16 09:37:19 +02:00
/**
* Modal Footer loading
*
* @param $arg2
* @param $args
* @param $metabox
*/
function modal_footer( $arg2, $args, $metabox ) {
/**
* UM hook
*
* @type action
* @title um_admin_field_modal_footer
* @description Modal Window Footer
* @input_vars
* [{"var":"$arg2","type":"string","desc":"Ajax Action"},
* {"var":"$args","type":"array","desc":"Modal window arguments"},
* {"var":"$in_edit","type":"bool","desc":"Is edit mode?"},
* {"var":"$edit_array","type":"array","desc":"Edit Array"}]
* @change_log
* ["Since: 2.0"]
* @usage add_action( 'um_admin_field_modal_footer', 'function_name', 10, 4 );
* @example
* <?php
* add_action( 'um_admin_field_modal_footer', 'my_admin_field_modal_footer', 10, 4 );
* function my_admin_field_modal_footer( $arg2, $args, $in_edit, $edit_array ) {
* // your code here
* }
* ?>
*/
do_action( 'um_admin_field_modal_footer', $arg2, $args, $metabox->in_edit, ( isset( $metabox->edit_array ) ) ? $metabox->edit_array : '' );
}
2019-11-13 13:41:07 +02:00
/**
* Skip field validation for:
* - '_options' if Choices Callback specified
*
* @param boolean $skip
* @param string $post_input
* @param array $array
* @return boolean
*/
public function skip_field_validation( $skip, $post_input, $array ) {
if ( $post_input === '_options' && isset( $array['post']['_custom_dropdown_options_source'] ) ) {
2019-11-21 11:41:52 +02:00
$skip = function_exists( $array['post']['_custom_dropdown_options_source'] );
2019-11-13 13:41:07 +02:00
}
return $skip;
}
2019-11-21 11:41:52 +02:00
2019-11-13 13:41:07 +02:00
2018-03-16 09:37:19 +02:00
/**
* Retrieves dropdown/multi-select options from a callback function
*/
function populate_dropdown_options() {
2018-11-21 14:01:18 +02:00
UM()->admin()->check_ajax_nonce();
2018-03-16 09:37:19 +02:00
2018-11-21 14:01:18 +02:00
if ( ! is_user_logged_in() || ! current_user_can( 'manage_options' ) ) {
wp_send_json_error( __( 'This is not possible for security reasons.', 'ultimate-member' ) );
2018-03-16 09:37:19 +02:00
}
2018-11-21 14:01:18 +02:00
$arr_options = array();
2020-02-28 15:51:45 +02:00
$um_callback_func = sanitize_key( $_POST['um_option_callback'] );
2018-03-16 09:37:19 +02:00
if ( empty( $um_callback_func ) ) {
$arr_options['status'] = 'empty';
$arr_options['function_name'] = $um_callback_func;
$arr_options['function_exists'] = function_exists( $um_callback_func );
}
$arr_options['data'] = array();
if ( function_exists( $um_callback_func ) ) {
$arr_options['data'] = call_user_func( $um_callback_func );
}
wp_send_json( $arr_options );
}
}
2021-06-29 02:51:54 +03:00
}