/** * Custom roles form. * * @param type $roles * @return string */ public static function wpcf_access_admin_set_custom_roles_level_form($roles, $enabled = true) { $levels = Access_Helper::wpcf_access_role_to_level_map(); $builtin_roles = array(); $default_roles = Access_Helper::wpcf_get_default_roles(); $custom_roles = array(); $output = ''; foreach ($roles as $role => $details) { if (!in_array($role, $default_roles)) { $compare = 'init'; foreach ($details['capabilities'] as $capability => $true) { if (strpos($capability, 'level_') !== false && $true) { $current_level = intval(substr($capability, 6)); if ($compare === 'init' || $current_level > intval($compare)) { $compare = $current_level; } } } $level = $compare !== 'init' ? $compare : 'not_set'; $custom_roles[$level][$role] = $details; //$custom_roles[$level][$role]['name'] = taccess_t($details['name'], $details['name']); $custom_roles[$level][$role]['level'] = $compare !== 'init' ? $compare : 'not_set'; } else { if (isset($levels[$role])) { $level = intval(substr($levels[$role], 6)); $builtin_roles[$level][$role] = $details; $builtin_roles[$level][$role]['name'] = translate_user_role($details['name']); $builtin_roles[$level][$role]['level'] = $level; } } } if (empty($custom_roles)) { return '<div id="wpcf-access-custom-roles-wrapper">' . __('No custom roles defined', 'wpcf-access') . '</div>'; } $output .= '<div id="wpcf-access-custom-roles-wrapper">'; $output .= '<p>' . __('The user level determines which actions can be performed by each user in the WordPress admin.', 'wpcf-access') . '</p>'; $output .= '<div id="wpcf-access-custom-roles-table-wrapper">'; $output .= '<table class="wpcf-access-custom-roles-table"><tbody>'; for ($index = 10; $index >= 0; $index--) { $level_empty = true; $row = '<tr> <td> <div class="wpcf-access-roles-level">' . sprintf(__('Level %d', 'wpcf-access'), $index) . '</div> </td> <td>'; if (isset($builtin_roles[$index])) { $level_empty = false; foreach ($builtin_roles[$index] as $role => $details) { $row .= '<div class="wpcf-access-roles wpcf-access-roles-builtin">'; $row .= '<span>' . $details['name'] . '</span>'; $row .= '<span>: : <a href="#" class="wpcf-access-view-caps" data-role="' . sanitize_title($role) . '">' . __('View permissions', 'wpcf-access') . '</a></span>'; $row .= '</div>'; } } if (isset($custom_roles[$index])) { $level_empty = false; foreach ($custom_roles[$index] as $role => $details) { $dropdown = '<div class="wpcf-access-custom-roles-select-wrapper js-access-custom-roles-selection">' . '<select name="roles[' . $role . ']" class="wpcf-access-custom-roles-select">'; for ($index2 = 10; $index2 > -1; $index2--) { $dropdown .= '<option value="' . $index2 . '"'; if ($index == $index2) { $dropdown .= ' selected="selected"'; } if (!$enabled) { $dropdown .= ' disabled="disabled"'; } $dropdown .= '>' . sprintf(__('Level %d', 'wpcf-access'), $index2); $dropdown .= '</option>'; } $dropdown .= '</select>'; $dropdown .= '<div class="button-group"> <button ' . 'class="wpcf-access-change-level-cancel button button-secondary">' . __('Cancel') . '</button> <button ' . 'class="wpcf-access-change-level-apply button button-primary" data-message="' . __('By changing the level, you will reset the capabilities. Are you sure you want to do this?', 'wpcf-access') . '">' . __('Apply', 'wpcf-access') . '</button> </div>' . '</div>'; $row .= '<div class="wpcf-access-roles wpcf-access-roles-custom"> <span>' . taccess_t($details['name'], $details['name']) . '</span> '; if (isset($details['capabilities']['wpcf_access_role']) || defined('WP_ACCESS_ADVANCED') && WP_ACCESS_ADVANCED == true) { $row .= '<span>: : <a href="javascript:;" class="wpcf-access-change-level">' . __('Change level', 'wpcf-access') . '</a></span>'; $row .= $dropdown; //Change Caps link $row .= ' <span>: : <a href="#" class="wpcf-access-change-caps" data-role="' . sanitize_title($role) . '">' . __('Change permissions', 'wpcf-access') . '</a></span> '; $row .= ' <span>: : <a '; if ($enabled) { $row .= 'href="#" data-role="' . sanitize_title($role) . '" class="wpcf-access-delete-role js-wpcf-access-delete-role"'; } else { $row .= 'href="javascript:;"'; } $row .= '>' . __('Delete role', 'wpcf-access') . '</a></span> '; } else { $row .= ' <span>: : <a href="#" class="wpcf-access-view-caps" data-role="' . sanitize_title($role) . '">' . __('View permissions', 'wpcf-access') . '</a></span> '; } $row .= '</div>'; } } $row .= '</td></tr>'; if (!$level_empty) { $output .= $row; } } if (isset($custom_roles['not_set'])) { $output .= '<tr><td><div class="wpcf-access-roles-level">' . __('Undefined', 'wpcf-access') . '</div></td><td>'; foreach ($custom_roles['not_set'] as $role => $details) { $dropdown = '<div class="wpcf-access-custom-roles-select-wrapper js-access-custom-roles-selection">' . '<select name="roles[' . $role . ']" class="wpcf-access-custom-roles-select">'; for ($index2 = 10; $index2 >= 0; $index2--) { $dropdown .= '<option value="' . $index2 . '"'; if ($index2 == 1) { $dropdown .= ' selected="selected"'; } if (!$enabled) { $dropdown .= ' disabled="disabled"'; } $dropdown .= '>' . sprintf(__('Level %d', 'wpcf-access'), $index2) . '</option>'; } $dropdown .= '</select> <button class="wpcf-access-change-level-apply button-primary">' . __('Apply', 'wpcf-access') . '</button> <button class="wpcf-access-change-level-cancel button-secondary">' . __('Cancel') . '</button>' . '</div>'; $output .= '<div class="wpcf-access-roles wpcf-access-roles-custom"><span>' . $details['name'] . '</span>' . ' <span>: : <a href="javascript:;"'; if ($enabled) { $output .= ' class="wpcf-access-change-level"'; } $output .= '>' . __('Change level', 'wpcf-access') . '</a></span>' . ''; if ($enabled) { $output .= $dropdown; } $output .= ' <span>: : <a '; if ($enabled) { $output .= 'href="#" data-role="' . $role . '" class="wpcf-access-delete-role js-wpcf-access-delete-role"'; } else { $output .= 'href="javascript:;"'; } $output .= '>' . __('Delete role', 'wpcf-access') . '</a></span>'; } $output .= '</div></td></tr>'; } $output .= '</tbody></table>'; $output .= '</div>'; $output .= '</div>'; return $output; }