예제 #1
0
    /**
     * HTML formatted permissions table.
     *
     * @param type $roles
     * @param type $permissions
     * @param type $name
     * @return string
     */
    public static function wpcf_access_permissions_table($roles, $permissions, $settings, $group_id, $id, $enabled = true, $managed = true, $custom_errors = array(), $type_data = array())
    {
        $ordered_roles = Access_Helper::wpcf_access_order_roles_by_level($roles);
        $default_roles = Access_Helper::wpcf_get_default_roles();
        $output = '';
        $output .= '<table class="wpcf-access-table js-access-table">';
        $output .= '<tr>';
        $output .= '<th>' . __('Action', 'wpcf-access') . '</th>';
        foreach ($ordered_roles as $levels => $roles_data) {
            if (empty($roles_data)) {
                continue;
            }
            $title = '';
            foreach ($roles_data as $role => $details) {
                if (in_array($role, $default_roles)) {
                    $title .= '<p class="access-role-name-wrap js-tooltip"><span class="access-role-name">' . translate_user_role($details['name']) . '</span></p>';
                } else {
                    $title .= '<p class="access-role-name-wrap js-tooltip"><span class="access-role-name">' . taccess_t($details['name'], $details['name']) . '</span></p>';
                }
            }
            $output .= '<th>' . $title . '</th>';
        }
        // Add Guest
        $output .= '<th>' . __('Guest', 'wpcf-access') . '</th>';
        $output .= '<th>' . __('Specific user', 'wpcf-access') . '</th>';
        if ($group_id == 'types' && $id != 'attachment') {
            $output .= '<th>' . __('When disabled', 'wpcf-access') . '</th>';
        }
        $output .= '</tr>';
        $output .= '<tbody>';
        foreach ($settings as $permission_slug => $data) {
            // Change slug for 3rd party
            if (!in_array($group_id, array('types', 'tax'))) {
                $permission_slug = $data['cap_id'];
                $managed = true;
            }
            $check = true;
            $output .= '<tr>';
            $output .= '<td class="wpcf-access-table-action-title">' . $data['title'] . '</td>';
            $name = 'types_access[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][role]';
            // If no settings saved use default setting [role]
            $role_check = !empty($permissions[$permission_slug]['role']) ? $permissions[$permission_slug]['role'] : $data['role'];
            $template_link = '';
            if (isset($custom_errors['_custom_read_errors'][$id]) && $permission_slug == 'read') {
                $current_custom_errors = $custom_errors['_custom_read_errors'][$id]['permissions']['read'];
                $current_custom_errors_value = $custom_errors['_custom_read_errors_value'][$id]['permissions']['read'];
            }
            if (isset($custom_errors['_archive_custom_read_errors'][$id]) && $permission_slug == 'read') {
                $current_archive_custom_errors = $custom_errors['_archive_custom_read_errors'][$id]['permissions']['read'];
                $current_archive_custom_errors_value = $custom_errors['_archive_custom_read_errors_value'][$id]['permissions']['read'];
            }
            foreach ($ordered_roles as $levels => $roles_data) {
                if (empty($roles_data)) {
                    continue;
                }
                $addon = '';
                // Render only first (built-in)
                $role = key($roles_data);
                $details = array_shift($roles_data);
                if ($permission_slug == 'read' && $role != 'administrator' && $id != 'attachment') {
                    $addon_id = $group_id . '_' . $id . '_error_page_' . $permission_slug . '_' . $role . '_role';
                    $error_value_value = $error_type_value = $archive_error_value_value = $archive_error_type_value = $text = $archive_text = '';
                    $link_title = '';
                    if (isset($current_custom_errors[$role]) && !empty($current_custom_errors[$role])) {
                        $error_type_value = $current_custom_errors[$role];
                        $error_value_value = $current_custom_errors_value[$role];
                        if ($error_type_value == 'error_404') {
                            $text = '404';
                            $link_title = __('Show 404 - page not found', 'wpcf-access');
                        } elseif ($error_type_value == 'error_ct') {
                            $text = __('Template', 'wpcf-access') . ': ' . self::get_content_template_name($error_value_value);
                            $link_title = __('Show Content Template', 'wpcf-access') . ' - ' . self::get_content_template_name($error_value_value);
                        } else {
                            $text = __('PHP Template', 'wpcf-access') . ': ' . $error_value_value;
                            $link_title = __('Show Page template', 'wpcf-access') . ' - ' . $error_value_value;
                        }
                    } elseif (isset($current_custom_errors['everyone']) && !empty($current_custom_errors['everyone'])) {
                        if ($error_type_value == 'error_404') {
                            $link_title = __('Show 404 - page not found', 'wpcf-access');
                        } elseif ($error_type_value == 'error_ct') {
                            $link_title = __('Show Content Template', 'wpcf-access') . ' - ' . self::get_content_template_name($error_value_value);
                        } else {
                            $link_title = __('Show Page template', 'wpcf-access') . ' - ' . $error_value_value;
                        }
                    }
                    //Set Archive Errors
                    if (isset($current_archive_custom_errors[$role]) && !empty($current_archive_custom_errors[$role]) && isset($type_data['has_archive']) && $type_data['has_archive'] == 1) {
                        $archive_error_type_value = $current_archive_custom_errors[$role];
                        $archive_error_value_value = $current_archive_custom_errors_value[$role];
                        if ($archive_error_type_value == 'default_error') {
                            $archive_text = __('Display: \'No posts found\'', 'wpcf-access');
                        } elseif ($archive_error_type_value == 'error_ct') {
                            $archive_text = __('View Archive', 'wpcf-access') . ': ' . self::get_view_name($archive_error_value_value);
                        } elseif ($archive_error_type_value == 'error_php') {
                            $archive_text = __('PHP Archive', 'wpcf-access') . ': ' . preg_replace("/.*(\\/.*\\/)/", "\$1", $archive_error_value_value);
                        } else {
                            $archive_text = '';
                        }
                    }
                    $is_archive = '';
                    $archive_vars = '';
                    if (isset($type_data['has_archive']) && $type_data['has_archive'] == 1) {
                        $is_archive = 1;
                        $link_title = ' title="' . __('Set errors', 'wpcf-access') . '" ';
                    } else {
                        if (!empty($link_title)) {
                            $link_title = ' title="' . __('Set single page error', 'wpcf-access') . '. (' . $link_title . ')" ';
                        } else {
                            $link_title = ' title="' . __('Set single page error', 'wpcf-access') . '" ';
                        }
                    }
                    $error_type = 'types_access_error_type[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][' . $role . ']';
                    $error_value = 'types_access_error_value[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][' . $role . ']';
                    $archive_error_type = 'types_access_archive_error_type[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][' . $role . ']';
                    $archive_error_value = 'types_access_archive_error_value[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][' . $role . ']';
                    //				$hide_link = $check ? ' style="display:none;" ' : '';
                    $addon = '<a ' . $link_title . 'class="wpcf-add-error-page js-wpcf-add-error-page"' . ' data-typename="' . $error_type . '" data-valuename="' . $error_value . '"  data-curtype="' . $error_type_value . '" data-curvalue="' . $error_value_value . '"' . ' data-archivetypename="' . $archive_error_type . '" data-archivevaluename="' . $archive_error_value . '"  data-archivecurtype="' . $archive_error_type_value . '" data-archivecurvalue="' . $archive_error_value_value . '"' . ' data-posttype="' . $id . '" data-archive="' . $is_archive . '" data-forall="0" href=""><i class="icon-edit"></i></a>';
                    //Labels
                    $addon .= '<p class="error-page-name-wrap js-tooltip"><span class="error-page-name js-error-page-name">' . $text . '</span></p>' . '<p class="error-page-name-wrap js-tooltip"><span class="error-page-name js-archive_error-page-name">' . $archive_text . '</span></p>' . '<input type="hidden" name="' . $error_type . '" value="' . $error_type_value . '">
						<input type="hidden" name="' . $error_value . '" value="' . $error_value_value . '">';
                    if (isset($type_data['has_archive']) && $type_data['has_archive'] == 1) {
                        $addon .= '<input type="hidden" name="' . $archive_error_type . '" value="' . $archive_error_type_value . '">
							<input type="hidden" name="' . $archive_error_value . '" value="' . $archive_error_value_value . '">';
                    }
                }
                $att_id = $group_id . '_' . $id . '_permissions_' . $permission_slug . '_' . $role . '_role';
                $attributes = $check ? ' checked="checked" ' : '';
                $attributes .= !$managed ? ' readonly="readonly" disabled="disabled" ' : '';
                $output .= '<td><div class="error-page-set-wrap"><input type="checkbox" name="';
                $output .= $role_check == $role ? $name : 'dummy';
                $output .= '" id="' . $att_id . '" value="' . $role . '"' . $attributes . ' class="wpcf-access-check-left wpcf-access-' . $permission_slug . '" data-wpcfaccesscap="' . $permission_slug . '" data-wpcfaccessname="' . $name . '" ' . 'onclick="wpcfAccess.AutoThick(jQuery(this), \'' . $permission_slug . '\', \'' . $name . '\');"';
                if (!$enabled) {
                    $output .= ' disabled="disabled" readonly="readonly"';
                }
                $output .= '/>' . $addon . '</div></td>';
                // Turn off onwards checking
                if ($role_check == $role) {
                    $check = false;
                }
            }
            // Add Guest
            $name = 'types_access[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][role]';
            $attributes = $check ? ' checked="checked"' : '';
            $attributes .= !$managed ? ' readonly="readonly" disabled="disabled"' : '';
            $addon = '';
            if ($permission_slug == 'read' && $id != 'attachment') {
                $addon_id = $group_id . '_' . $id . '_error_page_' . $permission_slug . '_' . $role . '_role';
                $error_value_value = $error_type_value = $archive_error_value_value = $archive_error_type_value = $text = $archive_text = '';
                $link_title = '';
                if (isset($current_custom_errors['guest']) && !empty($current_custom_errors['guest'])) {
                    $error_type_value = $current_custom_errors['guest'];
                    $error_value_value = $current_custom_errors_value['guest'];
                    if ($error_type_value == 'error_404') {
                        $text = '404';
                        $link_title = __('Show 404 - page not found', 'wpcf-access');
                    } elseif ($error_type_value == 'error_ct') {
                        $text = __('Template', 'wpcf-access') . ': ' . self::get_content_template_name($error_value_value);
                        $link_title = __('Show Content Template', 'wpcf-access') . ' - ' . self::get_content_template_name($error_value_value);
                    } else {
                        $text = __('PHP Template', 'wpcf-access') . ': ' . $error_value_value;
                        $link_title = __('Show Page template', 'wpcf-access') . ' - ' . $error_value_value;
                    }
                } elseif (isset($current_custom_errors['everyone']) && !empty($current_custom_errors['everyone'])) {
                    if ($error_type_value == 'error_404') {
                        $link_title = __('Show 404 - page not found', 'wpcf-access');
                    } elseif ($error_type_value == 'error_ct') {
                        $link_title = __('Show Content Template', 'wpcf-access') . ' - ' . self::get_content_template_name($error_value_value);
                    } else {
                        $link_title = __('Show Page template', 'wpcf-access') . ' - ' . $error_value_value;
                    }
                }
                //Set Archive Errors
                if (isset($current_archive_custom_errors['guest']) && !empty($current_archive_custom_errors['guest']) && isset($type_data['has_archive']) && $type_data['has_archive'] == 1) {
                    $archive_error_type_value = $current_archive_custom_errors['guest'];
                    $archive_error_value_value = $current_archive_custom_errors_value['guest'];
                    if ($archive_error_type_value == 'default_error') {
                        $archive_text = __('Display: \'No posts found\'', 'wpcf-access');
                    } elseif ($archive_error_type_value == 'error_ct') {
                        $archive_text = __('View Archive', 'wpcf-access') . ': ' . self::get_view_name($archive_error_value_value);
                    } elseif ($archive_error_type_value == 'error_php') {
                        $archive_text = __('PHP Archive', 'wpcf-access') . ': ' . preg_replace("/.*(\\/.*\\/)/", "\$1", $archive_error_value_value);
                    } else {
                        $archive_text = '';
                    }
                }
                $is_archive = '';
                $archive_vars = '';
                if (isset($type_data['has_archive']) && $type_data['has_archive'] == 1) {
                    $is_archive = 1;
                    $link_title = ' title="' . __('Set errors', 'wpcf-access') . '" ';
                } else {
                    if (!empty($link_title)) {
                        $link_title = ' title="' . __('Set single page error', 'wpcf-access') . '. (' . $link_title . ')" ';
                    } else {
                        $link_title = ' title="' . __('Set single page error', 'wpcf-access') . '" ';
                    }
                }
                $error_type = 'types_access_error_type[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][guest]';
                $error_value = 'types_access_error_value[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][guest]';
                $archive_error_type = 'types_access_archive_error_type[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][guest]';
                $archive_error_value = 'types_access_archive_error_value[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][guest]';
                $hide_link = $check ? ' style="display:none;" ' : '';
                $addon = '<a ' . $link_title . 'class="wpcf-add-error-page js-wpcf-add-error-page"' . ' data-typename="' . $error_type . '" data-valuename="' . $error_value . '"  data-curtype="' . $error_type_value . '" data-curvalue="' . $error_value_value . '"' . ' data-archivetypename="' . $archive_error_type . '" data-archivevaluename="' . $archive_error_value . '"  data-archivecurtype="' . $archive_error_type_value . '" data-archivecurvalue="' . $archive_error_value_value . '"' . ' data-posttype="' . $id . '" data-archive="' . $is_archive . '" data-forall="0" href=""><i class="icon-edit"></i></a>';
                //Labels
                $addon .= '<p class="error-page-name-wrap js-tooltip"><span class="error-page-name js-error-page-name">' . $text . '</span></p>' . '<p class="error-page-name-wrap js-tooltip"><span class="error-page-name js-archive_error-page-name">' . $archive_text . '</span></p>' . '<input type="hidden" name="' . $error_type . '" value="' . $error_type_value . '">
						<input type="hidden" name="' . $error_value . '" value="' . $error_value_value . '">';
                if (isset($type_data['has_archive']) && $type_data['has_archive'] == 1) {
                    $addon .= '<input type="hidden" name="' . $archive_error_type . '" value="' . $archive_error_type_value . '">
							<input type="hidden" name="' . $archive_error_value . '" value="' . $archive_error_value_value . '">';
                }
            }
            $output .= '<td><div class="error-page-set-wrap"><input type="checkbox" name="';
            $output .= $role_check == 'guest' ? $name : 'dummy';
            $output .= '" id="' . $group_id . '_' . $id . '_permissions_' . $permission_slug . '_guest_role" value="guest"' . $attributes . ' class="wpcf-access-check-left wpcf-access-' . $permission_slug . '" data-wpcfaccesscap="' . $permission_slug . '" data-wpcfaccessname="' . $name . '" ' . 'onclick="wpcfAccess.AutoThick(jQuery(this), \'' . $permission_slug . '\', \'' . $name . '\');"';
            if (!$enabled) {
                $output .= ' disabled="disabled" readonly="readonly"';
            }
            $output .= ' />' . $addon;
            // Add admin if all disabled
            $output .= '<input type="hidden" name="types_access[' . $group_id . '][' . $id . '][__permissions]' . '[' . $permission_slug . '][role]" value="administrator" />';
            $output .= '</div></td>';
            $data['users'] = !empty($permissions[$permission_slug]['users']) ? $permissions[$permission_slug]['users'] : array();
            $output .= '<td>' . '<input type="hidden" class="wpcf-access-name-holder" name="wpcf_access_' . $id . '_' . $permission_slug . '" data-wpcfaccesscap="' . $permission_slug . '" data-wpcfaccessname="' . 'types_access[' . $group_id . '][' . $id . ']' . '[permissions][' . $permission_slug . ']" value="types_access[' . $group_id . '][' . $id . ']' . '[permissions][' . $permission_slug . ']" />' . self::wpcf_access_admin_users_form($data, 'types_access[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . ']', $enabled, $managed) . '</td>';
            if ($permission_slug == 'read' && $id != 'attachment') {
                $addon_id = $group_id . '_' . $id . '_error_page_' . $permission_slug . '_' . $role . '_role';
                $link_title = '';
                $error_value_value = $error_type_value = $archive_error_value_value = $archive_error_type_value = $text = $archive_text = '';
                if (isset($current_custom_errors['everyone']) && !empty($current_custom_errors['everyone'])) {
                    $error_type_value = $current_custom_errors['everyone'];
                    $error_value_value = $current_custom_errors_value['everyone'];
                    if ($error_type_value == 'error_404') {
                        $text = '404';
                        $link_title = __('Show 404 - page not found', 'wpcf-access');
                    } elseif ($error_type_value == 'error_ct') {
                        $text = __('Template', 'wpcf-access') . ': ' . self::get_content_template_name($error_value_value);
                        $link_title = __('Show Content Template', 'wpcf-access') . ' - ' . self::get_content_template_name($error_value_value);
                    } else {
                        $text = __('PHP Template', 'wpcf-access') . ': ' . $error_value_value;
                        $link_title = __('Show Page template', 'wpcf-access') . ' - ' . $error_value_value;
                    }
                }
                //Set Archive Errors
                if (isset($current_archive_custom_errors['everyone']) && !empty($current_archive_custom_errors['everyone']) && isset($type_data['has_archive']) && $type_data['has_archive'] == 1) {
                    $archive_error_type_value = $current_archive_custom_errors['everyone'];
                    $archive_error_value_value = $current_archive_custom_errors_value['everyone'];
                    if ($archive_error_type_value == 'default_error') {
                        $archive_text = __('Display: \'No posts found\'', 'wpcf-access');
                    } elseif ($archive_error_type_value == 'error_ct') {
                        $archive_text = __('View Archive', 'wpcf-access') . ': ' . self::get_view_name($archive_error_value_value);
                    } elseif ($archive_error_type_value == 'error_php') {
                        $archive_text = __('PHP Archive', 'wpcf-access') . ': ' . preg_replace("/.*(\\/.*\\/)/", "\$1", $archive_error_value_value);
                    } else {
                        $archive_text = '';
                    }
                }
                $is_archive = '';
                $archive_vars = '';
                if (isset($type_data['has_archive']) && $type_data['has_archive'] == 1) {
                    $is_archive = 1;
                    $link_title = ' title="' . __('Set errors', 'wpcf-access') . '" ';
                } else {
                    if (!empty($link_title)) {
                        $link_title = ' title="' . __('Set single page error', 'wpcf-access') . '. (' . $link_title . ')" ';
                    } else {
                        $link_title = ' title="' . __('Set single page error', 'wpcf-access') . '" ';
                    }
                }
                $error_type = 'types_access_error_type[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][everyone]';
                $error_value = 'types_access_error_value[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][everyone]';
                $archive_error_type = 'types_access_archive_error_type[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][everyone]';
                $archive_error_value = 'types_access_archive_error_value[' . $group_id . '][' . $id . '][permissions]' . '[' . $permission_slug . '][everyone]';
                $addon = '<a ' . $link_title . 'class="wpcf-add-error-page js-wpcf-add-error-page"' . ' data-typename="' . $error_type . '" data-valuename="' . $error_value . '"  data-curtype="' . $error_type_value . '" data-curvalue="' . $error_value_value . '"' . ' data-archivetypename="' . $archive_error_type . '" data-archivevaluename="' . $archive_error_value . '"  data-archivecurtype="' . $archive_error_type_value . '" data-archivecurvalue="' . $archive_error_value_value . '"' . ' data-posttype="' . $id . '" data-archive="' . $is_archive . '" data-forall="1" href=""><i class="icon-edit"></i></a>';
                //Labels
                $addon .= '<p class="error-page-name-wrap js-tooltip"><span class="error-page-name js-error-page-name">' . $text . '</span></p>' . '<p class="error-page-name-wrap js-tooltip"><span class="error-page-name js-archive_error-page-name">' . $archive_text . '</span></p>' . '<input type="hidden" name="' . $error_type . '" value="' . $error_type_value . '">
						<input type="hidden" name="' . $error_value . '" value="' . $error_value_value . '">';
                if (isset($type_data['has_archive']) && $type_data['has_archive'] == 1) {
                    $addon .= '<input type="hidden" name="' . $archive_error_type . '" value="' . $archive_error_type_value . '">
							<input type="hidden" name="' . $archive_error_value . '" value="' . $archive_error_value_value . '">';
                }
                $output .= '<td>' . $addon . '</td>';
            }
            $output .= '</tr>';
        }
        $output .= '</tbody>';
        $output .= '</table>';
        return $output;
    }
예제 #2
0
 public static function wpcf_access_check_if_user_can($role, $level)
 {
     global $wp_roles;
     $cur_level = 0;
     $ordered_roles = Access_Helper::wpcf_access_order_roles_by_level($wp_roles->roles);
     foreach ($ordered_roles as $levels => $roles_data) {
         if (empty($roles_data)) {
             continue;
         }
         foreach ($roles_data as $role_slug => $role_options) {
             if ($role_slug == $role) {
                 $cur_level = $levels;
             }
         }
     }
     if ($level >= $cur_level) {
         return true;
     } else {
         return false;
     }
 }