Advertisement
Guest User

Untitled

a guest
Feb 25th, 2020
2,267
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 10.24 KB | None | 0 0
  1. <?php
  2. /* handle field output */
  3. function wppb_user_role_handler( $output, $form_location, $field, $user_id, $field_check_errors, $request_data ){
  4. if ( $field['field'] == 'Select (User Role)' ){
  5.  
  6. $roles_editor_active = false;
  7. $wppb_generalSettings = get_option( 'wppb_general_settings', 'not_found' );
  8. if( $wppb_generalSettings != 'not_found' ) {
  9. if( ! empty( $wppb_generalSettings['rolesEditor'] ) && ( $wppb_generalSettings['rolesEditor'] == 'yes' ) && $form_location == 'edit_profile' ) {
  10. $roles_editor_active = true;
  11. }
  12. }
  13.  
  14. $user_role = '';
  15. $user_roles = '';
  16. $user_can_manage_options = false;
  17.  
  18. // Get user data, set user's role and check to see if user can manage options
  19. if( $user_id != 0 ) {
  20. $user_data = get_userdata( $user_id );
  21.  
  22. if( ! empty( $user_data->roles ) ) {
  23. $user_role = $user_data->roles[0];
  24. $user_roles = $user_data->roles;
  25. }
  26.  
  27. if( isset( $user_data->allcaps['manage_options'] ) && $user_data->allcaps['manage_options'] == 1 ) {
  28. $user_can_manage_options = true;
  29. }
  30. }
  31.  
  32. $input_value = isset( $request_data['custom_field_user_role'] ) ? $request_data['custom_field_user_role'] : $user_role;
  33. $input_value_multiple = isset( $request_data['custom_field_user_role'] ) ? $request_data['custom_field_user_role'] : $user_roles;
  34.  
  35. $item_title = apply_filters( 'wppb_'.$form_location.'_user_role_custom_field_'.$field['id'].'_item_title', wppb_icl_t( 'plugin profile-builder-pro', 'custom_field_'.$field['id'].'_title_translation', $field['field-title'] ) );
  36. $item_description = wppb_icl_t( 'plugin profile-builder-pro', 'custom_field_'.$field['id'].'_description_translation', $field['description'] );
  37.  
  38. //get user roles
  39. if( !empty( $field['user-roles'] ) ) {
  40. global $wp_roles;
  41.  
  42. $available_user_roles = explode( ', ', $field['user-roles'] );
  43.  
  44. foreach( $available_user_roles as $key => $role_slug ) {
  45. if( isset( $wp_roles->roles[$role_slug]['name'] ) ) {
  46. $available_user_roles[$key] = array(
  47. 'slug' => $role_slug,
  48. 'name' => $wp_roles->roles[$role_slug]['name']
  49. );
  50. } else {
  51. unset( $available_user_roles[$key] );
  52. }
  53. }
  54. }
  55.  
  56. $extra_attr = apply_filters( 'wppb_extra_attribute', '', $field, $form_location );
  57.  
  58. if( $form_location == 'register' || ( $form_location == 'edit_profile' && current_user_can('manage_options') && $user_can_manage_options == false ) ) {
  59. $error_mark = ( ( $field['required'] == 'Yes' ) ? '<span class="wppb-required" title="'.wppb_required_field_error($field["field-title"]).'">*</span>' : '' );
  60.  
  61. if ( array_key_exists( $field['id'], $field_check_errors ) )
  62. $error_mark = '<img src="'.WPPB_PLUGIN_URL.'assets/images/pencil_delete.png" title="'.wppb_required_field_error($field["field-title"]).'"/>';
  63.  
  64. $output = '
  65. <label for="custom_field_user_role">'.$item_title.$error_mark.'</label>
  66. <select name="custom_field_user_role'. ( $roles_editor_active ? '[]' : '' ) .'" id="'.$field['meta-name'].'" class="custom_field_user_role '. apply_filters( 'wppb_fields_extra_css_class', '', $field ) .'" '. $extra_attr . ( $roles_editor_active ? ' multiple="multiple"' : '' ) .'>';
  67.  
  68. $extra_select_option = apply_filters( 'wppb_extra_select_option', '', $field, $item_title );
  69. if( ! empty( $extra_select_option ) ) {
  70. $output .= $extra_select_option;
  71. }
  72.  
  73. if( ! empty( $available_user_roles ) ) {
  74. foreach( $available_user_roles as $user_role ) {
  75. $output .= '<option value="'. $user_role['slug'] .'"';
  76.  
  77. if( $roles_editor_active && is_array( $input_value_multiple ) ) {
  78. if( in_array( $user_role['slug'], $input_value_multiple ) ) {
  79. $output .= ' selected="selected" ';
  80. }
  81. } else {
  82. $output .= selected( $input_value, $user_role['slug'], false );
  83. }
  84.  
  85. $output .= '>'. $user_role['name'] .'</option>';
  86. }
  87. }
  88.  
  89. $output .= '</select>';
  90.  
  91. if( $form_location == 'edit_profile' )
  92. $output .= '<span class="wppb-description-delimiter">'. __( 'Only administrators can see this field on edit profile forms.', 'profile-builder' ) .'</span>';
  93.  
  94. if( !empty( $item_description ) )
  95. $output .= '<span class="wppb-description-delimiter">'.$item_description.'</span>';
  96.  
  97. } elseif( $form_location == 'edit_profile' && current_user_can('manage_options') && $user_can_manage_options == true ) {
  98.  
  99. $output = '
  100. <label for="custom_field_user_role">'.$item_title.'</label>
  101. <p>' . __( 'As an administrator you cannot change your role.', 'profile-builder' ) . '</p>';
  102.  
  103. $output .= '</select>';
  104.  
  105. $output .= '<span class="wppb-description-delimiter">'. __( 'Only administrators can see this field on edit profile forms.', 'profile-builder' ) .'</span>';
  106.  
  107. if( !empty( $item_description ) )
  108. $output .= '<span class="wppb-description-delimiter">'.$item_description.'</span>';
  109.  
  110. }
  111. else{
  112. if( !empty( $input_value_multiple ) ){
  113. foreach( $input_value_multiple as $input_value_multi ){
  114. $output .= '<input type="hidden" disabled="disabled" readonly="readonly" value="'.$input_value_multi.'">';
  115. }
  116. }
  117. else {
  118. $output .= '<input type="hidden" disabled="disabled" readonly="readonly" value="' . $input_value . '">';
  119. }
  120. }
  121.  
  122. return apply_filters( 'wppb_'.$form_location.'_user_role_custom_field_'.$field['id'], $output, $form_location, $field, $user_id, $field_check_errors, $request_data, $input_value, $input_value_multiple );
  123. }
  124. }
  125. add_filter( 'wppb_output_form_field_select-user-role', 'wppb_user_role_handler', 10, 6 );
  126.  
  127.  
  128. /* handle field validation */
  129. function wppb_check_user_role_value( $message, $field, $request_data, $form_location ) {
  130.  
  131. $field['meta-name'] = 'custom_field_user_role';
  132.  
  133. if( $form_location == 'back_end' )
  134. return $message;
  135.  
  136. if( $form_location == 'edit_profile' && !current_user_can( 'manage_options' ) && ( isset( $request_data[wppb_handle_meta_name( $field['meta-name'] )] ) ) )
  137. return __( 'You cannot register this user role', 'profile-builder');
  138.  
  139. $roles_editor_active = false;
  140. $wppb_generalSettings = get_option( 'wppb_general_settings', 'not_found' );
  141. if( $wppb_generalSettings != 'not_found' ) {
  142. if( ! empty( $wppb_generalSettings['rolesEditor'] ) && ( $wppb_generalSettings['rolesEditor'] == 'yes' ) && $form_location == 'edit_profile' ) {
  143. $roles_editor_active = true;
  144. }
  145. }
  146.  
  147. if( $field['field'] == 'Select (User Role)' ){
  148.  
  149. if( $form_location == 'register' && $field['required'] == 'Yes' && current_user_can( 'manage_options' ) === false ) {
  150. if( ( isset( $request_data[wppb_handle_meta_name( $field['meta-name'] )] ) && ( trim( $request_data[wppb_handle_meta_name( $field['meta-name'] )] ) == '' ) ) || !isset( $request_data[wppb_handle_meta_name( $field['meta-name'] )] ) ){
  151. return wppb_required_field_error($field["field-title"]);
  152. }
  153. }
  154.  
  155. if( isset( $field['user-roles'] ) && isset( $request_data['custom_field_user_role'] ) ) {
  156. $available_user_roles = explode(', ', $field['user-roles'] );
  157.  
  158. if( $roles_editor_active && is_array( $request_data['custom_field_user_role'] ) ) {
  159. foreach( $request_data['custom_field_user_role'] as $key => $value ) {
  160. if( ! in_array( $value, $available_user_roles ) ) {
  161. return __( 'You cannot register this user role', 'profile-builder');
  162. }
  163. }
  164. } else {
  165. if( ! in_array( $request_data['custom_field_user_role'], $available_user_roles ) ) {
  166. return __( 'You cannot register this user role', 'profile-builder');
  167. }
  168. }
  169. }
  170.  
  171. }
  172.  
  173. return $message;
  174. }
  175. add_filter( 'wppb_check_form_field_select-user-role', 'wppb_check_user_role_value', 10, 4 );
  176.  
  177.  
  178. /* handle field save */
  179. function wppb_userdata_add_user_role( $userdata, $global_request, $form_args ){
  180.  
  181. if( wppb_field_exists_in_form( 'Select (User Role)', $form_args ) ) {
  182.  
  183. $roles_editor_active = false;
  184. $wppb_generalSettings = get_option('wppb_general_settings', 'not_found');
  185. if ($wppb_generalSettings != 'not_found') {
  186. if (!empty($wppb_generalSettings['rolesEditor']) && ($wppb_generalSettings['rolesEditor'] == 'yes')) {
  187. $roles_editor_active = true;
  188. }
  189. }
  190.  
  191. if (isset($global_request['custom_field_user_role'])) {
  192. if ($roles_editor_active && is_array($global_request['custom_field_user_role'])) {
  193. $user_roles = array_map('trim', $global_request['custom_field_user_role']);
  194. $user_roles = array_map('sanitize_text_field', $user_roles);
  195.  
  196. //don't allow administrator value. it should never be here but just in case make a hard check
  197. if (($key = array_search("administrator", $user_roles)) !== false) {
  198. unset($user_roles[$key]);
  199. }
  200.  
  201. $userdata['role'] = $user_roles;
  202. } else {
  203. $role = sanitize_text_field(trim($global_request['custom_field_user_role']));
  204. if( $role !== 'administrator' ) {//don't allow administrator value. it should never be here but just in case make a hard check
  205. $userdata['role'] = $role;
  206. }
  207. }
  208. }
  209. }
  210.  
  211. return $userdata;
  212. }
  213. add_filter( 'wppb_build_userdata', 'wppb_userdata_add_user_role', 10, 3 );
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement