Edit File by line

Deprecated: str_replace(): Passing null to parameter #2 ($replace) of type array|string is deprecated in /home/sportsfever/public_html/filemanger/function.php on line 93
/home/sportsfe.../httpdocs/wp-conte.../plugins/themify-.../themify
File: class-themify-access-role.php
<?php
[0] Fix | Delete
[1] Fix | Delete
if( ! class_exists( 'Themify_Access_Role',false ) ) :
[2] Fix | Delete
class Themify_Access_Role {
[3] Fix | Delete
[4] Fix | Delete
public static function init(){
[5] Fix | Delete
add_filter( 'themify_theme_config_setup', array( __CLASS__, 'config_setup' ), 14 );
[6] Fix | Delete
add_filter( 'admin_init', array( __CLASS__, 'hide_customizer' ), 99 );
[7] Fix | Delete
add_filter( 'themify_metabox/fields/themify-meta-boxes', array( __CLASS__, 'hide_custom_panel_and_backend_builder' ), 999 );
[8] Fix | Delete
}
[9] Fix | Delete
[10] Fix | Delete
/**
[11] Fix | Delete
* Renders the options for role access control
[12] Fix | Delete
*
[13] Fix | Delete
* @param array $data
[14] Fix | Delete
* @return string
[15] Fix | Delete
*/
[16] Fix | Delete
public static function config_view( $data = array() ){
[17] Fix | Delete
global $wp_roles;
[18] Fix | Delete
$roles = $wp_roles->get_names();
[19] Fix | Delete
// Remove the adminitrator and subscriber user role from the array
[20] Fix | Delete
unset( $roles['administrator'],$roles['subscriber'] );
[21] Fix | Delete
[22] Fix | Delete
// Get the unique setting name
[23] Fix | Delete
$setting = $data['attr']['setting'];
[24] Fix | Delete
[25] Fix | Delete
// Generate prefix with the setting name
[26] Fix | Delete
$prefix = 'setting-'.$setting.'-';
[27] Fix | Delete
[28] Fix | Delete
$show_owned_option = in_array( $setting, [ 'tbp', 'frontend', 'backend' ], true );
[29] Fix | Delete
[30] Fix | Delete
ob_start();
[31] Fix | Delete
if ( 'custom_panel' === $setting ) :
[32] Fix | Delete
?>
[33] Fix | Delete
<div class="themify-info-link"><?php _e( 'Role access allow certain user roles to have access to the tool. Only set disable if you want to disallow the tool to certain user(s), otherwise keep everything as default.', 'themify' ); ?></div>
[34] Fix | Delete
<?php
[35] Fix | Delete
endif;
[36] Fix | Delete
?>
[37] Fix | Delete
<ul>
[38] Fix | Delete
<?php foreach( $roles as $role => $slug ) {
[39] Fix | Delete
$prefix_role = esc_attr($prefix.$role);
[40] Fix | Delete
// Get value from the database
[41] Fix | Delete
$value = themify_builder_get( $prefix_role,$prefix_role);
[42] Fix | Delete
[43] Fix | Delete
// Check if the user has not saved any setting till now, if so, set the 'default' as value
[44] Fix | Delete
$value = ( null !== $value ) ? $value : 'default';
[45] Fix | Delete
[46] Fix | Delete
?>
[47] Fix | Delete
<li class="role-access-controller">
[48] Fix | Delete
<!-- Set the column title -->
[49] Fix | Delete
<div class="role-title">
[50] Fix | Delete
<?php echo $slug; ?>
[51] Fix | Delete
</div>
[52] Fix | Delete
[53] Fix | Delete
<!-- Set option to default -->
[54] Fix | Delete
<div class="role-option role-default">
[55] Fix | Delete
<input type="radio" id="default-<?php echo $prefix_role; ?>" name="<?php echo $prefix_role; ?>" value="default" <?php echo checked( $value, 'default', false ); ?>/>
[56] Fix | Delete
<label for="default-<?php echo $prefix_role; ?>"><?php _e( 'Default', 'themify' ); ?></label>
[57] Fix | Delete
</div>
[58] Fix | Delete
[59] Fix | Delete
<!-- Set option to enable -->
[60] Fix | Delete
<div class="role-option role-enable">
[61] Fix | Delete
<input type="radio" id="enable-<?php echo $prefix_role; ?>" name="<?php echo $prefix_role; ?>" value="enable" <?php echo checked( $value, 'enable', false ); ?>/>
[62] Fix | Delete
<label for="enable-<?php echo $prefix_role; ?>"><?php _e( 'Enable', 'themify' ); ?></label>
[63] Fix | Delete
</div>
[64] Fix | Delete
[65] Fix | Delete
<?php if ( $show_owned_option ) : ?>
[66] Fix | Delete
<div class="role-option role-enableown">
[67] Fix | Delete
<input type="radio" id="enableown-<?php echo $prefix_role; ?>" name="<?php echo $prefix_role; ?>" value="enableown" <?php echo checked( $value, 'enableown', false ); ?>/>
[68] Fix | Delete
<label for="enableown-<?php echo $prefix_role; ?>"><?php _e( 'Enable For Owned Posts', 'themify' ); ?></label>
[69] Fix | Delete
</div>
[70] Fix | Delete
<?php endif; ?>
[71] Fix | Delete
[72] Fix | Delete
<!-- Set option to disable -->
[73] Fix | Delete
<div class="role-option role-disable">
[74] Fix | Delete
<input type="radio" id="disable-<?php echo $prefix_role; ?>" name="<?php echo $prefix_role; ?>" value="disable" <?php echo checked( $value, 'disable', false ); ?>/>
[75] Fix | Delete
<label for="disable-<?php echo $prefix_role; ?>"><?php _e( 'Disable', 'themify' ); ?></label>
[76] Fix | Delete
</div>
[77] Fix | Delete
</li>
[78] Fix | Delete
<?php }//end foreach ?>
[79] Fix | Delete
</ul>
[80] Fix | Delete
<?php
[81] Fix | Delete
return ob_get_clean();
[82] Fix | Delete
}
[83] Fix | Delete
[84] Fix | Delete
/**
[85] Fix | Delete
* Role Access Control
[86] Fix | Delete
* @param array $themify_theme_config
[87] Fix | Delete
* @return array
[88] Fix | Delete
*/
[89] Fix | Delete
public static function config_setup(array $themify_theme_config ):array {
[90] Fix | Delete
// Add role acceess control tab on settings page
[91] Fix | Delete
$themify_theme_config['panel']['settings']['tab']['role_access'] = array(
[92] Fix | Delete
'title' => __('Role Access', 'themify'),
[93] Fix | Delete
'id' => 'role_access',
[94] Fix | Delete
'custom-module' => array(
[95] Fix | Delete
array(
[96] Fix | Delete
'title' => __('Themify Custom Panel (In Post/Page Edit)', 'themify'),
[97] Fix | Delete
'function' => array( __CLASS__, 'config_view' ),
[98] Fix | Delete
'setting' => 'custom_panel'
[99] Fix | Delete
),
[100] Fix | Delete
array(
[101] Fix | Delete
'title' => __('Customizer', 'themify'),
[102] Fix | Delete
'function' => array( __CLASS__, 'config_view' ),
[103] Fix | Delete
'setting' => 'customizer'
[104] Fix | Delete
),
[105] Fix | Delete
array(
[106] Fix | Delete
'title' => __('Builder Backend', 'themify'),
[107] Fix | Delete
'function' => array( __CLASS__, 'config_view' ),
[108] Fix | Delete
'setting' => 'backend'
[109] Fix | Delete
),
[110] Fix | Delete
array(
[111] Fix | Delete
'title' => __('Builder Frontend', 'themify'),
[112] Fix | Delete
'function' => array( __CLASS__, 'config_view' ),
[113] Fix | Delete
'setting' => 'frontend'
[114] Fix | Delete
)
[115] Fix | Delete
)
[116] Fix | Delete
);
[117] Fix | Delete
[118] Fix | Delete
return $themify_theme_config;
[119] Fix | Delete
}
[120] Fix | Delete
[121] Fix | Delete
// Hide Themify Custom Panel and Backend Builder
[122] Fix | Delete
public static function hide_custom_panel_and_backend_builder(array $meta ):array {
[123] Fix | Delete
if( is_user_logged_in() ){
[124] Fix | Delete
$custom_panel = self::check_role_access('custom_panel');
[125] Fix | Delete
$backend_builder = self::check_access_backend();
[126] Fix | Delete
// Remove Page Builde if disabled from role access control
[127] Fix | Delete
if( !$backend_builder || 'disable' === $custom_panel ){
[128] Fix | Delete
// Check each meta box for panels
[129] Fix | Delete
foreach( $meta as $key => $panel ) {
[130] Fix | Delete
// if page builder id found in meta boxes, unset it
[131] Fix | Delete
// Remove Custom Panel if disabled from role access control
[132] Fix | Delete
if ( (!$backend_builder && 'page-builder' === $panel['id'] ) ||('disable' === $custom_panel && 'page-builder' !== $panel['id'])) {
[133] Fix | Delete
unset( $meta[ $key ] );
[134] Fix | Delete
}
[135] Fix | Delete
}
[136] Fix | Delete
}
[137] Fix | Delete
}
[138] Fix | Delete
return $meta;
[139] Fix | Delete
}
[140] Fix | Delete
[141] Fix | Delete
/**
[142] Fix | Delete
* Check if user has access to builder's backend editor
[143] Fix | Delete
*/
[144] Fix | Delete
public static function check_access_backend(?int $post_id = null ):bool {
[145] Fix | Delete
$has_access = is_user_logged_in() && ((empty($post_id) && current_user_can( 'edit_posts' )) || ($post_id>0 && current_user_can( 'edit_post', $post_id )));
[146] Fix | Delete
if ( $has_access === true ) {
[147] Fix | Delete
$has_access = 'disable' !== self::check_role_access( 'backend' );
[148] Fix | Delete
[149] Fix | Delete
/* check access to specific $post_id */
[150] Fix | Delete
if ( $has_access === true && $post_id > 0 ) {
[151] Fix | Delete
$has_access === current_user_can( 'edit_post', $post_id );
[152] Fix | Delete
if ( $has_access === true && 'enableown' === self::check_role_access( 'backend' ) && ! self::is_current_user_the_author( $post_id ) ) {
[153] Fix | Delete
$has_access = false;
[154] Fix | Delete
}
[155] Fix | Delete
}
[156] Fix | Delete
}
[157] Fix | Delete
[158] Fix | Delete
return $has_access;
[159] Fix | Delete
}
[160] Fix | Delete
[161] Fix | Delete
/**
[162] Fix | Delete
* Check if user has access to builder's frontend editor
[163] Fix | Delete
*/
[164] Fix | Delete
public static function check_access_frontend(?int $post_id = null):bool {
[165] Fix | Delete
$has_access = is_user_logged_in() && ((empty($post_id) && current_user_can( 'edit_posts' )) || ($post_id>0 && current_user_can( 'edit_post', $post_id )));
[166] Fix | Delete
if ( $has_access === true ) {
[167] Fix | Delete
if ( 'enableown' === self::check_role_access( 'frontend' ) ) {
[168] Fix | Delete
$has_access = self::is_current_user_the_author( $post_id );
[169] Fix | Delete
}
[170] Fix | Delete
else{
[171] Fix | Delete
$has_access = 'disable' !== self::check_role_access( 'frontend' );
[172] Fix | Delete
}
[173] Fix | Delete
}
[174] Fix | Delete
[175] Fix | Delete
return $has_access;
[176] Fix | Delete
}
[177] Fix | Delete
[178] Fix | Delete
private static function get_current_role(){
[179] Fix | Delete
static $user = null;
[180] Fix | Delete
if( $user === null ) {
[181] Fix | Delete
$user = wp_get_current_user();
[182] Fix | Delete
$roles = ! empty( $user->roles ) && is_array( $user->roles ) ? $user->roles : array();
[183] Fix | Delete
// Get first role ( don't use key )
[184] Fix | Delete
$user = array_shift( $roles );
[185] Fix | Delete
}
[186] Fix | Delete
return $user;
[187] Fix | Delete
}
[188] Fix | Delete
[189] Fix | Delete
// Hide Themify Builder Customizer
[190] Fix | Delete
public static function hide_customizer( $data ) {
[191] Fix | Delete
if( is_user_logged_in() ){
[192] Fix | Delete
$is_available = current_user_can('customize');
[193] Fix | Delete
$value = self::check_role_access('customizer');
[194] Fix | Delete
// get the the role object
[195] Fix | Delete
$editor = get_role(self::get_current_role());
[196] Fix | Delete
if ( 'enable' === $value && !$is_available) {
[197] Fix | Delete
// add $cap capability to this role object
[198] Fix | Delete
$editor->add_cap('edit_theme_options');
[199] Fix | Delete
} elseif( 'disable' === $value && $is_available) {
[200] Fix | Delete
$editor->remove_cap('edit_theme_options');
[201] Fix | Delete
}
[202] Fix | Delete
}
[203] Fix | Delete
[204] Fix | Delete
return $data;
[205] Fix | Delete
}
[206] Fix | Delete
[207] Fix | Delete
public static function check_role_access(string $key){
[208] Fix | Delete
$setting = 'setting-'.$key.'-'.self::get_current_role();
[209] Fix | Delete
return themify_builder_get( $setting, $setting,true );
[210] Fix | Delete
}
[211] Fix | Delete
[212] Fix | Delete
/**
[213] Fix | Delete
* Returns true if current logged-in user is the author of $post
[214] Fix | Delete
*/
[215] Fix | Delete
private static function is_current_user_the_author( $post ):bool {
[216] Fix | Delete
$post = get_post( $post );
[217] Fix | Delete
return $post && (int) $post->post_author === wp_get_current_user()->ID;
[218] Fix | Delete
}
[219] Fix | Delete
}
[220] Fix | Delete
[221] Fix | Delete
Themify_Access_Role::init();
[222] Fix | Delete
endif;
[223] Fix | Delete
[224] Fix | Delete
It is recommended that you Edit text format, this type of Fix handles quite a lot in one request
Function