Version Description
Download this release
Release Info
Developer | greenshady |
Plugin | Members |
Version | 0.2 |
Comparing to | |
See all releases |
Code changes from version 0.1.1 to 0.2
- admin/admin.php +295 -0
- admin/meta-box-plugin-settings.php +172 -0
- admin/meta-box-post-content-permissions.php +155 -0
- admin/role-edit.php +133 -0
- admin/role-new.php +108 -0
- admin/roles-list-table.php +241 -0
- admin/roles.php +111 -0
- admin/settings.php +180 -0
- components.php +0 -239
- components/content-permissions/comments.php +0 -1
- components/content-permissions/content-permissions.php +0 -103
- components/content-permissions/meta-box.php +0 -116
- components/edit-roles/default.php +0 -62
- components/edit-roles/edit-role-form.php +0 -157
- components/edit-roles/edit-roles.php +0 -250
- components/edit-roles/manage-roles.php +0 -160
- components/new-roles/default.php +0 -67
- components/new-roles/new-role.php +0 -126
- components/private-blog/default.php +0 -28
- components/shortcodes/shortcodes.php +0 -163
- components/template-tags/template-tags.php +0 -88
- components/widgets/login.php +0 -174
- components/widgets/users.php +0 -113
- css/admin.css +86 -0
- docs/license.txt +339 -0
- readme.css → docs/readme.css +0 -0
- docs/readme.html +250 -0
- functions.php +0 -174
- includes/admin-bar.php +36 -0
- functions-admin.php → includes/capabilities.php +244 -260
- includes/comments.php +12 -0
- includes/content-permissions.php +152 -0
- includes/deprecated.php +98 -0
- includes/functions.php +174 -0
- includes/private-site.php +56 -0
- includes/shortcodes.php +144 -0
- includes/template.php +107 -0
- includes/update.php +107 -0
- includes/widget-login-form.php +262 -0
- includes/widget-users.php +228 -0
- includes/widgets.php +40 -0
- js/admin.js +25 -0
- languages/members-en_EN.mo +0 -0
- languages/members-en_EN.po +675 -411
- languages/members.pot +675 -411
- members.php +209 -136
- readme.html +0 -376
- readme.txt +94 -63
- screenshot-1.png +0 -0
- screenshot-2.png +0 -0
- screenshot-3.png +0 -0
- screenshot-4.png +0 -0
- screenshot-5.png +0 -0
- settings.php +0 -83
admin/admin.php
ADDED
@@ -0,0 +1,295 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Handles the admin setup and functions for the plugin.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Admin
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Set up the administration functionality. */
|
10 |
+
add_action( 'admin_menu', 'members_admin_setup' );
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Sets up any functionality needed in the admin.
|
14 |
+
*
|
15 |
+
* @since 0.2.0
|
16 |
+
*/
|
17 |
+
function members_admin_setup() {
|
18 |
+
global $members;
|
19 |
+
|
20 |
+
/* Add contextual help to the "Help" tab for the plugin's pages in the admin. */
|
21 |
+
add_filter( 'contextual_help', 'members_admin_contextual_help', 10, 2 );
|
22 |
+
|
23 |
+
/* If the role manager feature is active, add its admin pages. */
|
24 |
+
if ( members_get_setting( 'role_manager' ) ) {
|
25 |
+
|
26 |
+
/**
|
27 |
+
* The "Roles" page should be shown for anyone that has the 'list_roles', 'edit_roles', or
|
28 |
+
* 'delete_roles' caps, so we're checking against all three.
|
29 |
+
*/
|
30 |
+
|
31 |
+
/* If the current user can 'edit_roles'. */
|
32 |
+
if ( current_user_can( 'edit_roles' ) )
|
33 |
+
$edit_roles_cap = 'edit_roles';
|
34 |
+
|
35 |
+
/* If the current user can 'delete_roles'. */
|
36 |
+
elseif ( current_user_can( 'delete_roles' ) )
|
37 |
+
$edit_roles_cap = 'delete_roles';
|
38 |
+
|
39 |
+
/* Else, set the cap to the default, 'list_roles'. */
|
40 |
+
else
|
41 |
+
$edit_roles_cap = 'list_roles';
|
42 |
+
|
43 |
+
/* Create the Manage Roles page. */
|
44 |
+
$members->edit_roles_page = add_submenu_page( 'users.php', esc_attr__( 'Roles', 'members' ), esc_attr__( 'Roles', 'members' ), $edit_roles_cap, 'roles', 'members_edit_roles_page' );
|
45 |
+
|
46 |
+
/* Create the New Role page. */
|
47 |
+
$members->new_roles_page = add_submenu_page( 'users.php', esc_attr__( 'Add New Role', 'members' ), esc_attr__( 'Add New Role', 'members' ), 'create_roles', 'role-new', 'members_new_role_page' );
|
48 |
+
}
|
49 |
+
|
50 |
+
/* Load post meta boxes on the post editing screen. */
|
51 |
+
add_action( 'load-post.php', 'members_admin_load_post_meta_boxes' );
|
52 |
+
add_action( 'load-post-new.php', 'members_admin_load_post_meta_boxes' );
|
53 |
+
|
54 |
+
/* Load stylesheets and scripts for our custom admin pages. */
|
55 |
+
add_action( 'admin_enqueue_scripts', 'members_admin_enqueue_style' );
|
56 |
+
add_action( 'admin_enqueue_scripts', 'members_admin_enqueue_scripts' );
|
57 |
+
}
|
58 |
+
|
59 |
+
/**
|
60 |
+
* Loads the admin stylesheet for the required pages based off the $hook_suffix parameter.
|
61 |
+
*
|
62 |
+
* @since 0.2.0
|
63 |
+
* @param string $hook_suffix The hook for the current page in the admin.
|
64 |
+
*/
|
65 |
+
function members_admin_enqueue_style( $hook_suffix ) {
|
66 |
+
|
67 |
+
$pages = array(
|
68 |
+
'users_page_roles',
|
69 |
+
'users_page_role-new',
|
70 |
+
'settings_page_members-settings'
|
71 |
+
);
|
72 |
+
|
73 |
+
if ( in_array( $hook_suffix, $pages ) )
|
74 |
+
wp_enqueue_style( 'members-admin', trailingslashit( MEMBERS_URI ) . 'css/admin.css', false, '20110525', 'screen' );
|
75 |
+
}
|
76 |
+
|
77 |
+
/**
|
78 |
+
* Loads the admin JavaScript for the required pages based off the $hook_suffix parameter.
|
79 |
+
*
|
80 |
+
* @since 0.2.0
|
81 |
+
* @param string $hook_suffix The hook for the current page in the admin.
|
82 |
+
*/
|
83 |
+
function members_admin_enqueue_scripts( $hook_suffix ) {
|
84 |
+
|
85 |
+
$pages = array(
|
86 |
+
'users_page_roles',
|
87 |
+
'users_page_role-new'
|
88 |
+
);
|
89 |
+
|
90 |
+
if ( in_array( $hook_suffix, $pages ) )
|
91 |
+
wp_enqueue_script( 'members-admin', trailingslashit( MEMBERS_URI ) . 'js/admin.js', array( 'jquery' ), '20110525', true );
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Loads meta boxes for the post editing screen.
|
96 |
+
*
|
97 |
+
* @since 0.2.0
|
98 |
+
*/
|
99 |
+
function members_admin_load_post_meta_boxes() {
|
100 |
+
|
101 |
+
/* If the content permissions component is active, load its post meta box. */
|
102 |
+
if ( members_get_setting( 'content_permissions' ) )
|
103 |
+
require_once( MEMBERS_ADMIN . 'meta-box-post-content-permissions.php' );
|
104 |
+
}
|
105 |
+
|
106 |
+
/**
|
107 |
+
* Loads the role manager main page (Roles).
|
108 |
+
*
|
109 |
+
* @since 0.1.0
|
110 |
+
*/
|
111 |
+
function members_edit_roles_page() {
|
112 |
+
require_once( MEMBERS_ADMIN . 'roles.php' );
|
113 |
+
}
|
114 |
+
|
115 |
+
/**
|
116 |
+
* Loads the New Role page.
|
117 |
+
*
|
118 |
+
* @since 0.1.0
|
119 |
+
*/
|
120 |
+
function members_new_role_page() {
|
121 |
+
require_once( MEMBERS_ADMIN . 'role-new.php' );
|
122 |
+
}
|
123 |
+
|
124 |
+
/**
|
125 |
+
* Adds custom contextual help on the plugin's admin screens. This is the text shown under the "Help" tab.
|
126 |
+
*
|
127 |
+
* @since 0.2.0
|
128 |
+
*/
|
129 |
+
function members_admin_contextual_help( $text, $screen ) {
|
130 |
+
|
131 |
+
/* Text shown on the "Members Settings" screen in the admin. */
|
132 |
+
if ( 'settings_page_members-settings' == $screen ) {
|
133 |
+
$text = '';
|
134 |
+
|
135 |
+
$text .= '<p>' . __( '<strong>Role Manager:</strong> This feature allows you to manage roles on your site by giving you the ability to create, edit, and delete any role. Note that changes to roles do not change settings for the Members plugin. You are literally changing data in your WordPress database. This plugin feature merely provides an interface for you to make these changes.', 'members' ) . '</p>';
|
136 |
+
$text .= '<p>' . __( "<strong>Content Permissions:</strong> This feature adds a meta box to the post edit screen that allows you to grant permissions for who can read the post content based on the user's role. Only users of roles with the <code>restrict_content</code> capability will be able to use this component.", 'members' ) . '</p>';
|
137 |
+
$text .= '<p>' . __( "<strong>Sidebar Widgets:</strong> This feature creates additional widgets for use in your theme's sidebars. You can access them by clicking Widgets in the menu.", 'members' ) . '</p>';
|
138 |
+
$text .= '<p>' . __( '<strong>Private Site:</strong> This feature allows you to redirect all users who are not logged into the site to the login page, creating an entirely private site. You may also replace your feed content with a custom error message.', 'members' ) . '</p>';
|
139 |
+
|
140 |
+
$text .= '<p><strong>' . __( 'For more information:', 'members' ) . '</strong></p>';
|
141 |
+
|
142 |
+
$text .= '<ul>';
|
143 |
+
$text .= '<li><a href="' . MEMBERS_URI . 'docs/readme.html">' . __( 'Documentation', 'members' ) . '</a></li>';
|
144 |
+
$text .= '<li><a href="http://themehybrid.com/support">' . __( 'Support Forums', 'members' ) . '</a></li>';
|
145 |
+
$text .= '</ul>';
|
146 |
+
}
|
147 |
+
|
148 |
+
/* Text shown on the "Roles" screens in the admin. */
|
149 |
+
elseif ( 'users_page_roles' == $screen ) {
|
150 |
+
$text = '';
|
151 |
+
|
152 |
+
/* Text for the "Edit Role" screen. */
|
153 |
+
if ( isset( $_GET['action'] ) && 'edit' == $_GET['action'] ) {
|
154 |
+
|
155 |
+
$text .= '<p>' . __( 'This screen allows you to edit the capabilities given to the role. You can tick the checkbox next to a capability to add the capability to the role. You can untick the checkbox next to a capability to remove a capability from the role. You can also add as many custom capabilities as you need in the Custom Capabilities section.', 'members' ) . '</p>';
|
156 |
+
$text .= '<p>' . __( 'Capabilities are both powerful and dangerous tools. You should not add or remove a capability to a role unless you understand what permission you are granting or removing.', 'members' ) . '</p>';
|
157 |
+
}
|
158 |
+
|
159 |
+
/* Text shown on the main "Roles" screen. */
|
160 |
+
else {
|
161 |
+
$text .= '<p>' . __( 'This screen lists all the user roles available on this site. Roles are given to users as a way to "group" them. Roles are made up of capabilities (permissions), which decide what functions users of each role can perform on the site. From this screen, you can manage these roles and their capabilities.', 'members' ) . '</p>';
|
162 |
+
$text .= '<p>' . __( 'To add a role to a user, click Users in the menu. To create a new role, click the Add New button at the top of the screen or Add New Role under the Users menu.', 'members' ) . '</p>';
|
163 |
+
}
|
164 |
+
|
165 |
+
/* Text shown for both the "Roles" and "Edit Role" screen. */
|
166 |
+
$text .= '<p><strong>' . __( 'For more information:', 'members' ) . '</strong></p>';
|
167 |
+
|
168 |
+
$text .= '<ul>';
|
169 |
+
$text .= '<li><a href="http://justintadlock.com/archives/2009/08/30/users-roles-and-capabilities-in-wordpress">' . __( 'Users, Roles, and Capabilities', 'members' ) . '</a></li>';
|
170 |
+
$text .= '<li><a href="' . MEMBERS_URI . 'docs/readme.html">' . __( 'Documentation', 'members' ) . '</a></li>';
|
171 |
+
$text .= '<li><a href="http://themehybrid.com/support">' . __( 'Support Forums', 'members' ) . '</a></li>';
|
172 |
+
$text .= '</ul>';
|
173 |
+
}
|
174 |
+
|
175 |
+
/* Text to show on the "Add New Role" screen in the admin. */
|
176 |
+
elseif ( 'users_page_role-new' == $screen || 'users_page_role' == $screen ) {
|
177 |
+
$text = '';
|
178 |
+
|
179 |
+
$text .= '<p>' . __( 'This screen allows you to create a new user role for your site. You must input a unique role name and role label. You can also grant capabilities (permissions) to the new role. Capabilities are both powerful and dangerous tools. You should not add a capability to a role unless you understand what permission you are granting.', 'members' ) . '</p>';
|
180 |
+
$text .= '<p>' . __( 'To add a role to a user, click Users in the menu. To edit roles, click Roles under the Users menu.', 'members' ) . '</p>';
|
181 |
+
|
182 |
+
$text .= '<p><strong>' . __( 'For more information:', 'members' ) . '</strong></p>';
|
183 |
+
|
184 |
+
$text .= '<ul>';
|
185 |
+
$text .= '<li><a href="http://justintadlock.com/archives/2009/08/30/users-roles-and-capabilities-in-wordpress">' . __( 'Users, Roles, and Capabilities', 'members' ) . '</a></li>';
|
186 |
+
$text .= '<li><a href="' . MEMBERS_URI . 'docs/readme.html">' . __( 'Documentation', 'members' ) . '</a></li>';
|
187 |
+
$text .= '<li><a href="http://themehybrid.com/support">' . __( 'Support Forums', 'members' ) . '</a></li>';
|
188 |
+
$text .= '</ul>';
|
189 |
+
}
|
190 |
+
|
191 |
+
/* Return the contextual help text. */
|
192 |
+
return $text;
|
193 |
+
}
|
194 |
+
|
195 |
+
/**
|
196 |
+
* Message to show when a single role has been deleted.
|
197 |
+
*
|
198 |
+
* @since 0.1.0
|
199 |
+
*/
|
200 |
+
function members_message_role_deleted() {
|
201 |
+
members_admin_message( '', __( 'Role deleted.', 'members' ) );
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* Message to show when multiple roles have been deleted (bulk delete).
|
206 |
+
*
|
207 |
+
* @since 0.1.0
|
208 |
+
*/
|
209 |
+
function members_message_roles_deleted() {
|
210 |
+
members_admin_message( '', __( 'Selected roles deleted.', 'members' ) );
|
211 |
+
}
|
212 |
+
|
213 |
+
/**
|
214 |
+
* A function for displaying messages in the admin. It will wrap the message in the appropriate <div> with the
|
215 |
+
* custom class entered. The updated class will be added if no $class is given.
|
216 |
+
*
|
217 |
+
* @since 0.1.0
|
218 |
+
* @param $class string Class the <div> should have.
|
219 |
+
* @param $message string The text that should be displayed.
|
220 |
+
*/
|
221 |
+
function members_admin_message( $class = 'updated', $message = '' ) {
|
222 |
+
|
223 |
+
echo '<div class="' . ( !empty( $class ) ? esc_attr( $class ) : 'updated' ) . '"><p><strong>' . $message . '</strong></p></div>';
|
224 |
+
}
|
225 |
+
|
226 |
+
/**
|
227 |
+
* Members plugin nonce function. This is to help with securely making sure forms have been processed
|
228 |
+
* from the correct place.
|
229 |
+
*
|
230 |
+
* @since 0.1.0
|
231 |
+
* @param $action string Additional action to add to the nonce.
|
232 |
+
*/
|
233 |
+
function members_get_nonce( $action = '' ) {
|
234 |
+
if ( $action )
|
235 |
+
return "members-component-action_{$action}";
|
236 |
+
else
|
237 |
+
return "members-plugin";
|
238 |
+
}
|
239 |
+
|
240 |
+
/**
|
241 |
+
* Function for safely deleting a role and transferring the deleted role's users to the default role. Note that
|
242 |
+
* this function can be extremely intensive. Whenever a role is deleted, it's best for the site admin to assign
|
243 |
+
* the user's of the role to a different role beforehand.
|
244 |
+
*
|
245 |
+
* @since 0.2.0
|
246 |
+
* @param string $role The name of the role to delete.
|
247 |
+
*/
|
248 |
+
function members_delete_role( $role ) {
|
249 |
+
|
250 |
+
/* Get the default role. */
|
251 |
+
$default_role = get_option( 'default_role' );
|
252 |
+
|
253 |
+
/* Don't delete the default role. Site admins should change the default before attempting to delete the role. */
|
254 |
+
if ( $role == $default_role )
|
255 |
+
return;
|
256 |
+
|
257 |
+
/* Get all users with the role to be deleted. */
|
258 |
+
$users = get_users( array( 'role' => $role ) );
|
259 |
+
|
260 |
+
/* Check if there are any users with the role we're deleting. */
|
261 |
+
if ( is_array( $users ) ) {
|
262 |
+
|
263 |
+
/* If users are found, loop through them. */
|
264 |
+
foreach ( $users as $user ) {
|
265 |
+
|
266 |
+
/* Create a new user object. */
|
267 |
+
$new_user = new WP_User( $user->ID );
|
268 |
+
|
269 |
+
/* If the user has the role, remove it and set the default. Do we need this check? */
|
270 |
+
if ( $new_user->has_cap( $role ) ) {
|
271 |
+
$new_user->remove_role( $role );
|
272 |
+
$new_user->set_role( $default_role );
|
273 |
+
}
|
274 |
+
}
|
275 |
+
}
|
276 |
+
|
277 |
+
/* Remove the role. */
|
278 |
+
remove_role( $role );
|
279 |
+
}
|
280 |
+
|
281 |
+
/**
|
282 |
+
* Returns an array of all the user meta keys in the $wpdb->usermeta table.
|
283 |
+
*
|
284 |
+
* @since 0.2.0
|
285 |
+
* @return array $keys The user meta keys.
|
286 |
+
*/
|
287 |
+
function members_get_user_meta_keys() {
|
288 |
+
global $wpdb;
|
289 |
+
|
290 |
+
$keys = $wpdb->get_col( "SELECT meta_key FROM $wpdb->usermeta GROUP BY meta_key ORDER BY meta_key" );
|
291 |
+
|
292 |
+
return $keys;
|
293 |
+
}
|
294 |
+
|
295 |
+
?>
|
admin/meta-box-plugin-settings.php
ADDED
@@ -0,0 +1,172 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Creates and adds the meta boxes to the Members Settings page in the admin.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Admin
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Add the meta boxes for the settings page on the 'add_meta_boxes' hook. */
|
10 |
+
add_action( 'add_meta_boxes', 'members_settings_page_create_meta_boxes' );
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Adds the meta boxes to the Members plugin settings page.
|
14 |
+
*
|
15 |
+
* @since 0.2.0
|
16 |
+
*/
|
17 |
+
function members_settings_page_create_meta_boxes() {
|
18 |
+
global $members;
|
19 |
+
|
20 |
+
/* Add the 'About' meta box. */
|
21 |
+
add_meta_box( 'members-about', _x( 'About', 'meta box', 'members' ), 'members_meta_box_display_about', $members->settings_page, 'side', 'default' );
|
22 |
+
|
23 |
+
/* Add the 'Donate' meta box. */
|
24 |
+
add_meta_box( 'members-donate', _x( 'Like this plugin?', 'meta box', 'members' ), 'members_meta_box_display_donate', $members->settings_page, 'side', 'high' );
|
25 |
+
|
26 |
+
/* Add the 'Support' meta box. */
|
27 |
+
add_meta_box( 'members-support', _x( 'Support', 'meta box', 'members' ), 'members_meta_box_display_support', $members->settings_page, 'side', 'low' );
|
28 |
+
|
29 |
+
/* Add the 'Role Manager' meta box. */
|
30 |
+
add_meta_box( 'members-role-manager', _x( 'Role Manager', 'meta box', 'members' ), 'members_meta_box_display_role_manager', $members->settings_page, 'normal', 'high' );
|
31 |
+
|
32 |
+
/* Add the 'Content Permissions' meta box. */
|
33 |
+
add_meta_box( 'members-content-permissions', _x( 'Content Permissions', 'meta box', 'members' ), 'members_meta_box_display_content_permissions', $members->settings_page, 'normal', 'high' );
|
34 |
+
|
35 |
+
/* Add the 'Sidebar Widgets' meta box. */
|
36 |
+
add_meta_box( 'members-widgets', _x( 'Sidebar Widgets', 'meta box', 'members' ), 'members_meta_box_display_widgets', $members->settings_page, 'normal', 'high' );
|
37 |
+
|
38 |
+
/* Add the 'Private Site' meta box. */
|
39 |
+
add_meta_box( 'members-private-site', _x( 'Private Site', 'meta box', 'members' ), 'members_meta_box_display_private_site', $members->settings_page, 'normal', 'high' );
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Displays the about plugin meta box.
|
44 |
+
*
|
45 |
+
* @since 0.2.0
|
46 |
+
*/
|
47 |
+
function members_meta_box_display_about( $object, $box ) {
|
48 |
+
|
49 |
+
$plugin_data = get_plugin_data( MEMBERS_DIR . 'members.php' ); ?>
|
50 |
+
|
51 |
+
<p>
|
52 |
+
<strong><?php _e( 'Version:', 'members' ); ?></strong> <?php echo $plugin_data['Version']; ?>
|
53 |
+
</p>
|
54 |
+
<p>
|
55 |
+
<strong><?php _e( 'Description:', 'members' ); ?></strong>
|
56 |
+
</p>
|
57 |
+
<p>
|
58 |
+
<?php echo $plugin_data['Description']; ?>
|
59 |
+
</p>
|
60 |
+
<?php }
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Displays the donation meta box.
|
64 |
+
*
|
65 |
+
* @since 0.2.0
|
66 |
+
*/
|
67 |
+
function members_meta_box_display_donate( $object, $box ) { ?>
|
68 |
+
|
69 |
+
<p><?php _e( "Here's how you can give back:", 'members' ); ?></p>
|
70 |
+
|
71 |
+
<ul>
|
72 |
+
<li><a href="http://wordpress.org/extend/plugins/members" title="<?php esc_attr_e( 'Members on the WordPress plugin repository', 'members' ); ?>"><?php _e( 'Give the plugin a good rating.', 'members' ); ?></a></li>
|
73 |
+
<li><a href="https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3687060" title="<?php esc_attr_e( 'Donate via PayPal', 'members' ); ?>"><?php _e( 'Donate a few dollars.', 'members' ); ?></a></li>
|
74 |
+
<li><a href="http://amzn.com/w/31ZQROTXPR9IS" title="<?php esc_attr_e( "Justin Tadlock's Amazon Wish List", 'members' ); ?>"><?php _e( 'Get me something from my wish list.', 'members' ); ?></a></li>
|
75 |
+
</ul>
|
76 |
+
<?php
|
77 |
+
}
|
78 |
+
|
79 |
+
/**
|
80 |
+
* Displays the support meta box.
|
81 |
+
*
|
82 |
+
* @since 0.2.0
|
83 |
+
*/
|
84 |
+
function members_meta_box_display_support( $object, $box ) { ?>
|
85 |
+
<p>
|
86 |
+
<?php printf( __( 'Support for this plugin is provided via the support forums at %1$s. If you need any help using it, please ask your support questions there.', 'members' ), '<a href="http://themehybrid.com/support" title="' . esc_attr__( 'Theme Hybrid Support Forums', 'members' ) . '">' . __( 'Theme Hybrid', 'members' ) . '</a>' ); ?>
|
87 |
+
</p>
|
88 |
+
<?php }
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Displays the role manager meta box.
|
92 |
+
*
|
93 |
+
* @since 0.2.0
|
94 |
+
*/
|
95 |
+
function members_meta_box_display_role_manager( $object, $box ) { ?>
|
96 |
+
|
97 |
+
<p>
|
98 |
+
<input type="checkbox" name="members_settings[role_manager]" id="members_settings-role_manager" value="1" <?php checked( 1, members_get_setting( 'role_manager' ) ); ?> />
|
99 |
+
<label for="members_settings-role_manager"><?php _e( 'Enable the role manager.', 'members' ); ?></label>
|
100 |
+
</p>
|
101 |
+
<p>
|
102 |
+
<span class="howto"><?php _e( 'Your roles and capabilities will not revert back to their previous settings after deactivating or uninstalling this plugin, so use this feature wisely.', 'members' ); ?></span>
|
103 |
+
</p>
|
104 |
+
|
105 |
+
<?php }
|
106 |
+
|
107 |
+
/**
|
108 |
+
* Displays the content permissions meta box.
|
109 |
+
*
|
110 |
+
* @since 0.2.0
|
111 |
+
*/
|
112 |
+
function members_meta_box_display_content_permissions( $object, $box ) { ?>
|
113 |
+
|
114 |
+
<p>
|
115 |
+
<input type="checkbox" name="members_settings[content_permissions]" id="members_settings-content_permissions" value="1" <?php checked( 1, members_get_setting( 'content_permissions' ) ); ?> />
|
116 |
+
<label for="members_settings-content_permissions"><?php _e( 'Enable the content permissions feature.', 'members' ); ?></label>
|
117 |
+
</p>
|
118 |
+
|
119 |
+
<p>
|
120 |
+
<label for="members_settings-content_permissions_error"><?Php _e( 'Default post error message:', 'members' ); ?></label>
|
121 |
+
<textarea name="members_settings[content_permissions_error]" id="members_settings-content_permissions_error"><?php echo esc_textarea( members_get_setting( 'content_permissions_error' ) ); ?></textarea>
|
122 |
+
<label for="members_settings-content_permissions_error"><?php _e( 'You can use <abbr title="Hypertext Markup Language">HTML</abbr> and/or shortcodes to create a custom error message for users that don\'t have permission to view posts.', 'members' ); ?></label>
|
123 |
+
</p>
|
124 |
+
|
125 |
+
<?php }
|
126 |
+
|
127 |
+
/**
|
128 |
+
* Displays the widgets meta box.
|
129 |
+
*
|
130 |
+
* @since 0.2.0
|
131 |
+
*/
|
132 |
+
function members_meta_box_display_widgets( $object, $box ) { ?>
|
133 |
+
|
134 |
+
<p>
|
135 |
+
<input type="checkbox" name="members_settings[login_form_widget]" id="members_settings-login_form_widget" value="1" <?php checked( 1, members_get_setting( 'login_form_widget' ) ); ?> />
|
136 |
+
<label for="members_settings-login_form_widget"><?php _e( 'Enable the login form widget.', 'members' ); ?></label>
|
137 |
+
</p>
|
138 |
+
|
139 |
+
<p>
|
140 |
+
<input type="checkbox" name="members_settings[users_widget]" id="members_settings-users_widget" value="1" <?php checked( 1, members_get_setting( 'users_widget' ) ); ?> />
|
141 |
+
<label for="members_settings-users_widget"><?php _e( 'Enable the users widget.', 'members' ); ?></label>
|
142 |
+
</p>
|
143 |
+
|
144 |
+
<?php }
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Displays the private site meta box.
|
148 |
+
*
|
149 |
+
* @since 0.2.0
|
150 |
+
*/
|
151 |
+
function members_meta_box_display_private_site( $object, $box ) { ?>
|
152 |
+
|
153 |
+
<p>
|
154 |
+
<input type="checkbox" name="members_settings[private_blog]" id="members_settings-private_blog" value="1" <?php checked( 1, members_get_setting( 'private_blog' ) ); ?> />
|
155 |
+
<label for="members_settings-private_blog"><?php _e( 'Redirect all logged-out users to the login page before allowing them to view the site.', 'members' ); ?></label>
|
156 |
+
</p>
|
157 |
+
|
158 |
+
<p>
|
159 |
+
<input type="checkbox" name="members_settings[private_feed]" id="members_settings-private_feed" value="1" <?php checked( 1, members_get_setting( 'private_feed' ) ); ?> />
|
160 |
+
<label for="members_settings-private_feed"><?php _e( 'Show error message for feed items.', 'members' ); ?></label>
|
161 |
+
</p>
|
162 |
+
|
163 |
+
<p>
|
164 |
+
<label for="members_settings-private_feed_error"><?php _e( 'Feed error message:', 'members' ); ?></label>
|
165 |
+
<textarea name="members_settings[private_feed_error]" id="members_settings-private_feed_error"><?php echo esc_textarea( members_get_setting( 'private_feed_error' ) ); ?></textarea>
|
166 |
+
<br />
|
167 |
+
<label for="members_settings-private_feed_error"><?php _e( 'You can use <abbr title="Hypertext Markup Language">HTML</abbr> and/or shortcodes to create a custom error message to display instead of feed item content.', 'members' ); ?></label>
|
168 |
+
</p>
|
169 |
+
|
170 |
+
<?php }
|
171 |
+
|
172 |
+
?>
|
admin/meta-box-post-content-permissions.php
ADDED
@@ -0,0 +1,155 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @todo Add inline styles the the admin.css stylesheet.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Admin
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Adds the content permissions meta box to the 'add_meta_boxes' hook. */
|
10 |
+
add_action( 'add_meta_boxes', 'members_content_permissions_create_meta_box' );
|
11 |
+
|
12 |
+
/* Saves the content permissions metabox data to a custom field. */
|
13 |
+
add_action( 'save_post', 'members_content_permissions_save_meta', 10, 2 );
|
14 |
+
|
15 |
+
/**
|
16 |
+
* @since 0.1.0
|
17 |
+
*/
|
18 |
+
function members_content_permissions_create_meta_box() {
|
19 |
+
|
20 |
+
/* Only add the meta box if the current user has the 'restrict_content' capability. */
|
21 |
+
if ( current_user_can( 'restrict_content' ) ) {
|
22 |
+
|
23 |
+
/* Get all available public post types. */
|
24 |
+
$post_types = get_post_types( array( 'public' => true ), 'objects' );
|
25 |
+
|
26 |
+
/* Loop through each post type, adding the meta box for each type's post editor screen. */
|
27 |
+
foreach ( $post_types as $type )
|
28 |
+
add_meta_box( 'content-permissions-meta-box', __( 'Content Permissions', 'members' ), 'members_content_permissions_meta_box', $type->name, 'advanced', 'high' );
|
29 |
+
}
|
30 |
+
}
|
31 |
+
|
32 |
+
/**
|
33 |
+
* @since 0.1.0
|
34 |
+
*/
|
35 |
+
function members_content_permissions_meta_box( $object, $box ) {
|
36 |
+
global $wp_roles;
|
37 |
+
|
38 |
+
/* Get the roles saved for the post. */
|
39 |
+
$roles = get_post_meta( $object->ID, '_members_access_role', false );
|
40 |
+
|
41 |
+
/* Convert old post meta to the new system if no roles were found. */
|
42 |
+
if ( empty( $roles ) )
|
43 |
+
$roles = members_convert_old_post_meta( $object->ID );
|
44 |
+
?>
|
45 |
+
|
46 |
+
<input type="hidden" name="content_permissions_meta_nonce" value="<?php echo wp_create_nonce( plugin_basename( __FILE__ ) ); ?>" />
|
47 |
+
|
48 |
+
<div style="overflow: hidden; margin-left: 5px;">
|
49 |
+
|
50 |
+
<p>
|
51 |
+
<?php _e( "Limit access to this post's content to users of the selected roles.", 'members' ); ?>
|
52 |
+
</p>
|
53 |
+
|
54 |
+
<?php
|
55 |
+
|
56 |
+
/* Loop through each of the available roles. */
|
57 |
+
foreach ( $wp_roles->role_names as $role => $name ) {
|
58 |
+
$checked = false;
|
59 |
+
|
60 |
+
/* If the role has been selected, make sure it's checked. */
|
61 |
+
if ( is_array( $roles ) && in_array( $role, $roles ) )
|
62 |
+
$checked = ' checked="checked" '; ?>
|
63 |
+
|
64 |
+
<div style="width: 32%; float: left; margin: 0 0 5px 0;">
|
65 |
+
<label for="members_access_role-<?php echo $role; ?>">
|
66 |
+
<input type="checkbox" name="members_access_role[<?php echo $role; ?>]" id="members_access_role-<?php echo $role; ?>" <?php echo $checked; ?> value="<?php echo $role; ?>" />
|
67 |
+
<?php echo esc_html( $name ); ?>
|
68 |
+
</label>
|
69 |
+
</div>
|
70 |
+
<?php } ?>
|
71 |
+
|
72 |
+
</div>
|
73 |
+
|
74 |
+
<p style="clear: left;">
|
75 |
+
<span class="howto"><?php printf( __( 'If no roles are selected, everyone can view the content. The post author, any users who can edit this post, and users with the %s capability can view the content regardless of role.', 'members' ), '<code>restrict_content</code>' ); ?></span>
|
76 |
+
</p>
|
77 |
+
|
78 |
+
<p>
|
79 |
+
<label for="members_access_error"><?php _e( 'Custom error messsage:', 'members' ); ?></label>
|
80 |
+
<textarea id="members_access_error" name="members_access_error" cols="60" rows="2" tabindex="30" style="width: 99%;"><?php echo esc_html( get_post_meta( $object->ID, '_members_access_error', true ) ); ?></textarea>
|
81 |
+
<br />
|
82 |
+
<span class="howto"><?php _e( 'Message shown to users that do no have permission to view the post.', 'members' ); ?></span>
|
83 |
+
</p>
|
84 |
+
|
85 |
+
<?php
|
86 |
+
}
|
87 |
+
|
88 |
+
/**
|
89 |
+
* @since 0.1.0
|
90 |
+
*/
|
91 |
+
function members_content_permissions_save_meta( $post_id, $post ) {
|
92 |
+
global $wp_roles;
|
93 |
+
|
94 |
+
/* Verify the nonce. */
|
95 |
+
if ( !isset( $_POST['content_permissions_meta_nonce'] ) || !wp_verify_nonce( $_POST['content_permissions_meta_nonce'], plugin_basename( __FILE__ ) ) )
|
96 |
+
return false;
|
97 |
+
|
98 |
+
if ( defined('DOING_AUTOSAVE') && DOING_AUTOSAVE ) return;
|
99 |
+
if ( defined('DOING_AJAX') && DOING_AJAX ) return;
|
100 |
+
if ( defined('DOING_CRON') && DOING_CRON ) return;
|
101 |
+
|
102 |
+
/* Get the post type object. */
|
103 |
+
$post_type = get_post_type_object( $post->post_type );
|
104 |
+
|
105 |
+
/* Check if the current user has permission to edit the post. */
|
106 |
+
if ( !current_user_can( $post_type->cap->edit_post, $post_id ) )
|
107 |
+
return $post_id;
|
108 |
+
|
109 |
+
/* Don't save if the post is only a revision. */
|
110 |
+
if ( 'revision' == $post->post_type )
|
111 |
+
return;
|
112 |
+
|
113 |
+
$meta_values = get_post_meta( $post_id, '_members_access_role', false );
|
114 |
+
|
115 |
+
if ( isset( $_POST['members_access_role'] ) && is_array( $_POST['members_access_role'] ) ) {
|
116 |
+
|
117 |
+
foreach ( $_POST['members_access_role'] as $role ) {
|
118 |
+
if ( !in_array( $role, $meta_values ) )
|
119 |
+
add_post_meta( $post_id, '_members_access_role', $role, false );
|
120 |
+
}
|
121 |
+
|
122 |
+
foreach ( $wp_roles->role_names as $role => $name ) {
|
123 |
+
if ( !in_array( $role, $_POST['members_access_role'] ) && in_array( $role, $meta_values ) )
|
124 |
+
delete_post_meta( $post_id, '_members_access_role', $role );
|
125 |
+
}
|
126 |
+
}
|
127 |
+
elseif ( !empty( $meta_values ) ) {
|
128 |
+
delete_post_meta( $post_id, '_members_access_role' );
|
129 |
+
}
|
130 |
+
|
131 |
+
$meta = array(
|
132 |
+
'_members_access_error' => esc_html( $_POST['members_access_error'] )
|
133 |
+
);
|
134 |
+
|
135 |
+
foreach ( $meta as $meta_key => $new_meta_value ) {
|
136 |
+
|
137 |
+
/* Get the meta value of the custom field key. */
|
138 |
+
$meta_value = get_post_meta( $post_id, $meta_key, true );
|
139 |
+
|
140 |
+
/* If a new meta value was added and there was no previous value, add it. */
|
141 |
+
if ( $new_meta_value && '' == $meta_value )
|
142 |
+
add_post_meta( $post_id, $meta_key, $new_meta_value, true );
|
143 |
+
|
144 |
+
/* If the new meta value does not match the old value, update it. */
|
145 |
+
elseif ( $new_meta_value && $new_meta_value != $meta_value )
|
146 |
+
update_post_meta( $post_id, $meta_key, $new_meta_value );
|
147 |
+
|
148 |
+
/* If there is no new meta value but an old value exists, delete it. */
|
149 |
+
elseif ( '' == $new_meta_value && $meta_value )
|
150 |
+
delete_post_meta( $post_id, $meta_key, $meta_value );
|
151 |
+
}
|
152 |
+
|
153 |
+
}
|
154 |
+
|
155 |
+
?>
|
admin/role-edit.php
ADDED
@@ -0,0 +1,133 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* This file handles the display of the edit role form and the updates submitted by the user for the role.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Admin
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Get the current role object to edit. */
|
10 |
+
$role = get_role( esc_attr( strip_tags( $_GET['role'] ) ) );
|
11 |
+
|
12 |
+
/* Get all the capabilities */
|
13 |
+
$capabilities = members_get_capabilities();
|
14 |
+
|
15 |
+
/* Check if the current user can edit roles and the form has been submitted. */
|
16 |
+
if ( current_user_can( 'edit_roles' ) && ( isset( $_POST['role-caps'] ) || isset( $_POST['new-cap'] ) ) ) {
|
17 |
+
|
18 |
+
/* Verify the nonce. */
|
19 |
+
check_admin_referer( members_get_nonce( 'edit-roles' ) );
|
20 |
+
|
21 |
+
/* Set the $role_updated variable to true. */
|
22 |
+
$role_updated = true;
|
23 |
+
|
24 |
+
/* Loop through all available capabilities. */
|
25 |
+
foreach ( $capabilities as $cap ) {
|
26 |
+
|
27 |
+
/* Get the posted capability. */
|
28 |
+
$posted_cap = isset( $_POST['role-caps']["{$role->name}-{$cap}"] ) ? $_POST['role-caps']["{$role->name}-{$cap}"] : false;
|
29 |
+
|
30 |
+
/* If the role doesn't have the capability and it was selected, add it. */
|
31 |
+
if ( !$role->has_cap( $cap ) && !empty( $posted_cap ) )
|
32 |
+
$role->add_cap( $cap );
|
33 |
+
|
34 |
+
/* If the role has the capability and it wasn't selected, remove it. */
|
35 |
+
elseif ( $role->has_cap( $cap ) && empty( $posted_cap ) )
|
36 |
+
$role->remove_cap( $cap );
|
37 |
+
|
38 |
+
} // End loop through existing capabilities
|
39 |
+
|
40 |
+
/* If new caps were added and are in an array, we need to add them. */
|
41 |
+
if ( !empty( $_POST['new-cap'] ) && is_array( $_POST['new-cap'] ) ) {
|
42 |
+
|
43 |
+
/* Loop through each new capability from the edit roles form. */
|
44 |
+
foreach ( $_POST['new-cap'] as $new_cap ) {
|
45 |
+
|
46 |
+
/* Sanitize the new capability to remove any unwanted characters. */
|
47 |
+
$new_cap = sanitize_key( $new_cap );
|
48 |
+
|
49 |
+
/* Run one more check to make sure the new capability exists. Add the cap to the role. */
|
50 |
+
if ( !empty( $new_cap ) && !$role->has_cap( $new_cap ) )
|
51 |
+
$role->add_cap( $new_cap );
|
52 |
+
|
53 |
+
} // End loop through new capabilities
|
54 |
+
|
55 |
+
/* If new caps are added, we need to reset the $capabilities array. */
|
56 |
+
$capabilities = members_get_capabilities();
|
57 |
+
|
58 |
+
} // End check for new capabilities
|
59 |
+
|
60 |
+
} // End check for form submission ?>
|
61 |
+
|
62 |
+
<div class="wrap">
|
63 |
+
|
64 |
+
<?php screen_icon(); ?>
|
65 |
+
|
66 |
+
<h2>
|
67 |
+
<?php _e( 'Edit Role', 'members' ); ?>
|
68 |
+
<?php if ( current_user_can( 'create_roles' ) ) echo '<a href="' . admin_url( 'users.php?page=role-new' ) . '" class="add-new-h2">' . __( 'Add New', 'members' ) . '</a>'; ?>
|
69 |
+
</h2>
|
70 |
+
|
71 |
+
<?php if ( !empty( $role_updated ) ) echo '<div class="updated"><p><strong>' . __( 'Role updated.', 'members' ) . '</strong></p><p><a href="' . admin_url( 'users.php?page=roles' ) . '">' . __( '← Back to Roles', 'members' ) . '</a></p></div>'; ?>
|
72 |
+
|
73 |
+
<?php do_action( 'members_pre_edit_role_form' ); //Available pre-form hook for displaying messages. ?>
|
74 |
+
|
75 |
+
<div id="poststuff">
|
76 |
+
|
77 |
+
<form name="form0" method="post" action="<?php echo admin_url( esc_url( "users.php?page=roles&action=edit&role={$role->name}" ) ); ?>">
|
78 |
+
|
79 |
+
<?php wp_nonce_field( members_get_nonce( 'edit-roles' ) ); ?>
|
80 |
+
|
81 |
+
<table class="form-table">
|
82 |
+
|
83 |
+
<tr>
|
84 |
+
<th>
|
85 |
+
<?php _e( 'Role Name', 'members' ); ?>
|
86 |
+
</th>
|
87 |
+
<td>
|
88 |
+
<input type="text" disabled="disabled" readonly="readonly" value="<?php echo esc_attr( $role->name ); ?>" />
|
89 |
+
</td>
|
90 |
+
</tr>
|
91 |
+
|
92 |
+
<tr>
|
93 |
+
<th>
|
94 |
+
<?php _e( 'Capabilities', 'members' ); ?>
|
95 |
+
</th>
|
96 |
+
|
97 |
+
<td>
|
98 |
+
<?php $i = -1; foreach ( $capabilities as $cap ) { ?>
|
99 |
+
|
100 |
+
<div class="members-role-checkbox <?php if ( ++$i % 3 == 0 ) echo 'clear'; ?>">
|
101 |
+
<?php $has_cap = ( $role->has_cap( $cap ) ? true : false ); ?>
|
102 |
+
<input type="checkbox" name="<?php echo esc_attr( "role-caps[{$role->name}-{$cap}]" ); ?>" id="<?php echo esc_attr( "{$role->name}-{$cap}" ); ?>" <?php checked( true, $has_cap ); ?> value="true" />
|
103 |
+
<label for="<?php echo esc_attr( "{$role->name}-{$cap}" ); ?>" class="<?php echo ( $has_cap ? 'has-cap' : 'has-cap-not' ); ?>"><?php echo $cap; ?></label>
|
104 |
+
</div>
|
105 |
+
|
106 |
+
<?php } // Endforeach ?>
|
107 |
+
</td>
|
108 |
+
</tr>
|
109 |
+
|
110 |
+
<tr>
|
111 |
+
<th>
|
112 |
+
<?php _e( 'Custom Capabilities', 'members' ); ?>
|
113 |
+
</th>
|
114 |
+
<td>
|
115 |
+
|
116 |
+
<p class="members-add-new-cap-wrap clear hide-if-no-js">
|
117 |
+
<a class="button-secondary" id="members-add-new-cap"><?php _e( 'Add New Capability', 'members' ); ?></a>
|
118 |
+
</p>
|
119 |
+
<p class="new-cap-holder">
|
120 |
+
<input type="text" class="new-cap hide-if-js" name="new-cap[]" value="" size="20" />
|
121 |
+
</p>
|
122 |
+
</td>
|
123 |
+
</tr>
|
124 |
+
|
125 |
+
</table><!-- .form-table -->
|
126 |
+
|
127 |
+
<?php submit_button( esc_attr__( 'Update Role', 'members' ) ); ?>
|
128 |
+
|
129 |
+
</form>
|
130 |
+
|
131 |
+
</div><!-- #poststuff -->
|
132 |
+
|
133 |
+
</div><!-- .wrap -->
|
admin/role-new.php
ADDED
@@ -0,0 +1,108 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Displays and processes the 'Add New Role' page in the admin.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Admin
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Check if the current user can create roles and the form has been submitted. */
|
10 |
+
if ( current_user_can( 'create_roles' ) && isset( $_POST['role-name'] ) && isset( $_POST['role-label'] ) ) {
|
11 |
+
|
12 |
+
/* Verify the nonce. */
|
13 |
+
check_admin_referer( members_get_nonce( 'new-role' ) );
|
14 |
+
|
15 |
+
/* Check if any capabilities were selected. */
|
16 |
+
if ( !empty( $_POST['capabilities'] ) && is_array( $_POST['capabilities'] ) )
|
17 |
+
$new_role_caps = array_map( 'esc_attr', $_POST['capabilities'] );
|
18 |
+
|
19 |
+
/* If no capabilities were selected, set the variable to null. */
|
20 |
+
else
|
21 |
+
$new_role_caps = null;
|
22 |
+
|
23 |
+
/* Check if both a role name and role were submitted. */
|
24 |
+
if ( !empty( $_POST['role-name'] ) && !empty( $_POST['role-label'] ) ) {
|
25 |
+
|
26 |
+
/* Sanitize the new role, removing any unwanted characters. */
|
27 |
+
$new_role_name = sanitize_key( $_POST['role-name'] );
|
28 |
+
|
29 |
+
/* Sanitize the new role name/label. We just want to strip any tags here. */
|
30 |
+
$new_role_label = strip_tags( $_POST['role-label'] );
|
31 |
+
|
32 |
+
/* Add a new role with the data input. */
|
33 |
+
if ( !empty( $new_role_name ) && !empty( $new_role_label ) )
|
34 |
+
$new_role_added = add_role( $new_role_name, $new_role_label, $new_role_caps );
|
35 |
+
|
36 |
+
} // End check for role and role name
|
37 |
+
|
38 |
+
} // End check for form submit ?>
|
39 |
+
|
40 |
+
<div class="wrap">
|
41 |
+
|
42 |
+
<?php screen_icon(); ?>
|
43 |
+
|
44 |
+
<h2><?php _e( 'Add New Role', 'members' ); ?></h2>
|
45 |
+
|
46 |
+
<?php if ( !empty( $new_role_added ) ) members_admin_message( '', sprintf( __( 'The %s role has been created.', 'members' ), esc_html( $_POST['role-name'] ) ) ); ?>
|
47 |
+
|
48 |
+
<?php do_action( 'members_pre_new_role_form' ); // Available action hook for displaying messages. ?>
|
49 |
+
|
50 |
+
<div id="poststuff">
|
51 |
+
|
52 |
+
<form name="form0" method="post" action="<?php echo admin_url( 'users.php?page=role-new' ); ?>">
|
53 |
+
|
54 |
+
<?php wp_nonce_field( members_get_nonce( 'new-role' ) ); ?>
|
55 |
+
|
56 |
+
<table class="form-table">
|
57 |
+
|
58 |
+
<tr>
|
59 |
+
<th>
|
60 |
+
<label for="role-name"><?php _e( 'Role Name', 'members' ); ?></label>
|
61 |
+
</th>
|
62 |
+
<td>
|
63 |
+
<input type="text" id="role-name" name="role-name" value="" size="30" />
|
64 |
+
<br />
|
65 |
+
<label for="role-name"><?php _e( "<strong>Required:</strong> The role name should be unique and contain only alphanumeric characters and underscores.", 'members' ); ?></label>
|
66 |
+
</td>
|
67 |
+
</tr>
|
68 |
+
|
69 |
+
<tr>
|
70 |
+
<th>
|
71 |
+
<label for="role-label"><?php _e( 'Role Label', 'members' ); ?></label>
|
72 |
+
</th>
|
73 |
+
<td>
|
74 |
+
<input type="text" id="role-label" name="role-label" value="" size="30" />
|
75 |
+
<br />
|
76 |
+
<label for="role-label"><?php _e( '<strong>Required:</strong> The role label is used to represent your role in the WordPress admin.', 'members' ); ?></label>
|
77 |
+
</td>
|
78 |
+
</tr>
|
79 |
+
|
80 |
+
<tr>
|
81 |
+
<th>
|
82 |
+
<?php _e( 'Role Capabilities', 'members' ); ?>
|
83 |
+
</th>
|
84 |
+
<td>
|
85 |
+
<p>
|
86 |
+
<?php _e( '<strong>Optional:</strong> Select the capabilities this role should have. These may be updated later.', 'members' ); ?>
|
87 |
+
</p>
|
88 |
+
|
89 |
+
<?php $i = -1; foreach ( members_get_capabilities() as $cap ) { ?>
|
90 |
+
|
91 |
+
<div class="members-role-checkbox <?php if ( ++$i % 3 == 0 ) echo 'clear'; ?>">
|
92 |
+
<input type="checkbox" name="capabilities[<?php echo esc_attr( $cap ); ?>]" id="capabilities-<?php echo esc_attr( $cap ); ?>" <?php checked( true, in_array( $cap, members_new_role_default_capabilities() ) ); ?> value="true" />
|
93 |
+
<label for="capabilities-<?php echo esc_attr( $cap ); ?>" class="<?php echo ( in_array( $cap, members_new_role_default_capabilities() ) ? 'has-cap' : 'has-cap-not' ); ?>"><?php echo $cap; ?></label>
|
94 |
+
</div>
|
95 |
+
|
96 |
+
<?php } // Endforeach ?>
|
97 |
+
</td>
|
98 |
+
</tr>
|
99 |
+
|
100 |
+
</table><!-- .form-table -->
|
101 |
+
|
102 |
+
<?php submit_button( esc_attr__( 'Add Role', 'members' ) ); ?>
|
103 |
+
|
104 |
+
</form>
|
105 |
+
|
106 |
+
</div><!-- #poststuff -->
|
107 |
+
|
108 |
+
</div><!-- .poststuff -->
|
admin/roles-list-table.php
ADDED
@@ -0,0 +1,241 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* This file handles the display of the 'Roles' page in the admin.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Admin
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Get the global $wp_roles variable. */
|
10 |
+
global $wp_roles;
|
11 |
+
|
12 |
+
/* Get a count of all the roles available. */
|
13 |
+
$roles_count = members_count_roles();
|
14 |
+
|
15 |
+
/* Get all of the active and inactive roles. */
|
16 |
+
$active_roles = members_get_active_roles();
|
17 |
+
$inactive_roles = members_get_inactive_roles();
|
18 |
+
|
19 |
+
/* Get a count of the active and inactive roles. */
|
20 |
+
$active_roles_count = count( $active_roles );
|
21 |
+
$inactive_roles_count = count( $inactive_roles );
|
22 |
+
|
23 |
+
/* If we're viewing 'active' or 'inactive' roles. */
|
24 |
+
if ( !empty( $_GET['role_status'] ) && in_array( $_GET['role_status'], array( 'active', 'inactive' ) ) ) {
|
25 |
+
|
26 |
+
/* Get the role status ('active' or 'inactive'). */
|
27 |
+
$role_status = esc_attr( $_GET['role_status'] );
|
28 |
+
|
29 |
+
/* Set up the roles array. */
|
30 |
+
$list_roles = ( ( 'active' == $role_status ) ? $active_roles : $inactive_roles );
|
31 |
+
|
32 |
+
/* Set the current page URL. */
|
33 |
+
$current_page = admin_url( "users.php?page=roles&role_status={$role_status}" );
|
34 |
+
}
|
35 |
+
|
36 |
+
/* If viewing the regular role list table. */
|
37 |
+
else {
|
38 |
+
|
39 |
+
/* Get the role status ('active' or 'inactive'). */
|
40 |
+
$role_status = 'all';
|
41 |
+
|
42 |
+
/* Set up the roles array. */
|
43 |
+
$list_roles = $wp_roles->role_names;
|
44 |
+
|
45 |
+
/* Set the current page URL. */
|
46 |
+
$current_page = $current_page = admin_url( 'users.php?page=roles' );
|
47 |
+
}
|
48 |
+
|
49 |
+
/* Sort the roles array into alphabetical order. */
|
50 |
+
ksort( $list_roles ); ?>
|
51 |
+
|
52 |
+
<div class="wrap">
|
53 |
+
|
54 |
+
<?php screen_icon(); ?>
|
55 |
+
|
56 |
+
<h2>
|
57 |
+
<?php _e( 'Roles', 'members' ); ?>
|
58 |
+
<?php if ( current_user_can( 'create_roles' ) ) echo '<a href="' . admin_url( 'users.php?page=role-new' ) . '" class="add-new-h2">' . __( 'Add New', 'members' ) . '</a>'; ?>
|
59 |
+
</h2>
|
60 |
+
|
61 |
+
<?php do_action( 'members_pre_edit_roles_form' ); // Available action hook for displaying messages. ?>
|
62 |
+
|
63 |
+
<div id="poststuff">
|
64 |
+
|
65 |
+
<form id="roles" action="<?php echo $current_page; ?>" method="post">
|
66 |
+
|
67 |
+
<?php wp_nonce_field( members_get_nonce( 'edit-roles' ) ); ?>
|
68 |
+
|
69 |
+
<ul class="subsubsub">
|
70 |
+
<li><a <?php if ( 'all' == $role_status ) echo 'class="current"'; ?> href="<?php echo admin_url( esc_url( 'users.php?page=roles' ) ); ?>"><?php _e( 'All', 'members' ); ?> <span class="count">(<span id="all_count"><?php echo $roles_count; ?></span>)</span></a> | </li>
|
71 |
+
<li><a <?php if ( 'active' == $role_status ) echo 'class="current"'; ?> href="<?php echo admin_url( esc_url( 'users.php?page=roles&role_status=active' ) ); ?>"><?php _e( 'Has Users', 'members' ); ?> <span class="count">(<span id="active_count"><?php echo $active_roles_count; ?></span>)</span></a> | </li>
|
72 |
+
<li><a <?php if ( 'inactive' == $role_status ) echo 'class="current"'; ?> href="<?php echo admin_url( esc_url( 'users.php?page=roles&role_status=inactive' ) ); ?>"><?php _e( 'No Users', 'members' ); ?> <span class="count">(<span id="inactive_count"><?php echo $inactive_roles_count; ?></span>)</span></a></li>
|
73 |
+
</ul><!-- .subsubsub -->
|
74 |
+
|
75 |
+
<div class="tablenav">
|
76 |
+
|
77 |
+
<?php if ( current_user_can( 'delete_roles' ) ) { ?>
|
78 |
+
|
79 |
+
<div class="alignleft actions">
|
80 |
+
|
81 |
+
<select name="bulk-action">
|
82 |
+
|
83 |
+
<option value="" selected="selected"><?php _e( 'Bulk Actions', 'members' ); ?></option>
|
84 |
+
|
85 |
+
<?php if ( current_user_can( 'delete_roles' ) ) { ?>
|
86 |
+
<option value="delete"><?php esc_html_e( 'Delete', 'members' ); ?></option>
|
87 |
+
<?php } ?>
|
88 |
+
|
89 |
+
</select>
|
90 |
+
|
91 |
+
<?php submit_button( esc_attr__( 'Apply', 'members' ), 'button-secondary action', 'roles-bulk-action', false ); ?>
|
92 |
+
|
93 |
+
</div><!-- .alignleft .actions -->
|
94 |
+
|
95 |
+
<?php } // End cap check ?>
|
96 |
+
|
97 |
+
<div class='tablenav-pages one-page'>
|
98 |
+
<span class="displaying-num"><?php printf( _n( '%s item', '%s items', count( $list_roles ), 'members' ), count( $list_roles ) ); ?></span>
|
99 |
+
</div>
|
100 |
+
|
101 |
+
<br class="clear" />
|
102 |
+
|
103 |
+
</div><!-- .tablenav -->
|
104 |
+
|
105 |
+
<table class="widefat fixed" cellspacing="0">
|
106 |
+
|
107 |
+
<thead>
|
108 |
+
<tr>
|
109 |
+
<th class='check-column'><input type='checkbox' /></th>
|
110 |
+
<th class='name-column'><?php _e( 'Role Label', 'members' ); ?></th>
|
111 |
+
<th><?php _e( 'Role Name', 'members' ); ?></th>
|
112 |
+
<th><?php _e( 'Users', 'members' ); ?></th>
|
113 |
+
<th><?php _e( 'Capabilities', 'members' ); ?></th>
|
114 |
+
</tr>
|
115 |
+
</thead>
|
116 |
+
|
117 |
+
<tfoot>
|
118 |
+
<tr>
|
119 |
+
<th class='check-column'><input type='checkbox' /></th>
|
120 |
+
<th class='name-column'><?php _e( 'Role Label', 'members' ); ?></th>
|
121 |
+
<th><?php _e( 'Role', 'members' ); ?></th>
|
122 |
+
<th><?php _e( 'Users', 'members' ); ?></th>
|
123 |
+
<th><?php _e( 'Capabilities', 'members' ); ?></th>
|
124 |
+
</tr>
|
125 |
+
</tfoot>
|
126 |
+
|
127 |
+
<tbody id="users" class="list:user user-list plugins">
|
128 |
+
|
129 |
+
<?php foreach ( $list_roles as $role => $name ) { ?>
|
130 |
+
|
131 |
+
<tr valign="top" class="<?php echo ( isset( $active_roles[$role] ) ? 'active' : 'inactive' ); ?>">
|
132 |
+
|
133 |
+
<th class="manage-column column-cb check-column">
|
134 |
+
|
135 |
+
<?php if ( ( is_multisite() && is_super_admin() && $role !== get_option( 'default_role' ) ) || ( !current_user_can( $role ) && $role !== get_option( 'default_role' ) ) ) { ?>
|
136 |
+
<input type="checkbox" name="roles[<?php echo esc_attr( $role ); ?>]" id="<?php echo esc_attr( $role ); ?>" value="<?php echo esc_attr( $role ); ?>" />
|
137 |
+
<?php } ?>
|
138 |
+
|
139 |
+
</th><!-- .manage-column .column-cb .check-column -->
|
140 |
+
|
141 |
+
<td class="plugin-title">
|
142 |
+
|
143 |
+
<?php $edit_link = admin_url( wp_nonce_url( "users.php?page=roles&action=edit&role={$role}", members_get_nonce( 'edit-roles' ) ) ); ?>
|
144 |
+
|
145 |
+
<?php if ( current_user_can( 'edit_roles' ) ) { ?>
|
146 |
+
<a href="<?php echo esc_url( $edit_link ); ?>" title="<?php printf( esc_attr__( 'Edit the %s role', 'members' ), $name ); ?>"><strong><?php echo esc_html( $name ); ?></strong></a>
|
147 |
+
<?php } else { ?>
|
148 |
+
<strong><?php echo esc_html( $name ); ?></strong>
|
149 |
+
<?php } ?>
|
150 |
+
|
151 |
+
<div class="row-actions">
|
152 |
+
|
153 |
+
<?php if ( current_user_can( 'edit_roles' ) ) { ?>
|
154 |
+
<a href="<?php echo esc_url( $edit_link ); ?>" title="<?php printf( esc_attr__( 'Edit the %s role', 'members' ), $name ); ?>"><?php _e( 'Edit', 'members' ); ?></a>
|
155 |
+
<?php } ?>
|
156 |
+
|
157 |
+
<?php if ( ( is_multisite() && is_super_admin() && $role !== get_option( 'default_role' ) ) || ( current_user_can( 'delete_roles' ) && $role !== get_option( 'default_role' ) && !current_user_can( $role ) ) ) { ?>
|
158 |
+
| <a href="<?php echo admin_url( wp_nonce_url( "users.php?page=roles&action=delete&role={$role}", members_get_nonce( 'edit-roles' ) ) ); ?>" title="<?php printf( esc_attr__( 'Delete the %s role', 'members' ), $name ); ?>"><?php _e( 'Delete', 'members' ); ?></a>
|
159 |
+
<?php } ?>
|
160 |
+
|
161 |
+
<?php if ( current_user_can( 'manage_options' ) && $role == get_option( 'default_role' ) ) { ?>
|
162 |
+
| <a href="<?php echo admin_url( ( 'options-general.php' ) ); ?>" title="<?php _e( 'Change default role', 'members' ); ?>"><?php _e( 'Default Role', 'members' ); ?></a>
|
163 |
+
<?php } ?>
|
164 |
+
|
165 |
+
<?php if ( current_user_can( 'list_users' ) ) { ?>
|
166 |
+
| <a href="<?php echo admin_url( esc_url( "users.php?role={$role}" ) ); ?>" title="<?php printf( esc_attr__( 'View all users with the %s role', 'members' ), $name ); ?>"><?php _e( 'View Users', 'members' ); ?></a>
|
167 |
+
<?php } ?>
|
168 |
+
|
169 |
+
</div><!-- .row-actions -->
|
170 |
+
|
171 |
+
</td><!-- .plugin-title -->
|
172 |
+
|
173 |
+
<td class="desc">
|
174 |
+
<p>
|
175 |
+
<?php echo $role; ?>
|
176 |
+
</p>
|
177 |
+
</td><!-- .desc -->
|
178 |
+
|
179 |
+
<td class="desc">
|
180 |
+
<p>
|
181 |
+
<?php if ( current_user_can( 'list_users' ) ) { ?>
|
182 |
+
<a href="<?php echo admin_url( esc_url( "users.php?role={$role}" ) ); ?>" title="<?php printf( __( 'View all users with the %s role', 'members' ), $name ); ?>"><?php printf( _n( '%s User', '%s Users', members_get_role_user_count( $role ), 'members' ), members_get_role_user_count( $role ) ); ?></a>
|
183 |
+
<?php } else { ?>
|
184 |
+
<?php printf( _n( '%s User', '%s Users', members_get_role_user_count( $role ), 'members' ), members_get_role_user_count( $role ) ); ?>
|
185 |
+
<?php } ?>
|
186 |
+
</p>
|
187 |
+
</td><!-- .desc -->
|
188 |
+
|
189 |
+
<td class="desc">
|
190 |
+
<p>
|
191 |
+
<?php
|
192 |
+
$role_object = get_role( $role );
|
193 |
+
$cap_count = count( $role_object->capabilities );
|
194 |
+
printf( _n( '%s Capability', '%s Capabilities', $cap_count, 'members' ), $cap_count );
|
195 |
+
?>
|
196 |
+
</p>
|
197 |
+
</td><!-- .desc -->
|
198 |
+
|
199 |
+
</tr><!-- .active .inactive -->
|
200 |
+
|
201 |
+
<?php } // End foreach ?>
|
202 |
+
|
203 |
+
</tbody><!-- #users .list:user .user-list .plugins -->
|
204 |
+
|
205 |
+
</table><!-- .widefat .fixed -->
|
206 |
+
|
207 |
+
<div class="tablenav">
|
208 |
+
|
209 |
+
<?php if ( current_user_can( 'delete_roles' ) ) { ?>
|
210 |
+
|
211 |
+
<div class="alignleft actions">
|
212 |
+
|
213 |
+
<select name="bulk-action-2">
|
214 |
+
|
215 |
+
<option value="" selected="selected"><?php _e( 'Bulk Actions', 'members' ); ?></option>
|
216 |
+
|
217 |
+
<?php if ( current_user_can( 'delete_roles' ) ) { ?>
|
218 |
+
<option value="delete"><?php _e( 'Delete', 'members' ); ?></option>
|
219 |
+
<?php } ?>
|
220 |
+
|
221 |
+
</select>
|
222 |
+
|
223 |
+
<?php submit_button( esc_attr__( 'Apply', 'members' ), 'button-secondary action', 'roles-bulk-action-2', false ); ?>
|
224 |
+
|
225 |
+
</div><!-- .alignleft .actions -->
|
226 |
+
|
227 |
+
<?php } // End cap check ?>
|
228 |
+
|
229 |
+
<div class='tablenav-pages one-page'>
|
230 |
+
<span class="displaying-num"><?php printf( _n( '%s item', '%s items', count( $list_roles ), 'members' ), count( $list_roles ) ); ?></span>
|
231 |
+
</div>
|
232 |
+
|
233 |
+
<br class="clear" />
|
234 |
+
|
235 |
+
</div><!-- .tablenav -->
|
236 |
+
|
237 |
+
</form><!-- #roles -->
|
238 |
+
|
239 |
+
</div><!-- #poststuff -->
|
240 |
+
|
241 |
+
</div><!-- .wrap -->
|
admin/roles.php
ADDED
@@ -0,0 +1,111 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Handles the 'Roles' page in the admin. This file checks $_POST and $_GET data to decide which file should
|
4 |
+
* be loaded.
|
5 |
+
*
|
6 |
+
* @package Members
|
7 |
+
* @subpackage Admin
|
8 |
+
*/
|
9 |
+
|
10 |
+
/* Get the current action performed by the user. */
|
11 |
+
$action = isset( $_REQUEST['action'] ) ? esc_attr( $_REQUEST['action'] ) : false;
|
12 |
+
|
13 |
+
/* If the bulk delete has been selected. */
|
14 |
+
if ( ( isset( $_POST['bulk-action'] ) && 'delete' == $_POST['bulk-action'] ) || ( isset( $_POST['bulk-action-2'] ) && 'delete' == $_POST['bulk-action-2'] ) )
|
15 |
+
$action = 'bulk-delete';
|
16 |
+
|
17 |
+
/* Choose which actions to perform and pages to load according to the $action variable. */
|
18 |
+
switch( $action ) {
|
19 |
+
|
20 |
+
/* If the bulk delete was selected. */
|
21 |
+
case 'bulk-delete' :
|
22 |
+
|
23 |
+
/* Get all roles checked for deletion. */
|
24 |
+
$delete_roles = $_POST['roles'];
|
25 |
+
|
26 |
+
/* If roles were selected, let's delete some roles. */
|
27 |
+
if ( current_user_can( 'delete_roles' ) && is_array( $delete_roles ) ) {
|
28 |
+
|
29 |
+
/* Verify the nonce. */
|
30 |
+
check_admin_referer( members_get_nonce( 'edit-roles' ) );
|
31 |
+
|
32 |
+
/* Send through roles deleted message. */
|
33 |
+
add_action( 'members_pre_edit_roles_form', 'members_message_roles_deleted' );
|
34 |
+
|
35 |
+
/* Loop through each of the selected roles. */
|
36 |
+
foreach ( $delete_roles as $role ) {
|
37 |
+
|
38 |
+
/* Get the role we want to delete. */
|
39 |
+
$role = esc_attr( strip_tags( $role ) );
|
40 |
+
|
41 |
+
/* Delete the role and move its users to the default role. */
|
42 |
+
if ( !empty( $role ) )
|
43 |
+
members_delete_role( $role );
|
44 |
+
}
|
45 |
+
}
|
46 |
+
|
47 |
+
/* Load the edit roles page. */
|
48 |
+
require_once( MEMBERS_ADMIN . 'roles-list-table.php' );
|
49 |
+
|
50 |
+
/* Break out of switch statement. */
|
51 |
+
break;
|
52 |
+
|
53 |
+
/* If a single role has been chosen to be deleted. */
|
54 |
+
case 'delete' :
|
55 |
+
|
56 |
+
/* Make sure the current user can delete roles. */
|
57 |
+
if ( current_user_can( 'delete_roles' ) ) {
|
58 |
+
|
59 |
+
/* Verify the referer. */
|
60 |
+
check_admin_referer( members_get_nonce( 'edit-roles' ) );
|
61 |
+
|
62 |
+
/* Send role deleted message. */
|
63 |
+
add_action( 'members_pre_edit_roles_form', 'members_message_role_deleted' );
|
64 |
+
|
65 |
+
/* Get the role we want to delete. */
|
66 |
+
$role = esc_attr( strip_tags( $_GET['role'] ) );
|
67 |
+
|
68 |
+
/* Delete the role and move its users to the default role. */
|
69 |
+
if ( !empty( $role ) )
|
70 |
+
members_delete_role( $role );
|
71 |
+
}
|
72 |
+
|
73 |
+
/* Load the edit roles page. */
|
74 |
+
require_once( MEMBERS_ADMIN . 'roles-list-table.php' );
|
75 |
+
|
76 |
+
/* Break out of switch statement. */
|
77 |
+
break;
|
78 |
+
|
79 |
+
/* If a role has been selected to be edited. */
|
80 |
+
case 'edit' :
|
81 |
+
|
82 |
+
/* Make sure the current user can edit roles. */
|
83 |
+
if ( current_user_can( 'edit_roles' ) ) {
|
84 |
+
|
85 |
+
/* Verify the referer. */
|
86 |
+
check_admin_referer( members_get_nonce( 'edit-roles' ) );
|
87 |
+
|
88 |
+
/* Load the edit role form. */
|
89 |
+
require_once( MEMBERS_ADMIN . 'role-edit.php' );
|
90 |
+
}
|
91 |
+
|
92 |
+
/* If the user can't edit roles. */
|
93 |
+
else {
|
94 |
+
/* Load the edit roles page.*/
|
95 |
+
require_once( MEMBERS_ADMIN . 'roles-list-table.php' );
|
96 |
+
}
|
97 |
+
|
98 |
+
/* Break out of switch statement. */
|
99 |
+
break;
|
100 |
+
|
101 |
+
/* The default page is the edit roles page. */
|
102 |
+
default :
|
103 |
+
|
104 |
+
/* Load the edit roles page.*/
|
105 |
+
require_once( MEMBERS_ADMIN . 'roles-list-table.php' );
|
106 |
+
|
107 |
+
/* Break out of switch statement. */
|
108 |
+
break;
|
109 |
+
}
|
110 |
+
|
111 |
+
?>
|
admin/settings.php
ADDED
@@ -0,0 +1,180 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Creates and handles all of the functionality needed for the 'Members Settings' page in the WordPress admin.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Admin
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Set up the administration functionality. */
|
10 |
+
add_action( 'admin_menu', 'members_settings_page_setup' );
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Initializes and sets up the main plugin settings page.
|
14 |
+
*
|
15 |
+
* @since 0.2.0
|
16 |
+
*/
|
17 |
+
function members_settings_page_setup() {
|
18 |
+
global $members;
|
19 |
+
|
20 |
+
/* If no settings are available, add the default settings to the database. */
|
21 |
+
if ( false === get_option( 'members_settings' ) )
|
22 |
+
add_option( 'members_settings', members_get_default_settings(), '', 'yes' );
|
23 |
+
|
24 |
+
/* Register the plugin settings. */
|
25 |
+
add_action( 'admin_init', 'members_register_settings' );
|
26 |
+
|
27 |
+
/* Add Members settings page. */
|
28 |
+
$members->settings_page = add_submenu_page( 'options-general.php', esc_attr__( 'Members Settings', 'members' ), esc_attr__( 'Members', 'members' ), apply_filters( 'members_settings_capability', 'manage_options' ), 'members-settings', 'members_settings_page' );
|
29 |
+
|
30 |
+
/* Add media for the settings page. */
|
31 |
+
add_action( 'admin_enqueue_scripts', 'members_admin_enqueue_style' );
|
32 |
+
add_action( 'admin_enqueue_scripts', 'members_settings_page_media' );
|
33 |
+
add_action( "admin_head-{$members->settings_page}", 'members_settings_page_scripts' );
|
34 |
+
|
35 |
+
/* Load the meta boxes. */
|
36 |
+
add_action( "load-{$members->settings_page}", 'members_settings_page_load_meta_boxes' );
|
37 |
+
|
38 |
+
/* Create a hook for adding meta boxes. */
|
39 |
+
add_action( "load-{$members->settings_page}", 'members_settings_page_add_meta_boxes' );
|
40 |
+
}
|
41 |
+
|
42 |
+
/**
|
43 |
+
* Registers the Members plugin settings with WordPress.
|
44 |
+
*
|
45 |
+
* @since 0.2.0
|
46 |
+
*/
|
47 |
+
function members_register_settings() {
|
48 |
+
register_setting( 'members_settings', 'members_settings', 'members_validate_settings' );
|
49 |
+
}
|
50 |
+
|
51 |
+
/**
|
52 |
+
* Executes the 'add_meta_boxes' action hook because WordPress doesn't fire this on custom admin pages.
|
53 |
+
*
|
54 |
+
* @since 0.2.0
|
55 |
+
*/
|
56 |
+
function members_settings_page_add_meta_boxes() {
|
57 |
+
global $members;
|
58 |
+
$plugin_data = get_plugin_data( MEMBERS_DIR . 'members.php' );
|
59 |
+
do_action( 'add_meta_boxes', $members->settings_page, $plugin_data );
|
60 |
+
}
|
61 |
+
|
62 |
+
/**
|
63 |
+
* Loads the plugin settings page meta boxes.
|
64 |
+
*
|
65 |
+
* @since 0.2.0
|
66 |
+
*/
|
67 |
+
function members_settings_page_load_meta_boxes() {
|
68 |
+
require_once( MEMBERS_ADMIN . 'meta-box-plugin-settings.php' );
|
69 |
+
}
|
70 |
+
|
71 |
+
/**
|
72 |
+
* Function for validating the settings input from the plugin settings page.
|
73 |
+
*
|
74 |
+
* @since 0.2.0
|
75 |
+
*/
|
76 |
+
function members_validate_settings( $input ) {
|
77 |
+
|
78 |
+
/* Check if the role manager is active. */
|
79 |
+
$settings['role_manager'] = ( isset( $input['role_manager'] ) ? 1 : 0 );
|
80 |
+
|
81 |
+
/* Check if the content permissions feature is active. */
|
82 |
+
$settings['content_permissions'] = ( isset( $input['content_permissions'] ) ? 1 : 0 );
|
83 |
+
|
84 |
+
/* Set the content permissions error text and kill evil scripts. */
|
85 |
+
if ( current_user_can( 'unfiltered_html' ) && isset( $input['content_permissions_error'] ) )
|
86 |
+
$settings['content_permissions_error'] = stripslashes( wp_filter_post_kses( addslashes( $input['content_permissions_error'] ) ) );
|
87 |
+
|
88 |
+
elseif ( isset( $input['content_permissions_error'] ) )
|
89 |
+
$settings['content_permissions_error'] = $input['content_permissions_error'];
|
90 |
+
|
91 |
+
/* Check if the login form and users widgets are active. */
|
92 |
+
$settings['login_form_widget'] = ( isset( $input['login_form_widget'] ) ? 1 : 0 );
|
93 |
+
$settings['users_widget'] = ( isset( $input['users_widget'] ) ? 1 : 0 );
|
94 |
+
|
95 |
+
/* Check if the private blog and private feed features are active. */
|
96 |
+
$settings['private_blog'] = ( isset( $input['private_blog'] ) ? 1 : 0 );
|
97 |
+
$settings['private_feed'] = ( isset( $input['private_feed'] ) ? 1 : 0 );
|
98 |
+
|
99 |
+
/* Set the private feed error text and kill evil scripts. */
|
100 |
+
if ( current_user_can( 'unfiltered_html' ) && isset( $input['private_feed_error'] ) )
|
101 |
+
$settings['private_feed_error'] = stripslashes( wp_filter_post_kses( addslashes( $input['private_feed_error'] ) ) );
|
102 |
+
|
103 |
+
elseif ( isset( $input['private_feed_error'] ) )
|
104 |
+
$settings['private_feed_error'] = $input['private_feed_error'];
|
105 |
+
|
106 |
+
/* Return the validated/sanitized settings. */
|
107 |
+
return $settings;
|
108 |
+
}
|
109 |
+
|
110 |
+
/**
|
111 |
+
* Displays the HTML and meta boxes for the plugin settings page.
|
112 |
+
*
|
113 |
+
* @since 0.2.0
|
114 |
+
*/
|
115 |
+
function members_settings_page() {
|
116 |
+
global $members; ?>
|
117 |
+
|
118 |
+
<div class="wrap">
|
119 |
+
|
120 |
+
<?php screen_icon(); ?>
|
121 |
+
|
122 |
+
<h2><?php _e( 'Members Plugin Settings', 'members' ); ?></h2>
|
123 |
+
|
124 |
+
<div id="poststuff">
|
125 |
+
|
126 |
+
<form method="post" action="options.php">
|
127 |
+
|
128 |
+
<?php settings_fields( 'members_settings' ); ?>
|
129 |
+
<?php wp_nonce_field( 'closedpostboxes', 'closedpostboxesnonce', false ); ?>
|
130 |
+
<?php wp_nonce_field( 'meta-box-order', 'meta-box-order-nonce', false ); ?>
|
131 |
+
|
132 |
+
<div class="metabox-holder">
|
133 |
+
<div class="post-box-container column-1 normal"><?php do_meta_boxes( $members->settings_page, 'normal', null ); ?></div>
|
134 |
+
<div class="post-box-container column-2 side"><?php do_meta_boxes( $members->settings_page, 'side', null ); ?></div>
|
135 |
+
</div>
|
136 |
+
|
137 |
+
<?php submit_button( esc_attr__( 'Update Settings', 'members' ) ); ?>
|
138 |
+
|
139 |
+
</form>
|
140 |
+
|
141 |
+
</div><!-- #poststuff -->
|
142 |
+
|
143 |
+
</div><!-- .wrap --><?php
|
144 |
+
}
|
145 |
+
|
146 |
+
/**
|
147 |
+
* Loads needed JavaScript files for handling the meta boxes on the settings page.
|
148 |
+
*
|
149 |
+
* @since 0.2.0
|
150 |
+
* @param string $hook_suffix The hook for the current page in the admin.
|
151 |
+
*/
|
152 |
+
function members_settings_page_media( $hook_suffix ) {
|
153 |
+
global $members;
|
154 |
+
|
155 |
+
if ( isset( $members->settings_page ) && $hook_suffix == $members->settings_page ) {
|
156 |
+
wp_enqueue_script( 'common' );
|
157 |
+
wp_enqueue_script( 'wp-lists' );
|
158 |
+
wp_enqueue_script( 'postbox' );
|
159 |
+
}
|
160 |
+
}
|
161 |
+
|
162 |
+
/**
|
163 |
+
* Loads JavaScript for handling the open/closed state of each meta box.
|
164 |
+
*
|
165 |
+
* @since 0.2.0
|
166 |
+
* @global $members The path of the settings page.
|
167 |
+
*/
|
168 |
+
function members_settings_page_scripts() {
|
169 |
+
global $members; ?>
|
170 |
+
<script type="text/javascript">
|
171 |
+
//<![CDATA[
|
172 |
+
jQuery(document).ready( function($) {
|
173 |
+
$('.if-js-closed').removeClass('if-js-closed').addClass('closed');
|
174 |
+
postboxes.add_postbox_toggles( '<?php echo $members->settings_page; ?>' );
|
175 |
+
});
|
176 |
+
//]]>
|
177 |
+
</script>
|
178 |
+
<?php }
|
179 |
+
|
180 |
+
?>
|
components.php
DELETED
@@ -1,239 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Members Components API. This file contains everything you need to build custom components.
|
4 |
-
* Rather than limiting the plugin to self-contained settings, the Components API was created so
|
5 |
-
* that it could be extended by other plugins and themes. Registering a component is as simple as
|
6 |
-
* using the registration function and creating a custom callback function for the component.
|
7 |
-
*
|
8 |
-
* To register a component, use the register_component() function. When registering a custom
|
9 |
-
* component, your registration function should be hooked to 'members_register_components'.
|
10 |
-
*
|
11 |
-
* @package Members
|
12 |
-
* @subpackage Components
|
13 |
-
*/
|
14 |
-
|
15 |
-
/* Register the default components shippedd with the plugin. */
|
16 |
-
add_action( 'init', 'members_create_default_components', 0 );
|
17 |
-
|
18 |
-
/* Load the callback functions for each of the registered components. Components should be registered on 'init' with a priority less than '10'. */
|
19 |
-
add_action( 'init', 'members_load_components', 0 );
|
20 |
-
|
21 |
-
/**
|
22 |
-
* Registers the initial components packaged with the plugin.
|
23 |
-
* @uses register_members_component() Registers a component.
|
24 |
-
*
|
25 |
-
* @since 0.1
|
26 |
-
*/
|
27 |
-
function members_create_default_components() {
|
28 |
-
register_members_component( array( 'name' => 'edit_roles', 'label' => __('Edit Roles', 'members'), 'callback' => 'members_component_edit_roles', 'requires' => false, 'description' => __('The <em>Edit Roles</em> component allows you to manage all roles on your site. You can change which capabilities individual roles have. Once you\'ve selected this component, you should immediately give at least one role the <code>edit_roles</code> capability. This makes sure only the roles you select can edit roles.', 'members') ) );
|
29 |
-
register_members_component( array( 'name' => 'new_roles', 'label' => __('New Roles', 'members'), 'callback' => 'members_component_new_roles', 'requires' => false, 'description' => __('The <em>New Roles</em> component allows you to create new roles on your site. To use this component, you must have the <code>create_roles</code> capability. This makes sure only the roles you select can create new roles.', 'members') ) );
|
30 |
-
register_members_component( array( 'name' => 'content_permissions', 'label' => __('Content Permissions', 'members'), 'callback' => 'members_component_content_permissions', 'requires' => false, 'description' => __('Adds an additional meta box for the post/page editor that allows you to grant permissions for who can read the content based on the the user\'s capabilities or role. Only roles with the <code>restrict_content</code> capability will be able to use this component.', 'members') ) );
|
31 |
-
register_members_component( array( 'name' => 'shortcodes', 'label' => __('Shortcodes', 'members'), 'callback' => 'members_component_shortcodes', 'requires' => false, 'description' => __('Provides a set of shortcodes that may be used to restrict or provide access to certain areas of your site from within the post editor (or other areas where shortcodes are allowed).', 'members') ) );
|
32 |
-
register_members_component( array( 'name' => 'template_tags', 'label' => __('Template Tags', 'members'), 'callback' => 'members_component_template_tags', 'requires' => false, 'description' => __('Provides additional template tags for use within your WordPress theme for restricting or providing access to certain content.', 'members') ) );
|
33 |
-
register_members_component( array( 'hook' => 'widgets_init', 'name' => 'widgets', 'label' => __('Widgets', 'members'), 'callback' => 'members_component_widgets', 'requires' => false, 'description' => __('Creates additional widgets for use in any widget area on your site. The current widgets are Login Form and Users.', 'members') ) );
|
34 |
-
register_members_component( array( 'name' => 'private_blog', 'label' => __('Private Blog', 'members'), 'callback' => 'members_component_private_blog', 'requires' => false, 'description' => __('Forces all users to log into the site before viewing it. It will always redirect users to the login page. Note that this component does not block public access to your feeds.', 'members') ) );
|
35 |
-
//register_members_component( array( 'name' => 'user_fields', 'label' => __('User Fields', 'members'), 'callback' => 'members_component_user_fields', 'requires' => false, 'description' => __('Provides an interface for building additional user profile fields. Users will then be able provide this additional information when editing their profile', 'members') ) );
|
36 |
-
|
37 |
-
do_action( 'members_register_components' ); // Available hook to register components.
|
38 |
-
}
|
39 |
-
|
40 |
-
/**
|
41 |
-
* Function for registering an additional component for the plugin, which the user
|
42 |
-
* may choose to use. Note that you should add in all the arguments to properly register
|
43 |
-
* your component. The exception is $requires.
|
44 |
-
*
|
45 |
-
* Your callback function should make use of the is_active_members_component() function
|
46 |
-
* as soon as it fires. This allows you to check if the user has activated the component before
|
47 |
-
* loading all of your code. Please use this system as it keeps the plugin as light as possible.
|
48 |
-
*
|
49 |
-
* @since 0.1
|
50 |
-
* @global $members object The global members object.
|
51 |
-
*
|
52 |
-
* @param $args array Arguments for registering a custom component.
|
53 |
-
* @param $args[$name] string Name of the component (only letters, numbers, and spaces).
|
54 |
-
* @param $args[$label] string Display name of the component.
|
55 |
-
* @param $args[$description] string Description of the component.
|
56 |
-
* @param $args[$callback] string Function that will be called when the components system is loaded.
|
57 |
-
* @param $args[$requires] array|bool Names of other components that are required to run this component.
|
58 |
-
*/
|
59 |
-
function register_members_component( $args = array() ) {
|
60 |
-
global $members;
|
61 |
-
|
62 |
-
$name = $args['name'];
|
63 |
-
|
64 |
-
$members->registered_components[$name] = (object)$args;
|
65 |
-
}
|
66 |
-
|
67 |
-
/**
|
68 |
-
* Loops through the registered components and load the necessary callback function.
|
69 |
-
* If a $component->hook is added and a $component->callback function, the plugin
|
70 |
-
* will add the function to the action hook automatically. Else if the $component->callback
|
71 |
-
* function exists but not $component->hook, the function will simply be called.
|
72 |
-
*
|
73 |
-
* @since 0.2
|
74 |
-
* @global $members object The global members object.
|
75 |
-
*/
|
76 |
-
function members_load_components() {
|
77 |
-
global $members;
|
78 |
-
|
79 |
-
/* Check if there are any registered components. If not, return false. */
|
80 |
-
if ( !is_array( $members->registered_components ) )
|
81 |
-
return false;
|
82 |
-
|
83 |
-
/* Loop through each of the registered components and execute the desired action. */
|
84 |
-
foreach ( $members->registered_components as $component ) {
|
85 |
-
|
86 |
-
/* If a callback function has been input, continue the process. */
|
87 |
-
if ( $component->callback && function_exists( $component->callback ) ) {
|
88 |
-
|
89 |
-
/* If a hook has been input, add the component callback function to the action hook. */
|
90 |
-
if ( $component->hook )
|
91 |
-
add_action( $component->hook, $component->callback );
|
92 |
-
|
93 |
-
/* Call the function directly if there is no hook. */
|
94 |
-
else
|
95 |
-
call_user_func( $component->callback, $component );
|
96 |
-
}
|
97 |
-
}
|
98 |
-
}
|
99 |
-
|
100 |
-
/**
|
101 |
-
* Function for getting a specific component object from the list of registered
|
102 |
-
* plugin components.
|
103 |
-
*
|
104 |
-
* @since 0.1
|
105 |
-
* @global $members object The global members object.
|
106 |
-
* @param $component string Required. The name of the component.
|
107 |
-
* @return $members->registered_components[$component] object
|
108 |
-
*/
|
109 |
-
function get_members_component( $component ) {
|
110 |
-
global $members;
|
111 |
-
return $members->registered_components[$component_name];
|
112 |
-
}
|
113 |
-
|
114 |
-
/**
|
115 |
-
* Checks if a component has been activated by the user. If it has, return true. If not,
|
116 |
-
* return false.
|
117 |
-
* @todo Add the activated state to the $members_components variable instead of making
|
118 |
-
* a completely new global variable with $members_components_active.
|
119 |
-
*
|
120 |
-
* @since 0.1
|
121 |
-
* @global $members object The global members object.
|
122 |
-
* @param $component string Name of the component to check for.
|
123 |
-
* @return true|false bool
|
124 |
-
*/
|
125 |
-
function is_active_members_component( $component = '' ) {
|
126 |
-
global $members;
|
127 |
-
|
128 |
-
if ( !$component )
|
129 |
-
return false;
|
130 |
-
|
131 |
-
if ( !is_array( $members->active_components ) )
|
132 |
-
$members->active_components = get_option( 'members_settings' );
|
133 |
-
|
134 |
-
return $members->active_components[$component];
|
135 |
-
}
|
136 |
-
|
137 |
-
/* Default Components */
|
138 |
-
|
139 |
-
/**
|
140 |
-
* Manage roles component. This allows you to manage each role's set
|
141 |
-
* of capabilities.
|
142 |
-
*
|
143 |
-
* @since 0.1
|
144 |
-
*/
|
145 |
-
function members_component_edit_roles() {
|
146 |
-
if ( is_admin() && is_active_members_component( 'edit_roles' ) ) {
|
147 |
-
require_once( MEMBERS_COMPONENTS . '/edit-roles/default.php' );
|
148 |
-
add_action( 'admin_menu', 'members_component_load_edit_roles' );
|
149 |
-
}
|
150 |
-
}
|
151 |
-
|
152 |
-
/**
|
153 |
-
* New roles component. This allows you to create new roles.
|
154 |
-
*
|
155 |
-
* @since 0.1
|
156 |
-
*/
|
157 |
-
function members_component_new_roles() {
|
158 |
-
if ( is_admin() && is_active_members_component( 'new_roles' ) ) {
|
159 |
-
require_once( MEMBERS_COMPONENTS . '/new-roles/default.php' );
|
160 |
-
add_action( 'admin_menu', 'members_component_load_new_roles' );
|
161 |
-
}
|
162 |
-
}
|
163 |
-
|
164 |
-
/**
|
165 |
-
* Loads the content permissions component.
|
166 |
-
*
|
167 |
-
* @since 0.1
|
168 |
-
*/
|
169 |
-
function members_component_content_permissions() {
|
170 |
-
if ( is_active_members_component( 'content_permissions' ) ) {
|
171 |
-
require_once( MEMBERS_COMPONENTS . '/content-permissions/content-permissions.php' );
|
172 |
-
require_once( MEMBERS_COMPONENTS . '/content-permissions/meta-box.php' );
|
173 |
-
add_action( 'admin_menu', 'members_content_permissions_create_meta_box' );
|
174 |
-
add_action( 'save_post', 'members_content_permissions_save_meta', 1, 2 );
|
175 |
-
}
|
176 |
-
}
|
177 |
-
|
178 |
-
/**
|
179 |
-
* Loads the shortcodes component.
|
180 |
-
*
|
181 |
-
* @since 0.1
|
182 |
-
*/
|
183 |
-
function members_component_shortcodes() {
|
184 |
-
if ( !is_admin() && is_active_members_component( 'shortcodes' ) )
|
185 |
-
require_once( MEMBERS_COMPONENTS . '/shortcodes/shortcodes.php' );
|
186 |
-
}
|
187 |
-
|
188 |
-
/**
|
189 |
-
* Loads the template tags component.
|
190 |
-
*
|
191 |
-
* @since 0.1
|
192 |
-
*/
|
193 |
-
function members_component_template_tags() {
|
194 |
-
if ( is_active_members_component( 'template_tags' ) )
|
195 |
-
require_once( MEMBERS_COMPONENTS . '/template-tags/template-tags.php' );
|
196 |
-
}
|
197 |
-
|
198 |
-
/**
|
199 |
-
* Loads the widgets component.
|
200 |
-
*
|
201 |
-
* @since 0.1
|
202 |
-
*/
|
203 |
-
function members_component_widgets() {
|
204 |
-
if ( is_active_members_component( 'widgets' ) ) {
|
205 |
-
|
206 |
-
/* Load each of the widget files. */
|
207 |
-
require_once( MEMBERS_COMPONENTS . '/widgets/login.php' );
|
208 |
-
require_once( MEMBERS_COMPONENTS . '/widgets/users.php' );
|
209 |
-
|
210 |
-
/* Register each widget. */
|
211 |
-
register_widget( 'Members_Widget_Login' );
|
212 |
-
register_widget( 'Members_Widget_Users' );
|
213 |
-
}
|
214 |
-
}
|
215 |
-
|
216 |
-
/**
|
217 |
-
* Loads the private blog component.
|
218 |
-
*
|
219 |
-
* @since 0.1
|
220 |
-
*/
|
221 |
-
function members_component_private_blog() {
|
222 |
-
if ( is_active_members_component( 'private_blog' ) )
|
223 |
-
require_once( MEMBERS_COMPONENTS . '/private-blog/default.php' );
|
224 |
-
}
|
225 |
-
|
226 |
-
/**
|
227 |
-
* Loads the user fields component.
|
228 |
-
*
|
229 |
-
* @internal Do not use this function. The component isn't ready.
|
230 |
-
* @todo Pretty much everything.
|
231 |
-
*
|
232 |
-
* @since 0.1
|
233 |
-
*/
|
234 |
-
function members_component_user_fields() {
|
235 |
-
if ( is_admin() && is_active_members_component( 'user_fields' ) )
|
236 |
-
require_once( MEMBERS_COMPONENTS . '/user-fields/default.php' );
|
237 |
-
}
|
238 |
-
|
239 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/content-permissions/comments.php
DELETED
@@ -1 +0,0 @@
|
|
1 |
-
<?php /* Life is sweet. */ ?>
|
|
components/content-permissions/content-permissions.php
DELETED
@@ -1,103 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The Content Permissions component was created so that access to specific parts of a site
|
4 |
-
* can be granted or denied. This is the component that gives truly fine-grained control over
|
5 |
-
* who can see what content on the front end of the site.
|
6 |
-
*
|
7 |
-
* Current features of the Content Permissions component:
|
8 |
-
* - Block content on a post-by-post (or page) basis according to user role.
|
9 |
-
*
|
10 |
-
* This feature set should eventually include the ability to block access to taxonomies and
|
11 |
-
* attachments to be truly useful.
|
12 |
-
*
|
13 |
-
* @todo Check and test feeds and filter if necessary.
|
14 |
-
* @todo Make sure comments aren't shown anywhere.
|
15 |
-
* @todo Remove pages from wp_list_pages() and wp_page_menu().
|
16 |
-
* @todo Cover ALL the bases. If something's restricted, make sure it stays that way.
|
17 |
-
*
|
18 |
-
* @package Members
|
19 |
-
* @subpackage Components
|
20 |
-
*/
|
21 |
-
|
22 |
-
/* Add messages to the components form. */
|
23 |
-
add_action( 'members_pre_components_form', 'members_message_no_restrict_content' );
|
24 |
-
|
25 |
-
/* Filter the content and exerpts. */
|
26 |
-
add_filter( 'the_content', 'members_content_permissions_protect' );
|
27 |
-
add_filter( 'get_the_excerpt', 'members_content_permissions_protect' );
|
28 |
-
add_filter( 'the_excerpt', 'members_content_permissions_protect' );
|
29 |
-
|
30 |
-
/* Filter the comments template to make sure comments aren't shown to users without access. */
|
31 |
-
add_filter( 'comments_template', 'members_content_permissions_comments' );
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Disables the comments template if the current post has been restricted, unless
|
35 |
-
* the user has the role needed to view the content of the post.
|
36 |
-
*
|
37 |
-
* @todo Allow users to override the "no comments" template if in their theme.
|
38 |
-
*
|
39 |
-
* @since 0.1
|
40 |
-
* @param $template string File URL of the template to display.
|
41 |
-
* @return $template string File URL of the template to display.
|
42 |
-
*/
|
43 |
-
function members_content_permissions_comments( $template ) {
|
44 |
-
global $wp_query;
|
45 |
-
|
46 |
-
$roles = get_post_meta( $wp_query->post->ID, '_role', false );
|
47 |
-
|
48 |
-
if ( !empty( $roles ) && is_array( $roles ) ) {
|
49 |
-
foreach( $roles as $role ) {
|
50 |
-
if ( !is_feed() && ( current_user_can( $role ) || current_user_can( 'restrict_content' ) ) )
|
51 |
-
return $template;
|
52 |
-
}
|
53 |
-
$template = MEMBERS_COMPONENTS . '/content-permissions/comments.php';
|
54 |
-
}
|
55 |
-
return $template;
|
56 |
-
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Displays a message if the Content Permissions component is active but no role
|
60 |
-
* has been given the capability of 'restrict_content', which is a required capability to
|
61 |
-
* use the component.
|
62 |
-
*
|
63 |
-
* @since 0.1
|
64 |
-
* @uses is_active_members_component() Checks if the content_permissions component is active.
|
65 |
-
* @uses members_check_form_cap() Checks if the restrict_content capability has been given to a role.
|
66 |
-
*/
|
67 |
-
function members_message_no_restrict_content() {
|
68 |
-
if ( is_active_members_component( 'content_permissions' ) && !members_check_for_cap( 'restrict_content' ) ) {
|
69 |
-
$message = __('No role currently has the <code>restrict_content</code> capability. To use the <em>Content Permissions</em> component, at least one role must have this capability.', 'members');
|
70 |
-
members_admin_message( '', $message );
|
71 |
-
}
|
72 |
-
}
|
73 |
-
|
74 |
-
/**
|
75 |
-
* Disables content passed through the $content variable given the current user's role. The
|
76 |
-
* function checks for a custom field key of "Role" and loops through its values, checking
|
77 |
-
* if the current user has that particular role.
|
78 |
-
*
|
79 |
-
* Users with the rescrict_content capability should also be able to see the content.
|
80 |
-
*
|
81 |
-
* @since 0.1
|
82 |
-
* @uses get_post_meta() Gets the meta values of the "_role" custom field key.
|
83 |
-
* @uses current_user_can() Checks if the current user has a particular role (capability).
|
84 |
-
* @param $content string The current post's content/excerpt.
|
85 |
-
* @return $content string Either the current post's content/excerpt or a content inaccessible message.
|
86 |
-
*/
|
87 |
-
function members_content_permissions_protect( $content ) {
|
88 |
-
global $post;
|
89 |
-
|
90 |
-
$roles = get_post_meta( $post->ID, '_role', false );
|
91 |
-
|
92 |
-
if ( !empty( $roles ) && is_array( $roles ) ) {
|
93 |
-
foreach( $roles as $role ) {
|
94 |
-
if ( !is_feed() && ( current_user_can( $role ) || current_user_can( 'restrict_content' ) ) )
|
95 |
-
return $content;
|
96 |
-
}
|
97 |
-
$content = '<p class="restricted alert warning">' . __('Sorry, but you do not have permission to view this content.', 'members') . '</p>';
|
98 |
-
}
|
99 |
-
|
100 |
-
return $content;
|
101 |
-
}
|
102 |
-
|
103 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/content-permissions/meta-box.php
DELETED
@@ -1,116 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Adds the meta box for the Content Permissions component. This allows users with
|
4 |
-
* the 'restrict_content' capability to restrict posts/pages on a post/page basis. Roles
|
5 |
-
* with the 'restrict_content' capability should be able to see all content, regardless
|
6 |
-
* of the settings.
|
7 |
-
*
|
8 |
-
* @package Members
|
9 |
-
* @subpackage Components
|
10 |
-
*/
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Adds the meta box to the post/page edit screen if the current user has
|
14 |
-
* the 'restrict_content' capability.
|
15 |
-
*
|
16 |
-
* @since 0.1
|
17 |
-
* @uses add_meta_box() Creates an additiona meta box.
|
18 |
-
*/
|
19 |
-
function members_content_permissions_create_meta_box() {
|
20 |
-
if ( current_user_can( 'restrict_content' ) ) {
|
21 |
-
add_meta_box( 'content-permissions-meta-box', 'Content Permissions', 'members_content_permissions_meta_box', 'post', 'advanced', 'high' );
|
22 |
-
add_meta_box( 'content-permissions-meta-box', 'Content Permissions', 'members_content_permissions_meta_box', 'page', 'advanced', 'high' );
|
23 |
-
}
|
24 |
-
}
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Controls the display of the content permissions meta box. This allows users
|
28 |
-
* to select roles that should have access to an individual post/page.
|
29 |
-
*
|
30 |
-
* @since 0.1
|
31 |
-
* @global $post
|
32 |
-
* @global $wp_roles
|
33 |
-
* @param $object
|
34 |
-
* @param $box
|
35 |
-
*/
|
36 |
-
function members_content_permissions_meta_box( $object, $box ) {
|
37 |
-
global $post, $wp_roles; ?>
|
38 |
-
|
39 |
-
<input type="hidden" name="content_permissions_meta_nonce" value="<?php echo wp_create_nonce(plugin_basename(__FILE__)); ?>" />
|
40 |
-
|
41 |
-
<p>
|
42 |
-
<label for="roles"><?php _e('<strong>Roles:</strong> Restrict the content to these roles on the front end of the site. If all boxes are left unchecked, everyone can view the content.', 'members'); ?></label>
|
43 |
-
</p>
|
44 |
-
|
45 |
-
<div style="overflow: hidden;">
|
46 |
-
|
47 |
-
<?php
|
48 |
-
|
49 |
-
/* Get the 'Role' meta key. */
|
50 |
-
$meta = get_post_meta( $post->ID, '_role', false );
|
51 |
-
|
52 |
-
/* Loop through each of the available roles. */
|
53 |
-
foreach ( $wp_roles->role_names as $role => $name ) {
|
54 |
-
$checked = false;
|
55 |
-
|
56 |
-
/* If the role has been selected, make sure it's checked. */
|
57 |
-
if ( is_array( $meta ) && in_array( $role, $meta ) )
|
58 |
-
$checked = ' checked="checked" '; ?>
|
59 |
-
|
60 |
-
<p style="width: 32%; float: left; margin-right: 0;">
|
61 |
-
<label for="role-<?php echo $role; ?>">
|
62 |
-
<input type="checkbox" name="role[<?php echo $role; ?>]" id="role-<?php echo $role; ?>" <?php echo $checked; ?> value="<?php echo $role; ?>" />
|
63 |
-
<?php echo str_replace( '|User role', '', $name ); ?>
|
64 |
-
</label>
|
65 |
-
</p>
|
66 |
-
<?php } ?>
|
67 |
-
|
68 |
-
</div><?php
|
69 |
-
}
|
70 |
-
|
71 |
-
/**
|
72 |
-
* Saves the content permissions metabox data to a custom field.
|
73 |
-
*
|
74 |
-
* @since 0.1
|
75 |
-
*/
|
76 |
-
function members_content_permissions_save_meta( $post_id, $post ) {
|
77 |
-
global $wp_roles;
|
78 |
-
|
79 |
-
/* Only allow users that can edit the current post to submit data. */
|
80 |
-
if ( 'post' == $post->post_type && !current_user_can( 'edit_posts', $post_id ) )
|
81 |
-
return;
|
82 |
-
|
83 |
-
/* Only allow users that can edit the current page to submit data. */
|
84 |
-
elseif ( 'page' == $post->post_type && !current_user_can( 'edit_pages', $post_id ) )
|
85 |
-
return;
|
86 |
-
|
87 |
-
/* Don't save if the post is only a revision. */
|
88 |
-
if ( 'revision' == $post->post_type )
|
89 |
-
return;
|
90 |
-
|
91 |
-
/* Loop through each of the site's available roles. */
|
92 |
-
foreach ( $wp_roles->role_names as $role => $name ) {
|
93 |
-
|
94 |
-
/* Get post metadata for the custom field key 'Role'. */
|
95 |
-
$meta = (array)get_post_meta( $post_id, '_role', false );
|
96 |
-
|
97 |
-
/* Check if the role was selected. */
|
98 |
-
if ( $_POST['role'][$role] ) {
|
99 |
-
|
100 |
-
/* If selected and already saved, continue looping through the roles and do nothing for this role. */
|
101 |
-
if ( in_array( $role, $meta ) )
|
102 |
-
continue;
|
103 |
-
|
104 |
-
/* If the role was seleted and not already saved, add the role as a new value to the 'Role' custom field. */
|
105 |
-
else
|
106 |
-
$add = add_post_meta( $post_id, '_role', $role, false );
|
107 |
-
}
|
108 |
-
|
109 |
-
/* If role not selected, delete. */
|
110 |
-
else
|
111 |
-
$delete = delete_post_meta( $post_id, '_role', $role );
|
112 |
-
|
113 |
-
} // End loop through site's roles.
|
114 |
-
}
|
115 |
-
|
116 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/edit-roles/default.php
DELETED
@@ -1,62 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
|
3 |
-
/* Actions added by the Edit Roles component. */
|
4 |
-
add_action( 'members_pre_components_form', 'members_message_no_edit_roles' );
|
5 |
-
add_action( 'members_pre_edit_role_form', 'members_message_no_edit_roles' );
|
6 |
-
add_action( 'members_pre_edit_roles_form', 'members_message_no_edit_roles' );
|
7 |
-
|
8 |
-
/**
|
9 |
-
* Message to show when a single role has been deleted.
|
10 |
-
* @since 0.1
|
11 |
-
*/
|
12 |
-
function members_message_role_deleted() {
|
13 |
-
$message = __('Role deleted.', 'members');
|
14 |
-
members_admin_message( '', $message );
|
15 |
-
}
|
16 |
-
|
17 |
-
/**
|
18 |
-
* Message to show when multiple roles have been deleted (bulk delete).
|
19 |
-
* @since 0.1
|
20 |
-
*/
|
21 |
-
function members_message_roles_deleted() {
|
22 |
-
$message = __('Selected roles deleted.', 'members');
|
23 |
-
members_admin_message( '', $message );
|
24 |
-
}
|
25 |
-
|
26 |
-
/**
|
27 |
-
* Message to show when no role has the 'edit_roles' capability.
|
28 |
-
* @since 0.1
|
29 |
-
*/
|
30 |
-
function members_message_no_edit_roles() {
|
31 |
-
if ( is_active_members_component( 'edit_roles' ) && !members_check_for_cap( 'edit_roles' ) ) {
|
32 |
-
$message = __('No role currently has the <code>edit_roles</code> capability. Please add this to each role that should be able to manage/edit roles. If you do not change this, any user that has the <code>edit_users</code> capability will be able to edit roles.', 'members');
|
33 |
-
members_admin_message( '', $message );
|
34 |
-
}
|
35 |
-
}
|
36 |
-
|
37 |
-
/**
|
38 |
-
* Loads the settings pages for the Manage Roles component.
|
39 |
-
* @since 0.1
|
40 |
-
*/
|
41 |
-
function members_component_load_edit_roles() {
|
42 |
-
global $members_manage_roles_page;
|
43 |
-
|
44 |
-
/* Capability to manage roles. Users need to change this on initial setup by giving at least one role the 'edit_roles' capability. */
|
45 |
-
if ( members_check_for_cap( 'edit_roles' ) )
|
46 |
-
$edit_roles_cap = 'edit_roles';
|
47 |
-
else
|
48 |
-
$edit_roles_cap = 'edit_users';
|
49 |
-
|
50 |
-
/* Create the Manage Roles page. */
|
51 |
-
$members_edit_roles_page = add_submenu_page( 'users.php', __('Roles', 'members'), __('Roles', 'members'), $edit_roles_cap, 'roles', 'members_edit_roles_page' );
|
52 |
-
}
|
53 |
-
|
54 |
-
/**
|
55 |
-
* Loads the Manage Roles page.
|
56 |
-
* @since 0.1
|
57 |
-
*/
|
58 |
-
function members_edit_roles_page() {
|
59 |
-
require_once( MEMBERS_COMPONENTS . '/edit-roles/manage-roles.php' );
|
60 |
-
}
|
61 |
-
|
62 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/edit-roles/edit-role-form.php
DELETED
@@ -1,157 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The Edit Role form is for editing individual roles. The role to edit must
|
4 |
-
* have been selected on the Edit Roles page.
|
5 |
-
*
|
6 |
-
* @package Members
|
7 |
-
* @subpackage Components
|
8 |
-
*/
|
9 |
-
|
10 |
-
/* Get the current role object to edit. */
|
11 |
-
$role = get_role( $role );
|
12 |
-
|
13 |
-
/* Check if the form has been submitted. */
|
14 |
-
if ( $_POST['edit-role-saved'] == 'Y' ) {
|
15 |
-
|
16 |
-
/* Verify the nonce. */
|
17 |
-
check_admin_referer( members_get_nonce( 'edit-roles' ) );
|
18 |
-
|
19 |
-
/* Set the $role_updated variable to true. */
|
20 |
-
$role_updated = true;
|
21 |
-
|
22 |
-
/* Loop through all available capabilities. */
|
23 |
-
foreach ( members_get_capabilities() as $cap ) {
|
24 |
-
|
25 |
-
/* Get the posted capability. */
|
26 |
-
$posted_cap = $_POST['role-caps']["{$role->name}-{$cap}"];
|
27 |
-
|
28 |
-
/* If the role doesn't have the capability and it was selected, add it. */
|
29 |
-
if ( !$role->has_cap( $cap ) && $posted_cap )
|
30 |
-
$role->add_cap( $cap );
|
31 |
-
|
32 |
-
/* If the role has the capability and it wasn't selected, remove it. */
|
33 |
-
elseif ( $role->has_cap( $cap ) && !$posted_cap )
|
34 |
-
$role->remove_cap( $cap );
|
35 |
-
|
36 |
-
} // End loop through existing capabilities
|
37 |
-
|
38 |
-
/* If new caps were added and are in an array, we need to add them. */
|
39 |
-
if ( !empty( $_POST['new-cap'] ) && is_array( $_POST['new-cap'] ) ) {
|
40 |
-
|
41 |
-
/* Loop through each new capability from the edit roles form. */
|
42 |
-
foreach ( $_POST['new-cap'] as $new_cap ) {
|
43 |
-
|
44 |
-
/* Sanitize the new capability to remove any unwanted characters. */
|
45 |
-
$new_cap = strip_tags( $new_cap );
|
46 |
-
$new_cap = str_replace( array( '-', ' ', ' ' ) , '_', $new_cap );
|
47 |
-
$new_cap = preg_replace('/[^A-Za-z0-9_]/', '', $new_cap );
|
48 |
-
$new_cap = strtolower( $new_cap );
|
49 |
-
|
50 |
-
/* Run one more check to make sure the new capability exists. Add the cap to the role. */
|
51 |
-
if ( $new_cap && !$role->has_cap( $new_cap ) )
|
52 |
-
$role->add_cap( $new_cap );
|
53 |
-
|
54 |
-
} // End loop through new capabilities
|
55 |
-
|
56 |
-
} // End check for new capabilities
|
57 |
-
|
58 |
-
} // End check for form submission ?>
|
59 |
-
|
60 |
-
<div class="wrap">
|
61 |
-
|
62 |
-
<h2><?php printf(__('Edit the %1$s role', 'members'), $role->name ); ?></h2>
|
63 |
-
|
64 |
-
<?php if ( $role_updated ) members_admin_message( '', __('Role updated.', 'members') ); ?>
|
65 |
-
|
66 |
-
<?php do_action( 'members_pre_edit_role_form' ); //Available pre-form hook for displaying messages. ?>
|
67 |
-
|
68 |
-
<div id="poststuff">
|
69 |
-
|
70 |
-
<form name="form0" method="post" action="<?php echo admin_url( esc_url( "users.php?page=roles&action=edit&role={$role->name}" ) ); ?>" style="border:none;background:transparent;">
|
71 |
-
|
72 |
-
<?php wp_nonce_field( members_get_nonce( 'edit-roles' ) ); ?>
|
73 |
-
|
74 |
-
<div class="postbox open">
|
75 |
-
|
76 |
-
<h3><?php printf( __('<strong>Role:</strong> %1$s', 'members'), $role->name ); ?></h3>
|
77 |
-
|
78 |
-
<div class="inside">
|
79 |
-
|
80 |
-
<table class="form-table">
|
81 |
-
|
82 |
-
<tr>
|
83 |
-
<th style="width: 20%;">
|
84 |
-
<strong><?php _e('Capabilities', 'members'); ?></strong>
|
85 |
-
</th>
|
86 |
-
|
87 |
-
<td>
|
88 |
-
<?php _e('Select which capabilities this role should have. Make sure you understand what the capability does before giving it to just any role. This is a powerful feature, but it can cause you some grief if you give regular ol\' Joe more capabilities than yourself.', 'members'); ?>
|
89 |
-
<br /><br />
|
90 |
-
<?php
|
91 |
-
|
92 |
-
/* Looop through each available capability. */
|
93 |
-
foreach ( members_get_capabilities() as $cap ) {
|
94 |
-
|
95 |
-
/* If the role has the capability, set the checkbox to 'checked'. */
|
96 |
-
if ( $role->has_cap( $cap ) )
|
97 |
-
$checked = " checked='checked' ";
|
98 |
-
|
99 |
-
/* If the role doesn't have the the capability, set the checkbox value to false. */
|
100 |
-
else
|
101 |
-
$checked = ''; ?>
|
102 |
-
|
103 |
-
<div style='overflow: hidden; margin: 0 0 5px 0; float:left; width: 32.67%;'>
|
104 |
-
<input name='<?php echo "role-caps[{$role->name}-{$cap}]"; ?>' id='<?php echo "{$role->name}-{$cap}"; ?>' <?php echo $checked; ?> type='checkbox' value='true' />
|
105 |
-
<label for="<?php echo "{$role->name}-{$cap}"; ?>"><?php if ( $checked ) echo "<strong>$cap</strong>"; else echo "<em>$cap</em>"; ?></label>
|
106 |
-
</div>
|
107 |
-
|
108 |
-
<?php } // Endforeach ?>
|
109 |
-
</td>
|
110 |
-
</tr>
|
111 |
-
|
112 |
-
<tr>
|
113 |
-
<th style="width: 20%;">
|
114 |
-
<strong><?php _e('New Capabilities', 'members'); ?></strong>
|
115 |
-
</th>
|
116 |
-
|
117 |
-
<td>
|
118 |
-
<?php _e('Add up to six new capabilities with this form for this role (more can be added later). Please only use letters, numbers, and underscores.', 'members'); ?>
|
119 |
-
<br /><br />
|
120 |
-
<p style="margin: 0 0 5px 0; float:left; width: 32.67%;">
|
121 |
-
<input id="new-cap-1" name="new-cap[]" value="" size="20" />
|
122 |
-
</p>
|
123 |
-
<p style="margin: 0 0 5px 0; float:left; width: 32.67%;">
|
124 |
-
<input id="new-cap-2" name="new-cap[]" value="" size="20" />
|
125 |
-
</p>
|
126 |
-
<p style="margin: 0 0 5px 0; float:left; width: 32.67%;">
|
127 |
-
<input id="new-cap-3" name="new-cap[]" value="" size="20" />
|
128 |
-
</p>
|
129 |
-
<p style="margin: 0 0 5px 0; float:left; width: 32.67%;">
|
130 |
-
<input id="new-cap-4" name="new-cap[]" value="" size="20" />
|
131 |
-
</p>
|
132 |
-
<p style="margin: 0 0 5px 0; float:left; width: 32.67%;">
|
133 |
-
<input id="new-cap-5" name="new-cap[]" value="" size="20" />
|
134 |
-
</p>
|
135 |
-
<p style="margin: 0 0 5px 0; float:left; width: 32.67%;">
|
136 |
-
<input id="new-cap-6" name="new-cap[]" value="" size="20" />
|
137 |
-
</p>
|
138 |
-
|
139 |
-
</td>
|
140 |
-
</tr>
|
141 |
-
|
142 |
-
</table><!-- .form-table -->
|
143 |
-
|
144 |
-
</div><!-- .inside -->
|
145 |
-
|
146 |
-
</div><!-- .postbox .open -->
|
147 |
-
|
148 |
-
<p class="submit" style="clear:both;">
|
149 |
-
<input type="submit" name="Submit" class="button-primary" value="<?php _e('Update Role', 'members') ?>" />
|
150 |
-
<input type="hidden" name="edit-role-saved" value="Y" />
|
151 |
-
</p><!-- .submit -->
|
152 |
-
|
153 |
-
</form>
|
154 |
-
|
155 |
-
</div><!-- #poststuff -->
|
156 |
-
|
157 |
-
</div><!-- .wrap -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/edit-roles/edit-roles.php
DELETED
@@ -1,250 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The Edit Roles page displays all of the site's roles in an easy-to-read manner. Along with
|
4 |
-
* each role, the number of users and capabilities are displayed. Roles without users are
|
5 |
-
* considered "inactive" roles within this plugin's system.
|
6 |
-
*
|
7 |
-
* All roles can be edited. However, the current user's role and the default role cannot be
|
8 |
-
* deleted. To delete the current user's role, another logged-in user with the 'delete_roles'
|
9 |
-
* capability and a different role must perform this action. To delete the default role, the
|
10 |
-
* default must be changed under the General Options page in the WordPress admin.
|
11 |
-
*
|
12 |
-
* Users of roles that are deleted will be given the default role (typically 'Subscriber'). It
|
13 |
-
* is advisable to not make such a change with a large number of users because a new user
|
14 |
-
* object must be created to change each individual user.
|
15 |
-
*
|
16 |
-
* @todo Test deleting a role with 100s (even 1,000s) of users to see what sort of strain this has.
|
17 |
-
*
|
18 |
-
* @package Members
|
19 |
-
* @subpackage Components
|
20 |
-
*/
|
21 |
-
|
22 |
-
/* Get the global $members variable. */
|
23 |
-
global $members;
|
24 |
-
|
25 |
-
/* Current user in the admin. */
|
26 |
-
$user = new WP_User( $members->current_user->ID );
|
27 |
-
|
28 |
-
/* Set the available roles array.*/
|
29 |
-
$avail_roles = array();
|
30 |
-
|
31 |
-
/* Get all the users of the current blog. */
|
32 |
-
$users_of_blog = get_users_of_blog();
|
33 |
-
|
34 |
-
/* Loop through each user. */
|
35 |
-
foreach ( (array)$users_of_blog as $blog_user ) {
|
36 |
-
|
37 |
-
$meta_values = unserialize( $blog_user->meta_value );
|
38 |
-
|
39 |
-
foreach ( ( array) $meta_values as $role => $value ) {
|
40 |
-
|
41 |
-
if ( !isset( $avail_roles[$role] ) )
|
42 |
-
$avail_roles[$role] = 0;
|
43 |
-
|
44 |
-
++$avail_roles[$role];
|
45 |
-
}
|
46 |
-
}
|
47 |
-
|
48 |
-
/* Destroy the $users_of_blog variable. */
|
49 |
-
unset( $users_of_blog );
|
50 |
-
|
51 |
-
/* Can the current user delete_roles? */
|
52 |
-
if ( current_user_can( 'delete_roles' ) )
|
53 |
-
$delete_roles = true;
|
54 |
-
|
55 |
-
/* Get the default role. */
|
56 |
-
$default_role = get_option( 'default_role' );
|
57 |
-
|
58 |
-
/* Sort out the roles, active roles, and inactive roles. */
|
59 |
-
$all_roles = $active_roles = $inactive_roles = 0;
|
60 |
-
|
61 |
-
/* Loop through all of the roles, adding each role to its respective category (active, inactive). */
|
62 |
-
foreach ( $wp_roles->role_names as $role => $name ) {
|
63 |
-
$all_roles++;
|
64 |
-
if ( $avail_roles[$role] ) {
|
65 |
-
$active_roles++;
|
66 |
-
$active_roles_arr[$role] = $name;
|
67 |
-
}
|
68 |
-
else {
|
69 |
-
$inactive_roles++;
|
70 |
-
$inactive_roles_arr[$role] = $name;
|
71 |
-
}
|
72 |
-
}
|
73 |
-
|
74 |
-
/* Set variables for when role_status is active. */
|
75 |
-
if ( 'active' == $_GET['role_status'] ) {
|
76 |
-
$roles_loop_array = $active_roles_arr;
|
77 |
-
$title = __('Edit Active Roles', 'members');
|
78 |
-
$current_page = admin_url( esc_url( "users.php?page=roles&role_status=active" ) );
|
79 |
-
}
|
80 |
-
|
81 |
-
/* Set variables for when role_status is inactive. */
|
82 |
-
elseif ( 'inactive' == $_GET['role_status'] ) {
|
83 |
-
$roles_loop_array = $inactive_roles_arr;
|
84 |
-
$title = __('Edit Inactive Roles', 'members');
|
85 |
-
$current_page = admin_url( esc_url( "users.php?page=roles&role_status=inactive" ) );
|
86 |
-
}
|
87 |
-
|
88 |
-
/* Set default variables for when role_status is neither active nor inactive. */
|
89 |
-
else {
|
90 |
-
$roles_loop_array = $wp_roles->role_names;
|
91 |
-
$title = __('Edit Roles', 'members');
|
92 |
-
$current_page = admin_url( esc_url( "users.php?page=roles" ) );
|
93 |
-
}
|
94 |
-
|
95 |
-
/* Sort the roles array into alphabetical order. */
|
96 |
-
ksort( $roles_loop_array ); ?>
|
97 |
-
|
98 |
-
<div class="wrap">
|
99 |
-
|
100 |
-
<h2><?php echo $title; ?></h2>
|
101 |
-
|
102 |
-
<?php do_action( 'members_pre_edit_roles_form' ); // Available action hook for displaying messages. ?>
|
103 |
-
|
104 |
-
<div id="poststuff">
|
105 |
-
|
106 |
-
<form id="roles" action="<?php echo $current_page; ?>" method="post">
|
107 |
-
|
108 |
-
<?php wp_nonce_field( members_get_nonce( 'edit-roles' ) ); ?>
|
109 |
-
|
110 |
-
<ul class="subsubsub">
|
111 |
-
<li><a <?php if ( 'active' !== $_GET['role_status'] && 'inactive' !== $_GET['role_status'] ) echo 'class="current"'; ?> href="<?php echo admin_url( esc_url( "users.php?page=roles" ) ); ?>"><?php _e('All', 'members'); ?> <span class="count">(<span id="all_count"><?php echo $all_roles; ?></span>)</span></a> | </li>
|
112 |
-
<li><a <?php if ( 'active' == $_GET['role_status'] ) echo 'class="current"'; ?> href="<?php echo admin_url( esc_url( "users.php?page=roles&role_status=active" ) ); ?>"><?php _e('Active', 'members'); ?> <span class="count">(<span id="active_count"><?php echo $active_roles; ?></span>)</span></a> | </li>
|
113 |
-
<li><a <?php if ( 'inactive' == $_GET['role_status'] ) echo 'class="current"'; ?> href="<?php echo admin_url( esc_url( "users.php?page=roles&role_status=inactive" ) ); ?>"><?php _e('Inactive', 'members'); ?> <span class="count">(<span id="inactive_count"><?php echo $inactive_roles; ?></span>)</span></a></li>
|
114 |
-
</ul><!-- .subsubsub -->
|
115 |
-
|
116 |
-
<div class="tablenav">
|
117 |
-
|
118 |
-
<div class="alignleft actions">
|
119 |
-
<select name="action">
|
120 |
-
<option value="" selected="selected"><?php _e('Bulk Actions', 'members'); ?></option>
|
121 |
-
<?php if ( $delete_roles ) echo '<option value="delete">' . __('Delete', 'members') . '</option>'; ?>
|
122 |
-
</select>
|
123 |
-
<input type="submit" value="<?php _e('Apply', 'members'); ?>" name="doaction" id="doaction" class="button-secondary action" />
|
124 |
-
</div><!-- .alignleft .actions -->
|
125 |
-
|
126 |
-
<br class="clear" />
|
127 |
-
|
128 |
-
</div><!-- .tablenav -->
|
129 |
-
|
130 |
-
<table class="widefat fixed" cellspacing="0">
|
131 |
-
<thead>
|
132 |
-
<tr>
|
133 |
-
<th class='check-column'><input type='checkbox' /></th>
|
134 |
-
<th class='name-column'><?php _e('Role Name', 'members'); ?></th>
|
135 |
-
<th><?php _e('Role', 'members'); ?></th>
|
136 |
-
<th><?php _e('Users', 'members'); ?></th>
|
137 |
-
<th><?php _e('Capabilities', 'members'); ?></th>
|
138 |
-
</tr>
|
139 |
-
</thead>
|
140 |
-
|
141 |
-
<tfoot>
|
142 |
-
<tr>
|
143 |
-
<th class='check-column'><input type='checkbox' /></th>
|
144 |
-
<th class='name-column'><?php _e('Role Name', 'members'); ?></th>
|
145 |
-
<th><?php _e('Role', 'members'); ?></th>
|
146 |
-
<th><?php _e('Users', 'members'); ?></th>
|
147 |
-
<th><?php _e('Capabilities', 'members'); ?></th>
|
148 |
-
</tr>
|
149 |
-
</tfoot>
|
150 |
-
|
151 |
-
<tbody id="users" class="list:user user-list plugins">
|
152 |
-
|
153 |
-
<?php foreach ( $roles_loop_array as $role => $name ) { ?>
|
154 |
-
|
155 |
-
<?php $name = str_replace( '|User role', '', $name ); ?>
|
156 |
-
|
157 |
-
<tr valign="top" class="<?php if ( $avail_roles[$role] ) echo 'active'; else echo 'inactive'; ?>">
|
158 |
-
|
159 |
-
<th class="manage-column column-cb check-column">
|
160 |
-
<?php if ( $role !== $default_role && !$user->has_cap( $role ) ) { ?>
|
161 |
-
<input name="roles[<?php echo $role; ?>]" id="<?php echo $role; ?>" type="checkbox" value="<?php echo $role; ?>" />
|
162 |
-
<?php } ?>
|
163 |
-
</th><!-- .manage-column .column-cb .check-column -->
|
164 |
-
|
165 |
-
<td class='plugin-title'>
|
166 |
-
<?php $edit_link = admin_url( wp_nonce_url( "users.php?page=roles&action=edit&role={$role}", members_get_nonce( 'edit-roles' ) ) ); ?>
|
167 |
-
|
168 |
-
<a href="<?php echo $edit_link; ?>" title="<?php printf( __('Edit the %1$s role', 'members'), $name ); ?>"><strong><?php echo $name; ?></strong></a>
|
169 |
-
|
170 |
-
<div class="row-actions">
|
171 |
-
<a href="<?php echo $edit_link; ?>" title="<?php printf( __('Edit the %1$s role', 'members'), $name ); ?>"><? _e('Edit', 'members'); ?></a>
|
172 |
-
|
173 |
-
<?php /* Delete role link. */
|
174 |
-
if ( $delete_roles && $role !== $default_role && !$user->has_cap( $role ) ) {
|
175 |
-
$delete_link = admin_url( wp_nonce_url( "users.php?page=roles&action=delete&role={$role}", members_get_nonce( 'edit-roles' ) ) ); ?>
|
176 |
-
| <a href="<?php echo $delete_link; ?>" title="<?php printf( __('Delete the %1$s role', 'members'), $name ); ?>"><?php _e('Delete', 'members'); ?></a>
|
177 |
-
<?php }
|
178 |
-
|
179 |
-
/* Link to change the default role Options General. */
|
180 |
-
if ( $role == $default_role ) { ?>
|
181 |
-
| <a href="<?php echo admin_url( ( 'options-general.php' ) ); ?>" title="<?php _e('Change default role', 'members'); ?>"><?php _e('Default Role', 'members'); ?></a>
|
182 |
-
<?php }
|
183 |
-
|
184 |
-
/* If there are users, provide a link to the users page of that role. */
|
185 |
-
if ( $avail_roles[$role] ) { ?>
|
186 |
-
| <a href="<?php echo admin_url( esc_url( "users.php?role={$role}" ) ); ?>" title="<?php printf( __('View all users with the %1$s role', 'members'), $name ); ?>"><?php _e('View Users', 'members'); ?></a>
|
187 |
-
<?php } ?>
|
188 |
-
|
189 |
-
</div><!-- .row-actions -->
|
190 |
-
|
191 |
-
</td><!-- .plugin-title -->
|
192 |
-
|
193 |
-
<td class='desc'>
|
194 |
-
<p><?php echo $role; ?></p>
|
195 |
-
</td><!-- .desc -->
|
196 |
-
|
197 |
-
<td class='desc'>
|
198 |
-
<p><?php /* Check if any users are assigned to the role. If so, display a link to the role's users page. */
|
199 |
-
if ( 1 < $avail_roles[$role] )
|
200 |
-
echo '<a href="' . admin_url( esc_url( "users.php?role={$role}" ) ) . '" title="' . sprintf( __('View all users with the %1$s role', 'members'), $name ) . '">' . sprintf( __('%1$s Users', 'members'), $avail_roles[$role] ) . '</a>';
|
201 |
-
elseif ( 1 == $avail_roles[$role] )
|
202 |
-
echo '<a href="' . admin_url( esc_url( "users.php?role={$role}" ) ) . '" title="' . sprintf( __('View all users with the %1$s role', 'members'), $name ) . '">' . __('1 User', 'members') . '</a>';
|
203 |
-
else
|
204 |
-
echo '<em>' . __('No users have this role.', 'members') . '</em>';
|
205 |
-
?></p>
|
206 |
-
</td><!-- .desc -->
|
207 |
-
|
208 |
-
<td class='desc'>
|
209 |
-
<p>
|
210 |
-
<?php /* Check if the role has any capabilities. */
|
211 |
-
|
212 |
-
$role_2 = get_role( $role );
|
213 |
-
|
214 |
-
if ( is_array( $role_2->capabilities ) ) {
|
215 |
-
$cap_count = count( $role_2->capabilities );
|
216 |
-
if ( 1 < $cap_count ) printf( __('%1$s Capabilities', 'members'), $cap_count );
|
217 |
-
elseif ( 1 == $cap_count ) _e('1 Capability', 'members');
|
218 |
-
}
|
219 |
-
else
|
220 |
-
echo '<em>' . __('This role has no capabilities', 'members') . '</em>'; ?>
|
221 |
-
</p>
|
222 |
-
</td><!-- .desc -->
|
223 |
-
|
224 |
-
</tr><!-- .active .inactive -->
|
225 |
-
|
226 |
-
<?php } // End foreach ?>
|
227 |
-
|
228 |
-
</tbody><!-- #users .list:user .user-list .plugins -->
|
229 |
-
|
230 |
-
</table><!-- .widefat .fixed -->
|
231 |
-
|
232 |
-
<div class="tablenav">
|
233 |
-
|
234 |
-
<div class="alignleft actions">
|
235 |
-
<select name="action2">
|
236 |
-
<option value="" selected="selected"><?php _e('Bulk Actions', 'members'); ?></option>
|
237 |
-
<?php if ( $delete_roles ) echo '<option value="delete">' . __('Delete', 'members') . '</option>'; ?>
|
238 |
-
</select>
|
239 |
-
<input type="submit" value="<?php _e('Apply', 'members'); ?>" name="doaction2" id="doaction2" class="button-secondary action" />
|
240 |
-
</div><!-- .alignleft .actions -->
|
241 |
-
|
242 |
-
<br class="clear" />
|
243 |
-
|
244 |
-
</div><!-- .tablenav -->
|
245 |
-
|
246 |
-
</form><!-- #roles -->
|
247 |
-
|
248 |
-
</div><!-- #poststuff -->
|
249 |
-
|
250 |
-
</div><!-- .wrap -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/edit-roles/manage-roles.php
DELETED
@@ -1,160 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The main file of the Edit Roles component. This is where we run checks to see which page
|
4 |
-
* needs to be loaded. It also checks if actions have been performed on the Edit Roles page.
|
5 |
-
*
|
6 |
-
* @package Members
|
7 |
-
* @subpackage Components
|
8 |
-
*/
|
9 |
-
|
10 |
-
/* Get the $wp_roles variable and $wpdb. Do we need $wpdb (need to check)? */
|
11 |
-
global $wp_roles, $wpdb;
|
12 |
-
|
13 |
-
/* Get the current action performed by the user. */
|
14 |
-
$action = $_GET['action'];
|
15 |
-
|
16 |
-
/* If a role has been updated, set the action to 'role-updated'. */
|
17 |
-
if ( $_POST['edit-role-saved'] == 'Y' )
|
18 |
-
$action = 'role-updated';
|
19 |
-
|
20 |
-
/* If the bulk delete (first submit) has been selected. */
|
21 |
-
elseif ( 'delete' == $_POST['action'] && __('Apply', 'members') == $_POST['doaction'] )
|
22 |
-
$action = 'bulk-delete';
|
23 |
-
|
24 |
-
/* If the bulk delete (second submit) has been selected. */
|
25 |
-
elseif ( 'delete' == $_POST['action2'] && __('Apply', 'members') == $_POST['doaction2'] )
|
26 |
-
$action = 'bulk-delete';
|
27 |
-
|
28 |
-
/* Choose which actions to perform and pages to load according to the $action variable. */
|
29 |
-
switch( $action ) {
|
30 |
-
|
31 |
-
/* If the bulk delete was selected. */
|
32 |
-
case 'bulk-delete' :
|
33 |
-
|
34 |
-
/* Get the default role (we don't want to delete this). */
|
35 |
-
$default_role = get_option( 'default_role' );
|
36 |
-
|
37 |
-
/* Get all roles checked for deletion. */
|
38 |
-
$delete_roles = $_POST['roles'];
|
39 |
-
|
40 |
-
/* If no roles were selected, break. Just load up the edit roles page. */
|
41 |
-
if ( !is_array( $delete_roles ) ) {
|
42 |
-
require_once( 'edit-roles.php' );
|
43 |
-
break;
|
44 |
-
}
|
45 |
-
|
46 |
-
/* If roles were selected, let's delete some roles. */
|
47 |
-
else {
|
48 |
-
|
49 |
-
/* Verify the nonce. */
|
50 |
-
check_admin_referer( members_get_nonce( 'edit-roles' ) );
|
51 |
-
|
52 |
-
/* Send through roles deleted message. */
|
53 |
-
add_action( 'members_pre_edit_roles_form', 'members_message_roles_deleted' );
|
54 |
-
|
55 |
-
/* Loop through each of the selected roles. */
|
56 |
-
foreach ( $delete_roles as $role ) {
|
57 |
-
|
58 |
-
/* Get all users with the current role of the loop. */
|
59 |
-
$wp_user_search = new WP_User_Search( '', '', $role );
|
60 |
-
$change_users = $wp_user_search->get_results();
|
61 |
-
|
62 |
-
/* If there are users with the role, let's delete them and give them the default role. */
|
63 |
-
if ( isset( $change_users ) && is_array( $change_users ) ) {
|
64 |
-
|
65 |
-
/* Loop through each of the users we need to change. */
|
66 |
-
foreach( $change_users as $move_user ) {
|
67 |
-
$new_user = new WP_User( $move_user );
|
68 |
-
|
69 |
-
/* If the user has the role, remove it and set the default role. Do we need this additional check? */
|
70 |
-
if ( $new_user->has_cap( $role ) ) {
|
71 |
-
$new_user->remove_role( $role );
|
72 |
-
$new_user->set_role( $default_role );
|
73 |
-
}
|
74 |
-
}
|
75 |
-
}
|
76 |
-
|
77 |
-
/* Remove the role. */
|
78 |
-
remove_role( $role );
|
79 |
-
}
|
80 |
-
|
81 |
-
/* Load the edit roles page. */
|
82 |
-
require_once( 'edit-roles.php' );
|
83 |
-
break;
|
84 |
-
}
|
85 |
-
break;
|
86 |
-
|
87 |
-
/* If a single role has been chosen to be deleted. */
|
88 |
-
case 'delete' :
|
89 |
-
|
90 |
-
/* Verify the referer. */
|
91 |
-
check_admin_referer( members_get_nonce( 'edit-roles' ) );
|
92 |
-
|
93 |
-
/* Send role deleted message. */
|
94 |
-
add_action( 'members_pre_edit_roles_form', 'members_message_role_deleted' );
|
95 |
-
|
96 |
-
/* Get the default role. */
|
97 |
-
$default_role = get_option( 'default_role' );
|
98 |
-
|
99 |
-
/* Get the role we want to delete. */
|
100 |
-
$role = $_GET['role'];
|
101 |
-
|
102 |
-
/* Get all users with the role to be deleted. */
|
103 |
-
$wp_user_search = new WP_User_Search( '', '', $role );
|
104 |
-
$change_users = $wp_user_search->get_results();
|
105 |
-
|
106 |
-
/* If there are users with the role we're deleting, loop through them, remove the role, and set the default role. */
|
107 |
-
if ( isset( $change_users ) && is_array( $change_users ) ) {
|
108 |
-
foreach( $change_users as $move_user ) {
|
109 |
-
$new_user = new WP_User( $move_user );
|
110 |
-
|
111 |
-
/* If the user has the role, remove it and set the default. Do we need this check? */
|
112 |
-
if ( $new_user->has_cap( $role ) ) {
|
113 |
-
$new_user->remove_role( $role );
|
114 |
-
$new_user->set_role( $default_role );
|
115 |
-
}
|
116 |
-
}
|
117 |
-
}
|
118 |
-
|
119 |
-
/* Remove the role. */
|
120 |
-
remove_role( $role );
|
121 |
-
|
122 |
-
/* Load the edit roles page. */
|
123 |
-
require_once( 'edit-roles.php' );
|
124 |
-
break;
|
125 |
-
|
126 |
-
/* If a role has been updated. Is this needed still? */
|
127 |
-
case 'role-updated' :
|
128 |
-
|
129 |
-
/* Set some default variables. */
|
130 |
-
$title = __('Edit Role', 'members');
|
131 |
-
$role = $_GET['role'];
|
132 |
-
|
133 |
-
/* Load the edit role form. */
|
134 |
-
require_once( 'edit-role-form.php' );
|
135 |
-
break;
|
136 |
-
|
137 |
-
/* If a role has been selected to be edited. */
|
138 |
-
case 'edit' :
|
139 |
-
|
140 |
-
/* Verify the referer. */
|
141 |
-
check_admin_referer( members_get_nonce( 'edit-roles' ) );
|
142 |
-
|
143 |
-
/* Set some default variables. */
|
144 |
-
$title = __('Edit Role', 'members');
|
145 |
-
$role = $_GET['role'];
|
146 |
-
|
147 |
-
/* Load the edit role form. */
|
148 |
-
require_once( 'edit-role-form.php' );
|
149 |
-
|
150 |
-
break;
|
151 |
-
|
152 |
-
/* The default page is the edit roles page. */
|
153 |
-
default :
|
154 |
-
|
155 |
-
/* Load the edit roles page.*/
|
156 |
-
require_once( 'edit-roles.php' );
|
157 |
-
break;
|
158 |
-
}
|
159 |
-
|
160 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/new-roles/default.php
DELETED
@@ -1,67 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The New Roles component allows users with the 'create_roles' capability to
|
4 |
-
* create new roles for use on the site.
|
5 |
-
*
|
6 |
-
* @package Members
|
7 |
-
* @subpackage Components
|
8 |
-
*/
|
9 |
-
|
10 |
-
/* Add message when no role has the 'create_roles' capability. */
|
11 |
-
add_action( 'members_pre_components_form', 'members_message_no_create_roles' );
|
12 |
-
add_action( 'members_pre_new_role_form', 'members_message_no_create_roles' );
|
13 |
-
|
14 |
-
/**
|
15 |
-
* Returns an array of capabilities that should be set on the New Role admin screen.
|
16 |
-
* By default, the only capability checked is 'read' because it's fairly common.
|
17 |
-
*
|
18 |
-
* @since 0.1
|
19 |
-
* @return $capabilities array Default capabilities for new roles.
|
20 |
-
*/
|
21 |
-
function members_new_role_default_capabilities() {
|
22 |
-
|
23 |
-
$capabilities = array( 'read' );
|
24 |
-
|
25 |
-
/* Filters should return an array. */
|
26 |
-
return apply_filters( 'members_new_role_default_capabilities', $capabilities );
|
27 |
-
}
|
28 |
-
|
29 |
-
/**
|
30 |
-
* Displays a message if the New Roles component is active and no
|
31 |
-
* roles have the 'create_roles' capability.
|
32 |
-
*
|
33 |
-
* @since 0.1
|
34 |
-
*/
|
35 |
-
function members_message_no_create_roles() {
|
36 |
-
if ( is_active_members_component( 'new_roles' ) && !members_check_for_cap( 'create_roles' ) ) {
|
37 |
-
$message = __('To create new roles, you must give the <code>create_roles</code> capability to at least one role.', 'members');
|
38 |
-
members_admin_message( '', $message );
|
39 |
-
}
|
40 |
-
}
|
41 |
-
|
42 |
-
/**
|
43 |
-
* Loads the settings pages for the New Roles component. For a logged-in
|
44 |
-
* user to see this additional page, they must have the 'create_roles' capability.
|
45 |
-
* In order to gain this capability, one should use the Edit Roles component to give
|
46 |
-
* a role or multiple roles this capability.
|
47 |
-
*
|
48 |
-
* @since 0.1
|
49 |
-
* @uses add_submenu_page() Adds a submenu to the users menu.
|
50 |
-
*/
|
51 |
-
function members_component_load_new_roles() {
|
52 |
-
global $members_new_role_page;
|
53 |
-
|
54 |
-
/* Create the New Role page. */
|
55 |
-
$members_new_roles_page = add_submenu_page( 'users.php', __('New Role', 'members'), __('New Role', 'members'), 'create_roles', 'new-role', 'members_new_role_page' );
|
56 |
-
}
|
57 |
-
|
58 |
-
/**
|
59 |
-
* Loads the New Role page when its needed.
|
60 |
-
*
|
61 |
-
* @since 0.1
|
62 |
-
*/
|
63 |
-
function members_new_role_page() {
|
64 |
-
require_once( MEMBERS_COMPONENTS . '/new-roles/new-role.php' );
|
65 |
-
}
|
66 |
-
|
67 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/new-roles/new-role.php
DELETED
@@ -1,126 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Page for creating new roles. Displays the new role form and creates
|
4 |
-
* a new role if a new role has been submitted.
|
5 |
-
*
|
6 |
-
* @package Members
|
7 |
-
* @subpackage Components
|
8 |
-
*/
|
9 |
-
|
10 |
-
/* Check if the form has been submitted. */
|
11 |
-
if ( $_POST['new-role-submit'] == 'Y' ) {
|
12 |
-
|
13 |
-
/* Verify the nonce. */
|
14 |
-
check_admin_referer( members_get_nonce( 'new-role' ) );
|
15 |
-
|
16 |
-
/* Check if any capabilities were selected. */
|
17 |
-
if ( !empty( $_POST['capabilities'] ) && is_array( $_POST['capabilities'] ) )
|
18 |
-
$new_user_caps = $_POST['capabilities'];
|
19 |
-
|
20 |
-
/* If no capabilities were selected, set the variable to null. */
|
21 |
-
else
|
22 |
-
$new_user_caps = null;
|
23 |
-
|
24 |
-
/* Check if both a role name and role were submitted. */
|
25 |
-
if ( $_POST['role-name'] && $_POST['role-id'] ) {
|
26 |
-
|
27 |
-
/* Sanitize the new role, removing any unwanted characters. */
|
28 |
-
$new_role = strip_tags( $_POST['role-id'] );
|
29 |
-
$new_role = str_replace( array( '-', ' ', ' ' ) , '_', $new_role );
|
30 |
-
$new_role = preg_replace('/[^A-Za-z0-9_]/', '', $new_role );
|
31 |
-
$new_role = strtolower( $new_role );
|
32 |
-
|
33 |
-
/* Sanitize the new role name/label. We just want to strip any tags here. */
|
34 |
-
$new_role_name = strip_tags( $_POST['role-name'] ); // Should we use something like the WP user sanitation method?
|
35 |
-
|
36 |
-
/* Add a new role with the data input. */
|
37 |
-
$new_role_added = add_role( $new_role, $new_role_name, $new_user_caps );
|
38 |
-
|
39 |
-
} // End check for role and role name
|
40 |
-
|
41 |
-
} // End check for form submit ?>
|
42 |
-
|
43 |
-
<div class="wrap">
|
44 |
-
|
45 |
-
<h2><?php _e('Add a new user role', 'members'); ?></h2>
|
46 |
-
|
47 |
-
<?php if ( $new_role_added ) members_admin_message( '', sprintf( __('The %1$s role has been created.', 'members'), $_POST['role-name'] ) ); ?>
|
48 |
-
|
49 |
-
<?php do_action( 'members_pre_new_role_form' ); // Available action hook for displaying messages. ?>
|
50 |
-
|
51 |
-
<div id="poststuff">
|
52 |
-
|
53 |
-
<form name="form0" method="post" action="<?php echo admin_url( "users.php?page=new-role" ); ?>" style="border:none;background:transparent;">
|
54 |
-
|
55 |
-
<?php wp_nonce_field( members_get_nonce( 'new-role' ) ); ?>
|
56 |
-
|
57 |
-
<div class="postbox open">
|
58 |
-
|
59 |
-
<h3><?php _e('Create a new user role', 'members'); ?></h3>
|
60 |
-
|
61 |
-
<div class="inside">
|
62 |
-
|
63 |
-
<table class="form-table">
|
64 |
-
<tr>
|
65 |
-
<th style="width: 20%;">
|
66 |
-
<strong><?php _e('About:', 'members'); ?></strong>
|
67 |
-
</th>
|
68 |
-
<td>
|
69 |
-
<?php printf( __('Here you can create as many new roles as you\'d like. Roles are a way of grouping your users. You can give individual users a role from the <a href="%1$s" title="Manage Users">user management</a> screen. This will allow you to do specific things for users with a specific role. Once you\'ve created a new role, you can manage it with the <em>Edit Roles</em> component.', 'members'), admin_url( 'users.php' ) ); ?>
|
70 |
-
</td>
|
71 |
-
</tr>
|
72 |
-
|
73 |
-
<tr>
|
74 |
-
<th style="width: 20%;">
|
75 |
-
<label for="role-id"><strong><?php _e('Role:', 'members'); ?></strong></label>
|
76 |
-
</th>
|
77 |
-
<td>
|
78 |
-
<?php _e('<strong>Required:</strong> Enter the name of your role. This is a unique key that should only contain numbers, letters, and underscores. Please don\'t add spaces or other odd characters.', 'members'); ?>
|
79 |
-
<br />
|
80 |
-
<input id="role-id" name="role-id" value="" size="30" />
|
81 |
-
</td>
|
82 |
-
</tr>
|
83 |
-
|
84 |
-
<tr>
|
85 |
-
<th style="width: 20%;">
|
86 |
-
<label for="role-name"><strong><?php _e('Role Label:', 'members'); ?></strong></label>
|
87 |
-
</th>
|
88 |
-
<td>
|
89 |
-
<?php _e('<strong>Required:</strong> Enter a label your role. This will be the title that is displayed in most cases.', 'members'); ?>
|
90 |
-
<br />
|
91 |
-
<input id="role-name" name="role-name" value="" size="30" />
|
92 |
-
</td>
|
93 |
-
</tr>
|
94 |
-
|
95 |
-
<tr>
|
96 |
-
<th style="width: 20%;">
|
97 |
-
<strong><?php _e('Capabilities:', 'members'); ?></strong>
|
98 |
-
</th>
|
99 |
-
<td>
|
100 |
-
<?php _e('<strong>Optional:</strong> Select which capabilities your new role should have. These may be changed later using the <em>Edit Roles</em> component.', 'members'); ?>
|
101 |
-
<br /><br />
|
102 |
-
<?php foreach ( members_get_capabilities() as $cap ) : ?>
|
103 |
-
<div style="float: left; width: 32.67%; margin: 0 0 5px 0;">
|
104 |
-
<input name='capabilities[<?php echo $cap; ?>]' id='capabilities-<?php echo $cap; ?>' type="checkbox" value='<?php echo $cap; ?>' <?php if ( in_array( $cap, members_new_role_default_capabilities() ) ) echo "checked='checked'"; ?> />
|
105 |
-
<label for="capabilities-<?php echo $cap; ?>"><?php if ( in_array( $cap, members_new_role_default_capabilities() ) ) echo "<strong>$cap</strong>"; else echo $cap; ?></label>
|
106 |
-
</div>
|
107 |
-
<?php endforeach; ?>
|
108 |
-
</td>
|
109 |
-
</tr>
|
110 |
-
|
111 |
-
</table><!-- .form-table -->
|
112 |
-
|
113 |
-
</div><!-- .inside -->
|
114 |
-
|
115 |
-
</div><!-- .postbox -->
|
116 |
-
|
117 |
-
<p class="submit">
|
118 |
-
<input type="submit" name="Submit" class="button-primary" value="<?php _e('Create Role', 'members') ?>" />
|
119 |
-
<input type="hidden" name="new-role-submit" value="Y" />
|
120 |
-
</p><!-- .submit -->
|
121 |
-
|
122 |
-
</form>
|
123 |
-
|
124 |
-
</div><!-- #poststuff -->
|
125 |
-
|
126 |
-
</div><!-- .poststuff -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/private-blog/default.php
DELETED
@@ -1,28 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The Private Blog component is for making your site completely private to people that are
|
4 |
-
* not logged into the site. If not logged in, it will redirect all people to the 'wp-login.php' page.
|
5 |
-
*
|
6 |
-
* @todo Make sure 'blog_public' is set to true.
|
7 |
-
* @todo Disable content from feeds or add an additional feed component.
|
8 |
-
*
|
9 |
-
* @package Members
|
10 |
-
* @subpackage Components
|
11 |
-
*/
|
12 |
-
|
13 |
-
/* Redirects users to the login page. */
|
14 |
-
add_action( 'template_redirect', 'members_please_log_in' );
|
15 |
-
|
16 |
-
/**
|
17 |
-
* Redirects users that are not logged in to the 'wp-login.php' page.
|
18 |
-
*
|
19 |
-
* @since 0.1
|
20 |
-
* @uses is_user_logged_in() Checks if the current user is logged in.
|
21 |
-
* @uses auth_redirect() Redirects people that are not logged in to the login page.
|
22 |
-
*/
|
23 |
-
function members_please_log_in() {
|
24 |
-
if ( !is_user_logged_in() && !strpos( $_SERVER['SCRIPT_NAME'], 'wp-login.php' ) )
|
25 |
-
auth_redirect();
|
26 |
-
}
|
27 |
-
|
28 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/shortcodes/shortcodes.php
DELETED
@@ -1,163 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The Shortcodes component provides additional [shortcodes] for use within posts/pages
|
4 |
-
* and any other shortcode-capable area.
|
5 |
-
*
|
6 |
-
* @todo need a [hide] shortcode or allow [access] to do the opposite.
|
7 |
-
*
|
8 |
-
* @package Members
|
9 |
-
* @subpackage Components
|
10 |
-
*/
|
11 |
-
|
12 |
-
/* Add shortcodes. */
|
13 |
-
add_shortcode( 'login-form', 'members_login_form_shortcode' );
|
14 |
-
add_shortcode( 'access', 'members_access_check_shortcode' );
|
15 |
-
add_shortcode( 'feed', 'members_access_check_shortcode' );
|
16 |
-
add_shortcode( 'is_user_logged_in', 'members_is_user_logged_in_shortcode' );
|
17 |
-
add_shortcode( 'get_avatar', 'members_get_avatar_shortcode' );
|
18 |
-
add_shortcode( 'avatar', 'members_get_avatar_shortcode' );
|
19 |
-
|
20 |
-
/**
|
21 |
-
* Displays an avatar for any user. At the very least, an ID or email must
|
22 |
-
* be input. Otherwise, we can't know which avatar to grab.
|
23 |
-
*
|
24 |
-
* Users should input the code as [get_avatar id="30" alt="Justin Tadlock"].
|
25 |
-
*
|
26 |
-
* @since 0.1
|
27 |
-
* @uses get_avatar() Grabs the users avatar.
|
28 |
-
* @param $attr array The shortcode attributes.
|
29 |
-
*/
|
30 |
-
function members_get_avatar_shortcode( $attr ) {
|
31 |
-
|
32 |
-
/* Set up our default attributes. */
|
33 |
-
$defaults = array(
|
34 |
-
'id' => '',
|
35 |
-
'email' => '',
|
36 |
-
'size' => 96,
|
37 |
-
'default' => '',
|
38 |
-
'alt' => ''
|
39 |
-
);
|
40 |
-
|
41 |
-
/* Merge the input attributes and the defaults. */
|
42 |
-
extract( shortcode_atts( $defaults, $attr ) );
|
43 |
-
|
44 |
-
/* If an email was input, use it. */
|
45 |
-
if ( $email )
|
46 |
-
$id_or_email = $email;
|
47 |
-
|
48 |
-
/* If no email was input, use the ID. */
|
49 |
-
else
|
50 |
-
$id_or_email = $id;
|
51 |
-
|
52 |
-
/* Return the avatar. */
|
53 |
-
return get_avatar( $id_or_email, $size, $default, $alt );
|
54 |
-
}
|
55 |
-
|
56 |
-
/**
|
57 |
-
* Displays content if the user viewing it is currently logged in. This also blocks
|
58 |
-
* content from showing in feeds.
|
59 |
-
*
|
60 |
-
* Content needs to be wrapped with this shortcode like
|
61 |
-
* [is_user_logged_in]This is content.[/is_user_logged_in].
|
62 |
-
*
|
63 |
-
* @todo Provide a filter hook for displaying a "please log in to view" message.
|
64 |
-
*
|
65 |
-
* @since 0.1
|
66 |
-
* @uses is_feed() Checks if the content is currently being shown in a feed.
|
67 |
-
* @uses is_user_logged_in() Checks if the current user is logged in.
|
68 |
-
* @param $attr array Attributes for the shortcode (not usefule here).
|
69 |
-
* @param $content string The content located between the opening and closing of the shortcode.
|
70 |
-
* @return $content string The content to be shown.
|
71 |
-
*/
|
72 |
-
function members_is_user_logged_in_shortcode( $attr, $content = null ) {
|
73 |
-
|
74 |
-
/* If it is a feed or the user is not logged in, return nothing. */
|
75 |
-
if ( !is_feed() || !is_user_logged_in() )
|
76 |
-
return '';
|
77 |
-
|
78 |
-
/* Return the content. */
|
79 |
-
return $content;
|
80 |
-
}
|
81 |
-
|
82 |
-
/**
|
83 |
-
* Content that should only be shown in feed readers. Can be useful for
|
84 |
-
* displaying feed-specific items.
|
85 |
-
*
|
86 |
-
* Content should be wrapped like [feed]This is content.[/feed].
|
87 |
-
*
|
88 |
-
* @since 0.1
|
89 |
-
* @uses is_feed() Checks if the content is currently being shown in a feed.
|
90 |
-
* @uses is_null() Checks if there is any content.
|
91 |
-
* @param $attr array Attributes for the shortcode (not currently useful but may later add a $display/$show parameter).
|
92 |
-
* @param $content string The content located between the opening and closing of the shortcode.
|
93 |
-
* @return $content string The content to be shown.
|
94 |
-
*/
|
95 |
-
function members_feed_shortcode( $attr, $content = null ) {
|
96 |
-
|
97 |
-
/* If not feed or no content exists, return nothing. */
|
98 |
-
if ( !is_feed() || is_null( $content ) )
|
99 |
-
return '';
|
100 |
-
|
101 |
-
/* Return the content. */
|
102 |
-
return $content;
|
103 |
-
}
|
104 |
-
|
105 |
-
/**
|
106 |
-
* Provide/restrict access to specific roles or capabilities. This content should
|
107 |
-
* not be shown in feeds.
|
108 |
-
*
|
109 |
-
* @todo Allow multiple roles and capabilities to be input (comma-separated).
|
110 |
-
*
|
111 |
-
* Content should be wrapped like [access role="editor"]This is content.[/access].
|
112 |
-
*
|
113 |
-
* @since 0.1
|
114 |
-
* @uses current_user_can() Checks if the current user has the role or capability.
|
115 |
-
* @uses is_feed() Checks if we're currently viewing a feed.
|
116 |
-
* @param $attr array The shortcode attributes.
|
117 |
-
* @param $content string The content that should be shown/restricted.
|
118 |
-
* @return $content string The content if it should be shown. Else, return nothing.
|
119 |
-
*/
|
120 |
-
function members_access_check_shortcode( $attr, $content = null ) {
|
121 |
-
|
122 |
-
/* Set up the default attributes. */
|
123 |
-
$defaults = array(
|
124 |
-
'capability' => '',
|
125 |
-
'role' => '',
|
126 |
-
'feed' => false,
|
127 |
-
);
|
128 |
-
|
129 |
-
/* Merge the input attributes and the defaults. */
|
130 |
-
extract( shortcode_atts( $defaults, $attr ) );
|
131 |
-
|
132 |
-
/* If the current user has the input capability, show the content. */
|
133 |
-
if ( $capability && current_user_can( $capability ) )
|
134 |
-
return $content;
|
135 |
-
|
136 |
-
/* If the current user has the input role, show the content. */
|
137 |
-
elseif ( $role && current_user_can( $role ) )
|
138 |
-
return $content;
|
139 |
-
|
140 |
-
/* If $feed was set to true and we're currently displaying a feed, show the content. */
|
141 |
-
elseif ( $feed && 'false' !== $feed && is_feed() )
|
142 |
-
return $content;
|
143 |
-
|
144 |
-
/* If there is no content, return nothing. */
|
145 |
-
elseif ( !is_null( $content ) )
|
146 |
-
return '';
|
147 |
-
|
148 |
-
/* Return nothing if none of the conditions have been met. */
|
149 |
-
return '';
|
150 |
-
}
|
151 |
-
|
152 |
-
/**
|
153 |
-
* Displays a login form.
|
154 |
-
*
|
155 |
-
* @since 0.1
|
156 |
-
* @uses members_get_login_form() Displays the login form.
|
157 |
-
*/
|
158 |
-
function members_login_form_shortcode() {
|
159 |
-
|
160 |
-
return members_get_login_form();
|
161 |
-
}
|
162 |
-
|
163 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/template-tags/template-tags.php
DELETED
@@ -1,88 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The Template Tags component is for adding functions that could be useful within the
|
4 |
-
* template files of a WordPress theme.
|
5 |
-
*
|
6 |
-
* @todo Add members_count_users( $role = '' )
|
7 |
-
*
|
8 |
-
* @package Members
|
9 |
-
* @subpackage Components
|
10 |
-
*/
|
11 |
-
|
12 |
-
/**
|
13 |
-
* Use to put an author box at the end/beginning of a post. This template
|
14 |
-
* tag should be used within The Loop.
|
15 |
-
*
|
16 |
-
* @since 0.1
|
17 |
-
* @uses get_avatar() Gets the current author's avatar.
|
18 |
-
* @uses get_the_author_meta() Grabs information about the author.
|
19 |
-
*/
|
20 |
-
function members_author_profile() { ?>
|
21 |
-
<div class="author-profile vcard">
|
22 |
-
<?php echo get_avatar( get_the_author_meta( 'user_email' ), '100', '', get_the_author_meta( 'display_name' ) ); ?>
|
23 |
-
<h4 class="author-name fn n"><?php the_author_posts_link(); ?></h4>
|
24 |
-
<p class="author-description author-bio">
|
25 |
-
<?php the_author_meta( 'description' ); ?>
|
26 |
-
</p>
|
27 |
-
</div>
|
28 |
-
<?php
|
29 |
-
}
|
30 |
-
|
31 |
-
if ( !function_exists( 'has_role' ) ) {
|
32 |
-
|
33 |
-
/**
|
34 |
-
* Checks if a given ID of a user has a specific role.
|
35 |
-
*
|
36 |
-
* @since 0.1
|
37 |
-
* @uses WP_User() Gets a user object based on an ID.
|
38 |
-
* @param $role string Role to check for against the user.
|
39 |
-
* @param $user_id int The ID of the user to check.
|
40 |
-
* @return true|false bool Whether the user has the role.
|
41 |
-
*/
|
42 |
-
function has_role( $role = '', $user_id = '' ) {
|
43 |
-
|
44 |
-
/* If no role or user ID was added, return false. */
|
45 |
-
if ( !$role || !$user_id )
|
46 |
-
return false;
|
47 |
-
|
48 |
-
/* Make sure the ID is an integer. */
|
49 |
-
$user_id = (int)$user_id;
|
50 |
-
|
51 |
-
/* Get the user object. */
|
52 |
-
$user = new WP_User( $user_id );
|
53 |
-
|
54 |
-
/* If the user has the role, return true. */
|
55 |
-
if ( $user->has_cap( $role ) )
|
56 |
-
return true;
|
57 |
-
|
58 |
-
/* Return false if the user doesn't have the role. */
|
59 |
-
return false;
|
60 |
-
}
|
61 |
-
}
|
62 |
-
|
63 |
-
if ( !function_exists( 'current_user_has_role' ) ) {
|
64 |
-
|
65 |
-
/**
|
66 |
-
* Checks if the currently logged-in user has a specific role.
|
67 |
-
*
|
68 |
-
* @since 0.1
|
69 |
-
* @uses current_user_can() Checks whether the user has the given role.
|
70 |
-
* @param $role string The role to check for.
|
71 |
-
* @return true|false bool Whether the user has the role.
|
72 |
-
*/
|
73 |
-
function current_user_has_role( $role = '' ) {
|
74 |
-
|
75 |
-
/* If no role was input, return false. */
|
76 |
-
if ( !$role )
|
77 |
-
return false;
|
78 |
-
|
79 |
-
/* If the current user has the role, return true. */
|
80 |
-
if ( current_user_can( $role ) )
|
81 |
-
return true;
|
82 |
-
|
83 |
-
/* If the current user doesn't have the role, return false. */
|
84 |
-
return false;
|
85 |
-
}
|
86 |
-
}
|
87 |
-
|
88 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/widgets/login.php
DELETED
@@ -1,174 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Creates a widget that allows users to add a login form to a widget area.
|
4 |
-
*
|
5 |
-
* @package Members
|
6 |
-
* @subpackage Components
|
7 |
-
*/
|
8 |
-
|
9 |
-
class Members_Widget_Login extends WP_Widget {
|
10 |
-
|
11 |
-
function Members_Widget_Login() {
|
12 |
-
$widget_ops = array( 'classname' => 'login', 'description' => __('A widget that allows users to log into your site.', 'widgets-reloaded') );
|
13 |
-
$control_ops = array( 'width' => 700, 'height' => 350, 'id_base' => 'members-widget-login' );
|
14 |
-
$this->WP_Widget( 'members-widget-login', __('Login Form', 'widgets-reloaded'), $widget_ops, $control_ops );
|
15 |
-
}
|
16 |
-
|
17 |
-
function widget( $args, $instance ) {
|
18 |
-
global $user_identity, $user_ID;
|
19 |
-
|
20 |
-
extract( $args );
|
21 |
-
|
22 |
-
$title = apply_filters( 'widget_title', $instance['title'] );
|
23 |
-
|
24 |
-
$username_label = $instance['username_label'];
|
25 |
-
$password_label = $instance['password_label'];
|
26 |
-
$submit_text = $instance['submit_text'];
|
27 |
-
$remember_text = $instance['remember_text'];
|
28 |
-
|
29 |
-
$logged_in_text = apply_filters( 'widget_text', $instance['logged_in_text'] );
|
30 |
-
$logged_out_text = apply_filters( 'widget_text', $instance['logged_out_text'] );
|
31 |
-
|
32 |
-
$show_avatar = isset( $instance['show_avatar'] ) ? $instance['show_avatar'] : false;
|
33 |
-
|
34 |
-
echo $before_widget;
|
35 |
-
|
36 |
-
if ( $title )
|
37 |
-
echo "\n\t\t\t" . $before_title . $title . $after_title;
|
38 |
-
|
39 |
-
if ( is_user_logged_in() ) {
|
40 |
-
|
41 |
-
if ( $show_avatar )
|
42 |
-
echo get_avatar( $user_ID );
|
43 |
-
|
44 |
-
if ( $logged_in_text )
|
45 |
-
echo $logged_in_text;
|
46 |
-
|
47 |
-
}
|
48 |
-
else {
|
49 |
-
if ( $show_avatar )
|
50 |
-
echo get_avatar( $user_ID );
|
51 |
-
|
52 |
-
if ( $logged_out_text )
|
53 |
-
echo $logged_out_text;
|
54 |
-
|
55 |
-
$login = '<div class="clear log-in login-form">';
|
56 |
-
|
57 |
-
$login .= '<form class="log-in" action="' . get_bloginfo( 'wpurl' ) . '/wp-login.php" method="post">';
|
58 |
-
|
59 |
-
$login .= '<p class="text-input">';
|
60 |
-
$login .= '<label class="text" for="log">' . $username_label . '</label>';
|
61 |
-
$login .= '<input class="field" type="text" name="log" id="log" value="' . esc_attr( $user_login ) . '" size="23" />';
|
62 |
-
$login .= '</p>';
|
63 |
-
|
64 |
-
$login .= '<p class="text-input">';
|
65 |
-
$login .= '<label class="text" for="pwd">' . $password_label . '</label>';
|
66 |
-
$login .= '<input class="field" type="password" name="pwd" id="pwd" size="23" />';
|
67 |
-
$login .= '</p>';
|
68 |
-
|
69 |
-
$login .= '<div class="clear">';
|
70 |
-
$login .= '<input type="submit" name="submit" value="' . $submit_text . '" class="log-in" />';
|
71 |
-
$login .= '<label class="remember"><input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> ' . $remember_text . '</label>';
|
72 |
-
$login .= '<input type="hidden" name="redirect_to" value="' . $_SERVER['REQUEST_URI'] . '"/>';
|
73 |
-
$login .= '</div>';
|
74 |
-
|
75 |
-
$login .= '</form>';
|
76 |
-
|
77 |
-
$login .= '</div>';
|
78 |
-
|
79 |
-
echo $login;
|
80 |
-
}
|
81 |
-
|
82 |
-
echo $after_widget;
|
83 |
-
}
|
84 |
-
|
85 |
-
function update( $new_instance, $old_instance ) {
|
86 |
-
$instance = $old_instance;
|
87 |
-
$instance['title'] = strip_tags( $new_instance['title'] );
|
88 |
-
$instance['username_label'] = strip_tags( $new_instance['username_label'] );
|
89 |
-
$instance['password_label'] = strip_tags( $new_instance['password_label'] );
|
90 |
-
$instance['submit_text'] = strip_tags( $new_instance['submit_text'] );
|
91 |
-
$instance['remember_text'] = strip_tags( $new_instance['remember_text'] );
|
92 |
-
$instance['show_avatar'] = $new_instance['show_avatar'];
|
93 |
-
|
94 |
-
if ( current_user_can('unfiltered_html') ) {
|
95 |
-
$instance['logged_in_text'] = $new_instance['logged_in_text'];
|
96 |
-
$instance['logged_out_text'] = $new_instance['logged_out_text'];
|
97 |
-
}
|
98 |
-
else {
|
99 |
-
$instance['logged_in_text'] = wp_filter_post_kses( $new_instance['logged_in_text'] );
|
100 |
-
$instance['logged_out_text'] = wp_filter_post_kses( $new_instance['logged_out_text'] );
|
101 |
-
}
|
102 |
-
|
103 |
-
return $instance;
|
104 |
-
}
|
105 |
-
|
106 |
-
function form( $instance ) {
|
107 |
-
|
108 |
-
//Defaults
|
109 |
-
$defaults = array(
|
110 |
-
'title' => __('Log In', 'widgets-reloaded'),
|
111 |
-
'username_label' => __('Username:', 'members'),
|
112 |
-
'password_label' => __('Password', 'members'),
|
113 |
-
'submit_text' => __('Log In', 'members'),
|
114 |
-
'remember_text' => __('Remember me?', 'members'),
|
115 |
-
'show_avatar' => true,
|
116 |
-
'logged_out_text' => __('Please log into the site.', 'members'),
|
117 |
-
'logged_in_text' => __('You are currently logged in.', 'members')
|
118 |
-
);
|
119 |
-
|
120 |
-
$instance = wp_parse_args( (array) $instance, $defaults );
|
121 |
-
$logged_in_text = format_to_edit( $instance['logged_in_text'] );
|
122 |
-
$logged_out_text = format_to_edit( $instance['logged_out_text'] ); ?>
|
123 |
-
|
124 |
-
<div style="float: left; width: 48%;">
|
125 |
-
<p>
|
126 |
-
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title:', 'widgets-reloaded'); ?></label>
|
127 |
-
<input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" style="width:100%;" />
|
128 |
-
</p>
|
129 |
-
|
130 |
-
<p>
|
131 |
-
<label for="<?php echo $this->get_field_id( 'logged_out_text' ); ?>"><?php _e('Logged out text:', 'members'); ?></label>
|
132 |
-
<textarea class="widefat" rows="3" cols="20" id="<?php echo $this->get_field_id('logged_out_text'); ?>" name="<?php echo $this->get_field_name('logged_out_text'); ?>" style="width:100%;"><?php echo $logged_out_text; ?></textarea>
|
133 |
-
</p>
|
134 |
-
|
135 |
-
<p>
|
136 |
-
<label for="<?php echo $this->get_field_id( 'logged_in_text' ); ?>"><?php _e('Logged in text:', 'members'); ?></label>
|
137 |
-
<textarea class="widefat" rows="3" cols="20" id="<?php echo $this->get_field_id('logged_in_text'); ?>" name="<?php echo $this->get_field_name('logged_in_text'); ?>" style="width:100%;"><?php echo $logged_in_text; ?></textarea>
|
138 |
-
</p>
|
139 |
-
</div>
|
140 |
-
|
141 |
-
<div style="float: right; width: 48%;">
|
142 |
-
|
143 |
-
<p>
|
144 |
-
<label for="<?php echo $this->get_field_id( 'show_avatar' ); ?>">
|
145 |
-
<input class="checkbox" type="checkbox" <?php checked( $instance['show_avatar'], true ); ?> id="<?php echo $this->get_field_id( 'show_avatar' ); ?>" name="<?php echo $this->get_field_name( 'show_avatar' ); ?>" /> <?php _e('Display avatar?', 'widgets-reloaded'); ?></label>
|
146 |
-
</p>
|
147 |
-
<p>
|
148 |
-
<label for="<?php echo $this->get_field_id( 'username_label' ); ?>"><?php _e('Username Label:', 'widgets-reloaded'); ?></label>
|
149 |
-
<input id="<?php echo $this->get_field_id( 'username_label' ); ?>" name="<?php echo $this->get_field_name( 'username_label' ); ?>" value="<?php echo $instance['username_label']; ?>" style="width:100%;" />
|
150 |
-
</p>
|
151 |
-
<p>
|
152 |
-
<label for="<?php echo $this->get_field_id( 'password_label' ); ?>"><?php _e('Password Label:', 'widgets-reloaded'); ?></label>
|
153 |
-
<input id="<?php echo $this->get_field_id( 'password_label' ); ?>" name="<?php echo $this->get_field_name( 'password_label' ); ?>" value="<?php echo $instance['password_label']; ?>" style="width:100%;" />
|
154 |
-
</p>
|
155 |
-
|
156 |
-
<p>
|
157 |
-
<label for="<?php echo $this->get_field_id( 'submit_text' ); ?>"><?php _e('Submit Text:', 'widgets-reloaded'); ?></label>
|
158 |
-
<input id="<?php echo $this->get_field_id( 'submit_text' ); ?>" name="<?php echo $this->get_field_name( 'submit_text' ); ?>" value="<?php echo $instance['submit_text']; ?>" style="width:100%;" />
|
159 |
-
</p>
|
160 |
-
<p>
|
161 |
-
<label for="<?php echo $this->get_field_id( 'remember_text' ); ?>"><?php _e('Remember User Text:', 'widgets-reloaded'); ?></label>
|
162 |
-
<input id="<?php echo $this->get_field_id( 'remember_text' ); ?>" name="<?php echo $this->get_field_name( 'remember_text' ); ?>" value="<?php echo $instance['remember_text']; ?>" style="width:100%;" />
|
163 |
-
</p>
|
164 |
-
</div>
|
165 |
-
|
166 |
-
<div>
|
167 |
-
|
168 |
-
</div>
|
169 |
-
<div style="clear:both;"> </div>
|
170 |
-
<?php
|
171 |
-
}
|
172 |
-
}
|
173 |
-
|
174 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
components/widgets/users.php
DELETED
@@ -1,113 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Creates a widget that allows users to list users of their site.
|
4 |
-
*
|
5 |
-
* @package Members
|
6 |
-
* @subpackage Components
|
7 |
-
*/
|
8 |
-
|
9 |
-
class Members_Widget_Users extends WP_Widget {
|
10 |
-
|
11 |
-
function Members_Widget_Users() {
|
12 |
-
$widget_ops = array( 'classname' => 'users', 'description' => __('An advanced widget that gives you total control over the output of your user lists.','members') );
|
13 |
-
$control_ops = array( 'width' => 250, 'height' => 350, 'id_base' => 'members-widget-users' );
|
14 |
-
$this->WP_Widget( 'members-widget-users', __('Users', 'members'), $widget_ops, $control_ops );
|
15 |
-
}
|
16 |
-
|
17 |
-
function widget( $args, $instance ) {
|
18 |
-
|
19 |
-
extract( $args, EXTR_SKIP );
|
20 |
-
|
21 |
-
$title = apply_filters('widget_title', $instance['title'] );
|
22 |
-
$limit = $instance['limit'];
|
23 |
-
$order = $instance['order'];
|
24 |
-
$orderby = $instance['orderby'];
|
25 |
-
$exclude = $instance['exclude'];
|
26 |
-
$include = $instance['include'];
|
27 |
-
$show_fullname = isset( $instance['show_fullname'] ) ? $instance['show_fullname'] : false;
|
28 |
-
|
29 |
-
$users = array(
|
30 |
-
'limit' => $limit,
|
31 |
-
'order' => $order,
|
32 |
-
'orderby' => $orderby,
|
33 |
-
'include' => $include,
|
34 |
-
'exclude' => $exclude,
|
35 |
-
'show_fullname' => $show_fullname,
|
36 |
-
'echo' => 0,
|
37 |
-
);
|
38 |
-
|
39 |
-
echo $before_widget;
|
40 |
-
|
41 |
-
if ( $title )
|
42 |
-
echo "\n\t\t\t" . $before_title . $title . $after_title;
|
43 |
-
|
44 |
-
echo "\n\t\t\t" . '<ul class="xoxo users">';
|
45 |
-
|
46 |
-
echo "\n\t\t\t\t" . str_replace( array( "\r", "\n", "\t" ), '', members_list_users( $users ) );
|
47 |
-
|
48 |
-
echo "\n\t\t\t" . '</ul><!-- .xoxo .users -->';
|
49 |
-
|
50 |
-
echo $after_widget;
|
51 |
-
}
|
52 |
-
|
53 |
-
function update( $new_instance, $old_instance ) {
|
54 |
-
$instance = $old_instance;
|
55 |
-
$instance['title'] = strip_tags( $new_instance['title'] );
|
56 |
-
$instance['limit'] = strip_tags( $new_instance['limit'] );
|
57 |
-
$instance['include'] = strip_tags( $new_instance['include'] );
|
58 |
-
$instance['exclude'] = strip_tags( $new_instance['exclude'] );
|
59 |
-
$instance['order'] = $new_instance['order'];
|
60 |
-
$instance['orderby'] = $new_instance['orderby'];
|
61 |
-
$instance['show_fullname'] = $new_instance['show_fullname'];
|
62 |
-
|
63 |
-
return $instance;
|
64 |
-
}
|
65 |
-
|
66 |
-
function form( $instance ) {
|
67 |
-
|
68 |
-
//Defaults
|
69 |
-
$defaults = array( 'title' => __('Users', 'members'), 'show_fullname' => true, 'order' => 'ASC', 'orderby' => 'display_name' );
|
70 |
-
$instance = wp_parse_args( (array) $instance, $defaults ); ?>
|
71 |
-
|
72 |
-
<p>
|
73 |
-
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e('Title:', 'members'); ?></label>
|
74 |
-
<input id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" style="width:99%;" />
|
75 |
-
</p>
|
76 |
-
<p>
|
77 |
-
<label for="<?php echo $this->get_field_id( 'limit' ); ?>"><?php _e('Limit:', 'members'); ?> <code>limit</code></label>
|
78 |
-
<input id="<?php echo $this->get_field_id( 'limit' ); ?>" name="<?php echo $this->get_field_name( 'limit' ); ?>" value="<?php echo $instance['limit']; ?>" style="width:99%;" />
|
79 |
-
</p>
|
80 |
-
<p>
|
81 |
-
<label for="<?php echo $this->get_field_id( 'order' ); ?>"><?php _e('Order:', 'widgets-reloaded'); ?> <code>order</code></label>
|
82 |
-
<select id="<?php echo $this->get_field_id( 'order' ); ?>" name="<?php echo $this->get_field_name( 'order' ); ?>" class="widefat" style="width:100%;">
|
83 |
-
<option <?php if ( 'ASC' == $instance['order'] ) echo 'selected="selected"'; ?>>ASC</option>
|
84 |
-
<option <?php if ( 'DESC' == $instance['order'] ) echo 'selected="selected"'; ?>>DESC</option>
|
85 |
-
</select>
|
86 |
-
</p>
|
87 |
-
<p>
|
88 |
-
<label for="<?php echo $this->get_field_id( 'orderby' ); ?>"><?php _e('Order By:', 'widgets-reloaded'); ?> <code>orderby</code></label>
|
89 |
-
<select id="<?php echo $this->get_field_id( 'orderby' ); ?>" name="<?php echo $this->get_field_name( 'orderby' ); ?>" class="widefat" style="width:100%;">
|
90 |
-
<option <?php if ( 'display_name' == $instance['orderby'] ) echo 'selected="selected"'; ?>>display_name</option>
|
91 |
-
<option <?php if ( 'ID' == $instance['orderby'] ) echo 'selected="selected"'; ?>>ID</option>
|
92 |
-
<option <?php if ( 'user_login' == $instance['orderby'] ) echo 'selected="selected"'; ?>>user_login</option>
|
93 |
-
</select>
|
94 |
-
</p>
|
95 |
-
<p>
|
96 |
-
<label for="<?php echo $this->get_field_id( 'include' ); ?>"><?php _e('Include:', 'members'); ?> <code>include</code></label>
|
97 |
-
<input id="<?php echo $this->get_field_id( 'include' ); ?>" name="<?php echo $this->get_field_name( 'include' ); ?>" value="<?php echo $instance['include']; ?>" style="width:99%;" />
|
98 |
-
</p>
|
99 |
-
<p>
|
100 |
-
<label for="<?php echo $this->get_field_id( 'exclude' ); ?>"><?php _e('Exclude:', 'members'); ?> <code>exclude</code></label>
|
101 |
-
<input id="<?php echo $this->get_field_id( 'exclude' ); ?>" name="<?php echo $this->get_field_name( 'exclude' ); ?>" value="<?php echo $instance['exclude']; ?>" style="width:99%;" />
|
102 |
-
</p>
|
103 |
-
<p>
|
104 |
-
<label for="<?php echo $this->get_field_id( 'show_fullname' ); ?>">
|
105 |
-
<input class="checkbox" type="checkbox" <?php checked( $instance['show_fullname'], true ); ?> id="<?php echo $this->get_field_id( 'show_fullname' ); ?>" name="<?php echo $this->get_field_name( 'show_fullname' ); ?>" /> <?php _e('Show full name?', 'members'); ?> <code>show_fullname</code></label>
|
106 |
-
</p>
|
107 |
-
|
108 |
-
<div style="clear:both;"> </div>
|
109 |
-
<?php
|
110 |
-
}
|
111 |
-
}
|
112 |
-
|
113 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
css/admin.css
ADDED
@@ -0,0 +1,86 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
/* Plugin settings page. */
|
2 |
+
.settings_page_members-settings .form-table th {
|
3 |
+
width: 20%;
|
4 |
+
font-weight: bold;
|
5 |
+
}
|
6 |
+
.settings_page_members-settings .metabox-holder .column-1 {
|
7 |
+
float: left;
|
8 |
+
width: 66%;
|
9 |
+
}
|
10 |
+
.settings_page_members-settings .metabox-holder .column-2 {
|
11 |
+
float: right;
|
12 |
+
width: 32%;
|
13 |
+
}
|
14 |
+
.settings_page_members-settings .hook-editor {
|
15 |
+
overflow: hidden;
|
16 |
+
}
|
17 |
+
.settings_page_members-settings p.submit {
|
18 |
+
clear: both;
|
19 |
+
}
|
20 |
+
.settings_page_members-settings textarea {
|
21 |
+
width: 99.5%;
|
22 |
+
}
|
23 |
+
.settings_page_members-settings .postbox .inside p,
|
24 |
+
.settings_page_members-settings .postbox .inside li {
|
25 |
+
font-size: 11px;
|
26 |
+
line-height: 175%;
|
27 |
+
}
|
28 |
+
.settings_page_members-settings .postbox form {
|
29 |
+
line-height: 150%;
|
30 |
+
}
|
31 |
+
.settings_page_members-settings div.inside ul {
|
32 |
+
margin-left: 20px;
|
33 |
+
}
|
34 |
+
.settings_page_members-settings div.inside ul li {
|
35 |
+
list-style: square;
|
36 |
+
line-height:16px;
|
37 |
+
}
|
38 |
+
.settings_page_members-settings div.inside .alignleft {
|
39 |
+
width: 45%;
|
40 |
+
float: left;
|
41 |
+
}
|
42 |
+
.settings_page_members-settings div.inside .alignright {
|
43 |
+
width: 45%;
|
44 |
+
float: right;
|
45 |
+
text-align: right;
|
46 |
+
}
|
47 |
+
|
48 |
+
/* Role management pages. */
|
49 |
+
.users_page_roles .members-role-checkbox,
|
50 |
+
.users_page_role-new .members-role-checkbox {
|
51 |
+
overflow: hidden;
|
52 |
+
margin: 0 0 5px 0;
|
53 |
+
float: left;
|
54 |
+
width: 32.67%;
|
55 |
+
}
|
56 |
+
.users_page_roles .clear,
|
57 |
+
.users_page_role-new .clear {
|
58 |
+
clear: both;
|
59 |
+
}
|
60 |
+
.users_page_roles .members-role-checkbox .has-cap,
|
61 |
+
.users_page_role-new .members-role-checkbox .has-cap {
|
62 |
+
font-weight: bold;
|
63 |
+
}
|
64 |
+
.users_page_roles a#members-add-new-cap {
|
65 |
+
cursor: pointer;
|
66 |
+
}
|
67 |
+
|
68 |
+
.users_page_roles p.members-add-new-cap-wrap {
|
69 |
+
float: left;
|
70 |
+
width: 20%;
|
71 |
+
margin-right: 2%;
|
72 |
+
}
|
73 |
+
.users_page_roles p.new-cap-holder {
|
74 |
+
float: left;
|
75 |
+
width: 78%;
|
76 |
+
}
|
77 |
+
|
78 |
+
.users_page_roles input.new-cap {
|
79 |
+
float: left;
|
80 |
+
width: 30%;
|
81 |
+
margin: 0 3.3% 10px 0;
|
82 |
+
}
|
83 |
+
|
84 |
+
.users_page_roles .hide-if-no-js {
|
85 |
+
display: none;
|
86 |
+
}
|
docs/license.txt
ADDED
@@ -0,0 +1,339 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
GNU GENERAL PUBLIC LICENSE
|
2 |
+
Version 2, June 1991
|
3 |
+
|
4 |
+
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
|
5 |
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
|
6 |
+
Everyone is permitted to copy and distribute verbatim copies
|
7 |
+
of this license document, but changing it is not allowed.
|
8 |
+
|
9 |
+
Preamble
|
10 |
+
|
11 |
+
The licenses for most software are designed to take away your
|
12 |
+
freedom to share and change it. By contrast, the GNU General Public
|
13 |
+
License is intended to guarantee your freedom to share and change free
|
14 |
+
software--to make sure the software is free for all its users. This
|
15 |
+
General Public License applies to most of the Free Software
|
16 |
+
Foundation's software and to any other program whose authors commit to
|
17 |
+
using it. (Some other Free Software Foundation software is covered by
|
18 |
+
the GNU Lesser General Public License instead.) You can apply it to
|
19 |
+
your programs, too.
|
20 |
+
|
21 |
+
When we speak of free software, we are referring to freedom, not
|
22 |
+
price. Our General Public Licenses are designed to make sure that you
|
23 |
+
have the freedom to distribute copies of free software (and charge for
|
24 |
+
this service if you wish), that you receive source code or can get it
|
25 |
+
if you want it, that you can change the software or use pieces of it
|
26 |
+
in new free programs; and that you know you can do these things.
|
27 |
+
|
28 |
+
To protect your rights, we need to make restrictions that forbid
|
29 |
+
anyone to deny you these rights or to ask you to surrender the rights.
|
30 |
+
These restrictions translate to certain responsibilities for you if you
|
31 |
+
distribute copies of the software, or if you modify it.
|
32 |
+
|
33 |
+
For example, if you distribute copies of such a program, whether
|
34 |
+
gratis or for a fee, you must give the recipients all the rights that
|
35 |
+
you have. You must make sure that they, too, receive or can get the
|
36 |
+
source code. And you must show them these terms so they know their
|
37 |
+
rights.
|
38 |
+
|
39 |
+
We protect your rights with two steps: (1) copyright the software, and
|
40 |
+
(2) offer you this license which gives you legal permission to copy,
|
41 |
+
distribute and/or modify the software.
|
42 |
+
|
43 |
+
Also, for each author's protection and ours, we want to make certain
|
44 |
+
that everyone understands that there is no warranty for this free
|
45 |
+
software. If the software is modified by someone else and passed on, we
|
46 |
+
want its recipients to know that what they have is not the original, so
|
47 |
+
that any problems introduced by others will not reflect on the original
|
48 |
+
authors' reputations.
|
49 |
+
|
50 |
+
Finally, any free program is threatened constantly by software
|
51 |
+
patents. We wish to avoid the danger that redistributors of a free
|
52 |
+
program will individually obtain patent licenses, in effect making the
|
53 |
+
program proprietary. To prevent this, we have made it clear that any
|
54 |
+
patent must be licensed for everyone's free use or not licensed at all.
|
55 |
+
|
56 |
+
The precise terms and conditions for copying, distribution and
|
57 |
+
modification follow.
|
58 |
+
|
59 |
+
GNU GENERAL PUBLIC LICENSE
|
60 |
+
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
|
61 |
+
|
62 |
+
0. This License applies to any program or other work which contains
|
63 |
+
a notice placed by the copyright holder saying it may be distributed
|
64 |
+
under the terms of this General Public License. The "Program", below,
|
65 |
+
refers to any such program or work, and a "work based on the Program"
|
66 |
+
means either the Program or any derivative work under copyright law:
|
67 |
+
that is to say, a work containing the Program or a portion of it,
|
68 |
+
either verbatim or with modifications and/or translated into another
|
69 |
+
language. (Hereinafter, translation is included without limitation in
|
70 |
+
the term "modification".) Each licensee is addressed as "you".
|
71 |
+
|
72 |
+
Activities other than copying, distribution and modification are not
|
73 |
+
covered by this License; they are outside its scope. The act of
|
74 |
+
running the Program is not restricted, and the output from the Program
|
75 |
+
is covered only if its contents constitute a work based on the
|
76 |
+
Program (independent of having been made by running the Program).
|
77 |
+
Whether that is true depends on what the Program does.
|
78 |
+
|
79 |
+
1. You may copy and distribute verbatim copies of the Program's
|
80 |
+
source code as you receive it, in any medium, provided that you
|
81 |
+
conspicuously and appropriately publish on each copy an appropriate
|
82 |
+
copyright notice and disclaimer of warranty; keep intact all the
|
83 |
+
notices that refer to this License and to the absence of any warranty;
|
84 |
+
and give any other recipients of the Program a copy of this License
|
85 |
+
along with the Program.
|
86 |
+
|
87 |
+
You may charge a fee for the physical act of transferring a copy, and
|
88 |
+
you may at your option offer warranty protection in exchange for a fee.
|
89 |
+
|
90 |
+
2. You may modify your copy or copies of the Program or any portion
|
91 |
+
of it, thus forming a work based on the Program, and copy and
|
92 |
+
distribute such modifications or work under the terms of Section 1
|
93 |
+
above, provided that you also meet all of these conditions:
|
94 |
+
|
95 |
+
a) You must cause the modified files to carry prominent notices
|
96 |
+
stating that you changed the files and the date of any change.
|
97 |
+
|
98 |
+
b) You must cause any work that you distribute or publish, that in
|
99 |
+
whole or in part contains or is derived from the Program or any
|
100 |
+
part thereof, to be licensed as a whole at no charge to all third
|
101 |
+
parties under the terms of this License.
|
102 |
+
|
103 |
+
c) If the modified program normally reads commands interactively
|
104 |
+
when run, you must cause it, when started running for such
|
105 |
+
interactive use in the most ordinary way, to print or display an
|
106 |
+
announcement including an appropriate copyright notice and a
|
107 |
+
notice that there is no warranty (or else, saying that you provide
|
108 |
+
a warranty) and that users may redistribute the program under
|
109 |
+
these conditions, and telling the user how to view a copy of this
|
110 |
+
License. (Exception: if the Program itself is interactive but
|
111 |
+
does not normally print such an announcement, your work based on
|
112 |
+
the Program is not required to print an announcement.)
|
113 |
+
|
114 |
+
These requirements apply to the modified work as a whole. If
|
115 |
+
identifiable sections of that work are not derived from the Program,
|
116 |
+
and can be reasonably considered independent and separate works in
|
117 |
+
themselves, then this License, and its terms, do not apply to those
|
118 |
+
sections when you distribute them as separate works. But when you
|
119 |
+
distribute the same sections as part of a whole which is a work based
|
120 |
+
on the Program, the distribution of the whole must be on the terms of
|
121 |
+
this License, whose permissions for other licensees extend to the
|
122 |
+
entire whole, and thus to each and every part regardless of who wrote it.
|
123 |
+
|
124 |
+
Thus, it is not the intent of this section to claim rights or contest
|
125 |
+
your rights to work written entirely by you; rather, the intent is to
|
126 |
+
exercise the right to control the distribution of derivative or
|
127 |
+
collective works based on the Program.
|
128 |
+
|
129 |
+
In addition, mere aggregation of another work not based on the Program
|
130 |
+
with the Program (or with a work based on the Program) on a volume of
|
131 |
+
a storage or distribution medium does not bring the other work under
|
132 |
+
the scope of this License.
|
133 |
+
|
134 |
+
3. You may copy and distribute the Program (or a work based on it,
|
135 |
+
under Section 2) in object code or executable form under the terms of
|
136 |
+
Sections 1 and 2 above provided that you also do one of the following:
|
137 |
+
|
138 |
+
a) Accompany it with the complete corresponding machine-readable
|
139 |
+
source code, which must be distributed under the terms of Sections
|
140 |
+
1 and 2 above on a medium customarily used for software interchange; or,
|
141 |
+
|
142 |
+
b) Accompany it with a written offer, valid for at least three
|
143 |
+
years, to give any third party, for a charge no more than your
|
144 |
+
cost of physically performing source distribution, a complete
|
145 |
+
machine-readable copy of the corresponding source code, to be
|
146 |
+
distributed under the terms of Sections 1 and 2 above on a medium
|
147 |
+
customarily used for software interchange; or,
|
148 |
+
|
149 |
+
c) Accompany it with the information you received as to the offer
|
150 |
+
to distribute corresponding source code. (This alternative is
|
151 |
+
allowed only for noncommercial distribution and only if you
|
152 |
+
received the program in object code or executable form with such
|
153 |
+
an offer, in accord with Subsection b above.)
|
154 |
+
|
155 |
+
The source code for a work means the preferred form of the work for
|
156 |
+
making modifications to it. For an executable work, complete source
|
157 |
+
code means all the source code for all modules it contains, plus any
|
158 |
+
associated interface definition files, plus the scripts used to
|
159 |
+
control compilation and installation of the executable. However, as a
|
160 |
+
special exception, the source code distributed need not include
|
161 |
+
anything that is normally distributed (in either source or binary
|
162 |
+
form) with the major components (compiler, kernel, and so on) of the
|
163 |
+
operating system on which the executable runs, unless that component
|
164 |
+
itself accompanies the executable.
|
165 |
+
|
166 |
+
If distribution of executable or object code is made by offering
|
167 |
+
access to copy from a designated place, then offering equivalent
|
168 |
+
access to copy the source code from the same place counts as
|
169 |
+
distribution of the source code, even though third parties are not
|
170 |
+
compelled to copy the source along with the object code.
|
171 |
+
|
172 |
+
4. You may not copy, modify, sublicense, or distribute the Program
|
173 |
+
except as expressly provided under this License. Any attempt
|
174 |
+
otherwise to copy, modify, sublicense or distribute the Program is
|
175 |
+
void, and will automatically terminate your rights under this License.
|
176 |
+
However, parties who have received copies, or rights, from you under
|
177 |
+
this License will not have their licenses terminated so long as such
|
178 |
+
parties remain in full compliance.
|
179 |
+
|
180 |
+
5. You are not required to accept this License, since you have not
|
181 |
+
signed it. However, nothing else grants you permission to modify or
|
182 |
+
distribute the Program or its derivative works. These actions are
|
183 |
+
prohibited by law if you do not accept this License. Therefore, by
|
184 |
+
modifying or distributing the Program (or any work based on the
|
185 |
+
Program), you indicate your acceptance of this License to do so, and
|
186 |
+
all its terms and conditions for copying, distributing or modifying
|
187 |
+
the Program or works based on it.
|
188 |
+
|
189 |
+
6. Each time you redistribute the Program (or any work based on the
|
190 |
+
Program), the recipient automatically receives a license from the
|
191 |
+
original licensor to copy, distribute or modify the Program subject to
|
192 |
+
these terms and conditions. You may not impose any further
|
193 |
+
restrictions on the recipients' exercise of the rights granted herein.
|
194 |
+
You are not responsible for enforcing compliance by third parties to
|
195 |
+
this License.
|
196 |
+
|
197 |
+
7. If, as a consequence of a court judgment or allegation of patent
|
198 |
+
infringement or for any other reason (not limited to patent issues),
|
199 |
+
conditions are imposed on you (whether by court order, agreement or
|
200 |
+
otherwise) that contradict the conditions of this License, they do not
|
201 |
+
excuse you from the conditions of this License. If you cannot
|
202 |
+
distribute so as to satisfy simultaneously your obligations under this
|
203 |
+
License and any other pertinent obligations, then as a consequence you
|
204 |
+
may not distribute the Program at all. For example, if a patent
|
205 |
+
license would not permit royalty-free redistribution of the Program by
|
206 |
+
all those who receive copies directly or indirectly through you, then
|
207 |
+
the only way you could satisfy both it and this License would be to
|
208 |
+
refrain entirely from distribution of the Program.
|
209 |
+
|
210 |
+
If any portion of this section is held invalid or unenforceable under
|
211 |
+
any particular circumstance, the balance of the section is intended to
|
212 |
+
apply and the section as a whole is intended to apply in other
|
213 |
+
circumstances.
|
214 |
+
|
215 |
+
It is not the purpose of this section to induce you to infringe any
|
216 |
+
patents or other property right claims or to contest validity of any
|
217 |
+
such claims; this section has the sole purpose of protecting the
|
218 |
+
integrity of the free software distribution system, which is
|
219 |
+
implemented by public license practices. Many people have made
|
220 |
+
generous contributions to the wide range of software distributed
|
221 |
+
through that system in reliance on consistent application of that
|
222 |
+
system; it is up to the author/donor to decide if he or she is willing
|
223 |
+
to distribute software through any other system and a licensee cannot
|
224 |
+
impose that choice.
|
225 |
+
|
226 |
+
This section is intended to make thoroughly clear what is believed to
|
227 |
+
be a consequence of the rest of this License.
|
228 |
+
|
229 |
+
8. If the distribution and/or use of the Program is restricted in
|
230 |
+
certain countries either by patents or by copyrighted interfaces, the
|
231 |
+
original copyright holder who places the Program under this License
|
232 |
+
may add an explicit geographical distribution limitation excluding
|
233 |
+
those countries, so that distribution is permitted only in or among
|
234 |
+
countries not thus excluded. In such case, this License incorporates
|
235 |
+
the limitation as if written in the body of this License.
|
236 |
+
|
237 |
+
9. The Free Software Foundation may publish revised and/or new versions
|
238 |
+
of the General Public License from time to time. Such new versions will
|
239 |
+
be similar in spirit to the present version, but may differ in detail to
|
240 |
+
address new problems or concerns.
|
241 |
+
|
242 |
+
Each version is given a distinguishing version number. If the Program
|
243 |
+
specifies a version number of this License which applies to it and "any
|
244 |
+
later version", you have the option of following the terms and conditions
|
245 |
+
either of that version or of any later version published by the Free
|
246 |
+
Software Foundation. If the Program does not specify a version number of
|
247 |
+
this License, you may choose any version ever published by the Free Software
|
248 |
+
Foundation.
|
249 |
+
|
250 |
+
10. If you wish to incorporate parts of the Program into other free
|
251 |
+
programs whose distribution conditions are different, write to the author
|
252 |
+
to ask for permission. For software which is copyrighted by the Free
|
253 |
+
Software Foundation, write to the Free Software Foundation; we sometimes
|
254 |
+
make exceptions for this. Our decision will be guided by the two goals
|
255 |
+
of preserving the free status of all derivatives of our free software and
|
256 |
+
of promoting the sharing and reuse of software generally.
|
257 |
+
|
258 |
+
NO WARRANTY
|
259 |
+
|
260 |
+
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
|
261 |
+
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
|
262 |
+
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
|
263 |
+
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
|
264 |
+
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
|
265 |
+
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
|
266 |
+
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
|
267 |
+
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
|
268 |
+
REPAIR OR CORRECTION.
|
269 |
+
|
270 |
+
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
271 |
+
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
|
272 |
+
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
|
273 |
+
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
|
274 |
+
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
|
275 |
+
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
|
276 |
+
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
|
277 |
+
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
|
278 |
+
POSSIBILITY OF SUCH DAMAGES.
|
279 |
+
|
280 |
+
END OF TERMS AND CONDITIONS
|
281 |
+
|
282 |
+
How to Apply These Terms to Your New Programs
|
283 |
+
|
284 |
+
If you develop a new program, and you want it to be of the greatest
|
285 |
+
possible use to the public, the best way to achieve this is to make it
|
286 |
+
free software which everyone can redistribute and change under these terms.
|
287 |
+
|
288 |
+
To do so, attach the following notices to the program. It is safest
|
289 |
+
to attach them to the start of each source file to most effectively
|
290 |
+
convey the exclusion of warranty; and each file should have at least
|
291 |
+
the "copyright" line and a pointer to where the full notice is found.
|
292 |
+
|
293 |
+
<one line to give the program's name and a brief idea of what it does.>
|
294 |
+
Copyright (C) <year> <name of author>
|
295 |
+
|
296 |
+
This program is free software; you can redistribute it and/or modify
|
297 |
+
it under the terms of the GNU General Public License as published by
|
298 |
+
the Free Software Foundation; either version 2 of the License, or
|
299 |
+
(at your option) any later version.
|
300 |
+
|
301 |
+
This program is distributed in the hope that it will be useful,
|
302 |
+
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
303 |
+
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
304 |
+
GNU General Public License for more details.
|
305 |
+
|
306 |
+
You should have received a copy of the GNU General Public License along
|
307 |
+
with this program; if not, write to the Free Software Foundation, Inc.,
|
308 |
+
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
|
309 |
+
|
310 |
+
Also add information on how to contact you by electronic and paper mail.
|
311 |
+
|
312 |
+
If the program is interactive, make it output a short notice like this
|
313 |
+
when it starts in an interactive mode:
|
314 |
+
|
315 |
+
Gnomovision version 69, Copyright (C) year name of author
|
316 |
+
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
|
317 |
+
This is free software, and you are welcome to redistribute it
|
318 |
+
under certain conditions; type `show c' for details.
|
319 |
+
|
320 |
+
The hypothetical commands `show w' and `show c' should show the appropriate
|
321 |
+
parts of the General Public License. Of course, the commands you use may
|
322 |
+
be called something other than `show w' and `show c'; they could even be
|
323 |
+
mouse-clicks or menu items--whatever suits your program.
|
324 |
+
|
325 |
+
You should also get your employer (if you work as a programmer) or your
|
326 |
+
school, if any, to sign a "copyright disclaimer" for the program, if
|
327 |
+
necessary. Here is a sample; alter the names:
|
328 |
+
|
329 |
+
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
|
330 |
+
`Gnomovision' (which makes passes at compilers) written by James Hacker.
|
331 |
+
|
332 |
+
<signature of Ty Coon>, 1 April 1989
|
333 |
+
Ty Coon, President of Vice
|
334 |
+
|
335 |
+
This General Public License does not permit incorporating your program into
|
336 |
+
proprietary programs. If your program is a subroutine library, you may
|
337 |
+
consider it more useful to permit linking proprietary applications with the
|
338 |
+
library. If this is what you want to do, use the GNU Lesser General
|
339 |
+
Public License instead of this License.
|
readme.css → docs/readme.css
RENAMED
File without changes
|
docs/readme.html
ADDED
@@ -0,0 +1,250 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
2 |
+
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
+
<head>
|
4 |
+
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
|
5 |
+
<title>A guide to the Members plugin</title>
|
6 |
+
|
7 |
+
<link rel="stylesheet" href="readme.css" type="text/css" media="screen" />
|
8 |
+
|
9 |
+
</head>
|
10 |
+
<body>
|
11 |
+
|
12 |
+
<h1>A guide to the Members plugin</h1>
|
13 |
+
|
14 |
+
<p class="first">The <em>Members</em> plugin is meant to be a complete user, role, and content management plugin for WordPress. Its purpose is to give you fine-grained control over who has access to what.</p>
|
15 |
+
|
16 |
+
<p class="second">Right now, it's only in its second generation of development. It's my hope that this plugin provides that true <acronym title="Content Management System">CMS</acronym> experience that many users long for in WordPress. There's a long road ahead, and I hope you join me for the ride.</p>
|
17 |
+
|
18 |
+
<h2>The plugin documentation</h2>
|
19 |
+
|
20 |
+
<p>Use the links below to navigate to a specific section in the documentation:</p>
|
21 |
+
|
22 |
+
<ul>
|
23 |
+
<li><a href="#users-roles-caps">The relationship of users, roles, and capabilities</a></li>
|
24 |
+
<li><a href="#install">How to install the plugin</a></li>
|
25 |
+
<li><a href="#how-to">How to use the plugin</a></li>
|
26 |
+
<li>Plugin features
|
27 |
+
<ul>
|
28 |
+
<li><a href="#role-manager">Role management</a>
|
29 |
+
<ul>
|
30 |
+
<li><a href="#edit-roles">Editing roles</a></li>
|
31 |
+
<li><a href="#new-roles">Adding new roles</a></li>
|
32 |
+
</ul>
|
33 |
+
</li>
|
34 |
+
<li><a href="#content-permissions">Content permissions</a></li>
|
35 |
+
<li><a href="#shortcodes">Shortcodes component</a>
|
36 |
+
<ul>
|
37 |
+
<li><a href="#access">[access]</a></li>
|
38 |
+
<li><a href="#is-user-logged-in">[is_user_logged_in]</a></li>
|
39 |
+
<li><a href="#feed">[feed]</a></li>
|
40 |
+
</ul>
|
41 |
+
</li>
|
42 |
+
<li><a href="#widgets">Widgets</a>
|
43 |
+
<ul>
|
44 |
+
<li><a href="#login-widget">Login Form widget</a></li>
|
45 |
+
<li><a href="#users-widget">Users widget</a></li>
|
46 |
+
</ul>
|
47 |
+
</li>
|
48 |
+
<li><a href="#private-blog">Private site</a></li>
|
49 |
+
</ul>
|
50 |
+
</li>
|
51 |
+
<li><a href="#capability-check">Checking if the current user has a capability/role</a></li>
|
52 |
+
<li>Plugin/theme integration for developers
|
53 |
+
<ul>
|
54 |
+
<li><a href="#filter-caps">Adding new capabilities</a></li>
|
55 |
+
<li><a href="#cap-check">Checking for capabilities</a></li>
|
56 |
+
</ul>
|
57 |
+
</li>
|
58 |
+
<li><a href="#old-levels">Need the old user levels system?</a></li>
|
59 |
+
<li><a href="#plugin-support">Plugin support</a></li>
|
60 |
+
<li><a href="#copyright">Copyright & License</a></li>
|
61 |
+
</ul>
|
62 |
+
|
63 |
+
<h2 id="users-roles-caps">The relationship of users, roles, and capabilities</h2>
|
64 |
+
|
65 |
+
<p>This is the most important thing to understand with this plugin. It's so important that I took the time out of my day to write a complete tutorial on understanding this: <a href="http://justintadlock.com/archives/2009/08/30/users-roles-and-capabilities-in-wordpress" title="Users, roles, and capabilities in WordPress">Users, roles, and capabilities in WordPress</a>. If you don't understand this concept, you won't understand what this plugin does. This is not a concept created by the plugin. This is how it's done in WordPress.</p>
|
66 |
+
|
67 |
+
<p>I highly recommend reading that blog post, but here's the short version:</p>
|
68 |
+
|
69 |
+
<ul>
|
70 |
+
<li><strong>Users</strong> are people that have registered on your site. I'm sure you already knew that. In WordPress, users are assigned a specific role. This role defines what the user can/can't do.</li>
|
71 |
+
<li><strong>Roles</strong> are a way of grouping users. Each user on your site will have a specific role. Roles are a set of capabilities. It is important to note that <strong>roles are not hierarchical</strong>. For example, "Administrator" is not higher than "Subscriber" in WordPress. You could literally give the Subscriber role more capabilities than the Administrator role. It's very important that you grasp this concept.</li>
|
72 |
+
<li><strong>Capabilities</strong> give meaning to roles. It's a permissions system. They're a way of saying a role <em>can</em> do something or a role <em>can't</em> do something (e.g., Role A can <code>edit_posts</code>, Role B can't <code>activate_plugins</code>, etc.).</li>
|
73 |
+
</ul>
|
74 |
+
|
75 |
+
<h2 id="install">How to install the plugin</h2>
|
76 |
+
|
77 |
+
<ol>
|
78 |
+
<li>Uzip the <code>members.zip</code> folder.</li>
|
79 |
+
<li>Upload the <code>members</code> folder to your <code>/wp-content/plugins</code> directory.</li>
|
80 |
+
<li>In your WordPress dashboard, head over to the <em>Plugins</em> section.</li>
|
81 |
+
<li>Activate <em>Members</em>.</li>
|
82 |
+
</ol>
|
83 |
+
|
84 |
+
<h2 id="how-to">How to use the plugin</h2>
|
85 |
+
|
86 |
+
<p>This plugin is set up to have a components-based system. The reason for this is that I don't want to stick everyone with a bunch of features they don't need. There's no point in using the Role Manger feature if all you need is just a login widget and some shortcodes. So, it's a <em>use-only-what-you-want</em> system.</p>
|
87 |
+
|
88 |
+
<p>To activate certain features, look for the <em>Members</em> link under your <em>Settings</em> menu while in your WordPress admin. When on the new page, you'll be able to select the features you want to use.</p>
|
89 |
+
|
90 |
+
<p>I recommend at least activating Role Manager feature. It is at the heart of this plugin, and many other features will likely require its use in some form.</p>
|
91 |
+
|
92 |
+
<h2 id="role-manager">Role management</h2>
|
93 |
+
|
94 |
+
<p>The Role Manager feature allows you to edit and add new roles as well as add and remove both default capabilities and custom capabilities from roles. It is an extremely powerful system.</p>
|
95 |
+
|
96 |
+
<p class="alert">Any changes you make to users and roles using this feature are permanent changes. What I mean by this is that if you deactivate or uninstall this plugin, the changes won't revert to their previous state. This plugin merely provides a user interface for you to make changes directly to your WordPress database. Please use this feature wisely.</p>
|
97 |
+
|
98 |
+
<h3 id="edit-roles">Editing existing roles</h3>
|
99 |
+
|
100 |
+
<p>This feature can be both a blessing and a curse, so I'm going to ask that you use it wisely. Use extreme caution when assigning new capabilities to roles. You wouldn't want to give Average Joe the <code>edit_plugins</code> capability, for example.</p>
|
101 |
+
|
102 |
+
<p>You can find the settings page for this feature under the <em>Users</em> menu. It will be labeled <em>Roles</em>. When clicking on the menu item, you'll get a list of all the available roles. From there, you can select a role to edit.</p>
|
103 |
+
|
104 |
+
<p>When selecting a role to edit, you will be taken to a new screen that lists all of the available capabilities you can add to a role. You simply have to tick the checkbox next to the capability you want to add/remove for a particular role and save.</p>
|
105 |
+
|
106 |
+
<h3 id="new-roles">Adding new roles</h3>
|
107 |
+
|
108 |
+
<p>The menu item for adding new roles is located under the <em>Users</em> menu and is labeled <em>Add New Role</em>.</p>
|
109 |
+
|
110 |
+
<p>Adding new roles is pretty straightforward. You need to input a <em>Role Name</em> (only use letters, numbers, and underscores), <em>Role Label</em>, and select which capabilities the new role should have. You can later edit this role.</p>
|
111 |
+
|
112 |
+
<p>You can assign new roles to users from the <em>Users</em> screen in WordPress. This is nothing particular to the plugin and is a default part of WordPress. I believe you need the <code>edit_users</code> capability to do this.</p>
|
113 |
+
|
114 |
+
<h2 id="content-permissions">Content permissions feature</h2>
|
115 |
+
|
116 |
+
<p>The <em>Content Permissions</em> feature will be the heart and soul of this plugin in the future. Right now, it only adds an additional meta box on the post editing screen.</p>
|
117 |
+
|
118 |
+
<p>For any public post type (posts, pages, etc.), you'll see a "Content Permissions" meta box on the post editing screen. This meta box allows you to select which roles can view the content of the post/page. If no roles are selected, anyone can view the content. The post author, users that can edit the post, and any users of roles with the <code>restrict_content</code> capability can <strong>always</strong> view the post, regardless of their role.</p>
|
119 |
+
|
120 |
+
<p>You can add a custom error message for individual posts. Otherwise, the error message will default to whatever you have set under the <em>Members</em> plugin settings.</p>
|
121 |
+
|
122 |
+
<h2 id="shortcodes">Shortcodes</h2>
|
123 |
+
|
124 |
+
<p>There are several shortcodes that you can use in your post editor or any shortcode-ready area..</p>
|
125 |
+
|
126 |
+
<h3 id="access">[access]</h3>
|
127 |
+
|
128 |
+
<p>The <code>[access]</code> shortcode is for hiding content from particular roles and capabilities. You need to wrap your content when using this shortcode:</p>
|
129 |
+
|
130 |
+
<pre><code>[access role="editor"]Hide this content from everyone but editors.[/access]</code></pre>
|
131 |
+
|
132 |
+
<p><strong>Parameters:</strong></p>
|
133 |
+
|
134 |
+
<ul>
|
135 |
+
<li><code>capability</code>: A capability that has been assigned to a role.</li>
|
136 |
+
<li><code>role</code>: A user role from WordPress or one that you've created.</li>
|
137 |
+
<li><code>feed</code>: Set to <code>true</code> if you'd like to show the content in feeds.</li>
|
138 |
+
</ul>
|
139 |
+
|
140 |
+
<p>Note that <code>capability</code> and <code>role</code> parameters aren't used in conjunction. The code first checks for the capability (if input) then checks for the role (if input).</p>
|
141 |
+
|
142 |
+
<p>To check for multiple capabilities or multiple roles, simply add a comma between each capability/role. For example, the following code checks for an editor or administrator:</p>
|
143 |
+
|
144 |
+
<pre><code>[access role="administrator,editor"]Hide this content from everyone but administrators and editors.[/access]</code></pre>
|
145 |
+
|
146 |
+
<h3 id="is-user-logged-in">[is_user_logged_in]</h3>
|
147 |
+
|
148 |
+
<p>The <code>[is_user_logged_in]</code> shortcode should be used to check if a user is currently logged into the site. If not, the content will be hidden.</p>
|
149 |
+
|
150 |
+
<pre><code>[is_user_logged_in]This content is only shown to logged-in users.[/is_user_logged_in]</code></pre>
|
151 |
+
|
152 |
+
<p>This shortcode has no parameters.</p>
|
153 |
+
|
154 |
+
<h3 id="feed">[feed]</h3>
|
155 |
+
|
156 |
+
<p>If you have content you only want to show to subscribers of your feed, wrap it in this shortcode:</p>
|
157 |
+
|
158 |
+
<pre><code>[feed]This content will only be shown in feeds.[/feed]</code></pre>
|
159 |
+
|
160 |
+
<p>This shortcode has no parameters.</p>
|
161 |
+
|
162 |
+
<h2 id="widgets">Widgets</h2>
|
163 |
+
|
164 |
+
<p>The widgets component provides easy-to-use widgets for your site. They can be used in any WordPress widget area (provided by your theme). Currently, there's the <em>Login Form</em> and <em>Users</em> widgets.</p>
|
165 |
+
|
166 |
+
<h3 id="login-widget">Login Form widget</h3>
|
167 |
+
|
168 |
+
<p>The <em>Login Form</em> gives you a login form. It's a mixture of a text widget and login form. It can also show your avatar.</p>
|
169 |
+
|
170 |
+
<p>It's pretty straightforward, but I'll provide more documentation later.</p>
|
171 |
+
|
172 |
+
<h3 id="users-widget">Users widget</h3>
|
173 |
+
|
174 |
+
<p>The <em>Users</em> widget allows you to list users in any widget area. It's based off the <code>get_users()</code> function, so all of the <a href="http://codex.wordpress.org/Function_Reference/get_users" title="WordPress Codex: get_users()">parameters are the same</a>.</p>
|
175 |
+
|
176 |
+
<h2 id="private-blog">Private site</h2>
|
177 |
+
|
178 |
+
<p>The Private Site features makes sure that only logged-in users can see anything on your site. If a user visits your site and is not logged in, they are immediately redirected to your <code>wp-login.php</code> (WordPress login) page.</p>
|
179 |
+
|
180 |
+
<p>You also have the option of disabling the viewing of feed content and setting an error message for feed items.</p>
|
181 |
+
|
182 |
+
<h2 id="capability-check">Checking if the current user has a capability/role</h2>
|
183 |
+
|
184 |
+
<p>In plugins and your theme template files, you might sometimes need to check if the currently logged in user has permission to do something. We do this by using the WordPress function <code>current_user_can()</code>. The basic format looks like this:</p>
|
185 |
+
|
186 |
+
<pre><code><?php if ( current_user_can( 'capability_name' ) ) echo 'This user can do something'; ?></code></pre>
|
187 |
+
|
188 |
+
<p>For a more practical situation, let's say you created a new capability called <code>read_pages</code>. Well, you might want to hide the content within your <code>page.php</code> template by adding this:</p>
|
189 |
+
|
190 |
+
<pre><code><?php if ( current_user_can( 'read_pages ' ) ) { ?>
|
191 |
+
<?php the_content(); ?>
|
192 |
+
<?php } ?></code></pre>
|
193 |
+
|
194 |
+
<p>Only users with a role that has the <code>read_pages</code> capability will be able to see the content.</p>
|
195 |
+
|
196 |
+
<p>You can check for a specific role by inputting the role name instead of the capability name. It works the same way.</p>
|
197 |
+
|
198 |
+
<h2 id="filter-caps">Adding new default capabilities</h2>
|
199 |
+
|
200 |
+
<p>Your plugin/theme can add new capabilities to the <em>Edit Roles</em> component if needed. This will allow users to easily select the additional capabilities for whichever roles they choose.</p>
|
201 |
+
|
202 |
+
<pre><code>add_filter( 'members_get_capabilities', 'my_plugin_new_caps' );
|
203 |
+
|
204 |
+
function my_plugin_new_caps( $capabilities ) {
|
205 |
+
|
206 |
+
$capabilities[] = 'cap_name_1';
|
207 |
+
$capabilities[] = 'cap_name_2';
|
208 |
+
$capabilities[] = 'cap_name_3';
|
209 |
+
|
210 |
+
return $capabilities;
|
211 |
+
}</code></pre>
|
212 |
+
|
213 |
+
<p>Note that you need to respect the existing capabilities and return the original array.</p>
|
214 |
+
|
215 |
+
<h2 id="cap-check">Checking for capabilities</h2>
|
216 |
+
|
217 |
+
<p>In WordPress, you can use the <code>current_user_can()</code> function to check if the current user has a particular capability. Since you don't know whether a user has this plugin installed, you might want to check first.</p>
|
218 |
+
|
219 |
+
<p>The <code>members_check_for_cap()</code> function (only use in admin) checks if any role has a particular capability. This can be useful in setting up something like admin menus. For example, you can set up a theme settings menu for users that have the <code>edit_themes</code> capability. But, if this plugin is installed and a user has the <code>edit_my_theme</code> capability, that'll be used instead.</p>
|
220 |
+
|
221 |
+
<pre><code>if ( function_exists( 'members_check_for_cap' ) && members_check_for_cap( 'some_cap' ) ) {
|
222 |
+
/* Do something if any role has the 'some_cap' capability. */
|
223 |
+
else {
|
224 |
+
/* Do something for people without the plugin. */
|
225 |
+
}</code></pre>
|
226 |
+
|
227 |
+
<h2 id="old-levels">Need the old user levels system?</h2>
|
228 |
+
|
229 |
+
<p>Some plugins and themes might rely on the old user level system in WordPress. These were deprecated in WordPress version 2.1 and should not be used at all. WordPress still has minimal legacy support for these, but I highly suggest contacting your theme/plugin author if user levels are being used.</p>
|
230 |
+
|
231 |
+
<p>By default, the levels aren't shown. They still exist, but are tucked away behind the scenes. While not recommended, if you need to control who has what level (levels are just capabilities), add this to your plugin or your theme's <code>functions.php</code>:</p>
|
232 |
+
|
233 |
+
<pre><code>remove_filter( 'members_get_capabilities', 'members_remove_old_levels' );</code></pre>
|
234 |
+
|
235 |
+
<h2 id="plugin-support">Plugin support</h2>
|
236 |
+
|
237 |
+
<p>I run a WordPress community called <a href="http://themehybrid.com" title="Theme Hybrid">Theme Hybrid</a>, which is where I fully support all of my WordPress projects, including plugins. You can sign up for an account to get plugin support for a small yearly fee ($25 <acronym title="United States Dollars">USD</acronym> at the time of writing).</p>
|
238 |
+
|
239 |
+
<p>I know. I know. You might not want to pay for support, but just consider it a donation to the project. To continue making cool, <acronym title="GNU General Public License">GPL</acronym>-licensed plugins and having the time to support them, I must pay the bills.</p>
|
240 |
+
|
241 |
+
<h2 id="copyright">Copyright & license</h2>
|
242 |
+
|
243 |
+
<p><em>Members</em> is licensed under the <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html" title="GNU GPL">GNU General Public License</a>, version 2 (<acronym title="GNU General Public License">GPL</acronym>).</p>
|
244 |
+
|
245 |
+
<p>This plugin is copyrighted to <a href="http://justintadlock.com" title="Justin Tadlock">Justin Tadlock</a>.</p>
|
246 |
+
|
247 |
+
<p>2009 – 2011 © Justin Tadlock</p>
|
248 |
+
|
249 |
+
</body>
|
250 |
+
</html>
|
functions.php
DELETED
@@ -1,174 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Functions that may be used across a variety of components, so they should always
|
4 |
-
* be loaded for use on the front end of the site.
|
5 |
-
*
|
6 |
-
* @todo Decide whether Template Tags is a useful enough component to stand alone.
|
7 |
-
* The Widgets and Shortcodes components both require the use of these functions here,
|
8 |
-
* which should be template tags.
|
9 |
-
*
|
10 |
-
* @package Members
|
11 |
-
*/
|
12 |
-
|
13 |
-
/**
|
14 |
-
* Displays the login form.
|
15 |
-
*
|
16 |
-
* @since 0.1
|
17 |
-
*/
|
18 |
-
function members_login_form() {
|
19 |
-
echo members_get_login_form();
|
20 |
-
}
|
21 |
-
|
22 |
-
/**
|
23 |
-
* Creates the login form.
|
24 |
-
* @todo Make each section customizable.
|
25 |
-
* @todo Clean up.
|
26 |
-
*
|
27 |
-
* @since 0.1
|
28 |
-
*/
|
29 |
-
function members_get_login_form() {
|
30 |
-
global $user_identity, $user_ID;
|
31 |
-
|
32 |
-
if ( is_user_logged_in() ) {
|
33 |
-
|
34 |
-
$login = '<div class="login-form">';
|
35 |
-
$login .= '<p><strong>' . sprintf( __('Welcome, %1$s!', 'members'), $user_identity ) . '</strong></p>';
|
36 |
-
$login .= '</div>';
|
37 |
-
}
|
38 |
-
else {
|
39 |
-
|
40 |
-
$login = '<div class="log-in login-form">';
|
41 |
-
|
42 |
-
$login .= '<form class="log-in" action="' . get_bloginfo( 'wpurl' ) . '/wp-login.php" method="post">';
|
43 |
-
|
44 |
-
$login .= '<p class="text-input">';
|
45 |
-
$login .= '<label class="text" for="log">' . __('Username:', 'members') . '</label>';
|
46 |
-
$login .= '<input class="field" type="text" name="log" id="log" value="' . esc_attr( $user_login ) . '" size="23" />';
|
47 |
-
$login .= '</p>';
|
48 |
-
|
49 |
-
$login .= '<p class="text-input">';
|
50 |
-
$login .= '<label class="text" for="pwd">' . __('Password:', 'members') . '</label>';
|
51 |
-
$login .= '<input class="field" type="password" name="pwd" id="pwd" size="23" />';
|
52 |
-
$login .= '</p>';
|
53 |
-
|
54 |
-
$login .= '<div class="clear">';
|
55 |
-
$login .= '<input type="submit" name="submit" value="' . __('Log In', 'members') . '" class="log-in" />';
|
56 |
-
$login .= '<label class="remember"><input name="rememberme" id="rememberme" type="checkbox" checked="checked" value="forever" /> ' . __('Remember me', 'members') . '</label>';
|
57 |
-
$login .= '<input type="hidden" name="redirect_to" value="' . $_SERVER['REQUEST_URI'] . '"/>';
|
58 |
-
$login .= '</div>';
|
59 |
-
|
60 |
-
$login .= '</form>';
|
61 |
-
|
62 |
-
$login .= '</div>';
|
63 |
-
}
|
64 |
-
|
65 |
-
return $login;
|
66 |
-
}
|
67 |
-
|
68 |
-
/**
|
69 |
-
* Function for listing users like the WordPress function currently use for authors.
|
70 |
-
* This function is based off wp_dropdown_users() and wp_list_authors(). It is my
|
71 |
-
* hope that a wp_list_users() function eventually exists and this is no longer relevant.
|
72 |
-
*
|
73 |
-
* @todo Allow the input of a role to limit the list.
|
74 |
-
*
|
75 |
-
* @since 0.1
|
76 |
-
* @param $order string ASC or DESC order.
|
77 |
-
* @param $orderby string display_name, id, user_login
|
78 |
-
* @param $include string IDs of users to include.
|
79 |
-
* @param $exclude string IDs of users to exclude.
|
80 |
-
* @param $limit int Number of users to list.
|
81 |
-
* @param $show_fullname bool Whether to show users' full name (defaults to display name).
|
82 |
-
* @param $echo bool Whether to print the list or return for use in a function.
|
83 |
-
*/
|
84 |
-
function members_list_users( $args = array() ) {
|
85 |
-
global $wpdb;
|
86 |
-
|
87 |
-
$defaults = array(
|
88 |
-
'order' => 'ASC',
|
89 |
-
'orderby' => 'display_name',
|
90 |
-
'include' => '',
|
91 |
-
'exclude' => '',
|
92 |
-
//'role' => '',
|
93 |
-
'limit' => '',
|
94 |
-
//'optioncount' => false,
|
95 |
-
'show_fullname' => true,
|
96 |
-
//'exclude_empty' => false,
|
97 |
-
//'exclude_admin' => true,
|
98 |
-
'echo' => true,
|
99 |
-
);
|
100 |
-
|
101 |
-
$r = wp_parse_args( $args, $defaults );
|
102 |
-
|
103 |
-
$r = apply_filters( 'members_list_users_args', $r );
|
104 |
-
|
105 |
-
extract( $r, EXTR_SKIP );
|
106 |
-
|
107 |
-
$query = "SELECT * FROM $wpdb->users";
|
108 |
-
|
109 |
-
$query_where = array();
|
110 |
-
|
111 |
-
if ( is_array( $include ) )
|
112 |
-
$include = join( ',', $include );
|
113 |
-
|
114 |
-
$include = preg_replace( '/[^0-9,]/', '', $include ); // (int)
|
115 |
-
|
116 |
-
if ( $include )
|
117 |
-
$query_where[] = "ID IN ($include)";
|
118 |
-
|
119 |
-
if ( is_array($exclude) )
|
120 |
-
$exclude = join( ',', $exclude );
|
121 |
-
|
122 |
-
$exclude = preg_replace( '/[^0-9,]/', '', $exclude ); // (int)
|
123 |
-
|
124 |
-
if ( $exclude )
|
125 |
-
$query_where[] = "ID NOT IN ($exclude)";
|
126 |
-
|
127 |
-
if ( $query_where )
|
128 |
-
$query .= " WHERE " . join( ' AND', $query_where );
|
129 |
-
|
130 |
-
$query .= " ORDER BY $orderby $order";
|
131 |
-
|
132 |
-
if ( '' != $limit ) {
|
133 |
-
$limit = absint( $limit );
|
134 |
-
$query .= ' LIMIT ' . $limit;
|
135 |
-
}
|
136 |
-
|
137 |
-
$users = $wpdb->get_results( $query );
|
138 |
-
|
139 |
-
$output = '';
|
140 |
-
|
141 |
-
if ( !empty( $users ) ) {
|
142 |
-
|
143 |
-
foreach ( (array) $users as $user ) {
|
144 |
-
|
145 |
-
$user->ID = (int) $user->ID;
|
146 |
-
|
147 |
-
$author = get_userdata( $user->ID );
|
148 |
-
|
149 |
-
$name = $author->display_name;
|
150 |
-
|
151 |
-
if ( $show_fullname && ($author->first_name != '' && $author->last_name != '') )
|
152 |
-
$name = "$author->first_name $author->last_name";
|
153 |
-
|
154 |
-
$class = "user-{$user->ID}";
|
155 |
-
|
156 |
-
if ( is_author( $user->ID ) )
|
157 |
-
$class .= ' current-user';
|
158 |
-
|
159 |
-
if ( $hide_empty )
|
160 |
-
$output .= "<li class='$class'>$name</li>\n";
|
161 |
-
else
|
162 |
-
$output .= "<li class='$class'><a href='" . get_author_posts_url( $author->ID, $author->user_nicename ) . "' title='" . sprintf(__("Posts by %s"), esc_attr( $author->display_name ) ) . "'>$name</a></li>\n";
|
163 |
-
}
|
164 |
-
}
|
165 |
-
|
166 |
-
$output = apply_filters( 'members_list_users', $output );
|
167 |
-
|
168 |
-
if ( !$echo )
|
169 |
-
return $output;
|
170 |
-
|
171 |
-
echo $output;
|
172 |
-
}
|
173 |
-
|
174 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
includes/admin-bar.php
ADDED
@@ -0,0 +1,36 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Functions for modifying the WordPress admin bar.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Functions
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Hook the members admin bar to 'wp_before_admin_bar_render'. */
|
10 |
+
add_action( 'wp_before_admin_bar_render', 'members_admin_bar' );
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Adds new menu items to the WordPress admin bar.
|
14 |
+
*
|
15 |
+
* @since 0.2.0
|
16 |
+
* @global object $wp_admin_bar
|
17 |
+
*/
|
18 |
+
function members_admin_bar() {
|
19 |
+
global $wp_admin_bar;
|
20 |
+
|
21 |
+
/* Check if the current user can 'create_roles'. */
|
22 |
+
if ( current_user_can( 'create_roles' ) ) {
|
23 |
+
|
24 |
+
/* Add a 'Role' menu item as a sub-menu item of the new content menu. */
|
25 |
+
$wp_admin_bar->add_menu(
|
26 |
+
array(
|
27 |
+
'id' => 'members-new-role',
|
28 |
+
'parent' => 'new-content',
|
29 |
+
'title' => esc_attr__( 'Role', 'members' ),
|
30 |
+
'href' => admin_url( 'users.php?page=role-new' )
|
31 |
+
)
|
32 |
+
);
|
33 |
+
}
|
34 |
+
}
|
35 |
+
|
36 |
+
?>
|
functions-admin.php → includes/capabilities.php
RENAMED
@@ -1,261 +1,245 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
*
|
4 |
-
*
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
*
|
17 |
-
*
|
18 |
-
*
|
19 |
-
*
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
*/
|
27 |
-
|
28 |
-
|
29 |
-
/*
|
30 |
-
$
|
31 |
-
|
32 |
-
/*
|
33 |
-
$
|
34 |
-
|
35 |
-
/*
|
36 |
-
$
|
37 |
-
|
38 |
-
/*
|
39 |
-
$
|
40 |
-
|
41 |
-
/*
|
42 |
-
|
43 |
-
|
44 |
-
/*
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
*
|
56 |
-
*
|
57 |
-
*
|
58 |
-
*
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
*
|
89 |
-
*
|
90 |
-
*
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
'
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
*
|
110 |
-
*
|
111 |
-
*
|
112 |
-
*
|
113 |
-
*
|
114 |
-
*
|
115 |
-
*
|
116 |
-
*
|
117 |
-
*
|
118 |
-
* @
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
*/
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
'
|
128 |
-
'
|
129 |
-
'
|
130 |
-
'
|
131 |
-
'
|
132 |
-
'
|
133 |
-
'
|
134 |
-
'
|
135 |
-
'
|
136 |
-
'
|
137 |
-
'
|
138 |
-
'
|
139 |
-
'
|
140 |
-
'
|
141 |
-
'
|
142 |
-
'
|
143 |
-
'
|
144 |
-
'
|
145 |
-
'
|
146 |
-
'
|
147 |
-
'
|
148 |
-
'
|
149 |
-
'
|
150 |
-
'
|
151 |
-
'
|
152 |
-
'
|
153 |
-
'
|
154 |
-
'
|
155 |
-
'manage_categories',
|
156 |
-
'manage_links',
|
157 |
-
'manage_options',
|
158 |
-
'moderate_comments',
|
159 |
-
'
|
160 |
-
'
|
161 |
-
'
|
162 |
-
'
|
163 |
-
'
|
164 |
-
'
|
165 |
-
'
|
166 |
-
'
|
167 |
-
'
|
168 |
-
'
|
169 |
-
'
|
170 |
-
|
171 |
-
|
172 |
-
|
173 |
-
|
174 |
-
|
175 |
-
|
176 |
-
|
177 |
-
|
178 |
-
|
179 |
-
|
180 |
-
*
|
181 |
-
*
|
182 |
-
* @
|
183 |
-
* @
|
184 |
-
|
185 |
-
|
186 |
-
|
187 |
-
|
188 |
-
|
189 |
-
|
190 |
-
|
191 |
-
|
192 |
-
|
193 |
-
|
194 |
-
|
195 |
-
|
196 |
-
|
197 |
-
|
198 |
-
|
199 |
-
|
200 |
-
|
201 |
-
|
202 |
-
|
203 |
-
|
204 |
-
|
205 |
-
*
|
206 |
-
*
|
207 |
-
*
|
208 |
-
*
|
209 |
-
* @
|
210 |
-
|
211 |
-
|
212 |
-
|
213 |
-
|
214 |
-
|
215 |
-
|
216 |
-
|
217 |
-
*
|
218 |
-
*
|
219 |
-
*
|
220 |
-
*
|
221 |
-
*
|
222 |
-
* @
|
223 |
-
* @
|
224 |
-
|
225 |
-
|
226 |
-
|
227 |
-
|
228 |
-
|
229 |
-
|
230 |
-
|
231 |
-
*
|
232 |
-
*
|
233 |
-
*
|
234 |
-
* @since 0.1
|
235 |
-
* @
|
236 |
-
|
237 |
-
|
238 |
-
|
239 |
-
|
240 |
-
|
241 |
-
|
242 |
-
|
243 |
-
|
244 |
-
|
245 |
-
}
|
246 |
-
|
247 |
-
/**
|
248 |
-
* Members plugin nonce function. This is to help with securely making sure
|
249 |
-
* forms have been processed from the correct place.
|
250 |
-
*
|
251 |
-
* @since 0.1
|
252 |
-
* @param $action string Additional action to add to the nonce.
|
253 |
-
*/
|
254 |
-
function members_get_nonce( $action = '' ) {
|
255 |
-
if ( $action )
|
256 |
-
return "members-component-action_{$action}";
|
257 |
-
else
|
258 |
-
return "members-plugin";
|
259 |
-
}
|
260 |
-
|
261 |
?>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Members
|
4 |
+
* @subpackage Includes
|
5 |
+
*/
|
6 |
+
|
7 |
+
/* Disables the old levels from being seen. If you need them, use remove_filter() to add display back. */
|
8 |
+
add_filter( 'members_get_capabilities', 'members_remove_old_levels' );
|
9 |
+
|
10 |
+
/**
|
11 |
+
* The function that makes this plugin what it is. It returns all of our capabilities in a nicely-formatted,
|
12 |
+
* alphabetized array with no duplicate capabilities. It pulls from three different functions to make sure
|
13 |
+
* we get all of the capabilities that we need for use in the plugin components.
|
14 |
+
*
|
15 |
+
* @since 0.1.0
|
16 |
+
* @uses members_get_default_capabilities() Gets an array of WP's default capabilities.
|
17 |
+
* @uses members_get_role_capabilities() Gets an array of all the capabilities currently mapped to a role.
|
18 |
+
* @uses members_get_additional_capabilities() Gets an array of capabilities added by the plugin.
|
19 |
+
* @return array $capabilities An array containing all of the capabilities.
|
20 |
+
*/
|
21 |
+
function members_get_capabilities() {
|
22 |
+
|
23 |
+
/* Capabilities array. */
|
24 |
+
$capabilities = array();
|
25 |
+
|
26 |
+
/* Grab the default capabilities (these are set by the plugin so the user doesn't lose them). */
|
27 |
+
$default_caps = members_get_default_capabilities();
|
28 |
+
|
29 |
+
/* Get the user capabilities that are already set. */
|
30 |
+
$role_caps = members_get_role_capabilities();
|
31 |
+
|
32 |
+
/* Gets capabilities added by the plugin. */
|
33 |
+
$plugin_caps = members_get_additional_capabilities();
|
34 |
+
|
35 |
+
/* Merge all the capability arrays (current role caps, plugin caps, and default WP caps) together. */
|
36 |
+
$capabilities = array_merge( $default_caps, $role_caps, $plugin_caps );
|
37 |
+
|
38 |
+
/* Apply filters to the array of capabilities. Devs should respect the available capabilities and return an array. */
|
39 |
+
$capabilities = apply_filters( 'members_get_capabilities', $capabilities );
|
40 |
+
|
41 |
+
/* Sort the capabilities by name so they're easier to read when shown on the screen. */
|
42 |
+
sort( $capabilities );
|
43 |
+
|
44 |
+
/* Return the array of capabilities, making sure we have no duplicates. */
|
45 |
+
return array_unique( $capabilities );
|
46 |
+
}
|
47 |
+
|
48 |
+
/**
|
49 |
+
* Gets an array of capabilities according to each user role. Each role will return its caps, which are then
|
50 |
+
* added to the overall $capabilities array.
|
51 |
+
*
|
52 |
+
* Note that if no role has the capability, it technically no longer exists. Since this could be a problem with
|
53 |
+
* folks accidentally deleting the default WordPress capabilities, the members_default_capabilities() will
|
54 |
+
* return all the defaults.
|
55 |
+
*
|
56 |
+
* @since 0.1.0
|
57 |
+
* @return array $capabilities All the capabilities of all the user roles.
|
58 |
+
* @global array $wp_roles Holds all the roles for the installation.
|
59 |
+
*/
|
60 |
+
function members_get_role_capabilities() {
|
61 |
+
global $wp_roles;
|
62 |
+
|
63 |
+
/* Set up an empty capabilities array. */
|
64 |
+
$capabilities = array();
|
65 |
+
|
66 |
+
/* Loop through each role object because we need to get the caps. */
|
67 |
+
foreach ( $wp_roles->role_objects as $key => $role ) {
|
68 |
+
|
69 |
+
/* Roles without capabilities will cause an error, so we need to check if $role->capabilities is an array. */
|
70 |
+
if ( is_array( $role->capabilities ) ) {
|
71 |
+
|
72 |
+
/* Loop through the role's capabilities and add them to the $capabilities array. */
|
73 |
+
foreach ( $role->capabilities as $cap => $grant )
|
74 |
+
$capabilities[$cap] = $cap;
|
75 |
+
}
|
76 |
+
}
|
77 |
+
|
78 |
+
/* Return the capabilities array, making sure there are no duplicates. */
|
79 |
+
return array_unique( $capabilities );
|
80 |
+
}
|
81 |
+
|
82 |
+
/**
|
83 |
+
* Additional capabilities provided by the Members plugin that gives users permissions to handle certain features
|
84 |
+
* of the plugin.
|
85 |
+
*
|
86 |
+
* @todo Integrate 'edit_roles' into the settings. It should be a priority on initial setup.
|
87 |
+
* @todo Move each capability within its component. Use the 'members_get_capabilities' filter hook to add them.
|
88 |
+
*
|
89 |
+
* @since 0.1.0
|
90 |
+
* @return array $capabilities
|
91 |
+
*/
|
92 |
+
function members_get_additional_capabilities() {
|
93 |
+
|
94 |
+
$capabilities = array(
|
95 |
+
'list_roles', // Ability to view roles list
|
96 |
+
'create_roles', // Ability to create new roles
|
97 |
+
'delete_roles', // Ability to delete roles
|
98 |
+
'edit_roles', // Ability to edit a role's caps
|
99 |
+
'restrict_content' // Ability to restrict content (content permissions component)
|
100 |
+
);
|
101 |
+
|
102 |
+
return $capabilities;
|
103 |
+
}
|
104 |
+
|
105 |
+
/**
|
106 |
+
* Make sure we keep the default capabilities in case users screw 'em up. A user could easily remove a
|
107 |
+
* useful WordPress capability from all roles. When this happens, the capability is no longer stored in any of
|
108 |
+
* the roles, so it basically doesn't exist. This function will house all of the default WordPress capabilities in
|
109 |
+
* case this scenario comes into play.
|
110 |
+
*
|
111 |
+
* For those reading this note, yes, I did "accidentally" remove all capabilities from my administrator account
|
112 |
+
* when developing this plugin. And yes, that was fun putting back together. ;)
|
113 |
+
*
|
114 |
+
* The Codex has a list of all the defaults:
|
115 |
+
* @link http://codex.wordpress.org/Roles_and_Capabilities#Capabilities
|
116 |
+
*
|
117 |
+
* @since 0.1
|
118 |
+
* @return array $defaults All the default WordPress capabilities.
|
119 |
+
*/
|
120 |
+
function members_get_default_capabilities() {
|
121 |
+
|
122 |
+
/* Create an array of all the default WordPress capabilities so the user doesn't accidentally get rid of them. */
|
123 |
+
$defaults = array(
|
124 |
+
'activate_plugins',
|
125 |
+
'add_users',
|
126 |
+
'create_users',
|
127 |
+
'delete_others_pages',
|
128 |
+
'delete_others_posts',
|
129 |
+
'delete_pages',
|
130 |
+
'delete_plugins',
|
131 |
+
'delete_posts',
|
132 |
+
'delete_private_pages',
|
133 |
+
'delete_private_posts',
|
134 |
+
'delete_published_pages',
|
135 |
+
'delete_published_posts',
|
136 |
+
'delete_users',
|
137 |
+
'edit_dashboard',
|
138 |
+
'edit_files',
|
139 |
+
'edit_others_pages',
|
140 |
+
'edit_others_posts',
|
141 |
+
'edit_pages',
|
142 |
+
'edit_plugins',
|
143 |
+
'edit_posts',
|
144 |
+
'edit_private_pages',
|
145 |
+
'edit_private_posts',
|
146 |
+
'edit_published_pages',
|
147 |
+
'edit_published_posts',
|
148 |
+
'edit_theme_options',
|
149 |
+
'edit_themes',
|
150 |
+
'edit_users',
|
151 |
+
'import',
|
152 |
+
'install_plugins',
|
153 |
+
'install_themes',
|
154 |
+
'list_users',
|
155 |
+
'manage_categories',
|
156 |
+
'manage_links',
|
157 |
+
'manage_options',
|
158 |
+
'moderate_comments',
|
159 |
+
'promote_users',
|
160 |
+
'publish_pages',
|
161 |
+
'publish_posts',
|
162 |
+
'read',
|
163 |
+
'read_private_pages',
|
164 |
+
'read_private_posts',
|
165 |
+
'remove_users',
|
166 |
+
'switch_themes',
|
167 |
+
'unfiltered_html',
|
168 |
+
'unfiltered_upload',
|
169 |
+
'update_core',
|
170 |
+
'update_plugins',
|
171 |
+
'update_themes',
|
172 |
+
'upload_files'
|
173 |
+
);
|
174 |
+
|
175 |
+
/* Return the array of default capabilities. */
|
176 |
+
return $defaults;
|
177 |
+
}
|
178 |
+
|
179 |
+
/**
|
180 |
+
* Checks if a specific capability has been given to at least one role. If it has, return true. Else, return false.
|
181 |
+
*
|
182 |
+
* @since 0.1.0
|
183 |
+
* @uses members_get_role_capabilities() Checks for capability in array of role caps.
|
184 |
+
* @param string $cap Name of the capability to check for.
|
185 |
+
* @return true|false bool Whether the capability has been given to a role.
|
186 |
+
*/
|
187 |
+
function members_check_for_cap( $cap = '' ) {
|
188 |
+
|
189 |
+
/* Without a capability, we have nothing to check for. Just return false. */
|
190 |
+
if ( !$cap )
|
191 |
+
return false;
|
192 |
+
|
193 |
+
/* Gets capabilities that are currently mapped to a role. */
|
194 |
+
$caps = members_get_role_capabilities();
|
195 |
+
|
196 |
+
/* If the capability has been given to at least one role, return true. */
|
197 |
+
if ( in_array( $cap, $caps ) )
|
198 |
+
return true;
|
199 |
+
|
200 |
+
/* If no role has been given the capability, return false. */
|
201 |
+
return false;
|
202 |
+
}
|
203 |
+
|
204 |
+
/**
|
205 |
+
* Old WordPress levels system. This is mostly useful for filtering out the levels when shown in admin
|
206 |
+
* screen. Plugins shouldn't rely on these levels to create permissions for users. They should move to the
|
207 |
+
* newer system of checking for a specific capability instead.
|
208 |
+
*
|
209 |
+
* @since 0.1.0
|
210 |
+
* @return array Old user levels.
|
211 |
+
*/
|
212 |
+
function members_get_old_levels() {
|
213 |
+
return array( 'level_0', 'level_1', 'level_2', 'level_3', 'level_4', 'level_5', 'level_6', 'level_7', 'level_8', 'level_9', 'level_10' );
|
214 |
+
}
|
215 |
+
|
216 |
+
/**
|
217 |
+
* Get rid of levels since these are mostly useless in newer versions of WordPress.
|
218 |
+
*
|
219 |
+
* To remove this filter:
|
220 |
+
* remove_filter( 'members_get_capabilities', 'members_remove_old_levels' );
|
221 |
+
*
|
222 |
+
* @since 0.1.0
|
223 |
+
* @param $capabilities array All of the combined capabilities.
|
224 |
+
* @return $capabilities array Capabilities with old user levels removed.
|
225 |
+
*/
|
226 |
+
function members_remove_old_levels( $capabilities ) {
|
227 |
+
return array_diff( $capabilities, members_get_old_levels() );
|
228 |
+
}
|
229 |
+
|
230 |
+
/**
|
231 |
+
* Returns an array of capabilities that should be set on the New Role admin screen. By default, the only
|
232 |
+
* capability checked is 'read' because it's needed for users of the role to view their profile in the admin.
|
233 |
+
*
|
234 |
+
* @since 0.1.0
|
235 |
+
* @return $capabilities array Default capabilities for new roles.
|
236 |
+
*/
|
237 |
+
function members_new_role_default_capabilities() {
|
238 |
+
|
239 |
+
$capabilities = array( 'read' );
|
240 |
+
|
241 |
+
/* Filters should return an array. */
|
242 |
+
return apply_filters( 'members_new_role_default_capabilities', $capabilities );
|
243 |
+
}
|
244 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
245 |
?>
|
includes/comments.php
ADDED
@@ -0,0 +1,12 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* This file is used to disable the comments and comments form from showing comments on posts that a user
|
4 |
+
* doesn't have access to. The use of this file assumes that the theme properly uses the comments_template()
|
5 |
+
* function. This is required because the plugin hooks into the 'comments_template' filter hook to load this
|
6 |
+
* empty file.
|
7 |
+
*
|
8 |
+
* @since 0.1.0
|
9 |
+
* @package Members
|
10 |
+
* @subpackage Template
|
11 |
+
*/
|
12 |
+
?>
|
includes/content-permissions.php
ADDED
@@ -0,0 +1,152 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Handles permissions for post content, post excerpts, and post comments. This is based on whether a user
|
4 |
+
* has permission to view a post according to the settings provided by the plugin.
|
5 |
+
*
|
6 |
+
* @package Members
|
7 |
+
* @subpackage Functions
|
8 |
+
*/
|
9 |
+
|
10 |
+
/* Enable the content permissions features. */
|
11 |
+
add_action( 'after_setup_theme', 'members_enable_content_permissions', 1 );
|
12 |
+
|
13 |
+
/**
|
14 |
+
* Adds required filters for the content permissions feature if it is active.
|
15 |
+
*
|
16 |
+
* @since 0.2.0
|
17 |
+
*/
|
18 |
+
function members_enable_content_permissions() {
|
19 |
+
|
20 |
+
/* Only add filters if the content permissions feature is enabled and we're not in the admin. */
|
21 |
+
if ( members_get_setting( 'content_permissions' ) && !is_admin() ) {
|
22 |
+
|
23 |
+
/* Filter the content and exerpts. */
|
24 |
+
add_filter( 'the_content', 'members_content_permissions_protect' );
|
25 |
+
add_filter( 'get_the_excerpt', 'members_content_permissions_protect' );
|
26 |
+
add_filter( 'the_excerpt', 'members_content_permissions_protect' );
|
27 |
+
add_filter( 'the_content_feed', 'members_content_permissions_protect' );
|
28 |
+
add_filter( 'comment_text_rss', 'members_content_permissions_protect' );
|
29 |
+
|
30 |
+
/* Filter the comments template to make sure comments aren't shown to users without access. */
|
31 |
+
add_filter( 'comments_template', 'members_content_permissions_comments' );
|
32 |
+
|
33 |
+
/* Use WP formatting filters on the post error message. */
|
34 |
+
add_filter( 'members_post_error_message', 'wptexturize' );
|
35 |
+
add_filter( 'members_post_error_message', 'convert_smilies' );
|
36 |
+
add_filter( 'members_post_error_message', 'convert_chars' );
|
37 |
+
add_filter( 'members_post_error_message', 'wpautop' );
|
38 |
+
add_filter( 'members_post_error_message', 'shortcode_unautop' );
|
39 |
+
add_filter( 'members_post_error_message', 'do_shortcode' );
|
40 |
+
}
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Denies/Allows access to view post content depending on whether a user has permission to view the content.
|
45 |
+
*
|
46 |
+
* @since 0.1.0
|
47 |
+
* @param string $content The content of a post.
|
48 |
+
* @param string $content The content of a post or an error message.
|
49 |
+
*/
|
50 |
+
function members_content_permissions_protect( $content ) {
|
51 |
+
|
52 |
+
/* If the current user can view the post, return the post content. */
|
53 |
+
if ( members_can_current_user_view_post( get_the_ID() ) )
|
54 |
+
return $content;
|
55 |
+
|
56 |
+
/* Return an error message at this point. */
|
57 |
+
return members_get_post_error_message( get_the_ID() );
|
58 |
+
}
|
59 |
+
|
60 |
+
/**
|
61 |
+
* Disables the comments template if a user doesn't have permission to view the post the comments are
|
62 |
+
* associated with.
|
63 |
+
*
|
64 |
+
* @since 0.1.0
|
65 |
+
* @param string $template The Comments template.
|
66 |
+
* @return string $template
|
67 |
+
*/
|
68 |
+
function members_content_permissions_comments( $template ) {
|
69 |
+
|
70 |
+
/* Check if the current user has permission to view the comments' post. */
|
71 |
+
if ( !members_can_current_user_view_post( get_queried_object_id() ) ) {
|
72 |
+
|
73 |
+
/* Look for a 'comments-no-access.php' template in the parent and child theme. */
|
74 |
+
$has_template = locate_template( array( 'comments-no-access.php' ) );
|
75 |
+
|
76 |
+
/* If the template was found, use it. Otherwise, fall back to the Members comments.php template. */
|
77 |
+
$template = ( !empty( $has_template ) ? $has_template : MEMBERS_INCLUDES . 'comments.php' );
|
78 |
+
|
79 |
+
/* Allow devs to overwrite the comments template. */
|
80 |
+
$template = apply_filters( 'members_comments_template', $template );
|
81 |
+
}
|
82 |
+
|
83 |
+
/* Return the comments template filename. */
|
84 |
+
return $template;
|
85 |
+
}
|
86 |
+
|
87 |
+
/**
|
88 |
+
* Gets the error message to display for users who do not have access to view the given post. The function first
|
89 |
+
* checks to see if a custom error message has been written for the specific post. If not, it loads the error
|
90 |
+
* message set on the plugins settings page.
|
91 |
+
*
|
92 |
+
* @since 0.2.0
|
93 |
+
* @param int $post_id The ID of the post to get the error message for.
|
94 |
+
* @return string $return The error message.
|
95 |
+
*/
|
96 |
+
function members_get_post_error_message( $post_id ) {
|
97 |
+
|
98 |
+
/* Get the error message for the specific post. */
|
99 |
+
$error_message = get_post_meta( $post_id, '_members_access_error', true );
|
100 |
+
|
101 |
+
/* If an error message is found, return it. */
|
102 |
+
if ( !empty( $error_message ) )
|
103 |
+
$return = $error_message;
|
104 |
+
|
105 |
+
/* If no error message is found, return the default message. */
|
106 |
+
else
|
107 |
+
$return = members_get_setting( 'content_permissions_error' );
|
108 |
+
|
109 |
+
/* Return the error message. */
|
110 |
+
return apply_filters( 'members_post_error_message', $return );
|
111 |
+
}
|
112 |
+
|
113 |
+
/**
|
114 |
+
* Converts the meta values of the old '_role' post meta key to the newer '_members_access_role' meta
|
115 |
+
* key. The reason for this change is to avoid any potential conflicts with other plugins/themes. We're
|
116 |
+
* now using a meta key that is extremely specific to the Members plugin.
|
117 |
+
*
|
118 |
+
* @since 0.2.0
|
119 |
+
* @param int $post_id The ID of the post to convert the post meta for.
|
120 |
+
* @return array|bool $old_roles|false Returns the array of old roles or false for everything else.
|
121 |
+
*/
|
122 |
+
function members_convert_old_post_meta( $post_id ) {
|
123 |
+
|
124 |
+
/* Check if there are any meta values for the '_role' meta key. */
|
125 |
+
$old_roles = get_post_meta( $post_id, '_role', false );
|
126 |
+
|
127 |
+
/* If roles were found, let's convert them. */
|
128 |
+
if ( !empty( $old_roles ) ) {
|
129 |
+
|
130 |
+
/* Delete the old '_role' post meta. */
|
131 |
+
delete_post_meta( $post_id, '_role' );
|
132 |
+
|
133 |
+
/* Check if there are any roles for the '_members_access_role' meta key. */
|
134 |
+
$new_roles = get_post_meta( $post_id, '_members_access_role', false );
|
135 |
+
|
136 |
+
/* If new roles were found, don't do any conversion. */
|
137 |
+
if ( empty( $new_roles ) ) {
|
138 |
+
|
139 |
+
/* Loop through the old meta values for '_role' and add them to the new '_members_access_role' meta key. */
|
140 |
+
foreach ( $old_roles as $role )
|
141 |
+
add_post_meta( $post_id, '_members_access_role', $role, false );
|
142 |
+
|
143 |
+
/* Return the array of roles. */
|
144 |
+
return $old_roles;
|
145 |
+
}
|
146 |
+
}
|
147 |
+
|
148 |
+
/* Return false if we get to this point. */
|
149 |
+
return false;
|
150 |
+
}
|
151 |
+
|
152 |
+
?>
|
includes/deprecated.php
ADDED
@@ -0,0 +1,98 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Deprecated functions that are being phased out completely or should be replaced with other functions.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Functions
|
7 |
+
*/
|
8 |
+
|
9 |
+
/**
|
10 |
+
* @since 0.1.0
|
11 |
+
* @deprecated 0.2.0 This is theme functionality. Let's just leave it to themes.
|
12 |
+
*/
|
13 |
+
function members_author_profile() {
|
14 |
+
_deprecated_function( __FUNCTION__, '0.2.0', '' ); ?>
|
15 |
+
|
16 |
+
<div class="author-profile vcard">
|
17 |
+
<?php echo get_avatar( get_the_author_meta( 'user_email' ), '100', '', get_the_author_meta( 'display_name' ) ); ?>
|
18 |
+
<h4 class="author-name fn n"><?php the_author_posts_link(); ?></h4>
|
19 |
+
<p class="author-description author-bio">
|
20 |
+
<?php echo the_author_meta( 'description' ); ?>
|
21 |
+
</p>
|
22 |
+
</div>
|
23 |
+
<?php
|
24 |
+
}
|
25 |
+
|
26 |
+
/**
|
27 |
+
* @since 0.1.0
|
28 |
+
* @deprecated 0.2.0 Use wp_login_form() instead.
|
29 |
+
*/
|
30 |
+
function members_login_form() {
|
31 |
+
_deprecated_function( __FUNCTION__, '0.2.0', 'wp_login_form' );
|
32 |
+
|
33 |
+
wp_login_form( array( 'echo' => true ) );
|
34 |
+
}
|
35 |
+
|
36 |
+
/**
|
37 |
+
* @since 0.1.0
|
38 |
+
* @deprecated 0.2.0
|
39 |
+
*/
|
40 |
+
function members_get_login_form() {
|
41 |
+
_deprecated_function( __FUNCTION__, '0.2.0', 'wp_login_form' );
|
42 |
+
|
43 |
+
wp_login_form( array( 'echo' => false ) );
|
44 |
+
}
|
45 |
+
|
46 |
+
if ( !function_exists( 'has_role' ) ) {
|
47 |
+
|
48 |
+
/**
|
49 |
+
* @since 0.1.0
|
50 |
+
* @deprecated 0.2.0
|
51 |
+
*/
|
52 |
+
function has_role( $role, $user_id ) {
|
53 |
+
_deprecated_function( __FUNCTION__, '0.2.0', 'user_can' );
|
54 |
+
|
55 |
+
return user_can( $user_id, $role );
|
56 |
+
}
|
57 |
+
}
|
58 |
+
|
59 |
+
if ( !function_exists( 'current_user_has_role' ) ) {
|
60 |
+
|
61 |
+
/**
|
62 |
+
* @since 0.1.0
|
63 |
+
* @deprecated 0.2.0
|
64 |
+
*/
|
65 |
+
function current_user_has_role() {
|
66 |
+
_deprecated_function( __FUNCTION__, '0.2.0', 'current_user_can' );
|
67 |
+
|
68 |
+
return current_user_can( $role );
|
69 |
+
}
|
70 |
+
}
|
71 |
+
|
72 |
+
/**
|
73 |
+
* @since 0.1.0
|
74 |
+
* @deprecated 0.2.0
|
75 |
+
*/
|
76 |
+
function members_get_avatar_shortcode( $attr ) {
|
77 |
+
_deprecated_function( __FUNCTION__, '0.2.0', '' );
|
78 |
+
|
79 |
+
/* Set up our default attributes. */
|
80 |
+
$defaults = array(
|
81 |
+
'id' => '',
|
82 |
+
'email' => '',
|
83 |
+
'size' => 96,
|
84 |
+
'default' => '',
|
85 |
+
'alt' => ''
|
86 |
+
);
|
87 |
+
|
88 |
+
/* Merge the input attributes and the defaults. */
|
89 |
+
extract( shortcode_atts( $defaults, $attr ) );
|
90 |
+
|
91 |
+
/* If an email was input, use it. Else, use the ID. */
|
92 |
+
$id_or_email = ( !empty( $email ) ? $email : $id );
|
93 |
+
|
94 |
+
/* Return the avatar. */
|
95 |
+
return get_avatar( $id_or_email, $size, $default, $alt );
|
96 |
+
}
|
97 |
+
|
98 |
+
?>
|
includes/functions.php
ADDED
@@ -0,0 +1,174 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* General functions file for the plugin.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Functions
|
7 |
+
*/
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Gets a setting from from the plugin settings in the database.
|
11 |
+
*
|
12 |
+
* @since 0.2.0
|
13 |
+
*/
|
14 |
+
function members_get_setting( $option = '' ) {
|
15 |
+
global $members;
|
16 |
+
|
17 |
+
if ( !$option )
|
18 |
+
return false;
|
19 |
+
|
20 |
+
if ( !isset( $members->settings ) )
|
21 |
+
$members->settings = get_option( 'members_settings' );
|
22 |
+
|
23 |
+
if ( !is_array( $members->settings ) || empty( $members->settings[$option] ) )
|
24 |
+
return false;
|
25 |
+
|
26 |
+
return $members->settings[$option];
|
27 |
+
}
|
28 |
+
|
29 |
+
/**
|
30 |
+
* Counts the number of roles the site has.
|
31 |
+
*
|
32 |
+
* @since 0.2.0
|
33 |
+
*/
|
34 |
+
function members_count_roles() {
|
35 |
+
global $wp_roles;
|
36 |
+
|
37 |
+
if ( !empty( $wp_roles->role_names ) )
|
38 |
+
return count( $wp_roles->role_names );
|
39 |
+
|
40 |
+
return false;
|
41 |
+
}
|
42 |
+
|
43 |
+
/**
|
44 |
+
* Gets all the roles that have users for the site.
|
45 |
+
*
|
46 |
+
* @since 0.2.0
|
47 |
+
*/
|
48 |
+
function members_get_active_roles() {
|
49 |
+
global $wp_roles, $members;
|
50 |
+
|
51 |
+
if ( !isset( $members->active_roles ) ) {
|
52 |
+
|
53 |
+
$active = array();
|
54 |
+
|
55 |
+
foreach ( $wp_roles->role_names as $role => $name ) {
|
56 |
+
|
57 |
+
$count = members_get_role_user_count( $role );
|
58 |
+
|
59 |
+
if ( !empty( $count ) )
|
60 |
+
$active[$role] = $name;
|
61 |
+
}
|
62 |
+
|
63 |
+
$members->active_roles = $active;
|
64 |
+
}
|
65 |
+
|
66 |
+
return $members->active_roles;
|
67 |
+
}
|
68 |
+
|
69 |
+
/**
|
70 |
+
* Gets all the roles that do not have users for the site.
|
71 |
+
*
|
72 |
+
* @since 0.2.0
|
73 |
+
*/
|
74 |
+
function members_get_inactive_roles() {
|
75 |
+
global $wp_roles, $members;
|
76 |
+
|
77 |
+
if ( !isset( $members->inactive_roles ) ) {
|
78 |
+
|
79 |
+
$inactive = array();
|
80 |
+
|
81 |
+
foreach ( $wp_roles->role_names as $role => $name ) {
|
82 |
+
|
83 |
+
$count = members_get_role_user_count( $role );
|
84 |
+
|
85 |
+
if ( empty( $count ) )
|
86 |
+
$inactive[$role] = $name;
|
87 |
+
}
|
88 |
+
|
89 |
+
$members->inactive_roles = $inactive;
|
90 |
+
}
|
91 |
+
|
92 |
+
return $members->inactive_roles;
|
93 |
+
}
|
94 |
+
|
95 |
+
/**
|
96 |
+
* Counts the number of users for all roles on the site and returns this as an array. If the $user_role is input,
|
97 |
+
* the return value will be the count just for that particular role.
|
98 |
+
*
|
99 |
+
* @todo Use WP's cache API to cache this data.
|
100 |
+
*
|
101 |
+
* @since 0.2.0
|
102 |
+
* @param string $user_role The role to get the user count for.
|
103 |
+
*/
|
104 |
+
function members_get_role_user_count( $user_role = '' ) {
|
105 |
+
global $members;
|
106 |
+
|
107 |
+
/* If the count is not already set for all roles, let's get it. */
|
108 |
+
if ( !isset( $members->role_user_count ) ) {
|
109 |
+
|
110 |
+
$avail_roles = array();
|
111 |
+
|
112 |
+
/* Count users */
|
113 |
+
$user_count = count_users();
|
114 |
+
|
115 |
+
/* Loop through the user count by role to get a count of the users with each role. */
|
116 |
+
foreach ( $user_count['avail_roles'] as $role => $count )
|
117 |
+
$avail_roles[$role] = $count;
|
118 |
+
|
119 |
+
$members->role_user_count = $avail_roles;
|
120 |
+
}
|
121 |
+
|
122 |
+
/* If the $user_role parameter wasn't passed into this function, return the array of user counts. */
|
123 |
+
if ( empty( $user_role ) )
|
124 |
+
return $members->role_user_count;
|
125 |
+
|
126 |
+
/* If the role has no users, we need to set it to '0'. */
|
127 |
+
if ( !isset( $members->role_user_count[$user_role] ) )
|
128 |
+
$members->role_user_count[$user_role] = 0;
|
129 |
+
|
130 |
+
/* Return the user count for the given role. */
|
131 |
+
return $members->role_user_count[$user_role];
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Function for listing users like the WordPress function currently uses for authors.
|
136 |
+
*
|
137 |
+
* Eventually, I hope to remove this function in favor of wp_list_users():
|
138 |
+
* @link http://core.trac.wordpress.org/ticket/15145
|
139 |
+
*
|
140 |
+
* @since 0.1.0
|
141 |
+
* @uses get_users()
|
142 |
+
*/
|
143 |
+
function members_list_users( $args = array() ) {
|
144 |
+
|
145 |
+
$output = '';
|
146 |
+
$users = get_users( $args );
|
147 |
+
|
148 |
+
if ( !empty( $users ) ) {
|
149 |
+
|
150 |
+
$output .= '<ul class="xoxo members-list-users">';
|
151 |
+
|
152 |
+
foreach ( $users as $user ) {
|
153 |
+
|
154 |
+
$url = get_author_posts_url( $author->ID, $author->user_nicename );
|
155 |
+
|
156 |
+
$class = esc_attr( "user-{$user->ID}" );
|
157 |
+
if ( is_author( $user->ID ) )
|
158 |
+
$class .= ' current-user';
|
159 |
+
|
160 |
+
$output .= "<li class='{$class}'><a href='{$url}' title='" . esc_attr( $user->display_name ) . "'>{$user->display_name}</a></li>\n";
|
161 |
+
}
|
162 |
+
|
163 |
+
$output .= '</ul>';
|
164 |
+
}
|
165 |
+
|
166 |
+
$output = apply_filters( 'members_list_users', $output );
|
167 |
+
|
168 |
+
if ( empty( $args['echo'] ) )
|
169 |
+
return $output;
|
170 |
+
|
171 |
+
echo $output;
|
172 |
+
}
|
173 |
+
|
174 |
+
?>
|
includes/private-site.php
ADDED
@@ -0,0 +1,56 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Handles the private site and private feed features of the plugin. If private site is selected in the plugin settings,
|
4 |
+
* the plugin will redirect all non-logged-in users to the login page. If private feed is selected, all content is blocked
|
5 |
+
* from feeds from the site.
|
6 |
+
*
|
7 |
+
* @package Members
|
8 |
+
* @subpackage Functions
|
9 |
+
*/
|
10 |
+
|
11 |
+
/* Redirects users to the login page. */
|
12 |
+
add_action( 'template_redirect', 'members_please_log_in', 1 );
|
13 |
+
|
14 |
+
/* Disable content in feeds if the feed should be private. */
|
15 |
+
add_filter( 'the_content_feed', 'members_private_feed' );
|
16 |
+
add_filter( 'the_excerpt_rss', 'members_private_feed' );
|
17 |
+
add_filter( 'comment_text_rss', 'members_private_feed' );
|
18 |
+
|
19 |
+
/**
|
20 |
+
* Redirects users that are not logged in to the 'wp-login.php' page.
|
21 |
+
*
|
22 |
+
* @since 0.1.0
|
23 |
+
* @uses is_user_logged_in() Checks if the current user is logged in.
|
24 |
+
* @uses auth_redirect() Redirects people that are not logged in to the login page.
|
25 |
+
*/
|
26 |
+
function members_please_log_in() {
|
27 |
+
|
28 |
+
/* Check if the private blog feature is active. */
|
29 |
+
if ( members_get_setting( 'private_blog' ) ) {
|
30 |
+
|
31 |
+
/* If using BuddyPress and on the register page, don't do anything. */
|
32 |
+
if ( function_exists( 'bp_is_current_component' ) && bp_is_current_component( 'register' ) )
|
33 |
+
return;
|
34 |
+
|
35 |
+
/* Else, if the user is not logged in, redirect to the login page. */
|
36 |
+
elseif ( !is_user_logged_in() )
|
37 |
+
auth_redirect();
|
38 |
+
}
|
39 |
+
}
|
40 |
+
|
41 |
+
/**
|
42 |
+
* Blocks feed items if the user has selected the private feed feature.
|
43 |
+
*
|
44 |
+
* @since 0.2.0
|
45 |
+
* @param string $content The post or comment feed content.
|
46 |
+
* @return string $content Returns either the content or an error message.
|
47 |
+
*/
|
48 |
+
function members_private_feed( $content ) {
|
49 |
+
|
50 |
+
if ( members_get_setting( 'private_feed' ) )
|
51 |
+
$content = members_get_setting( 'private_feed_error' );
|
52 |
+
|
53 |
+
return $content;
|
54 |
+
}
|
55 |
+
|
56 |
+
?>
|
includes/shortcodes.php
ADDED
@@ -0,0 +1,144 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Shortcodes for use within posts and other shortcode-aware areas.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Functions
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Add shortcodes. */
|
10 |
+
add_action( 'init', 'members_register_shortcodes' );
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Registers shortcodes.
|
14 |
+
*
|
15 |
+
* @since 0.2.0
|
16 |
+
*/
|
17 |
+
function members_register_shortcodes() {
|
18 |
+
|
19 |
+
/* Add the [login-form] shortcode. */
|
20 |
+
add_shortcode( 'login-form', 'members_login_form_shortcode' );
|
21 |
+
|
22 |
+
/* Add the [access] shortcode. */
|
23 |
+
add_shortcode( 'access', 'members_access_check_shortcode' );
|
24 |
+
|
25 |
+
/* Add the [feed] shortcode. */
|
26 |
+
add_shortcode( 'feed', 'members_access_check_shortcode' );
|
27 |
+
|
28 |
+
/* Add the [is_user_logged_in] shortcode. */
|
29 |
+
add_shortcode( 'is_user_logged_in', 'members_is_user_logged_in_shortcode' );
|
30 |
+
|
31 |
+
/* @deprecated 0.2.0. */
|
32 |
+
add_shortcode( 'get_avatar', 'members_get_avatar_shortcode' );
|
33 |
+
add_shortcode( 'avatar', 'members_get_avatar_shortcode' );
|
34 |
+
/* === */
|
35 |
+
}
|
36 |
+
|
37 |
+
/**
|
38 |
+
* Displays content if the user viewing it is currently logged in. This also blocks content from showing
|
39 |
+
* in feeds.
|
40 |
+
*
|
41 |
+
* @since 0.1.0
|
42 |
+
* @param $attr array Attributes for the shortcode (not used).
|
43 |
+
* @param $content string The content located between the opening and closing of the shortcode.
|
44 |
+
* @return $content string The content to be shown.
|
45 |
+
*/
|
46 |
+
function members_is_user_logged_in_shortcode( $attr, $content = null ) {
|
47 |
+
|
48 |
+
/* If it is a feed or the user is not logged in, return nothing. */
|
49 |
+
if ( is_feed() || !is_user_logged_in() || is_null( $content ) )
|
50 |
+
return '';
|
51 |
+
|
52 |
+
/* Return the content. */
|
53 |
+
return do_shortcode( $content );
|
54 |
+
}
|
55 |
+
|
56 |
+
/**
|
57 |
+
* Content that should only be shown in feed readers. Can be useful for displaying feed-specific items.
|
58 |
+
*
|
59 |
+
* @since 0.1.0
|
60 |
+
* @param $attr array Attributes for the shortcode (not used).
|
61 |
+
* @param $content string The content located between the opening and closing of the shortcode.
|
62 |
+
* @return $content string The content to be shown.
|
63 |
+
*/
|
64 |
+
function members_feed_shortcode( $attr, $content = null ) {
|
65 |
+
|
66 |
+
/* If not feed or no content exists, return nothing. */
|
67 |
+
if ( !is_feed() || is_null( $content ) )
|
68 |
+
return '';
|
69 |
+
|
70 |
+
/* Return the content. */
|
71 |
+
return do_shortcode( $content );
|
72 |
+
}
|
73 |
+
|
74 |
+
/**
|
75 |
+
* Provide/restrict access to specific roles or capabilities. This content should not be shown in feeds. Note that
|
76 |
+
* capabilities are checked first. If a capability matches, any roles added will *not* be checked. Users should
|
77 |
+
* choose between using either capabilities or roles for the check rather than both. The best option is to always
|
78 |
+
* use a capability
|
79 |
+
*
|
80 |
+
* @since 0.1.0
|
81 |
+
* @param $attr array The shortcode attributes.
|
82 |
+
* @param $content string The content that should be shown/restricted.
|
83 |
+
* @return $content string The content if it should be shown. Else, return nothing.
|
84 |
+
*/
|
85 |
+
function members_access_check_shortcode( $attr, $content = null ) {
|
86 |
+
|
87 |
+
/* Set up the default attributes. */
|
88 |
+
$defaults = array(
|
89 |
+
'capability' => '', // Single capability or comma-separated multiple capabilities
|
90 |
+
'role' => '', // Single role or comma-separated multiple roles
|
91 |
+
);
|
92 |
+
|
93 |
+
/* Merge the input attributes and the defaults. */
|
94 |
+
extract( shortcode_atts( $defaults, $attr ) );
|
95 |
+
|
96 |
+
/* If there's no content or if viewing a feed, return an empty string. */
|
97 |
+
if ( is_null( $content ) || is_feed() )
|
98 |
+
return '';
|
99 |
+
|
100 |
+
/* If the current user has the capability, show the content. */
|
101 |
+
if ( !empty( $capability ) ) {
|
102 |
+
|
103 |
+
/* Get the capabilities. */
|
104 |
+
$caps = explode( ',', $capability );
|
105 |
+
|
106 |
+
/* Loop through each capability. */
|
107 |
+
foreach ( $caps as $cap ) {
|
108 |
+
|
109 |
+
/* If the current user can perform the capability, return the content. */
|
110 |
+
if ( current_user_can( trim( $cap ) ) )
|
111 |
+
return do_shortcode( $content );
|
112 |
+
}
|
113 |
+
}
|
114 |
+
|
115 |
+
/* If the current user has the role, show the content. */
|
116 |
+
if ( !empty( $role ) ) {
|
117 |
+
|
118 |
+
/* Get the roles. */
|
119 |
+
$roles = explode( ',', $role );
|
120 |
+
|
121 |
+
/* Loop through each of the roles. */
|
122 |
+
foreach ( $roles as $role ) {
|
123 |
+
|
124 |
+
/* If the current user has the role, return the content. */
|
125 |
+
if ( current_user_can( trim( $role ) ) )
|
126 |
+
return do_shortcode( $content );
|
127 |
+
}
|
128 |
+
}
|
129 |
+
|
130 |
+
/* Return an empty string if we've made it to this point. */
|
131 |
+
return '';
|
132 |
+
}
|
133 |
+
|
134 |
+
/**
|
135 |
+
* Displays a login form.
|
136 |
+
*
|
137 |
+
* @since 0.1.0
|
138 |
+
* @uses wp_login_form() Displays the login form.
|
139 |
+
*/
|
140 |
+
function members_login_form_shortcode() {
|
141 |
+
return wp_login_form( array( 'echo' => false ) );
|
142 |
+
}
|
143 |
+
|
144 |
+
?>
|
includes/template.php
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* @package Members
|
4 |
+
* @subpackage Functions
|
5 |
+
*/
|
6 |
+
|
7 |
+
/**
|
8 |
+
* Conditional tag to check if a user can view a specific post. A user cannot view a post if their user role has
|
9 |
+
* not been selected in the 'Content Permissions' meta box on the edit post screen in the admin. Non-logged in
|
10 |
+
* site visitors cannot view posts if roles were seletected. If no roles were selected, all users and site visitors
|
11 |
+
* can view the content.
|
12 |
+
*
|
13 |
+
* There are exceptions to this rule though. The post author, any user with the 'restrict_content' capability,
|
14 |
+
* and users that have the ability to edit the post can always view the post, even if their role was not granted
|
15 |
+
* permission to view it.
|
16 |
+
*
|
17 |
+
* @todo See how feasible it is to just use the normal user_can() WordPress function to check against a meta
|
18 |
+
* capability such as 'members_view_post' while hooking into 'map_meta_cap' or 'user_has_cap' to roll custom
|
19 |
+
* plugin handling for this. This would just be a wrapper tag.
|
20 |
+
*
|
21 |
+
* @since 0.2.0
|
22 |
+
* @param int $user_id The ID of the user to check.
|
23 |
+
* @param int $post_id The ID of the post to check.
|
24 |
+
* @return bool True if the user can view the post. False if the user cannot view the post.
|
25 |
+
*/
|
26 |
+
function members_can_user_view_post( $user_id, $post_id = '' ) {
|
27 |
+
|
28 |
+
/* If no post ID is given, assume we're in The Loop and get the current post's ID. */
|
29 |
+
if ( empty( $post_id ) )
|
30 |
+
$post_id = get_the_ID();
|
31 |
+
|
32 |
+
/* Assume the user can view the post at this point. */
|
33 |
+
$can_view = true;
|
34 |
+
|
35 |
+
/**
|
36 |
+
* The plugin is only going to handle permissions if the 'content permissions' feature is active. If
|
37 |
+
* not active, the user can always view the post. However, developers can roll their own handling of
|
38 |
+
* this and filter 'members_can_user_view_post'.
|
39 |
+
*/
|
40 |
+
if ( members_get_setting( 'content_permissions' ) ) {
|
41 |
+
|
42 |
+
/* Get the roles selected by the user. */
|
43 |
+
$roles = get_post_meta( $post_id, '_members_access_role', false );
|
44 |
+
|
45 |
+
/* Check if there are any old roles with the '_role' meta key. */
|
46 |
+
if ( empty( $roles ) )
|
47 |
+
$roles = members_convert_old_post_meta( $post_id );
|
48 |
+
|
49 |
+
/* If we have an array of roles, let's get to work. */
|
50 |
+
if ( !empty( $roles ) && is_array( $roles ) ) {
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Since specific roles were given, let's assume the user can't view the post at
|
54 |
+
* this point. The rest of this functionality should try to disprove this.
|
55 |
+
*/
|
56 |
+
$can_view = false;
|
57 |
+
|
58 |
+
/* Get the post object. */
|
59 |
+
$post = get_post( $post_id );
|
60 |
+
|
61 |
+
/* Get the post type object. */
|
62 |
+
$post_type = get_post_type_object( $post->post_type );
|
63 |
+
|
64 |
+
/* If viewing a feed or if the user's not logged in, assume it's blocked at this point. */
|
65 |
+
if ( is_feed() || !is_user_logged_in() ) {
|
66 |
+
$can_view = false;
|
67 |
+
}
|
68 |
+
|
69 |
+
/* If the post author, the current user can edit the post, or the current user can 'restrict_content', return true. */
|
70 |
+
elseif ( $post->post_author == $user_id || user_can( $user_id, 'restrict_content' ) || user_can( $user_id, $post_type->cap->edit_post, $post_id ) ) {
|
71 |
+
$can_view = true;
|
72 |
+
}
|
73 |
+
|
74 |
+
/* Else, let's check the user's role against the selected roles. */
|
75 |
+
else {
|
76 |
+
|
77 |
+
/* Loop through each role and set $can_view to true if the user has one of the roles. */
|
78 |
+
foreach ( $roles as $role ) {
|
79 |
+
if ( user_can( $user_id, $role ) )
|
80 |
+
$can_view = true;
|
81 |
+
}
|
82 |
+
}
|
83 |
+
}
|
84 |
+
}
|
85 |
+
|
86 |
+
/* Allow developers to overwrite the final return value. */
|
87 |
+
return apply_filters( 'members_can_user_view_post', $can_view, $user_id, $post_id );
|
88 |
+
}
|
89 |
+
|
90 |
+
/**
|
91 |
+
* Wrapper function for the members_can_user_view_post() function. This function checks if the currently
|
92 |
+
* logged-in user can view the content of a specific post.
|
93 |
+
*
|
94 |
+
* @since 0.2.0
|
95 |
+
* @param int $post_id The ID of the post to check.
|
96 |
+
* @return bool True if the user can view the post. False if the user cannot view the post.
|
97 |
+
*/
|
98 |
+
function members_can_current_user_view_post( $post_id = '' ) {
|
99 |
+
|
100 |
+
/* Get the current user object. */
|
101 |
+
$current_user = wp_get_current_user();
|
102 |
+
|
103 |
+
/* Return the members_can_user_view_post() function, which returns true/false. */
|
104 |
+
return members_can_user_view_post( $current_user->ID, $post_id );
|
105 |
+
}
|
106 |
+
|
107 |
+
?>
|
includes/update.php
ADDED
@@ -0,0 +1,107 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Version check and update functionality.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Includes
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Hook our version check to 'init'. */
|
10 |
+
add_action( 'init', 'members_version_check' );
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Checks the version number and runs install or update functions if needed.
|
14 |
+
*
|
15 |
+
* @since 0.2.0
|
16 |
+
*/
|
17 |
+
function members_version_check() {
|
18 |
+
|
19 |
+
/* Get the old database version. */
|
20 |
+
$old_db_version = get_option( 'members_db_version' );
|
21 |
+
|
22 |
+
/* Get the theme settings. */
|
23 |
+
$settings = get_option( 'members_settings' );
|
24 |
+
|
25 |
+
/* If there is no old database version, run the install. */
|
26 |
+
if ( empty( $old_db_version ) && false === $settings )
|
27 |
+
members_install();
|
28 |
+
|
29 |
+
/* Temporary check b/c version 0.1.0 didn't have an upgrade path. */
|
30 |
+
elseif ( empty( $old_db_version ) && !empty( $settings ) )
|
31 |
+
members_update();
|
32 |
+
|
33 |
+
/* If the old version is less than the new version, run the update. */
|
34 |
+
elseif ( intval( $old_db_version ) < intval( MEMBERS_DB_VERSION ) )
|
35 |
+
members_update();
|
36 |
+
}
|
37 |
+
|
38 |
+
/**
|
39 |
+
* Adds the plugin settings on install.
|
40 |
+
*
|
41 |
+
* @since 0.2.0
|
42 |
+
*/
|
43 |
+
function members_install() {
|
44 |
+
|
45 |
+
/* Add the database version setting. */
|
46 |
+
add_option( 'members_db_version', MEMBERS_DB_VERSION );
|
47 |
+
|
48 |
+
/* Add the default plugin settings. */
|
49 |
+
add_option( 'members_settings', members_get_default_settings() );
|
50 |
+
}
|
51 |
+
|
52 |
+
/**
|
53 |
+
* Updates plugin settings if there are new settings to add.
|
54 |
+
*
|
55 |
+
* @since 0.2.0
|
56 |
+
*/
|
57 |
+
function members_update() {
|
58 |
+
|
59 |
+
/* Update the database version setting. */
|
60 |
+
update_option( 'members_db_version', MEMBERS_DB_VERSION );
|
61 |
+
|
62 |
+
/* Get the settings from the database. */
|
63 |
+
$settings = get_option( 'members_settings' );
|
64 |
+
|
65 |
+
/* Get the default plugin settings. */
|
66 |
+
$default_settings = members_get_default_settings();
|
67 |
+
|
68 |
+
/* Loop through each of the default plugin settings. */
|
69 |
+
foreach ( $default_settings as $setting_key => $setting_value ) {
|
70 |
+
|
71 |
+
/* If the setting didn't previously exist, add the default value to the $settings array. */
|
72 |
+
if ( !isset( $settings[$setting_key] ) )
|
73 |
+
$settings[$setting_key] = $setting_value;
|
74 |
+
}
|
75 |
+
|
76 |
+
/* Update the plugin settings. */
|
77 |
+
update_option( 'members_settings', $settings );
|
78 |
+
}
|
79 |
+
|
80 |
+
/**
|
81 |
+
* Returns an array of the default plugin settings. These are only used on initial setup.
|
82 |
+
*
|
83 |
+
* @since 0.2.0
|
84 |
+
*/
|
85 |
+
function members_get_default_settings() {
|
86 |
+
|
87 |
+
/* Set up the default plugin settings. */
|
88 |
+
$settings = array(
|
89 |
+
|
90 |
+
// Version 0.1.0
|
91 |
+
'role_manager' => 1,
|
92 |
+
'content_permissions' => 1,
|
93 |
+
'private_blog' => 0,
|
94 |
+
|
95 |
+
// Version 0.2.0
|
96 |
+
'private_feed' => 0,
|
97 |
+
'login_form_widget' => 0,
|
98 |
+
'users_widget' => 0,
|
99 |
+
'content_permissions_error' => '<p class="restricted">' . __( 'Sorry, but you do not have permission to view this content.', 'members' ) . '</p>',
|
100 |
+
'private_feed_error' => '<p class="restricted">' . __( 'You must be logged into the site to view this content.', 'members' ) . '</p>',
|
101 |
+
);
|
102 |
+
|
103 |
+
/* Return the default settings. */
|
104 |
+
return $settings;
|
105 |
+
}
|
106 |
+
|
107 |
+
?>
|
includes/widget-login-form.php
ADDED
@@ -0,0 +1,262 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Creates a widget that allows users to add a login form to a widget area.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Includes
|
7 |
+
*/
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Login form widget class.
|
11 |
+
*
|
12 |
+
* @since 0.1.0
|
13 |
+
*/
|
14 |
+
class Members_Widget_Login extends WP_Widget {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Set up the widget's unique name, ID, class, description, and other options.
|
18 |
+
*
|
19 |
+
* @since 0.1.0
|
20 |
+
*/
|
21 |
+
function Members_Widget_Login() {
|
22 |
+
|
23 |
+
/* Set up the widget options. */
|
24 |
+
$widget_options = array(
|
25 |
+
'classname' => 'login',
|
26 |
+
'description' => esc_html__( 'A widget that allows users to log into your site.', 'members' )
|
27 |
+
);
|
28 |
+
|
29 |
+
/* Set up the widget control options. */
|
30 |
+
$control_options = array(
|
31 |
+
'width' => 800,
|
32 |
+
'height' => 350,
|
33 |
+
'id_base' => 'members-widget-login'
|
34 |
+
);
|
35 |
+
|
36 |
+
/* Create the widget. */
|
37 |
+
$this->WP_Widget( 'members-widget-login', esc_attr__( 'Login Form', 'members' ), $widget_options, $control_options );
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Outputs the widget based on the arguments input through the widget controls.
|
42 |
+
*
|
43 |
+
* @since 0.1.0
|
44 |
+
*/
|
45 |
+
function widget( $args, $instance ) {
|
46 |
+
global $user_identity, $user_ID;
|
47 |
+
|
48 |
+
extract( $args );
|
49 |
+
|
50 |
+
/* Set up the arguments for wp_login_form(). */
|
51 |
+
$args = array(
|
52 |
+
'form_id' => !empty( $instance['form_id'] ) ? esc_attr( $instance['form_id'] ) : 'loginform',
|
53 |
+
'label_username' => esc_html( $instance['label_username'] ),
|
54 |
+
'label_password' => esc_html( $instance['label_password'] ),
|
55 |
+
'label_remember' => esc_html( $instance['label_remember'] ),
|
56 |
+
'label_log_in' => esc_html( $instance['label_log_in'] ),
|
57 |
+
'id_username' => esc_attr( $instance['id_username'] ),
|
58 |
+
'id_password' => esc_attr( $instance['id_password'] ),
|
59 |
+
'id_remember' => esc_attr( $instance['id_submit'] ),
|
60 |
+
'id_submit' => esc_attr( $instance['remember'] ),
|
61 |
+
'remember' => !empty( $instance['remember'] ) ? true : false,
|
62 |
+
'value_username' => esc_attr( $instance['value_username'] ),
|
63 |
+
'value_remember' => !empty( $instance['value_remember'] ) ? true : false,
|
64 |
+
'echo' => false,
|
65 |
+
);
|
66 |
+
|
67 |
+
if ( !empty( $instance['redirect'] ) )
|
68 |
+
$args['redirect'] = esc_url( $instance['redirect'] );
|
69 |
+
|
70 |
+
/* Get the logged in/out text. */
|
71 |
+
$logged_in_text = apply_filters( 'widget_text', $instance['logged_in_text'] );
|
72 |
+
$logged_out_text = apply_filters( 'widget_text', $instance['logged_out_text'] );
|
73 |
+
|
74 |
+
$show_avatar = !empty( $instance['show_avatar'] ) ? true : false;
|
75 |
+
|
76 |
+
/* Output the theme's $before_widget wrapper. */
|
77 |
+
echo $before_widget;
|
78 |
+
|
79 |
+
/* If a title was input by the user, display it. */
|
80 |
+
if ( !empty( $instance['title'] ) )
|
81 |
+
echo $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title;
|
82 |
+
|
83 |
+
/* If the current user is logged in. */
|
84 |
+
if ( is_user_logged_in() ) {
|
85 |
+
|
86 |
+
/* Show avatar if enabled. */
|
87 |
+
if ( !empty( $show_avatar ) )
|
88 |
+
echo get_avatar( $user_ID );
|
89 |
+
|
90 |
+
/* Show logged in text if any is written. */
|
91 |
+
if ( !empty( $logged_in_text ) )
|
92 |
+
echo do_shortcode( shortcode_unautop( wpautop( $logged_in_text ) ) );
|
93 |
+
}
|
94 |
+
|
95 |
+
/* If the current user is not logged in. */
|
96 |
+
else {
|
97 |
+
|
98 |
+
/* Show avatar if enabled. */
|
99 |
+
if ( $show_avatar )
|
100 |
+
echo get_avatar( $user_ID );
|
101 |
+
|
102 |
+
/* Show logged out text if any is written. */
|
103 |
+
if ( $logged_out_text )
|
104 |
+
echo do_shortcode( shortcode_unautop( wpautop( $logged_out_text ) ) );
|
105 |
+
|
106 |
+
/* Output the login form. */
|
107 |
+
echo '<div class="members-login-form">' . wp_login_form( $args ) . '</div>';
|
108 |
+
}
|
109 |
+
|
110 |
+
/* Close the theme's widget wrapper. */
|
111 |
+
echo $after_widget;
|
112 |
+
}
|
113 |
+
|
114 |
+
/**
|
115 |
+
* Updates the widget control options for the particular instance of the widget.
|
116 |
+
*
|
117 |
+
* @since 0.1.0
|
118 |
+
*/
|
119 |
+
function update( $new_instance, $old_instance ) {
|
120 |
+
$instance = $old_instance;
|
121 |
+
|
122 |
+
$instance['title'] = strip_tags( $new_instance['title'] );
|
123 |
+
$instance['label_username'] = strip_tags( $new_instance['label_username'] );
|
124 |
+
$instance['label_password'] = strip_tags( $new_instance['label_password'] );
|
125 |
+
$instance['label_remember'] = strip_tags( $new_instance['label_remember'] );
|
126 |
+
$instance['label_log_in'] = strip_tags( $new_instance['label_log_in'] );
|
127 |
+
$instance['id_username'] = strip_tags( $new_instance['id_username'] );
|
128 |
+
$instance['id_password'] = strip_tags( $new_instance['id_password'] );
|
129 |
+
$instance['id_remember'] = strip_tags( $new_instance['id_remember'] );
|
130 |
+
$instance['id_submit'] = strip_tags( $new_instance['id_submit'] );
|
131 |
+
$instance['value_username'] = strip_tags( $new_instance['value_username'] );
|
132 |
+
|
133 |
+
$instance['remember'] = ( isset( $new_instance['remember'] ) ? 1 : 0 );
|
134 |
+
$instance['value_remember'] = ( isset( $new_instance['value_remember'] ) ? 1 : 0 );
|
135 |
+
$instance['show_avatar'] = ( isset( $new_instance['show_avatar'] ) ? 1 : 0 );
|
136 |
+
|
137 |
+
if ( current_user_can('unfiltered_html') ) {
|
138 |
+
$instance['logged_in_text'] = $new_instance['logged_in_text'];
|
139 |
+
$instance['logged_out_text'] = $new_instance['logged_out_text'];
|
140 |
+
}
|
141 |
+
else {
|
142 |
+
$instance['logged_in_text'] = wp_filter_post_kses( $new_instance['logged_in_text'] );
|
143 |
+
$instance['logged_out_text'] = wp_filter_post_kses( $new_instance['logged_out_text'] );
|
144 |
+
}
|
145 |
+
|
146 |
+
return $instance;
|
147 |
+
}
|
148 |
+
|
149 |
+
/**
|
150 |
+
* Displays the widget control options in the Widgets admin screen.
|
151 |
+
*
|
152 |
+
* @since 0.1.0
|
153 |
+
*/
|
154 |
+
function form( $instance ) {
|
155 |
+
|
156 |
+
/* Set up the default form values. */
|
157 |
+
$defaults = array(
|
158 |
+
'title' => esc_attr__( 'Log In', 'members' ),
|
159 |
+
'label_username' => esc_attr__( 'Username', 'members' ),
|
160 |
+
'label_password' => esc_attr__( 'Password', 'members' ),
|
161 |
+
'label_log_in' => esc_attr__( 'Log In', 'members' ),
|
162 |
+
'label_remember' => esc_attr__('Remember Me', 'members' ),
|
163 |
+
'form_id' => 'loginform',
|
164 |
+
'id_username' => 'user_login',
|
165 |
+
'id_password' => 'user_pass',
|
166 |
+
'id_remember' => 'rememberme',
|
167 |
+
'id_submit' => 'wp-submit',
|
168 |
+
'remember' => true,
|
169 |
+
'value_remember' => false,
|
170 |
+
'value_username' => '',
|
171 |
+
'show_avatar' => true,
|
172 |
+
'logged_out_text' => esc_html__( 'Please log into the site.', 'members' ),
|
173 |
+
'logged_in_text' => esc_html__( 'You are currently logged in.', 'members' )
|
174 |
+
);
|
175 |
+
|
176 |
+
/* Merge the user-selected arguments with the defaults. */
|
177 |
+
$instance = wp_parse_args( (array) $instance, $defaults );
|
178 |
+
|
179 |
+
$logged_in_text = format_to_edit( $instance['logged_in_text'] );
|
180 |
+
$logged_out_text = format_to_edit( $instance['logged_out_text'] ); ?>
|
181 |
+
|
182 |
+
<div style="float: left; width: 31%; margin-right: 3.5%;">
|
183 |
+
|
184 |
+
<p>
|
185 |
+
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php esc_html_e( 'Title:', 'members' ); ?></label>
|
186 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo $instance['title']; ?>" />
|
187 |
+
</p>
|
188 |
+
<p>
|
189 |
+
<label for="<?php echo $this->get_field_id( 'label_username' ); ?>"><code>label_username</code></label>
|
190 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'label_username' ); ?>" name="<?php echo $this->get_field_name( 'label_username' ); ?>" value="<?php echo $instance['label_username']; ?>" />
|
191 |
+
</p>
|
192 |
+
<p>
|
193 |
+
<label for="<?php echo $this->get_field_id( 'label_password' ); ?>"><code>label_password</code></label>
|
194 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'label_password' ); ?>" name="<?php echo $this->get_field_name( 'label_password' ); ?>" value="<?php echo $instance['label_password']; ?>" />
|
195 |
+
</p>
|
196 |
+
<p>
|
197 |
+
<label for="<?php echo $this->get_field_id( 'label_log_in' ); ?>"><code>label_log_in</code></label>
|
198 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'label_log_in' ); ?>" name="<?php echo $this->get_field_name( 'label_log_in' ); ?>" value="<?php echo $instance['label_log_in']; ?>" />
|
199 |
+
</p>
|
200 |
+
<p>
|
201 |
+
<label for="<?php echo $this->get_field_id( 'label_remember' ); ?>"><code>label_remember</code></label>
|
202 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'label_remember' ); ?>" name="<?php echo $this->get_field_name( 'label_remember' ); ?>" value="<?php echo $instance['label_remember']; ?>" />
|
203 |
+
</p>
|
204 |
+
|
205 |
+
</div>
|
206 |
+
<div style="float: left; width: 31%; margin-right: 3.5%;">
|
207 |
+
|
208 |
+
<p>
|
209 |
+
<label for="<?php echo $this->get_field_id( 'value_username' ); ?>"><code>value_username</code></label>
|
210 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'value_username' ); ?>" name="<?php echo $this->get_field_name( 'value_username' ); ?>" value="<?php echo $instance['value_username']; ?>" />
|
211 |
+
</p>
|
212 |
+
<p>
|
213 |
+
<label for="<?php echo $this->get_field_id( 'id_username' ); ?>"><code>id_username</code></label>
|
214 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'id_username' ); ?>" name="<?php echo $this->get_field_name( 'id_username' ); ?>" value="<?php echo $instance['id_username']; ?>" />
|
215 |
+
</p>
|
216 |
+
<p>
|
217 |
+
<label for="<?php echo $this->get_field_id( 'id_remember' ); ?>"><code>id_remember</code></label>
|
218 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'id_remember' ); ?>" name="<?php echo $this->get_field_name( 'id_remember' ); ?>" value="<?php echo $instance['id_remember']; ?>" />
|
219 |
+
</p>
|
220 |
+
<p>
|
221 |
+
<label for="<?php echo $this->get_field_id( 'id_password' ); ?>"><code>id_password</code></label>
|
222 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'id_password' ); ?>" name="<?php echo $this->get_field_name( 'id_password' ); ?>" value="<?php echo $instance['id_password']; ?>" />
|
223 |
+
</p>
|
224 |
+
<p>
|
225 |
+
<label for="<?php echo $this->get_field_id( 'id_submit' ); ?>"><code>id_submit</code></label>
|
226 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'id_submit' ); ?>" name="<?php echo $this->get_field_name( 'id_submit' ); ?>" value="<?php echo $instance['id_submit']; ?>" />
|
227 |
+
</p>
|
228 |
+
|
229 |
+
</div>
|
230 |
+
|
231 |
+
<div style="float: right; width: 31%;">
|
232 |
+
|
233 |
+
<p>
|
234 |
+
<input class="checkbox" type="checkbox" <?php checked( $instance['remember'], true ); ?> id="<?php echo $this->get_field_id( 'remember' ); ?>" name="<?php echo $this->get_field_name( 'remember' ); ?>" />
|
235 |
+
<label for="<?php echo $this->get_field_id( 'remember' ); ?>"><?php _e( '"Remember me" checkbox?', 'members' ); ?> <code>remember</code></label>
|
236 |
+
</p>
|
237 |
+
<p>
|
238 |
+
<input class="checkbox" type="checkbox" <?php checked( $instance['value_remember'], true ); ?> id="<?php echo $this->get_field_id( 'value_remember' ); ?>" name="<?php echo $this->get_field_name( 'value_remember' ); ?>" />
|
239 |
+
<label for="<?php echo $this->get_field_id( 'value_remember' ); ?>"><?php _e( 'Check "remember me"?', 'members' ); ?> <code>value_remember</code></label>
|
240 |
+
</p>
|
241 |
+
<p>
|
242 |
+
<label for="<?php echo $this->get_field_id( 'show_avatar' ); ?>">
|
243 |
+
<input class="checkbox" type="checkbox" <?php checked( $instance['show_avatar'], true ); ?> id="<?php echo $this->get_field_id( 'show_avatar' ); ?>" name="<?php echo $this->get_field_name( 'show_avatar' ); ?>" /> <?php _e('Display avatar?', 'widgets-reloaded'); ?></label>
|
244 |
+
</p>
|
245 |
+
<p>
|
246 |
+
<label for="<?php echo $this->get_field_id( 'logged_out_text' ); ?>"><?php _e( 'Logged out text:', 'members' ); ?></label>
|
247 |
+
<textarea class="widefat" rows="2" cols="20" id="<?php echo $this->get_field_id( 'logged_out_text' ); ?>" name="<?php echo $this->get_field_name('logged_out_text'); ?>" style="width:100%;"><?php echo $logged_out_text; ?></textarea>
|
248 |
+
</p>
|
249 |
+
|
250 |
+
<p>
|
251 |
+
<label for="<?php echo $this->get_field_id( 'logged_in_text' ); ?>"><?php _e( 'Logged in text:', 'members' ); ?></label>
|
252 |
+
<textarea class="widefat" rows="2" cols="20" id="<?php echo $this->get_field_id( 'logged_in_text' ); ?>" name="<?php echo $this->get_field_name('logged_in_text'); ?>" style="width:100%;"><?php echo $logged_in_text; ?></textarea>
|
253 |
+
</p>
|
254 |
+
|
255 |
+
</div>
|
256 |
+
|
257 |
+
<div style="clear:both;"> </div>
|
258 |
+
<?php
|
259 |
+
}
|
260 |
+
}
|
261 |
+
|
262 |
+
?>
|
includes/widget-users.php
ADDED
@@ -0,0 +1,228 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Creates a widget that allows users to list users of their site.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Includes
|
7 |
+
*/
|
8 |
+
|
9 |
+
/**
|
10 |
+
* Users widget archive class.
|
11 |
+
*
|
12 |
+
* @since 0.1.0
|
13 |
+
*/
|
14 |
+
class Members_Widget_Users extends WP_Widget {
|
15 |
+
|
16 |
+
/**
|
17 |
+
* Set up the widget's unique name, ID, class, description, and other options.
|
18 |
+
*
|
19 |
+
* @since 0.1.0
|
20 |
+
*/
|
21 |
+
function Members_Widget_Users() {
|
22 |
+
|
23 |
+
/* Set up the widget options. */
|
24 |
+
$widget_options = array(
|
25 |
+
'classname' => 'users',
|
26 |
+
'description' => esc_html__( 'Provides the ability to list the users of the site.', 'members' )
|
27 |
+
);
|
28 |
+
|
29 |
+
/* Set up the widget control options. */
|
30 |
+
$control_options = array(
|
31 |
+
'width' => 525,
|
32 |
+
'height' => 350,
|
33 |
+
'id_base' => 'members-widget-users'
|
34 |
+
);
|
35 |
+
|
36 |
+
/* Create the widget. */
|
37 |
+
$this->WP_Widget( 'members-widget-users', esc_attr__( 'Users', 'members' ), $widget_options, $control_options );
|
38 |
+
}
|
39 |
+
|
40 |
+
/**
|
41 |
+
* Outputs the widget based on the arguments input through the widget controls.
|
42 |
+
*
|
43 |
+
* @since 0.1.0
|
44 |
+
*/
|
45 |
+
function widget( $args, $instance ) {
|
46 |
+
|
47 |
+
extract( $args, EXTR_SKIP );
|
48 |
+
|
49 |
+
/* Set up the arguments for get_users(). */
|
50 |
+
$args = array(
|
51 |
+
'role' => $instance['role'],
|
52 |
+
'meta_key' => $instance['meta_key'],
|
53 |
+
'meta_value' => $instance['meta_value'],
|
54 |
+
'include' => ( !empty( $instance['include'] ) ? explode( ',', $instance['include'] ) : '' ),
|
55 |
+
'exclude' => ( !empty( $instance['exclude'] ) ? explode( ',', $instance['exclude'] ) : '' ),
|
56 |
+
'search' => $instance['search'],
|
57 |
+
'orderby' => $instance['orderby'],
|
58 |
+
'order' => $instance['order'],
|
59 |
+
'offset' => ( !empty( $instance['offset'] ) ? intval( $instance['offset'] ) : '' ),
|
60 |
+
'number' => ( !empty( $instance['number'] ) ? intval( $instance['number'] ) : '' ),
|
61 |
+
);
|
62 |
+
|
63 |
+
/* Output the theme's $before_widget wrapper. */
|
64 |
+
echo $before_widget;
|
65 |
+
|
66 |
+
/* If a title was input by the user, display it. */
|
67 |
+
if ( !empty( $instance['title'] ) )
|
68 |
+
echo $before_title . apply_filters( 'widget_title', $instance['title'], $instance, $this->id_base ) . $after_title;
|
69 |
+
|
70 |
+
/* Get users. */
|
71 |
+
$users = get_users( $args );
|
72 |
+
|
73 |
+
/* If users were found. */
|
74 |
+
if ( !empty( $users ) ) {
|
75 |
+
|
76 |
+
echo '<ul class="xoxo users">';
|
77 |
+
|
78 |
+
/* Loop through each available user, creating a list item with a link to the user's archive. */
|
79 |
+
foreach ( $users as $user ) {
|
80 |
+
$url = get_author_posts_url( $user->ID, $user->user_nicename );
|
81 |
+
|
82 |
+
$class = "user-{$user->ID}";
|
83 |
+
if ( is_author( $user->ID ) )
|
84 |
+
$class .= ' current-user';
|
85 |
+
|
86 |
+
echo "<li class='{$class}'><a href='{$url}' title='" . esc_attr( $user->display_name ) . "'>{$user->display_name}</a></li>\n";
|
87 |
+
}
|
88 |
+
|
89 |
+
echo '</ul>';
|
90 |
+
}
|
91 |
+
|
92 |
+
/* Close the theme's widget wrapper. */
|
93 |
+
echo $after_widget;
|
94 |
+
}
|
95 |
+
|
96 |
+
/**
|
97 |
+
* Updates the widget control options for the particular instance of the widget.
|
98 |
+
*
|
99 |
+
* @since 0.1.0
|
100 |
+
*/
|
101 |
+
function update( $new_instance, $old_instance ) {
|
102 |
+
$instance = $old_instance;
|
103 |
+
|
104 |
+
$instance['title'] = strip_tags( $new_instance['title'] );
|
105 |
+
$instance['order'] = strip_tags( $new_instance['order'] );
|
106 |
+
$instance['orderby'] = strip_tags( $new_instance['orderby'] );
|
107 |
+
$instance['number'] = strip_tags( $new_instance['number'] );
|
108 |
+
$instance['offset'] = strip_tags( $new_instance['offset'] );
|
109 |
+
$instance['meta_key'] = strip_tags( $new_instance['meta_key'] );
|
110 |
+
$instance['meta_value'] = strip_tags( $new_instance['meta_value'] );
|
111 |
+
$instance['role'] = strip_tags( $new_instance['role'] );
|
112 |
+
$instance['include'] = strip_tags( $new_instance['include'] );
|
113 |
+
$instance['exclude'] = strip_tags( $new_instance['exclude'] );
|
114 |
+
$instance['search'] = strip_tags( $new_instance['search'] );
|
115 |
+
|
116 |
+
return $instance;
|
117 |
+
}
|
118 |
+
|
119 |
+
/**
|
120 |
+
* Displays the widget control options in the Widgets admin screen.
|
121 |
+
*
|
122 |
+
* @since 0.1.0
|
123 |
+
*/
|
124 |
+
function form( $instance ) {
|
125 |
+
global $wp_roles;
|
126 |
+
|
127 |
+
/* Set up the default form values. */
|
128 |
+
$defaults = array(
|
129 |
+
'title' => esc_attr__( 'Users', 'members' ),
|
130 |
+
'order' => 'ASC',
|
131 |
+
'orderby' => 'login',
|
132 |
+
'role' => '',
|
133 |
+
'meta_key' => '',
|
134 |
+
'meta_value' => '',
|
135 |
+
'include' => '',
|
136 |
+
'exclude' => '',
|
137 |
+
'search' => '',
|
138 |
+
'offset' => '',
|
139 |
+
'number' => ''
|
140 |
+
);
|
141 |
+
|
142 |
+
/* Merge the user-selected arguments with the defaults. */
|
143 |
+
$instance = wp_parse_args( (array) $instance, $defaults );
|
144 |
+
|
145 |
+
$order = array( 'ASC' => esc_attr__( 'Ascending', 'members' ), 'DESC' => esc_attr__( 'Descending', 'members' ) );
|
146 |
+
$orderby = array( 'display_name' => esc_attr__( 'Display Name', 'members' ), 'email' => esc_attr__( 'Email', 'members' ), 'ID' => esc_attr__( 'ID', 'members' ), 'nicename' => esc_attr__( 'Nice Name', 'members' ), 'post_count' => esc_attr__( 'Post Count', 'members' ), 'registered' => esc_attr__( 'Registered', 'members' ), 'url' => esc_attr__( 'URL', 'members' ), 'user_login' => esc_attr__( 'Login', 'members' ) );
|
147 |
+
$meta_key = array_merge( array( '' ), (array) members_get_user_meta_keys() );
|
148 |
+
$roles = array( '' => '' );
|
149 |
+
|
150 |
+
foreach ( $wp_roles->role_names as $role => $name )
|
151 |
+
$roles[$role] = $name;
|
152 |
+
?>
|
153 |
+
|
154 |
+
<div style="float: left;width: 48%;">
|
155 |
+
|
156 |
+
<p>
|
157 |
+
<label for="<?php echo $this->get_field_id( 'title' ); ?>"><?php _e( 'Title:', 'members' ); ?></label>
|
158 |
+
<input type="text" class="widefat" id="<?php echo $this->get_field_id( 'title' ); ?>" name="<?php echo $this->get_field_name( 'title' ); ?>" value="<?php echo esc_attr( $instance['title'] ); ?>" />
|
159 |
+
</p>
|
160 |
+
<p>
|
161 |
+
<label for="<?php echo $this->get_field_id( 'orderby' ); ?>"><code>orderby</code></label>
|
162 |
+
<select class="widefat" id="<?php echo $this->get_field_id( 'orderby' ); ?>" name="<?php echo $this->get_field_name( 'orderby' ); ?>">
|
163 |
+
<?php foreach ( $orderby as $option_value => $option_label ) { ?>
|
164 |
+
<option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['orderby'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option>
|
165 |
+
<?php } ?>
|
166 |
+
</select>
|
167 |
+
</p>
|
168 |
+
<p>
|
169 |
+
<label for="<?php echo $this->get_field_id( 'order' ); ?>"><code>order</code></label>
|
170 |
+
<select class="widefat" id="<?php echo $this->get_field_id( 'order' ); ?>" name="<?php echo $this->get_field_name( 'order' ); ?>">
|
171 |
+
<?php foreach ( $order as $option_value => $option_label ) { ?>
|
172 |
+
<option value="<?php echo esc_attr( $option_value ); ?>" <?php selected( $instance['order'], $option_value ); ?>><?php echo esc_html( $option_label ); ?></option>
|
173 |
+
<?php } ?>
|
174 |
+
</select>
|
175 |
+
</p>
|
176 |
+
<p>
|
177 |
+
<label for="<?php echo $this->get_field_id( 'role' ); ?>"><code>role</code></label>
|
178 |
+
<select class="widefat" id="<?php echo $this->get_field_id( 'role' ); ?>" name="<?php echo $this->get_field_name( 'role' ); ?>">
|
179 |
+
<?php foreach ( $roles as $role => $name ) { ?>
|
180 |
+
<option value="<?php echo esc_attr( $role ); ?>" <?php selected( $instance['role'], $role ); ?>><?php echo esc_html( $name ); ?></option>
|
181 |
+
<?php } ?>
|
182 |
+
</select>
|
183 |
+
</p>
|
184 |
+
<p>
|
185 |
+
<label for="<?php echo $this->get_field_id( 'number' ); ?>"><code>number</code></label>
|
186 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'number' ); ?>" name="<?php echo $this->get_field_name( 'number' ); ?>" value="<?php echo esc_attr( $instance['number'] ); ?>" />
|
187 |
+
</p>
|
188 |
+
<p>
|
189 |
+
<label for="<?php echo $this->get_field_id( 'offset' ); ?>"><code>offset</code></label>
|
190 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'offset' ); ?>" name="<?php echo $this->get_field_name( 'offset' ); ?>" value="<?php echo esc_attr( $instance['offset'] ); ?>" />
|
191 |
+
</p>
|
192 |
+
|
193 |
+
</div>
|
194 |
+
<div style="float: right; width: 48%;">
|
195 |
+
|
196 |
+
<p>
|
197 |
+
<label for="<?php echo $this->get_field_id( 'include' ); ?>"><code>include</code></label>
|
198 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'include' ); ?>" name="<?php echo $this->get_field_name( 'include' ); ?>" value="<?php echo esc_attr( $instance['include'] ); ?>" />
|
199 |
+
</p>
|
200 |
+
<p>
|
201 |
+
<label for="<?php echo $this->get_field_id( 'exclude' ); ?>"><code>exclude</code></label>
|
202 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'exclude' ); ?>" name="<?php echo $this->get_field_name( 'exclude' ); ?>" value="<?php echo esc_attr( $instance['exclude'] ); ?>" />
|
203 |
+
</p>
|
204 |
+
<p>
|
205 |
+
<label for="<?php echo $this->get_field_id( 'search' ); ?>"><code>search</code></label>
|
206 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'search' ); ?>" name="<?php echo $this->get_field_name( 'search' ); ?>" value="<?php echo esc_attr( $instance['search'] ); ?>" />
|
207 |
+
</p>
|
208 |
+
<p>
|
209 |
+
<label for="<?php echo $this->get_field_id( 'meta_key' ); ?>"><code>meta_key</code></label>
|
210 |
+
<select class="widefat" id="<?php echo $this->get_field_id( 'meta_key' ); ?>" name="<?php echo $this->get_field_name( 'meta_key' ); ?>">
|
211 |
+
<?php foreach ( $meta_key as $meta ) { ?>
|
212 |
+
<option value="<?php echo esc_attr( $meta ); ?>" <?php selected( $instance['meta_key'], $meta ); ?>><?php echo esc_html( $meta ); ?></option>
|
213 |
+
<?php } ?>
|
214 |
+
</select>
|
215 |
+
</p>
|
216 |
+
<p>
|
217 |
+
<label for="<?php echo $this->get_field_id( 'meta_value' ); ?>"><code>meta_value</code></label>
|
218 |
+
<input type="text" class="widefat code" id="<?php echo $this->get_field_id( 'meta_value' ); ?>" name="<?php echo $this->get_field_name( 'meta_value' ); ?>" value="<?php echo esc_attr( $instance['meta_value'] ); ?>" />
|
219 |
+
</p>
|
220 |
+
|
221 |
+
</div>
|
222 |
+
|
223 |
+
<div style="clear:both;"> </div>
|
224 |
+
<?php
|
225 |
+
}
|
226 |
+
}
|
227 |
+
|
228 |
+
?>
|
includes/widgets.php
ADDED
@@ -0,0 +1,40 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Loads and enables the widgets for the plugin.
|
4 |
+
*
|
5 |
+
* @package Members
|
6 |
+
* @subpackage Functions
|
7 |
+
*/
|
8 |
+
|
9 |
+
/* Hook widget registration to the 'widgets_init' hook. */
|
10 |
+
add_action( 'widgets_init', 'members_register_widgets' );
|
11 |
+
|
12 |
+
/**
|
13 |
+
* Registers widgets for the plugin.
|
14 |
+
*
|
15 |
+
* @since 0.2.0
|
16 |
+
*/
|
17 |
+
function members_register_widgets() {
|
18 |
+
|
19 |
+
/* If the login form widget is enabled. */
|
20 |
+
if ( members_get_setting( 'login_form_widget' ) ) {
|
21 |
+
|
22 |
+
/* Load the login form widget file. */
|
23 |
+
require_once( MEMBERS_INCLUDES . 'widget-login-form.php' );
|
24 |
+
|
25 |
+
/* Register the login form widget. */
|
26 |
+
register_widget( 'Members_Widget_Login' );
|
27 |
+
}
|
28 |
+
|
29 |
+
/* If the users widget is enabled. */
|
30 |
+
if ( members_get_setting( 'users_widget' ) ) {
|
31 |
+
|
32 |
+
/* Load the users widget file. */
|
33 |
+
require_once( MEMBERS_INCLUDES . 'widget-users.php' );
|
34 |
+
|
35 |
+
/* Register the users widget. */
|
36 |
+
register_widget( 'Members_Widget_users' );
|
37 |
+
}
|
38 |
+
}
|
39 |
+
|
40 |
+
?>
|
js/admin.js
ADDED
@@ -0,0 +1,25 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
$j = jQuery.noConflict();
|
2 |
+
|
3 |
+
$j(document).ready(
|
4 |
+
function() {
|
5 |
+
|
6 |
+
$j( '.hide-if-no-js' ).show();
|
7 |
+
|
8 |
+
$j( '#members-add-new-cap' ).click(
|
9 |
+
function() {
|
10 |
+
$j( 'p.new-cap-holder' ).append( '<input type="text" class="new-cap" name="new-cap[]" value="" size="20" />' );
|
11 |
+
}
|
12 |
+
);
|
13 |
+
|
14 |
+
$j( 'div.members-role-checkbox input[type="checkbox"]' ).click(
|
15 |
+
function() {
|
16 |
+
if ( $j( this ).is( ':checked' ) ) {
|
17 |
+
$j( this ).next( 'label' ).addClass( 'has-cap' );
|
18 |
+
}
|
19 |
+
else {
|
20 |
+
$j( this ).next( 'label' ).removeClass( 'has-cap' );
|
21 |
+
}
|
22 |
+
}
|
23 |
+
);
|
24 |
+
}
|
25 |
+
);
|
languages/members-en_EN.mo
CHANGED
Binary file
|
languages/members-en_EN.po
CHANGED
@@ -2,8 +2,8 @@ msgid ""
|
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Members WordPress Plugin\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
-
"POT-Creation-Date:
|
6 |
-
"PO-Revision-Date:
|
7 |
"Last-Translator: Justin Tadlock <justin@justintadlock.com>\n"
|
8 |
"Language-Team: <justin@justintadlock.com>\n"
|
9 |
"MIME-Version: 1.0\n"
|
@@ -11,864 +11,979 @@ msgstr ""
|
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
"X-Poedit-Language: English\n"
|
13 |
"X-Poedit-Country: UNITED STATES\n"
|
14 |
-
"X-Poedit-KeywordsList: _e;__\n"
|
15 |
"X-Poedit-Basepath: ../\n"
|
16 |
"X-Poedit-SearchPath-0: .\n"
|
17 |
|
18 |
-
#:
|
19 |
-
#:
|
20 |
-
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
-
#:
|
24 |
-
msgid "
|
25 |
msgstr ""
|
26 |
|
27 |
-
#:
|
28 |
-
msgid "
|
29 |
msgstr ""
|
30 |
|
31 |
-
#:
|
32 |
-
msgid "
|
33 |
msgstr ""
|
34 |
|
35 |
-
#:
|
36 |
-
msgid "
|
37 |
msgstr ""
|
38 |
|
39 |
-
#:
|
40 |
-
|
|
|
|
|
41 |
msgstr ""
|
42 |
|
43 |
-
#:
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
msgstr ""
|
46 |
|
47 |
-
#:
|
48 |
-
msgid "
|
49 |
msgstr ""
|
50 |
|
51 |
-
#:
|
52 |
-
msgid "
|
53 |
msgstr ""
|
54 |
|
55 |
-
#:
|
56 |
-
msgid "
|
57 |
msgstr ""
|
58 |
|
59 |
-
#:
|
60 |
-
|
61 |
-
msgid "
|
62 |
-
msgstr "
|
63 |
|
64 |
-
#:
|
65 |
-
msgid "
|
66 |
msgstr ""
|
67 |
|
68 |
-
#:
|
69 |
-
msgid "
|
70 |
msgstr ""
|
71 |
|
72 |
-
#:
|
73 |
-
msgid "
|
74 |
msgstr ""
|
75 |
|
76 |
-
#:
|
77 |
-
|
78 |
-
|
79 |
-
msgstr "Week %1$s"
|
80 |
|
81 |
-
#:
|
82 |
-
|
83 |
-
|
84 |
-
msgstr "Gebruikersnaam"
|
85 |
|
86 |
-
#:
|
87 |
-
|
88 |
-
|
89 |
-
msgstr "Wachtwoord"
|
90 |
|
91 |
-
#:
|
92 |
#, fuzzy
|
93 |
-
msgid "
|
94 |
-
msgstr "
|
95 |
-
|
96 |
-
#: functions.php:56
|
97 |
-
msgid "Remember me"
|
98 |
-
msgstr "Herinner deze gegevens."
|
99 |
-
|
100 |
-
#: functions.php:162
|
101 |
-
#, php-format
|
102 |
-
msgid "Posts by %s"
|
103 |
-
msgstr ""
|
104 |
|
105 |
-
#:
|
106 |
-
|
|
|
107 |
msgstr ""
|
108 |
|
109 |
-
#: settings.php:
|
110 |
#, fuzzy
|
111 |
-
msgid "
|
112 |
-
msgstr "
|
113 |
|
114 |
-
#: settings.php:
|
115 |
-
#: settings.php:38
|
116 |
#, fuzzy
|
117 |
-
msgid "
|
118 |
-
msgstr "
|
119 |
|
120 |
-
#: settings.php:
|
121 |
-
|
122 |
-
msgid "
|
123 |
-
msgstr "
|
124 |
|
125 |
-
#: settings.php:
|
126 |
#, fuzzy
|
127 |
-
msgid "
|
128 |
-
msgstr "
|
129 |
|
130 |
-
#:
|
131 |
-
msgid "
|
132 |
msgstr ""
|
133 |
|
134 |
-
#:
|
135 |
-
msgid "
|
136 |
msgstr ""
|
137 |
|
138 |
-
#:
|
139 |
-
msgid "
|
140 |
msgstr ""
|
141 |
|
142 |
-
#:
|
143 |
-
msgid "
|
144 |
msgstr ""
|
145 |
|
146 |
-
#:
|
147 |
-
msgid "
|
148 |
msgstr ""
|
149 |
|
150 |
-
#:
|
151 |
-
msgid "
|
152 |
msgstr ""
|
153 |
|
154 |
-
#:
|
155 |
-
|
156 |
-
|
157 |
-
msgstr "Reset"
|
158 |
|
159 |
-
#:
|
160 |
-
#: components/edit-roles/edit-roles.php:168
|
161 |
-
#: components/edit-roles/edit-roles.php:171
|
162 |
#, php-format
|
163 |
-
msgid "
|
164 |
msgstr ""
|
165 |
|
166 |
-
#:
|
167 |
#, fuzzy
|
168 |
-
msgid "
|
169 |
-
msgstr "
|
170 |
|
171 |
-
#:
|
172 |
-
#,
|
173 |
-
msgid "
|
|
|
|
|
|
|
|
|
174 |
msgstr ""
|
175 |
|
176 |
-
#:
|
177 |
-
|
178 |
-
#: components/edit-roles/edit-roles.php:147
|
179 |
-
msgid "Capabilities"
|
180 |
msgstr ""
|
181 |
|
182 |
-
#:
|
183 |
-
msgid "
|
184 |
msgstr ""
|
185 |
|
186 |
-
#:
|
187 |
-
msgid "
|
188 |
msgstr ""
|
189 |
|
190 |
-
#:
|
191 |
-
msgid "
|
192 |
msgstr ""
|
193 |
|
194 |
-
#:
|
195 |
-
|
196 |
-
|
197 |
-
msgstr "Bewerk"
|
198 |
|
199 |
-
#:
|
200 |
-
msgid "
|
201 |
msgstr ""
|
202 |
|
203 |
-
#:
|
204 |
-
msgid "
|
205 |
msgstr ""
|
206 |
|
207 |
-
#:
|
208 |
-
msgid "
|
209 |
msgstr ""
|
210 |
|
211 |
-
#:
|
212 |
#, fuzzy
|
213 |
-
msgid "
|
214 |
-
msgstr "
|
215 |
|
216 |
-
#:
|
217 |
-
|
218 |
-
|
219 |
-
msgstr "Archieven"
|
220 |
|
221 |
-
#:
|
222 |
-
|
223 |
-
msgid "Bulk Actions"
|
224 |
msgstr ""
|
225 |
|
226 |
-
#:
|
227 |
-
|
228 |
-
|
229 |
-
msgid "Delete"
|
230 |
msgstr ""
|
231 |
|
232 |
-
#:
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
msgid "
|
238 |
-
msgstr "
|
239 |
|
240 |
-
#:
|
241 |
-
#: components/edit-roles/edit-roles.php:144
|
242 |
#, fuzzy
|
243 |
-
msgid "Role
|
244 |
-
msgstr "
|
245 |
|
246 |
-
#:
|
247 |
-
#:
|
248 |
-
msgid "
|
249 |
msgstr ""
|
250 |
|
251 |
-
#:
|
252 |
-
#: components/edit-roles/edit-roles.php:146
|
253 |
#, fuzzy
|
254 |
-
msgid "
|
255 |
-
msgstr "
|
256 |
-
|
257 |
-
#: components/edit-roles/edit-roles.php:171
|
258 |
-
msgid "Edit"
|
259 |
-
msgstr "Bewerk"
|
260 |
|
261 |
-
#:
|
262 |
-
|
263 |
-
msgid "Delete the %1$s role"
|
264 |
msgstr ""
|
265 |
|
266 |
-
#:
|
267 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
268 |
msgstr ""
|
269 |
|
270 |
-
#:
|
271 |
-
msgid "
|
272 |
msgstr ""
|
273 |
|
274 |
-
#:
|
275 |
-
|
276 |
-
#: components/edit-roles/edit-roles.php:202
|
277 |
-
#, php-format
|
278 |
-
msgid "View all users with the %1$s role"
|
279 |
msgstr ""
|
280 |
|
281 |
-
#:
|
282 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
283 |
msgstr ""
|
284 |
|
285 |
-
#:
|
286 |
-
|
287 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
288 |
msgstr ""
|
289 |
|
290 |
-
#:
|
291 |
#, fuzzy
|
292 |
-
msgid "
|
293 |
-
msgstr "
|
294 |
|
295 |
-
#:
|
296 |
-
msgid "
|
297 |
msgstr ""
|
298 |
|
299 |
-
#:
|
300 |
-
#,
|
301 |
-
msgid "
|
|
|
|
|
|
|
|
|
302 |
msgstr ""
|
303 |
|
304 |
-
#:
|
305 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
306 |
msgstr ""
|
307 |
|
308 |
-
#:
|
309 |
-
|
|
|
|
|
310 |
msgstr ""
|
311 |
|
312 |
-
#:
|
313 |
-
#:
|
314 |
#, fuzzy
|
315 |
-
msgid "
|
316 |
-
msgstr "
|
317 |
|
318 |
-
#:
|
319 |
-
|
|
|
|
|
320 |
msgstr ""
|
321 |
|
322 |
-
#:
|
323 |
-
|
324 |
-
|
|
|
|
|
325 |
|
326 |
-
#:
|
327 |
-
|
|
|
328 |
msgstr ""
|
329 |
|
330 |
-
#:
|
|
|
331 |
#, fuzzy, php-format
|
332 |
-
msgid "
|
333 |
-
msgstr "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
334 |
|
335 |
-
#:
|
336 |
-
msgid "
|
337 |
msgstr ""
|
338 |
|
339 |
-
#:
|
340 |
-
msgid "
|
341 |
msgstr ""
|
342 |
|
343 |
-
#:
|
|
|
344 |
#, php-format
|
345 |
-
msgid "
|
346 |
msgstr ""
|
347 |
|
348 |
-
#:
|
349 |
-
msgid "
|
350 |
msgstr ""
|
351 |
|
352 |
-
#:
|
353 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
354 |
msgstr ""
|
355 |
|
356 |
-
#:
|
357 |
#, fuzzy
|
358 |
-
msgid "
|
359 |
-
msgstr "
|
360 |
|
361 |
-
#:
|
362 |
-
|
363 |
-
|
|
|
364 |
|
365 |
-
#:
|
366 |
-
msgid "
|
367 |
msgstr ""
|
368 |
|
369 |
-
#:
|
370 |
-
msgid "
|
371 |
msgstr ""
|
372 |
|
373 |
-
#:
|
374 |
-
|
375 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
376 |
|
377 |
-
#:
|
378 |
-
#: trash/login-widget/login.php:6
|
379 |
msgid "A widget that allows users to log into your site."
|
380 |
msgstr ""
|
381 |
|
382 |
-
#:
|
383 |
-
#: trash/login-widget/login.php:8
|
384 |
#, fuzzy
|
385 |
msgid "Login Form"
|
386 |
msgstr "Aanmelden"
|
387 |
|
388 |
-
#:
|
389 |
-
#:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
390 |
msgid "Password"
|
391 |
msgstr "Wachtwoord"
|
392 |
|
393 |
-
#:
|
394 |
-
#: trash/login-widget/login.php:108
|
395 |
#, fuzzy
|
396 |
-
msgid "Remember
|
397 |
msgstr "Herinner deze gegevens."
|
398 |
|
399 |
-
#:
|
400 |
-
#: trash/login-widget/login.php:110
|
401 |
msgid "Please log into the site."
|
402 |
msgstr ""
|
403 |
|
404 |
-
#:
|
405 |
-
#: trash/login-widget/login.php:111
|
406 |
msgid "You are currently logged in."
|
407 |
msgstr ""
|
408 |
|
409 |
-
#:
|
410 |
-
#:
|
411 |
-
#: trash/login-widget/login.php:120
|
412 |
msgid "Title:"
|
413 |
msgstr "Titel"
|
414 |
|
415 |
-
#:
|
416 |
-
#: trash/login-widget/login.php:125
|
417 |
-
msgid "Logged out text:"
|
418 |
-
msgstr ""
|
419 |
-
|
420 |
-
#: components/widgets/login.php:136
|
421 |
-
#: trash/login-widget/login.php:130
|
422 |
-
msgid "Logged in text:"
|
423 |
-
msgstr ""
|
424 |
-
|
425 |
-
#: components/widgets/login.php:145
|
426 |
-
#: trash/login-widget/login.php:139
|
427 |
-
msgid "Display avatar?"
|
428 |
-
msgstr ""
|
429 |
-
|
430 |
-
#: components/widgets/login.php:148
|
431 |
-
#: trash/login-widget/login.php:142
|
432 |
-
#, fuzzy
|
433 |
-
msgid "Username Label:"
|
434 |
-
msgstr "Gebruikersnaam*"
|
435 |
-
|
436 |
-
#: components/widgets/login.php:152
|
437 |
-
#: trash/login-widget/login.php:146
|
438 |
#, fuzzy
|
439 |
-
msgid "
|
440 |
-
msgstr "
|
441 |
-
|
442 |
-
#: components/widgets/login.php:157
|
443 |
-
#: trash/login-widget/login.php:151
|
444 |
-
msgid "Submit Text:"
|
445 |
-
msgstr "Verstuur tekst:"
|
446 |
|
447 |
-
#:
|
448 |
-
#: trash/login-widget/login.php:155
|
449 |
#, fuzzy
|
450 |
-
msgid "
|
451 |
msgstr "Herinner deze gegevens."
|
452 |
|
453 |
-
#:
|
454 |
-
|
455 |
-
|
456 |
-
msgstr "Een geavanceerde widget die je de totale controle geeft over de output van je pagina-links."
|
457 |
|
458 |
-
#:
|
459 |
-
msgid "
|
460 |
-
msgstr "
|
461 |
|
462 |
-
#:
|
463 |
-
msgid "
|
464 |
-
msgstr "
|
465 |
|
466 |
-
#:
|
467 |
-
msgid "
|
468 |
-
msgstr "
|
469 |
|
470 |
-
#:
|
471 |
-
msgid "
|
472 |
-
msgstr "
|
473 |
|
474 |
-
#:
|
475 |
-
msgid "
|
476 |
-
msgstr "
|
477 |
|
478 |
-
#:
|
479 |
#, fuzzy
|
480 |
-
msgid "
|
481 |
-
msgstr "
|
482 |
|
483 |
-
#:
|
484 |
-
|
485 |
-
|
486 |
-
#: Copy.php:137
|
487 |
-
#: trash/manage-capabilities/capabilities.php:56
|
488 |
-
msgid "Save Changes"
|
489 |
-
msgstr "Bewaren"
|
490 |
|
491 |
-
#:
|
492 |
-
msgid "
|
493 |
msgstr ""
|
494 |
|
495 |
-
#:
|
496 |
#, fuzzy
|
497 |
-
msgid "
|
498 |
-
msgstr "
|
499 |
|
500 |
-
#:
|
501 |
-
#: trash/roles.php:40
|
502 |
#, fuzzy
|
503 |
-
msgid "
|
504 |
-
msgstr "
|
505 |
-
|
506 |
-
#: trash/members - Copy.php:266
|
507 |
-
#: trash/members-old.php:440
|
508 |
-
#, php-format
|
509 |
-
msgid "Choose which capabilities users of the <code>%1$s</code> role should have."
|
510 |
-
msgstr ""
|
511 |
|
512 |
-
#:
|
513 |
-
|
514 |
-
|
|
|
515 |
|
516 |
-
#:
|
517 |
-
msgid "
|
518 |
msgstr ""
|
519 |
|
520 |
-
#:
|
521 |
-
msgid "Hybrid"
|
522 |
-
msgstr "Hybrid"
|
523 |
-
|
524 |
-
#: trash/new-role.php:5
|
525 |
#, fuzzy
|
526 |
-
msgid "
|
527 |
-
msgstr "
|
528 |
|
529 |
-
#: trash/new-role.php:30
|
530 |
#, fuzzy
|
531 |
-
msgid "
|
532 |
-
msgstr "
|
533 |
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
msgstr ""
|
538 |
|
539 |
-
|
540 |
-
msgid "
|
541 |
-
msgstr ""
|
542 |
|
543 |
-
|
544 |
-
msgid "
|
545 |
-
msgstr ""
|
546 |
|
547 |
-
|
548 |
-
msgid "
|
549 |
-
msgstr ""
|
550 |
|
551 |
-
|
552 |
-
msgid "
|
553 |
-
msgstr ""
|
554 |
|
555 |
-
|
556 |
-
msgid "
|
557 |
-
msgstr ""
|
558 |
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
msgstr ""
|
563 |
|
564 |
-
|
565 |
-
msgid "
|
566 |
-
msgstr ""
|
567 |
|
568 |
-
|
569 |
-
|
570 |
-
msgstr ""
|
571 |
|
572 |
-
|
573 |
-
msgid "
|
574 |
-
msgstr ""
|
575 |
|
576 |
-
|
577 |
-
msgid "
|
578 |
-
|
|
|
|
|
|
|
|
|
579 |
|
580 |
-
|
581 |
-
|
582 |
-
msgstr ""
|
583 |
|
584 |
-
|
585 |
-
|
586 |
-
msgstr ""
|
587 |
|
588 |
-
|
589 |
-
|
590 |
-
msgstr ""
|
591 |
|
592 |
-
|
593 |
-
|
594 |
-
msgstr ""
|
595 |
|
596 |
-
|
597 |
-
|
598 |
-
msgstr ""
|
599 |
|
600 |
-
|
601 |
-
msgid "
|
602 |
-
msgstr ""
|
603 |
|
604 |
-
|
605 |
-
|
606 |
-
msgstr ""
|
607 |
|
608 |
-
|
609 |
-
msgid "
|
610 |
-
msgstr ""
|
611 |
|
612 |
-
#~ msgid "Not Found"
|
613 |
-
#~ msgstr "Niet gevonden"
|
614 |
#~ msgid ""
|
615 |
#~ "You tried going to %1$s, and it doesn't exist. All is not lost! You can "
|
616 |
#~ "search for what you're looking for."
|
617 |
#~ msgstr ""
|
618 |
#~ "Je wilde naar %1$s gaan, maar dit bestaat niet. Geen nood! Zoek hier "
|
619 |
#~ "wat je zocht:"
|
|
|
620 |
#~ msgid "Possibly Related"
|
621 |
#~ msgstr "Mogelijk gerelateerd"
|
|
|
622 |
#~ msgid "Continue reading"
|
623 |
#~ msgstr "Lees hier verder"
|
|
|
624 |
#~ msgid "Download "%1$s""
|
625 |
#~ msgstr "Download "%1$s""
|
|
|
626 |
#~ msgid "Pages:"
|
627 |
#~ msgstr "Pagina's:"
|
|
|
628 |
#~ msgid "Sorry, no applications matched your criteria."
|
629 |
#~ msgstr "Sorry, er zijn geen toepassingen die met je criteria overeenkomen."
|
|
|
630 |
#~ msgid "You are browsing the archive for %1$s."
|
631 |
#~ msgstr "Je bladert nu door het archief voor %1$s."
|
|
|
632 |
#~ msgid "By"
|
633 |
#~ msgstr "Door"
|
|
|
634 |
#~ msgid "on"
|
635 |
#~ msgstr "op"
|
|
|
636 |
#~ msgid "l, F jS, Y, g:i a"
|
637 |
#~ msgstr "l, j F, Y, G:i"
|
|
|
638 |
#~ msgid "F j, Y"
|
639 |
#~ msgstr "j F, Y"
|
|
|
640 |
#~ msgid "Posted in"
|
641 |
#~ msgstr "Gepost in"
|
|
|
642 |
#~ msgid "Tagged"
|
643 |
#~ msgstr "Tags:"
|
|
|
644 |
#~ msgid "Leave a response"
|
645 |
#~ msgstr "Reageer"
|
|
|
646 |
#~ msgid "1 Response"
|
647 |
#~ msgstr "1 Reactie"
|
|
|
648 |
#~ msgid "% Responses"
|
649 |
#~ msgstr "% Reacties"
|
|
|
650 |
#~ msgid "Sorry, there are no posts in this archive."
|
651 |
#~ msgstr "Sorry, dit archief bevat geen berichten."
|
|
|
652 |
#~ msgid "Archives by category"
|
653 |
#~ msgstr "Archieven per rubriek"
|
|
|
654 |
#~ msgid "Archives by month"
|
655 |
#~ msgstr "Archieven per maand"
|
|
|
656 |
#~ msgid "Sorry, no page matched your criteria."
|
657 |
#~ msgstr "Sorry, er bestaat geen pagina die aan je criteria voldoet."
|
|
|
658 |
#~ msgid "Sorry, no attachments matched your criteria."
|
659 |
#~ msgstr "Sorry, er zijn geen bijlages die aan je criteria voldoen."
|
|
|
660 |
#~ msgid "Sorry, no audio files matched your criteria."
|
661 |
#~ msgstr "Sorry, er zijn geen geluidsbestanden die aan je criteria voldoen."
|
|
|
662 |
#~ msgid "Send an email to %1$s"
|
663 |
#~ msgstr "Stuur een email aan %1$s"
|
|
|
664 |
#~ msgid "Email %1$s"
|
665 |
#~ msgstr "Email %1$s"
|
|
|
666 |
#~ msgid "%1$s hasn't written any posts yet."
|
667 |
#~ msgstr "%1$s heeft nog geen berichten geschreven."
|
|
|
668 |
#~ msgid "Nickname:"
|
669 |
#~ msgstr "Bijnaam:"
|
|
|
670 |
#~ msgid "Email:"
|
671 |
#~ msgstr "Email:"
|
|
|
672 |
#~ msgid "Website:"
|
673 |
#~ msgstr "Website:"
|
|
|
674 |
#~ msgid "AIM:"
|
675 |
#~ msgstr "AIM:"
|
|
|
676 |
#~ msgid "IM with %1$s"
|
677 |
#~ msgstr "IM met %1$s"
|
|
|
678 |
#~ msgid "Jabber:"
|
679 |
#~ msgstr "Jabber:"
|
|
|
680 |
#~ msgid "Yahoo:"
|
681 |
#~ msgstr "Yahoo:"
|
|
|
682 |
#~ msgid "Sorry, there are no posts in the %1$s category."
|
683 |
#~ msgstr "Sorry, er zijn geen berichten in de rubriek %1$s. "
|
|
|
684 |
#~ msgid "Please do not load this page directly. Thanks!"
|
685 |
#~ msgstr "Gelieve deze pagina niet rechtstreeks te laden. Dankjewel!"
|
|
|
686 |
#~ msgid "No Responses"
|
687 |
#~ msgstr "Geen reacties"
|
|
|
688 |
#~ msgid "One Response"
|
689 |
#~ msgstr "Een reactie"
|
|
|
690 |
#~ msgid "Responses"
|
691 |
#~ msgstr "Reacties"
|
|
|
692 |
#~ msgid "to"
|
693 |
#~ msgstr "naar"
|
|
|
694 |
#~ msgid "%1$s at %2$s"
|
695 |
#~ msgstr "%1$s op %2$s"
|
|
|
696 |
#~ msgid "Permalink to comment"
|
697 |
#~ msgstr "Permalink naar reactie"
|
|
|
698 |
#~ msgid "Permalink"
|
699 |
#~ msgstr "Permalink"
|
|
|
700 |
#~ msgid "Your comment is awaiting moderation."
|
701 |
#~ msgstr "Je reactie wacht op moderatie."
|
|
|
702 |
#~ msgid ""
|
703 |
#~ "Comments are closed, but <a href=\"%1$s\" title=\"Trackback URL for this "
|
704 |
#~ "post\">trackbacks</a> and pingbacks are open."
|
705 |
#~ msgstr ""
|
706 |
#~ "Reageren is niet mogelijk, maar <a href=\"%1$s\" title=\"Trackback URL "
|
707 |
#~ "for this post\">trackbacks</a> en pingbacks blijven open."
|
|
|
708 |
#~ msgid "Comments are closed."
|
709 |
#~ msgstr "Reageren is niet mogelijk."
|
|
|
710 |
#~ msgid "Leave a Reply"
|
711 |
#~ msgstr "Reageer"
|
|
|
712 |
#~ msgid ""
|
713 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to post a "
|
714 |
#~ "comment."
|
715 |
#~ msgstr ""
|
716 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn om te "
|
717 |
#~ "reageren."
|
|
|
718 |
#~ msgid "Logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
719 |
#~ msgstr "Ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
|
|
720 |
#~ msgid "Log out of this account"
|
721 |
#~ msgstr "Afmelden."
|
|
|
722 |
#~ msgid "Logout »"
|
723 |
#~ msgstr "Afmelden »"
|
|
|
724 |
#~ msgid "*"
|
725 |
#~ msgstr "*"
|
726 |
-
|
727 |
-
#~ msgstr "Email"
|
728 |
#~ msgid "Website"
|
729 |
#~ msgstr "Website"
|
|
|
730 |
#~ msgid "Submit"
|
731 |
#~ msgstr "Verstuur"
|
|
|
732 |
#~ msgid "Password Protected"
|
733 |
#~ msgstr "Beveiligd met wachtwoord"
|
|
|
734 |
#~ msgid "Enter the password to view comments."
|
735 |
#~ msgstr "Voer wachtwoord in om reacties te lezen."
|
|
|
736 |
#~ msgid "Leave a Reply to %s"
|
737 |
#~ msgstr "Reageer op %s"
|
|
|
738 |
#~ msgid "Click here to cancel reply."
|
739 |
#~ msgstr "Klik hier om de reactie te annuleren."
|
|
|
740 |
#~ msgid "F jS, Y"
|
741 |
#~ msgstr "j F, Y"
|
|
|
742 |
#~ msgid "Week %1$s of %2$s"
|
743 |
#~ msgstr "Week %1$s van %2$s"
|
|
|
744 |
#~ msgid "W"
|
745 |
#~ msgstr "W"
|
|
|
746 |
#~ msgid "Y"
|
747 |
#~ msgstr "Y"
|
|
|
748 |
#~ msgid "You are browsing the archive for week %1$s of %2$s."
|
749 |
#~ msgstr "Je bekijkt het archief voor week %1$s van %2$s."
|
|
|
750 |
#~ msgid "Sorry, there are no posts for %1$s."
|
751 |
#~ msgstr "Sorry, maar er zijn geen berichten voor %1$s."
|
|
|
752 |
#~ msgid "Sorry, no posts matched your criteria."
|
753 |
#~ msgstr "Sorry, er zijn geen berichten die met je criteria overeenkomen."
|
|
|
754 |
#~ msgid "Sorry, no images matched your criteria."
|
755 |
#~ msgstr "Sorry, er zijn geen afbeeldingen die met je criteria overeenkomen."
|
|
|
756 |
#~ msgid ""
|
757 |
#~ "You are currently logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
758 |
#~ msgstr ""
|
759 |
#~ "Je bent momenteel ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
|
|
760 |
#~ msgid ""
|
761 |
#~ "You have successfully logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</"
|
762 |
#~ "a>."
|
763 |
#~ msgstr ""
|
764 |
#~ "Je bent succesvol ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
|
|
765 |
#~ msgid ""
|
766 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to view the "
|
767 |
#~ "content of this page."
|
768 |
#~ msgstr ""
|
769 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn om de inhoud "
|
770 |
#~ "van deze pagina te bekijken."
|
|
|
771 |
#~ msgid ""
|
772 |
#~ "If you're not currently a member, please take a moment to <a href=\"%1$s"
|
773 |
#~ "\" title=\"Register\">register</a>."
|
774 |
#~ msgstr ""
|
775 |
#~ "Als je momenteel nog geen lid bent, neem dan een ogenblikje tijd om je te "
|
776 |
#~ "<a href=\"%1$s\" title=\"Register\">registreren</a>."
|
|
|
777 |
#~ msgid "You must enter a post title."
|
778 |
#~ msgstr "Je moet een titel voor het bericht invoeren."
|
|
|
779 |
#~ msgid "You must write something."
|
780 |
#~ msgstr "Je moet hier iets schrijven."
|
|
|
781 |
#~ msgid "Title"
|
782 |
#~ msgstr "Titel"
|
|
|
783 |
#~ msgid "Write"
|
784 |
#~ msgstr "Schrijf"
|
|
|
785 |
#~ msgid "Tags"
|
786 |
#~ msgstr "Tags"
|
|
|
787 |
#~ msgid "Publish"
|
788 |
#~ msgstr "Publiceer"
|
|
|
789 |
#~ msgid "You don't have the appropriate capabilities to publish posts."
|
790 |
#~ msgstr "Je hebt niet de nodige rechten om berichten te publiceren."
|
|
|
791 |
#~ msgid ""
|
792 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> with "
|
793 |
#~ "appropriate user capabilities to publish posts."
|
794 |
#~ msgstr ""
|
795 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn met de nodige "
|
796 |
#~ "gebruikersrechten om berichten te kunnen publiceren."
|
|
|
797 |
#~ msgid "A username is required for registration."
|
798 |
#~ msgstr "Om te registreren is een gebruikersnaam nodig."
|
|
|
799 |
#~ msgid "You must enter an email address."
|
800 |
#~ msgstr "Je moet een email-adres invoeren."
|
|
|
801 |
#~ msgid "You must enter a password."
|
802 |
#~ msgstr "Je moet een wachtwoord invoeren."
|
|
|
803 |
#~ msgid "You must enter your password twice."
|
804 |
#~ msgstr "Je moet je wachtwoord tweemaal invoeren."
|
|
|
805 |
#~ msgid "You must enter the same password twice."
|
806 |
#~ msgstr "Je moet tweemaal hetzelfde wachtwoord invoeren."
|
|
|
807 |
#~ msgid "User registration failed. Please try again."
|
808 |
#~ msgstr "Gebruikersregistratie mislukt. Probeer opnieuw."
|
|
|
809 |
#~ msgid ""
|
810 |
#~ "You are logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>. You don't "
|
811 |
#~ "need another account."
|
812 |
#~ msgstr ""
|
813 |
#~ "Je bent ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>. Je hebt "
|
814 |
#~ "geen bijkomend account nodig."
|
|
|
815 |
#~ msgid "Thank you for registering, %1$s."
|
816 |
#~ msgstr "Bedankt voor je registratie, %1$s."
|
|
|
817 |
#~ msgid "Users can register themselves or you can manually create users here."
|
818 |
#~ msgstr ""
|
819 |
#~ "Gebruikers kunnen zichzelf registreren of je kan hier handmatig "
|
820 |
#~ "gebruikersaccounts aanmaken."
|
|
|
821 |
#~ msgid ""
|
822 |
#~ "Users cannot currently register themselves, but you can manually create "
|
823 |
#~ "users here."
|
824 |
#~ msgstr ""
|
825 |
#~ "Gebruikers kunnen zichzelf niet registreren, maar je kan hier wel "
|
826 |
#~ "handmatig gebruikersaccounts aanmaken."
|
|
|
827 |
#~ msgid "Required fields are marked <span class=\"required\">*</span>"
|
828 |
#~ msgstr ""
|
829 |
#~ "Verplichte velden zijn aangeduid met <span class=\"required\">*</span>."
|
830 |
-
|
831 |
-
#~ msgstr "Voornaam"
|
832 |
#~ msgid "Last Name"
|
833 |
#~ msgstr "Naam"
|
|
|
834 |
#~ msgid "E-mail *"
|
835 |
#~ msgstr "E-mail *"
|
|
|
836 |
#~ msgid "Repeat Password *"
|
837 |
#~ msgstr "Herhaal je wachtwoord*"
|
|
|
838 |
#~ msgid "Biographical Information"
|
839 |
#~ msgstr "Biografische informatie"
|
840 |
-
|
841 |
-
#~ msgstr "Registreer"
|
842 |
#~ msgid "You are browsing the search results for "%1$s""
|
843 |
#~ msgstr "Je bekijkt hier de zoekresultaten voor "%1$s""
|
|
|
844 |
#~ msgid "Maybe you'd like to try inputting different search terms."
|
845 |
#~ msgstr "Misschien wil je andere zoektermen invoeren."
|
|
|
846 |
#~ msgid "You are browsing the %1$s tag archive."
|
847 |
#~ msgstr "Je bekijkt het archief voor de tag %1$s"
|
|
|
848 |
#~ msgid "Sorry, there are no posts tagged %1$s."
|
849 |
#~ msgstr "Sorry, er zijn geen berichten met de tag %1$s."
|
|
|
850 |
#~ msgid "Sorry, no documents matched your criteria."
|
851 |
#~ msgstr "Sorry, er zijn geen documenten die met je criteria overeenkomen."
|
|
|
852 |
#~ msgid "Sorry, no videos matched your criteria."
|
853 |
#~ msgstr "Sorry, er zijn geen video's die met je criteria overeenkomen."
|
|
|
854 |
#~ msgid "Widget Template"
|
855 |
#~ msgstr "Widget Template"
|
|
|
856 |
#~ msgid "About This Theme"
|
857 |
#~ msgstr "Over dit Thema"
|
|
|
858 |
#~ msgid "Theme Description:"
|
859 |
#~ msgstr "Thema Beschrijving:"
|
860 |
-
|
861 |
-
#~ msgstr "Thema versie:"
|
862 |
#~ msgid "Theme Documentation:"
|
863 |
#~ msgstr "Thema Documentatie:"
|
864 |
-
|
865 |
-
#~ msgstr "Thema Documentatie"
|
866 |
-
#~ msgid "Theme Support:"
|
867 |
-
#~ msgstr "Thema Ondersteuning:"
|
868 |
#~ msgid "Get support for this theme"
|
869 |
#~ msgstr "Ondersteuning voor dit thema"
|
870 |
-
|
871 |
-
#~ msgstr "Bezoek de support forums."
|
872 |
#~ msgid "Select your theme settings"
|
873 |
#~ msgstr "Selecteer de settings voor je thema"
|
874 |
|
@@ -887,19 +1002,25 @@ msgstr ""
|
|
887 |
#~ msgstr ""
|
888 |
#~ "Selecteer dit als je wenst dat je secundaire widgets standaard geladen "
|
889 |
#~ "worden op de home-pagina als niet anders geselecteerd is."
|
|
|
890 |
#~ msgid "Stylesheets:"
|
891 |
#~ msgstr "Stijlbladen (CSS)"
|
|
|
892 |
#~ msgid ""
|
893 |
#~ "Select this to have the theme automatically include a print stylesheet."
|
894 |
#~ msgstr ""
|
895 |
#~ "Selecteer dit als je wil dat het thema automatisch een 'print' stijlblad "
|
896 |
#~ "insluit."
|
|
|
897 |
#~ msgid "JavaScript:"
|
898 |
#~ msgstr "JavaScript:"
|
|
|
899 |
#~ msgid "Include the pull quote JavaScript."
|
900 |
#~ msgstr "Inclusief pull quote JavaScript."
|
|
|
901 |
#~ msgid "Feeds:"
|
902 |
#~ msgstr "Feeds:"
|
|
|
903 |
#~ msgid ""
|
904 |
#~ "If you have a an alternate feed address, such as one from <a href="
|
905 |
#~ "\"http://feedburner.com\" title=\"Feedburner\">Feedburner</a>, you can "
|
@@ -910,37 +1031,47 @@ msgstr ""
|
|
910 |
#~ "\"http://feedburner.com\" title=\"Feedburner\">Feedburner</a>, kan je dat "
|
911 |
#~ "hier invoeren om het door het thema te laten gebruiken. Als je dit "
|
912 |
#~ "blanco laat, wordt de standaard WordPress RSS feed gebruikt."
|
|
|
913 |
#~ msgid "Title & Meta:"
|
914 |
#~ msgstr "Titel & Meta"
|
|
|
915 |
#~ msgid "Use category slugs on single posts for your meta keywords?"
|
916 |
#~ msgstr ""
|
917 |
#~ "Gebruik categorie 'slug' als meta keywoord voor afzonderlijke berichten."
|
|
|
918 |
#~ msgid "Use tag slugs on single posts for your meta keywords?"
|
919 |
#~ msgstr "Gebruik tag 'slug' als meta keywoord voor afzonderlijke berichten."
|
|
|
920 |
#~ msgid "Use the excerpt on single posts for your meta description?"
|
921 |
#~ msgstr ""
|
922 |
#~ "Uittreksel als meta-omschrijving gebruiken voor afzonderlijke berichten?"
|
|
|
923 |
#~ msgid "Use the author bio on author archives for your meta description?"
|
924 |
#~ msgstr ""
|
925 |
#~ "Auteurs biografie als meta-omschrijving gebruiken voor afzonderlijke "
|
926 |
#~ "berichten?"
|
|
|
927 |
#~ msgid ""
|
928 |
#~ "Use the category description on category archives for your meta "
|
929 |
#~ "description?"
|
930 |
#~ msgstr ""
|
931 |
#~ "Rubriek-omschrijving als meta-omschrijving gebruiken voor afzonderlijke "
|
932 |
#~ "berichten?"
|
|
|
933 |
#~ msgid "Use the author's name on pages and posts as the meta author?"
|
934 |
#~ msgstr ""
|
935 |
#~ "Naam van de auteur als meta-auteur gebruiken op pagina's en berichten?"
|
|
|
936 |
#~ msgid "Append site title to the end of the page name?"
|
937 |
#~ msgstr "Site-naam toevoegen aan het eind van de pagina-naam?"
|
|
|
938 |
#~ msgid ""
|
939 |
#~ "You can change these settings in the box labeled <em>Hybrid Settings</em> "
|
940 |
#~ "when writing a post or page."
|
941 |
#~ msgstr ""
|
942 |
#~ "Je kan deze settings aanpassen in het vak <em>Hybrid Settings</em> "
|
943 |
#~ "wanneer je een bericht of pagina bewerkt."
|
|
|
944 |
#~ msgid ""
|
945 |
#~ "The <a href=\"%1$s\" title=\"All-In-One SEO Pack\">All-In-One SEO Pack</"
|
946 |
#~ "a> and <a href=\"%2$s\" title=\"Headspace2\">Headspace2</a> plugins will "
|
@@ -949,8 +1080,10 @@ msgstr ""
|
|
949 |
#~ "De <a href=\"%1$s\" title=\"All-In-One SEO Pack\">All-In-One SEO Pack</a> "
|
950 |
#~ "en <a href=\"%2$s\" title=\"Headspace2\">Headspace2</a> plugins zullen "
|
951 |
#~ "deze en de indexeringssettings overschrijven."
|
|
|
952 |
#~ msgid "Indexing:"
|
953 |
#~ msgstr "Indexeren:"
|
|
|
954 |
#~ msgid ""
|
955 |
#~ "Choose which pages of your blog get indexed by the search engines. Only "
|
956 |
#~ "selected pages will be indexed. If not selected, those pages will be "
|
@@ -959,6 +1092,7 @@ msgstr ""
|
|
959 |
#~ "Kies welke pagina's van je blog door zoekmachines kunnen geïndexeerd "
|
960 |
#~ "worden. Alleen de geselecteerde pagina's worden geïndexeerd. Niet "
|
961 |
#~ "geselecteerde pagina's worden geblokkeerd."
|
|
|
962 |
#~ msgid ""
|
963 |
#~ "Note: Some of these settings will render the Title & Meta settings "
|
964 |
#~ "moot. Also, setting your site to privacy mode will override these "
|
@@ -967,28 +1101,40 @@ msgstr ""
|
|
967 |
#~ "Let op: Sommige van deze settings kunnen conflicteren met de Titel & "
|
968 |
#~ "Meta settings. Ook wanneer je je site in een beveiligde modus omzet, "
|
969 |
#~ "worden deze settings overschreven."
|
|
|
970 |
#~ msgid "Home page"
|
971 |
#~ msgstr "Homepage"
|
|
|
972 |
#~ msgid "Single posts"
|
973 |
#~ msgstr "Afzonderlijke berichten"
|
|
|
974 |
#~ msgid "Attachments"
|
975 |
#~ msgstr "Bijlages"
|
|
|
976 |
#~ msgid "Pages"
|
977 |
#~ msgstr "Pagina's"
|
|
|
978 |
#~ msgid "Date-based archives"
|
979 |
#~ msgstr "Datum-gebaseerd archief"
|
|
|
980 |
#~ msgid "Category archives"
|
981 |
#~ msgstr "Archief per rubriek"
|
|
|
982 |
#~ msgid "Tag archives"
|
983 |
#~ msgstr "Archief op tags"
|
|
|
984 |
#~ msgid "Author archives"
|
985 |
#~ msgstr "Archief op auteur"
|
|
|
986 |
#~ msgid "Search"
|
987 |
#~ msgstr "Zoek"
|
|
|
988 |
#~ msgid "404"
|
989 |
#~ msgstr "404"
|
|
|
990 |
#~ msgid "Avatars:"
|
991 |
#~ msgstr "Avatars:"
|
|
|
992 |
#~ msgid ""
|
993 |
#~ "You can set a default avatar for users without one if you don't like the "
|
994 |
#~ "choices WordPress offers you. Simply add the full path to the image file."
|
@@ -996,16 +1142,21 @@ msgstr ""
|
|
996 |
#~ "Je kan een standaard-avatar instellen voor gebruikers zonder avatar, "
|
997 |
#~ "wanneer de keuze van WordPress je niet bevalt. Voer daartoe hier het "
|
998 |
#~ "complete pad naar de afbeelding in."
|
|
|
999 |
#~ msgid "Comments:"
|
1000 |
#~ msgstr "Reacties:"
|
|
|
1001 |
#~ msgid "Check to use the comments popup window instead of regular comments."
|
1002 |
#~ msgstr ""
|
1003 |
#~ "Aanvinken om een popup-scherm voor reacties te gebruiken in plaats van "
|
1004 |
#~ "het gebruikelijke commentaarscherm."
|
|
|
1005 |
#~ msgid "WP 2.7+ only."
|
1006 |
#~ msgstr "Enkel voor WP 2.7+"
|
|
|
1007 |
#~ msgid "Footer Insert:"
|
1008 |
#~ msgstr "Inserts voor Footer:"
|
|
|
1009 |
#~ msgid ""
|
1010 |
#~ "You can place XHTML and JavaScript here to have it inserted automatically "
|
1011 |
#~ "into your theme. If you have a script, such as one from Google "
|
@@ -1014,96 +1165,130 @@ msgstr ""
|
|
1014 |
#~ "Je kan hier XHTML en Javascript plaatsen dat automatisch in de footer van "
|
1015 |
#~ "je thema wordt ingevoerd. Dit kan van pas komen als je een script hebt "
|
1016 |
#~ "zoals dat van Google Analytics."
|
|
|
1017 |
#~ msgid ""
|
1018 |
#~ "Check this if you want the theme to auto-generate your site's copyright "
|
1019 |
#~ "and title in the footer."
|
1020 |
#~ msgstr ""
|
1021 |
#~ "Aanvinken wanneer je wil dat het thema automatisch een copyright voor je "
|
1022 |
#~ "site in de footer invoert."
|
|
|
1023 |
#~ msgid ""
|
1024 |
#~ "Want to show your love of WordPress? Check this and a link will be added "
|
1025 |
#~ "to your footer back to WordPress.org."
|
1026 |
#~ msgstr ""
|
1027 |
#~ "Wil je laten zien hoezeer je WordPress waardeert? Vink dit aan om "
|
1028 |
#~ "automatisch een link naar WordPress.org aan de footer toe te voegen."
|
|
|
1029 |
#~ msgid ""
|
1030 |
#~ "Check this to have a link back to Theme Hybrid automatically appended to "
|
1031 |
#~ "your footer. This is totally optional. Really."
|
1032 |
#~ msgstr ""
|
1033 |
#~ "Aanvinken om automatisch een link naar Theme Hybrid aan je footer toe te "
|
1034 |
#~ "voegen. Dit volkomen vrijwillig, echt waar!"
|
|
|
1035 |
#~ msgid ""
|
1036 |
#~ "For testing purposes, this will append a database query counter and page "
|
1037 |
#~ "load timer to your footer."
|
1038 |
#~ msgstr ""
|
1039 |
#~ "Voor test-doeleinden wordt hiermee een database-query teller en de "
|
1040 |
#~ "laadtijd van de pagina aan je footer toegevoegd."
|
|
|
1041 |
#~ msgid "Add a title that will be seen by search engines."
|
1042 |
#~ msgstr "Voeg een titel toe die door zoekmachines gezien wordt."
|
|
|
1043 |
#~ msgid "Add a description that will be seen by search engines."
|
1044 |
#~ msgstr "Voeg een beschrijving toe die door zoekmachines gezien wordt."
|
|
|
1045 |
#~ msgid "Keywords:"
|
1046 |
#~ msgstr "Trefwoorden:"
|
|
|
1047 |
#~ msgid "Add keywords that will be seen by search engines."
|
1048 |
#~ msgstr "Voeg trefwoorden toe die door zoekmachines gezien worden."
|
|
|
1049 |
#~ msgid "Series:"
|
1050 |
#~ msgstr "Series:"
|
|
|
1051 |
#~ msgid "Post the title of your series of articles here."
|
1052 |
#~ msgstr "Post hier de titel van je artikelseries."
|
|
|
1053 |
#~ msgid "Thumbnail:"
|
1054 |
#~ msgstr "Thumbnail:"
|
|
|
1055 |
#~ msgid "Add an image URL here."
|
1056 |
#~ msgstr "Voeg hier de URL van een afbeelding toe."
|
|
|
1057 |
#~ msgid "Page Navigation:"
|
1058 |
#~ msgstr "Pagina Navigatie:"
|
|
|
1059 |
#~ msgid "Hybrid Theme Settings"
|
1060 |
#~ msgstr "Hybrid Theme Settings"
|
|
|
1061 |
#~ msgid "Settings saved."
|
1062 |
#~ msgstr "Settings opgeslagen."
|
|
|
1063 |
#~ msgid "Browse:"
|
1064 |
#~ msgstr "Blader:"
|
|
|
1065 |
#~ msgid "Home"
|
1066 |
#~ msgstr "Home"
|
|
|
1067 |
#~ msgid "Search results for "%1$s""
|
1068 |
#~ msgstr "Zoekresultaten voor "%1$s""
|
|
|
1069 |
#~ msgid "m"
|
1070 |
#~ msgstr "m"
|
|
|
1071 |
#~ msgid "F"
|
1072 |
#~ msgstr "F"
|
|
|
1073 |
#~ msgid "j"
|
1074 |
#~ msgstr "j"
|
|
|
1075 |
#~ msgid "404 Not Found"
|
1076 |
#~ msgstr "404 Niet Gevonden"
|
|
|
1077 |
#~ msgid "Log in to reply."
|
1078 |
#~ msgstr "Log in op te reageren."
|
|
|
1079 |
#~ msgid "This function has been removed or replaced by another function."
|
1080 |
#~ msgstr "Deze functie is verwijderd of vervangen door een andere functie."
|
|
|
1081 |
#~ msgid ""
|
1082 |
#~ "You can use these <acronym title=\"Extensible Hypertext Markup Language"
|
1083 |
#~ "\">XHTML</acronym> tags:"
|
1084 |
#~ msgstr ""
|
1085 |
#~ "Je kan deze <acronym title=\"Extensible Hypertext Markup Language"
|
1086 |
#~ "\">XHTML</acronym> tags: gebruiken."
|
|
|
1087 |
#~ msgid "Search this site..."
|
1088 |
#~ msgstr "Doorzoek deze site"
|
|
|
1089 |
#~ msgid "Copyright"
|
1090 |
#~ msgstr "Copyright"
|
|
|
1091 |
#~ msgid "Powered by"
|
1092 |
#~ msgstr "Aangedreven door "
|
|
|
1093 |
#~ msgid ""
|
1094 |
#~ "Powered by WordPress, state-of-the-art semantic personal publishing "
|
1095 |
#~ "platform"
|
1096 |
#~ msgstr ""
|
1097 |
#~ "Aangedreven door WordPress, het state-of-the-art semantische platform "
|
1098 |
#~ "voor iedereen."
|
|
|
1099 |
#~ msgid "WordPress"
|
1100 |
#~ msgstr "WordPress"
|
|
|
1101 |
#~ msgid "and"
|
1102 |
#~ msgstr "en"
|
|
|
1103 |
#~ msgid "Hybrid Theme Framework"
|
1104 |
#~ msgstr "Hybrid Theme Framework"
|
|
|
1105 |
#~ msgid "Articles in this series"
|
1106 |
#~ msgstr "Artikelen in deze serie"
|
|
|
1107 |
#~ msgid ""
|
1108 |
#~ "You have encountered an error. This is usually because you've changed "
|
1109 |
#~ "something in the core Hybrid theme files. Try undoing your last edit to "
|
@@ -1114,196 +1299,275 @@ msgstr ""
|
|
1114 |
#~ "gewijzigd in de kernbestanden van het Hybrid-thema. Probeer je laatste "
|
1115 |
#~ "wijzigingen ongedaan te maken om dit op te lossen. Als dat niet lukt, "
|
1116 |
#~ "kan je je tot de support forums richten voor hulp."
|
|
|
1117 |
#~ msgid "This page loaded in %1$s seconds with %2$s database queries."
|
1118 |
#~ msgstr "Deze pagina laadde in %1$s seconden met %2$s database queries."
|
|
|
1119 |
#~ msgid ": Page %1$s"
|
1120 |
#~ msgstr ":Pagina %1$s"
|
|
|
1121 |
#~ msgid "Search results for "%1$s.""
|
1122 |
#~ msgstr "Zoekresultaten voor "%1$s.""
|
|
|
1123 |
#~ msgid "Archive for %1$s"
|
1124 |
#~ msgstr "Archief voor %1$s"
|
|
|
1125 |
#~ msgid "Archive for week %1$s of %2$s"
|
1126 |
#~ msgstr "Archief voor week %1$s van %2$s"
|
|
|
1127 |
#~ msgid "Comment on "%1$s""
|
1128 |
#~ msgstr "Reactie op "%1$s""
|
|
|
1129 |
#~ msgid "Primary Home"
|
1130 |
#~ msgstr "Primair Home"
|
|
|
1131 |
#~ msgid "Primary Author"
|
1132 |
#~ msgstr "Primaire Auteur"
|
|
|
1133 |
#~ msgid "Primary Category"
|
1134 |
#~ msgstr "Primaire Rubriek"
|
|
|
1135 |
#~ msgid "Primary Date"
|
1136 |
#~ msgstr "Primaire Datum"
|
|
|
1137 |
#~ msgid "Primary Page"
|
1138 |
#~ msgstr "Primaire Pagina"
|
|
|
1139 |
#~ msgid "Primary Search"
|
1140 |
#~ msgstr "Primaire Zoekresultaten"
|
1141 |
-
|
1142 |
-
#~ msgstr "Primaire EnkelvoudigBericht"
|
1143 |
#~ msgid "Primary Tag"
|
1144 |
#~ msgstr "Primaire Tag"
|
|
|
1145 |
#~ msgid "Primary 404"
|
1146 |
#~ msgstr "Primaire 404"
|
|
|
1147 |
#~ msgid "Secondary Home"
|
1148 |
#~ msgstr "Secundaire Home"
|
|
|
1149 |
#~ msgid "Secondary Author"
|
1150 |
#~ msgstr "Secundaire Auteur"
|
|
|
1151 |
#~ msgid "Secondary Category"
|
1152 |
#~ msgstr "Secundaire Rubriek"
|
|
|
1153 |
#~ msgid "Secondary Date"
|
1154 |
#~ msgstr "Secundaire Datum "
|
|
|
1155 |
#~ msgid "Secondary Page"
|
1156 |
#~ msgstr "Secundaire Pagina"
|
|
|
1157 |
#~ msgid "Secondary Search"
|
1158 |
#~ msgstr "Secundaire Zoekresultaten"
|
|
|
1159 |
#~ msgid "Secondary Single"
|
1160 |
#~ msgstr "Secundaire EnkelvoudigBericht"
|
|
|
1161 |
#~ msgid "Secondary Tag"
|
1162 |
#~ msgstr "Secundaire Tag"
|
|
|
1163 |
#~ msgid "Secondary 404"
|
1164 |
#~ msgstr "Secundaire 404"
|
|
|
1165 |
#~ msgid "Subsidiary Default"
|
1166 |
#~ msgstr "Bijkomende Standaard"
|
|
|
1167 |
#~ msgid "RSS 2.0"
|
1168 |
#~ msgstr "RSS 2.0"
|
|
|
1169 |
#~ msgid "RSS .92"
|
1170 |
#~ msgstr "RSS .92"
|
|
|
1171 |
#~ msgid "Atom 0.3"
|
1172 |
#~ msgstr "Atom 0.3"
|
|
|
1173 |
#~ msgid "Subsidiary Home"
|
1174 |
#~ msgstr "Subsidiair Home"
|
|
|
1175 |
#~ msgid "Previous Page"
|
1176 |
#~ msgstr "Vorige pagina"
|
|
|
1177 |
#~ msgid "Next Page"
|
1178 |
#~ msgstr "Volgende pagina"
|
|
|
1179 |
#~ msgid "Related Posts"
|
1180 |
#~ msgstr "Gerelateerde berichten"
|
|
|
1181 |
#~ msgid "Logout"
|
1182 |
#~ msgstr "Afmelden"
|
|
|
1183 |
#~ msgid "Select Year"
|
1184 |
#~ msgstr "Selecteer jaar"
|
|
|
1185 |
#~ msgid "Select Week"
|
1186 |
#~ msgstr "Selecteer week"
|
|
|
1187 |
#~ msgid "Select Day"
|
1188 |
#~ msgstr "Selecteer dag"
|
|
|
1189 |
#~ msgid "Select Post"
|
1190 |
#~ msgstr "Selecteer bericht"
|
|
|
1191 |
#~ msgid "Type:"
|
1192 |
#~ msgstr "Type:"
|
|
|
1193 |
#~ msgid "Format:"
|
1194 |
#~ msgstr "Format:"
|
|
|
1195 |
#~ msgid "Before:"
|
1196 |
#~ msgstr "Voor:"
|
|
|
1197 |
#~ msgid "After:"
|
1198 |
#~ msgstr "Na:"
|
|
|
1199 |
#~ msgid "Show post count?"
|
1200 |
#~ msgstr "Toon aantal berichten?"
|
|
|
1201 |
#~ msgid ""
|
1202 |
#~ "An advanced widget that gives you total control over the output of your "
|
1203 |
#~ "archives."
|
1204 |
#~ msgstr ""
|
1205 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1206 |
#~ "van je archieven."
|
|
|
1207 |
#~ msgid "Bookmarks"
|
1208 |
#~ msgstr "Favorieten"
|
|
|
1209 |
#~ msgid "Categories:"
|
1210 |
#~ msgstr "Rubrieken:"
|
|
|
1211 |
#~ msgid "Exclude Categories:"
|
1212 |
#~ msgstr "Uit te sluiten rubrieken:"
|
|
|
1213 |
#~ msgid "Category:"
|
1214 |
#~ msgstr "Rubriek:"
|
|
|
1215 |
#~ msgid "Category Order:"
|
1216 |
#~ msgstr "Rubriek volgorde:"
|
|
|
1217 |
#~ msgid "Order Categories By:"
|
1218 |
#~ msgstr "Sorteer rubrieken op:"
|
|
|
1219 |
#~ msgid "Include Bookmarks:"
|
1220 |
#~ msgstr "Inclusief favorieten:"
|
|
|
1221 |
#~ msgid "Exclude Bookmarks:"
|
1222 |
#~ msgstr "Exclusief favorieten:"
|
|
|
1223 |
#~ msgid "Bookmarks Order:"
|
1224 |
#~ msgstr "Favorieten volgorde:"
|
|
|
1225 |
#~ msgid "Order Bookmarks By:"
|
1226 |
#~ msgstr "Sorteer favorieten op:"
|
|
|
1227 |
#~ msgid "Between (Bookmark/Description):"
|
1228 |
#~ msgstr "Tussen (Favoriet/beschrijving)"
|
|
|
1229 |
#~ msgid "Categorize?"
|
1230 |
#~ msgstr "Rubriceer?"
|
|
|
1231 |
#~ msgid "Show description?"
|
1232 |
#~ msgstr "Beschrijving tonen?"
|
|
|
1233 |
#~ msgid "Hide invisible bookmarks?"
|
1234 |
#~ msgstr "Onzichtbare favorieten verbergen?"
|
|
|
1235 |
#~ msgid "Show private categories?"
|
1236 |
#~ msgstr "Private rubrieken tonen?"
|
|
|
1237 |
#~ msgid "Show rating?"
|
1238 |
#~ msgstr "Waardering tonen?"
|
|
|
1239 |
#~ msgid "Show images?"
|
1240 |
#~ msgstr "Afbeeldingen tonen?"
|
|
|
1241 |
#~ msgid ""
|
1242 |
#~ "An advanced widget that gives you total control over the output of your "
|
1243 |
#~ "bookmarks (links)."
|
1244 |
#~ msgstr ""
|
1245 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1246 |
#~ "van je favorieten (links)."
|
|
|
1247 |
#~ msgid "RSS"
|
1248 |
#~ msgstr "RSS"
|
|
|
1249 |
#~ msgid "Depth:"
|
1250 |
#~ msgstr "Diepte:"
|
|
|
1251 |
#~ msgid "Number:"
|
1252 |
#~ msgstr "Aantal:"
|
|
|
1253 |
#~ msgid "Child Of:"
|
1254 |
#~ msgstr "'Child' van :"
|
1255 |
-
|
1256 |
-
#~ msgstr "Feed afbeelding:"
|
1257 |
#~ msgid "Hierarchical?"
|
1258 |
#~ msgstr "Hierarchisch?"
|
|
|
1259 |
#~ msgid "Show RSS feed?"
|
1260 |
#~ msgstr "Toon RSS feed?"
|
|
|
1261 |
#~ msgid "Use description for title?"
|
1262 |
#~ msgstr "Omschrijving gebruiken voor de titel?"
|
|
|
1263 |
#~ msgid "Show last updated?"
|
1264 |
#~ msgstr "Toon laatste aanpassing?"
|
|
|
1265 |
#~ msgid "Show count?"
|
1266 |
#~ msgstr "Toon aantal?"
|
|
|
1267 |
#~ msgid "Hide empty?"
|
1268 |
#~ msgstr "Lege verbergen?"
|
|
|
1269 |
#~ msgid ""
|
1270 |
#~ "An advanced widget that gives you total control over the output of your "
|
1271 |
#~ "category links."
|
1272 |
#~ msgstr ""
|
1273 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1274 |
#~ "van je rubrieken."
|
|
|
1275 |
#~ msgid "Categories"
|
1276 |
#~ msgstr "Rubrieken"
|
|
|
1277 |
#~ msgid "Sort Order:"
|
1278 |
#~ msgstr "Sorteervolgorde"
|
|
|
1279 |
#~ msgid "Meta Key:"
|
1280 |
#~ msgstr "Meta Key:"
|
|
|
1281 |
#~ msgid "Meta Value:"
|
1282 |
#~ msgstr "Meta Value:"
|
|
|
1283 |
#~ msgid "Show home?"
|
1284 |
#~ msgstr "Toon home?"
|
|
|
1285 |
#~ msgid "Show date?"
|
1286 |
#~ msgstr "Toon datum?"
|
|
|
1287 |
#~ msgid "Search Text:"
|
1288 |
#~ msgstr "Zoek tekst:"
|
|
|
1289 |
#~ msgid "Use theme's search form?"
|
1290 |
#~ msgstr "Zoekformulier van thema gebruiken?"
|
|
|
1291 |
#~ msgid ""
|
1292 |
#~ "An advanced widget that gives you total control over the output of your "
|
1293 |
#~ "search form."
|
1294 |
#~ msgstr ""
|
1295 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1296 |
#~ "van je zoekformulier."
|
|
|
1297 |
#~ msgid "Largest:"
|
1298 |
#~ msgstr "Grootste:"
|
|
|
1299 |
#~ msgid "Smallest:"
|
1300 |
#~ msgstr "Kleinste:"
|
|
|
1301 |
#~ msgid "Unit:"
|
1302 |
#~ msgstr "Eenheid:"
|
|
|
1303 |
#~ msgid ""
|
1304 |
#~ "An advanced widget that gives you total control over the output of your "
|
1305 |
#~ "tags."
|
1306 |
#~ msgstr ""
|
1307 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1308 |
#~ "van je tags."
|
1309 |
-
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Members WordPress Plugin\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: 2011-06-03 12:36-0600\n"
|
6 |
+
"PO-Revision-Date: 2011-06-03 12:38-0600\n"
|
7 |
"Last-Translator: Justin Tadlock <justin@justintadlock.com>\n"
|
8 |
"Language-Team: <justin@justintadlock.com>\n"
|
9 |
"MIME-Version: 1.0\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
"X-Poedit-Language: English\n"
|
13 |
"X-Poedit-Country: UNITED STATES\n"
|
14 |
+
"X-Poedit-KeywordsList: _e;__;esc_attr__;esc_attr_e;_n;_x;esc_html__;esc_html_e\n"
|
15 |
"X-Poedit-Basepath: ../\n"
|
16 |
"X-Poedit-SearchPath-0: .\n"
|
17 |
|
18 |
+
#: members.php:191
|
19 |
+
#: admin/meta-box-plugin-settings.php:30
|
20 |
+
#, fuzzy
|
21 |
+
msgid "Role Manager"
|
22 |
+
msgstr "Naam"
|
23 |
+
|
24 |
+
#: admin/admin.php:44
|
25 |
+
#: admin/roles-list-table.php:57
|
26 |
+
#, fuzzy
|
27 |
+
msgid "Roles"
|
28 |
+
msgstr "Reset"
|
29 |
+
|
30 |
+
#: admin/admin.php:47
|
31 |
+
#: admin/role-new.php:44
|
32 |
+
#, fuzzy
|
33 |
+
msgid "Add New Role"
|
34 |
+
msgstr "Voeg gebruiker toe"
|
35 |
|
36 |
+
#: admin/admin.php:135
|
37 |
+
msgid "<strong>Role Manager:</strong> This feature allows you to manage roles on your site by giving you the ability to create, edit, and delete any role. Note that changes to roles do not change settings for the Members plugin. You are literally changing data in your WordPress database. This plugin feature merely provides an interface for you to make these changes."
|
38 |
msgstr ""
|
39 |
|
40 |
+
#: admin/admin.php:136
|
41 |
+
msgid "<strong>Content Permissions:</strong> This feature adds a meta box to the post edit screen that allows you to grant permissions for who can read the post content based on the user's role. Only users of roles with the <code>restrict_content</code> capability will be able to use this component."
|
42 |
msgstr ""
|
43 |
|
44 |
+
#: admin/admin.php:137
|
45 |
+
msgid "<strong>Sidebar Widgets:</strong> This feature creates additional widgets for use in your theme's sidebars. You can access them by clicking Widgets in the menu."
|
46 |
msgstr ""
|
47 |
|
48 |
+
#: admin/admin.php:138
|
49 |
+
msgid "<strong>Private Site:</strong> This feature allows you to redirect all users who are not logged into the site to the login page, creating an entirely private site. You may also replace your feed content with a custom error message."
|
50 |
msgstr ""
|
51 |
|
52 |
+
#: admin/admin.php:140
|
53 |
+
#: admin/admin.php:167
|
54 |
+
#: admin/admin.php:183
|
55 |
+
msgid "For more information:"
|
56 |
msgstr ""
|
57 |
|
58 |
+
#: admin/admin.php:143
|
59 |
+
#: admin/admin.php:171
|
60 |
+
#: admin/admin.php:187
|
61 |
+
#, fuzzy
|
62 |
+
msgid "Documentation"
|
63 |
+
msgstr "Thema Documentatie"
|
64 |
+
|
65 |
+
#: admin/admin.php:144
|
66 |
+
#: admin/admin.php:172
|
67 |
+
#: admin/admin.php:188
|
68 |
+
#, fuzzy
|
69 |
+
msgid "Support Forums"
|
70 |
+
msgstr "Bezoek de support forums."
|
71 |
+
|
72 |
+
#: admin/admin.php:156
|
73 |
+
msgid "This screen allows you to edit the capabilities given to the role. You can tick the checkbox next to a capability to add the capability to the role. You can untick the checkbox next to a capability to remove a capability from the role. You can also add as many custom capabilities as you need in the Custom Capabilities section."
|
74 |
msgstr ""
|
75 |
|
76 |
+
#: admin/admin.php:157
|
77 |
+
msgid "Capabilities are both powerful and dangerous tools. You should not add or remove a capability to a role unless you understand what permission you are granting or removing."
|
78 |
msgstr ""
|
79 |
|
80 |
+
#: admin/admin.php:162
|
81 |
+
msgid "This screen lists all the user roles available on this site. Roles are given to users as a way to \"group\" them. Roles are made up of capabilities (permissions), which decide what functions users of each role can perform on the site. From this screen, you can manage these roles and their capabilities."
|
82 |
msgstr ""
|
83 |
|
84 |
+
#: admin/admin.php:163
|
85 |
+
msgid "To add a role to a user, click Users in the menu. To create a new role, click the Add New button at the top of the screen or Add New Role under the Users menu."
|
86 |
msgstr ""
|
87 |
|
88 |
+
#: admin/admin.php:170
|
89 |
+
#: admin/admin.php:186
|
90 |
+
msgid "Users, Roles, and Capabilities"
|
91 |
+
msgstr ""
|
92 |
|
93 |
+
#: admin/admin.php:180
|
94 |
+
msgid "This screen allows you to create a new user role for your site. You must input a unique role name and role label. You can also grant capabilities (permissions) to the new role. Capabilities are both powerful and dangerous tools. You should not add a capability to a role unless you understand what permission you are granting."
|
95 |
msgstr ""
|
96 |
|
97 |
+
#: admin/admin.php:181
|
98 |
+
msgid "To add a role to a user, click Users in the menu. To edit roles, click Roles under the Users menu."
|
99 |
msgstr ""
|
100 |
|
101 |
+
#: admin/admin.php:202
|
102 |
+
msgid "Role deleted."
|
103 |
msgstr ""
|
104 |
|
105 |
+
#: admin/admin.php:211
|
106 |
+
msgid "Selected roles deleted."
|
107 |
+
msgstr ""
|
|
|
108 |
|
109 |
+
#: admin/meta-box-plugin-settings.php:21
|
110 |
+
msgid "About"
|
111 |
+
msgstr ""
|
|
|
112 |
|
113 |
+
#: admin/meta-box-plugin-settings.php:24
|
114 |
+
msgid "Like this plugin?"
|
115 |
+
msgstr ""
|
|
|
116 |
|
117 |
+
#: admin/meta-box-plugin-settings.php:27
|
118 |
#, fuzzy
|
119 |
+
msgid "Support"
|
120 |
+
msgstr "Thema Ondersteuning:"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
|
122 |
+
#: admin/meta-box-plugin-settings.php:33
|
123 |
+
#: admin/meta-box-post-content-permissions.php:28
|
124 |
+
msgid "Content Permissions"
|
125 |
msgstr ""
|
126 |
|
127 |
+
#: admin/meta-box-plugin-settings.php:36
|
128 |
#, fuzzy
|
129 |
+
msgid "Sidebar Widgets"
|
130 |
+
msgstr "Widgets invoegen:"
|
131 |
|
132 |
+
#: admin/meta-box-plugin-settings.php:39
|
|
|
133 |
#, fuzzy
|
134 |
+
msgid "Private Site"
|
135 |
+
msgstr "Primaire EnkelvoudigBericht"
|
136 |
|
137 |
+
#: admin/meta-box-plugin-settings.php:52
|
138 |
+
#, fuzzy
|
139 |
+
msgid "Version:"
|
140 |
+
msgstr "Thema versie:"
|
141 |
|
142 |
+
#: admin/meta-box-plugin-settings.php:55
|
143 |
#, fuzzy
|
144 |
+
msgid "Description:"
|
145 |
+
msgstr "Beschrijving"
|
146 |
|
147 |
+
#: admin/meta-box-plugin-settings.php:69
|
148 |
+
msgid "Here's how you can give back:"
|
149 |
msgstr ""
|
150 |
|
151 |
+
#: admin/meta-box-plugin-settings.php:72
|
152 |
+
msgid "Members on the WordPress plugin repository"
|
153 |
msgstr ""
|
154 |
|
155 |
+
#: admin/meta-box-plugin-settings.php:72
|
156 |
+
msgid "Give the plugin a good rating."
|
157 |
msgstr ""
|
158 |
|
159 |
+
#: admin/meta-box-plugin-settings.php:73
|
160 |
+
msgid "Donate via PayPal"
|
161 |
msgstr ""
|
162 |
|
163 |
+
#: admin/meta-box-plugin-settings.php:73
|
164 |
+
msgid "Donate a few dollars."
|
165 |
msgstr ""
|
166 |
|
167 |
+
#: admin/meta-box-plugin-settings.php:74
|
168 |
+
msgid "Justin Tadlock's Amazon Wish List"
|
169 |
msgstr ""
|
170 |
|
171 |
+
#: admin/meta-box-plugin-settings.php:74
|
172 |
+
msgid "Get me something from my wish list."
|
173 |
+
msgstr ""
|
|
|
174 |
|
175 |
+
#: admin/meta-box-plugin-settings.php:86
|
|
|
|
|
176 |
#, php-format
|
177 |
+
msgid "Support for this plugin is provided via the support forums at %1$s. If you need any help using it, please ask your support questions there."
|
178 |
msgstr ""
|
179 |
|
180 |
+
#: admin/meta-box-plugin-settings.php:86
|
181 |
#, fuzzy
|
182 |
+
msgid "Theme Hybrid Support Forums"
|
183 |
+
msgstr "Thema Ondersteuning:"
|
184 |
|
185 |
+
#: admin/meta-box-plugin-settings.php:86
|
186 |
+
#, fuzzy
|
187 |
+
msgid "Theme Hybrid"
|
188 |
+
msgstr "Hybrid"
|
189 |
+
|
190 |
+
#: admin/meta-box-plugin-settings.php:99
|
191 |
+
msgid "Enable the role manager."
|
192 |
msgstr ""
|
193 |
|
194 |
+
#: admin/meta-box-plugin-settings.php:102
|
195 |
+
msgid "Your roles and capabilities will not revert back to their previous settings after deactivating or uninstalling this plugin, so use this feature wisely."
|
|
|
|
|
196 |
msgstr ""
|
197 |
|
198 |
+
#: admin/meta-box-plugin-settings.php:116
|
199 |
+
msgid "Enable the content permissions feature."
|
200 |
msgstr ""
|
201 |
|
202 |
+
#: admin/meta-box-plugin-settings.php:120
|
203 |
+
msgid "Default post error message:"
|
204 |
msgstr ""
|
205 |
|
206 |
+
#: admin/meta-box-plugin-settings.php:122
|
207 |
+
msgid "You can use <abbr title=\"Hypertext Markup Language\">HTML</abbr> and/or shortcodes to create a custom error message for users that don't have permission to view posts."
|
208 |
msgstr ""
|
209 |
|
210 |
+
#: admin/meta-box-plugin-settings.php:136
|
211 |
+
msgid "Enable the login form widget."
|
212 |
+
msgstr ""
|
|
|
213 |
|
214 |
+
#: admin/meta-box-plugin-settings.php:141
|
215 |
+
msgid "Enable the users widget."
|
216 |
msgstr ""
|
217 |
|
218 |
+
#: admin/meta-box-plugin-settings.php:155
|
219 |
+
msgid "Redirect all logged-out users to the login page before allowing them to view the site."
|
220 |
msgstr ""
|
221 |
|
222 |
+
#: admin/meta-box-plugin-settings.php:160
|
223 |
+
msgid "Show error message for feed items."
|
224 |
msgstr ""
|
225 |
|
226 |
+
#: admin/meta-box-plugin-settings.php:164
|
227 |
#, fuzzy
|
228 |
+
msgid "Feed error message:"
|
229 |
+
msgstr "Feed afbeelding:"
|
230 |
|
231 |
+
#: admin/meta-box-plugin-settings.php:167
|
232 |
+
msgid "You can use <abbr title=\"Hypertext Markup Language\">HTML</abbr> and/or shortcodes to create a custom error message to display instead of feed item content."
|
233 |
+
msgstr ""
|
|
|
234 |
|
235 |
+
#: admin/meta-box-post-content-permissions.php:51
|
236 |
+
msgid "Limit access to this post's content to users of the selected roles."
|
|
|
237 |
msgstr ""
|
238 |
|
239 |
+
#: admin/meta-box-post-content-permissions.php:75
|
240 |
+
#, php-format
|
241 |
+
msgid "If no roles are selected, everyone can view the content. The post author, any users who can edit this post, and users with the %s capability can view the content regardless of role."
|
|
|
242 |
msgstr ""
|
243 |
|
244 |
+
#: admin/meta-box-post-content-permissions.php:79
|
245 |
+
msgid "Custom error messsage:"
|
246 |
+
msgstr ""
|
247 |
+
|
248 |
+
#: admin/meta-box-post-content-permissions.php:82
|
249 |
+
msgid "Message shown to users that do no have permission to view the post."
|
250 |
+
msgstr ""
|
251 |
|
252 |
+
#: admin/role-edit.php:67
|
|
|
253 |
#, fuzzy
|
254 |
+
msgid "Edit Role"
|
255 |
+
msgstr "Bewerk"
|
256 |
|
257 |
+
#: admin/role-edit.php:68
|
258 |
+
#: admin/roles-list-table.php:58
|
259 |
+
msgid "Add New"
|
260 |
msgstr ""
|
261 |
|
262 |
+
#: admin/role-edit.php:71
|
|
|
263 |
#, fuzzy
|
264 |
+
msgid "Role updated."
|
265 |
+
msgstr "Aanpassingen tonen?"
|
|
|
|
|
|
|
|
|
266 |
|
267 |
+
#: admin/role-edit.php:71
|
268 |
+
msgid "← Back to Roles"
|
|
|
269 |
msgstr ""
|
270 |
|
271 |
+
#: admin/role-edit.php:85
|
272 |
+
#: admin/role-new.php:60
|
273 |
+
#: admin/roles-list-table.php:111
|
274 |
+
#, fuzzy
|
275 |
+
msgid "Role Name"
|
276 |
+
msgstr "Naam"
|
277 |
+
|
278 |
+
#: admin/role-edit.php:94
|
279 |
+
#: admin/roles-list-table.php:113
|
280 |
+
#: admin/roles-list-table.php:123
|
281 |
+
msgid "Capabilities"
|
282 |
msgstr ""
|
283 |
|
284 |
+
#: admin/role-edit.php:112
|
285 |
+
msgid "Custom Capabilities"
|
286 |
msgstr ""
|
287 |
|
288 |
+
#: admin/role-edit.php:117
|
289 |
+
msgid "Add New Capability"
|
|
|
|
|
|
|
290 |
msgstr ""
|
291 |
|
292 |
+
#: admin/role-edit.php:127
|
293 |
+
#, fuzzy
|
294 |
+
msgid "Update Role"
|
295 |
+
msgstr "Bewerk"
|
296 |
+
|
297 |
+
#: admin/role-new.php:46
|
298 |
+
#, fuzzy, php-format
|
299 |
+
msgid "The %s role has been created."
|
300 |
+
msgstr "Er is een gebruikersaccount aangemaakt voor %1$s."
|
301 |
+
|
302 |
+
#: admin/role-new.php:65
|
303 |
+
msgid "<strong>Required:</strong> The role name should be unique and contain only alphanumeric characters and underscores."
|
304 |
msgstr ""
|
305 |
|
306 |
+
#: admin/role-new.php:71
|
307 |
+
#: admin/roles-list-table.php:110
|
308 |
+
#: admin/roles-list-table.php:120
|
309 |
+
#, fuzzy
|
310 |
+
msgid "Role Label"
|
311 |
+
msgstr "Zoek label:"
|
312 |
+
|
313 |
+
#: admin/role-new.php:76
|
314 |
+
msgid "<strong>Required:</strong> The role label is used to represent your role in the WordPress admin."
|
315 |
msgstr ""
|
316 |
|
317 |
+
#: admin/role-new.php:82
|
318 |
#, fuzzy
|
319 |
+
msgid "Role Capabilities"
|
320 |
+
msgstr "Aanpassingen tonen?"
|
321 |
|
322 |
+
#: admin/role-new.php:86
|
323 |
+
msgid "<strong>Optional:</strong> Select the capabilities this role should have. These may be updated later."
|
324 |
msgstr ""
|
325 |
|
326 |
+
#: admin/role-new.php:102
|
327 |
+
#, fuzzy
|
328 |
+
msgid "Add Role"
|
329 |
+
msgstr "Bewerk"
|
330 |
+
|
331 |
+
#: admin/roles-list-table.php:70
|
332 |
+
msgid "All"
|
333 |
msgstr ""
|
334 |
|
335 |
+
#: admin/roles-list-table.php:71
|
336 |
+
#, fuzzy
|
337 |
+
msgid "Has Users"
|
338 |
+
msgstr "Gebruikersnaam"
|
339 |
+
|
340 |
+
#: admin/roles-list-table.php:72
|
341 |
+
#, fuzzy
|
342 |
+
msgid "No Users"
|
343 |
+
msgstr "Gebruikersnaam"
|
344 |
+
|
345 |
+
#: admin/roles-list-table.php:83
|
346 |
+
#: admin/roles-list-table.php:215
|
347 |
+
msgid "Bulk Actions"
|
348 |
msgstr ""
|
349 |
|
350 |
+
#: admin/roles-list-table.php:86
|
351 |
+
#: admin/roles-list-table.php:158
|
352 |
+
#: admin/roles-list-table.php:218
|
353 |
+
msgid "Delete"
|
354 |
msgstr ""
|
355 |
|
356 |
+
#: admin/roles-list-table.php:91
|
357 |
+
#: admin/roles-list-table.php:223
|
358 |
#, fuzzy
|
359 |
+
msgid "Apply"
|
360 |
+
msgstr "Reageer"
|
361 |
|
362 |
+
#: admin/roles-list-table.php:98
|
363 |
+
#: admin/roles-list-table.php:230
|
364 |
+
#, php-format
|
365 |
+
msgid "%s item"
|
366 |
msgstr ""
|
367 |
|
368 |
+
#: admin/roles-list-table.php:112
|
369 |
+
#: admin/roles-list-table.php:122
|
370 |
+
#, fuzzy
|
371 |
+
msgid "Users"
|
372 |
+
msgstr "Gebruikersnaam"
|
373 |
|
374 |
+
#: admin/roles-list-table.php:121
|
375 |
+
#: includes/admin-bar.php:29
|
376 |
+
msgid "Role"
|
377 |
msgstr ""
|
378 |
|
379 |
+
#: admin/roles-list-table.php:146
|
380 |
+
#: admin/roles-list-table.php:154
|
381 |
#, fuzzy, php-format
|
382 |
+
msgid "Edit the %s role"
|
383 |
+
msgstr "Bewerk"
|
384 |
+
|
385 |
+
#: admin/roles-list-table.php:154
|
386 |
+
msgid "Edit"
|
387 |
+
msgstr "Bewerk"
|
388 |
+
|
389 |
+
#: admin/roles-list-table.php:158
|
390 |
+
#, php-format
|
391 |
+
msgid "Delete the %s role"
|
392 |
+
msgstr ""
|
393 |
|
394 |
+
#: admin/roles-list-table.php:162
|
395 |
+
msgid "Change default role"
|
396 |
msgstr ""
|
397 |
|
398 |
+
#: admin/roles-list-table.php:162
|
399 |
+
msgid "Default Role"
|
400 |
msgstr ""
|
401 |
|
402 |
+
#: admin/roles-list-table.php:166
|
403 |
+
#: admin/roles-list-table.php:182
|
404 |
#, php-format
|
405 |
+
msgid "View all users with the %s role"
|
406 |
msgstr ""
|
407 |
|
408 |
+
#: admin/roles-list-table.php:166
|
409 |
+
msgid "View Users"
|
410 |
msgstr ""
|
411 |
|
412 |
+
#: admin/roles-list-table.php:182
|
413 |
+
#: admin/roles-list-table.php:184
|
414 |
+
#, fuzzy, php-format
|
415 |
+
msgid "%s User"
|
416 |
+
msgstr "Voeg gebruiker toe"
|
417 |
+
|
418 |
+
#: admin/roles-list-table.php:194
|
419 |
+
#, php-format
|
420 |
+
msgid "%s Capability"
|
421 |
msgstr ""
|
422 |
|
423 |
+
#: admin/settings.php:28
|
424 |
#, fuzzy
|
425 |
+
msgid "Members Settings"
|
426 |
+
msgstr "Hybrid Settings"
|
427 |
|
428 |
+
#: admin/settings.php:28
|
429 |
+
#, fuzzy
|
430 |
+
msgid "Members"
|
431 |
+
msgstr "Hybrid Settings"
|
432 |
|
433 |
+
#: admin/settings.php:66
|
434 |
+
msgid "Sorry, but you do not have permission to view this content."
|
435 |
msgstr ""
|
436 |
|
437 |
+
#: admin/settings.php:67
|
438 |
+
msgid "You must be logged into the site to view this content."
|
439 |
msgstr ""
|
440 |
|
441 |
+
#: admin/settings.php:145
|
442 |
+
#, fuzzy
|
443 |
+
msgid "Members Plugin Settings"
|
444 |
+
msgstr "Hybrid Settings"
|
445 |
+
|
446 |
+
#: admin/settings.php:160
|
447 |
+
#, fuzzy
|
448 |
+
msgid "Update Settings"
|
449 |
+
msgstr "Footer Settings:"
|
450 |
|
451 |
+
#: includes/widget-login-form.php:26
|
|
|
452 |
msgid "A widget that allows users to log into your site."
|
453 |
msgstr ""
|
454 |
|
455 |
+
#: includes/widget-login-form.php:37
|
|
|
456 |
#, fuzzy
|
457 |
msgid "Login Form"
|
458 |
msgstr "Aanmelden"
|
459 |
|
460 |
+
#: includes/widget-login-form.php:158
|
461 |
+
#: includes/widget-login-form.php:161
|
462 |
+
#, fuzzy
|
463 |
+
msgid "Log In"
|
464 |
+
msgstr "Aanmelden"
|
465 |
+
|
466 |
+
#: includes/widget-login-form.php:159
|
467 |
+
#, fuzzy
|
468 |
+
msgid "Username"
|
469 |
+
msgstr "Gebruikersnaam"
|
470 |
+
|
471 |
+
#: includes/widget-login-form.php:160
|
472 |
msgid "Password"
|
473 |
msgstr "Wachtwoord"
|
474 |
|
475 |
+
#: includes/widget-login-form.php:162
|
|
|
476 |
#, fuzzy
|
477 |
+
msgid "Remember Me"
|
478 |
msgstr "Herinner deze gegevens."
|
479 |
|
480 |
+
#: includes/widget-login-form.php:172
|
|
|
481 |
msgid "Please log into the site."
|
482 |
msgstr ""
|
483 |
|
484 |
+
#: includes/widget-login-form.php:173
|
|
|
485 |
msgid "You are currently logged in."
|
486 |
msgstr ""
|
487 |
|
488 |
+
#: includes/widget-login-form.php:185
|
489 |
+
#: includes/widget-users.php:157
|
|
|
490 |
msgid "Title:"
|
491 |
msgstr "Titel"
|
492 |
|
493 |
+
#: includes/widget-login-form.php:235
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
494 |
#, fuzzy
|
495 |
+
msgid "\"Remember me\" checkbox?"
|
496 |
+
msgstr "Herinner deze gegevens."
|
|
|
|
|
|
|
|
|
|
|
497 |
|
498 |
+
#: includes/widget-login-form.php:239
|
|
|
499 |
#, fuzzy
|
500 |
+
msgid "Check \"remember me\"?"
|
501 |
msgstr "Herinner deze gegevens."
|
502 |
|
503 |
+
#: includes/widget-login-form.php:243
|
504 |
+
msgid "Display avatar?"
|
505 |
+
msgstr ""
|
|
|
506 |
|
507 |
+
#: includes/widget-login-form.php:246
|
508 |
+
msgid "Logged out text:"
|
509 |
+
msgstr ""
|
510 |
|
511 |
+
#: includes/widget-login-form.php:251
|
512 |
+
msgid "Logged in text:"
|
513 |
+
msgstr ""
|
514 |
|
515 |
+
#: includes/widget-users.php:26
|
516 |
+
msgid "Provides the ability to list the users of the site."
|
517 |
+
msgstr ""
|
518 |
|
519 |
+
#: includes/widget-users.php:145
|
520 |
+
msgid "Ascending"
|
521 |
+
msgstr ""
|
522 |
|
523 |
+
#: includes/widget-users.php:145
|
524 |
+
msgid "Descending"
|
525 |
+
msgstr ""
|
526 |
|
527 |
+
#: includes/widget-users.php:146
|
528 |
#, fuzzy
|
529 |
+
msgid "Display Name"
|
530 |
+
msgstr "Voornaam"
|
531 |
|
532 |
+
#: includes/widget-users.php:146
|
533 |
+
msgid "Email"
|
534 |
+
msgstr "Email"
|
|
|
|
|
|
|
|
|
535 |
|
536 |
+
#: includes/widget-users.php:146
|
537 |
+
msgid "ID"
|
538 |
msgstr ""
|
539 |
|
540 |
+
#: includes/widget-users.php:146
|
541 |
#, fuzzy
|
542 |
+
msgid "Nice Name"
|
543 |
+
msgstr "Naam"
|
544 |
|
545 |
+
#: includes/widget-users.php:146
|
|
|
546 |
#, fuzzy
|
547 |
+
msgid "Post Count"
|
548 |
+
msgstr "Niet gevonden"
|
|
|
|
|
|
|
|
|
|
|
|
|
549 |
|
550 |
+
#: includes/widget-users.php:146
|
551 |
+
#, fuzzy
|
552 |
+
msgid "Registered"
|
553 |
+
msgstr "Registreer"
|
554 |
|
555 |
+
#: includes/widget-users.php:146
|
556 |
+
msgid "URL"
|
557 |
msgstr ""
|
558 |
|
559 |
+
#: includes/widget-users.php:146
|
|
|
|
|
|
|
|
|
560 |
#, fuzzy
|
561 |
+
msgid "Login"
|
562 |
+
msgstr "Aanmelden"
|
563 |
|
|
|
564 |
#, fuzzy
|
565 |
+
#~ msgid "Welcome, %1$s!"
|
566 |
+
#~ msgstr "Week %1$s"
|
567 |
|
568 |
+
#, fuzzy
|
569 |
+
#~ msgid "Password:"
|
570 |
+
#~ msgstr "Wachtwoord"
|
|
|
571 |
|
572 |
+
#, fuzzy
|
573 |
+
#~ msgid "Select Components"
|
574 |
+
#~ msgstr "Selecteer maand"
|
575 |
|
576 |
+
#, fuzzy
|
577 |
+
#~ msgid "Component"
|
578 |
+
#~ msgstr "Reactie"
|
579 |
|
580 |
+
#, fuzzy
|
581 |
+
#~ msgid "Activate"
|
582 |
+
#~ msgstr "Archieven"
|
583 |
|
584 |
+
#, fuzzy
|
585 |
+
#~ msgid "Active"
|
586 |
+
#~ msgstr "Archieven"
|
587 |
|
588 |
+
#, fuzzy
|
589 |
+
#~ msgid "Inactive"
|
590 |
+
#~ msgstr "Archieven"
|
591 |
|
592 |
+
#, fuzzy
|
593 |
+
#~ msgid "Username Label:"
|
594 |
+
#~ msgstr "Gebruikersnaam*"
|
|
|
595 |
|
596 |
+
#, fuzzy
|
597 |
+
#~ msgid "Password Label:"
|
598 |
+
#~ msgstr "Wachtwoord*"
|
599 |
|
600 |
+
#~ msgid "Submit Text:"
|
601 |
+
#~ msgstr "Verstuur tekst:"
|
|
|
602 |
|
603 |
+
#, fuzzy
|
604 |
+
#~ msgid "Remember User Text:"
|
605 |
+
#~ msgstr "Herinner deze gegevens."
|
606 |
|
607 |
+
#, fuzzy
|
608 |
+
#~ msgid ""
|
609 |
+
#~ "An advanced widget that gives you total control over the output of your "
|
610 |
+
#~ "user lists."
|
611 |
+
#~ msgstr ""
|
612 |
+
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
613 |
+
#~ "van je pagina-links."
|
614 |
|
615 |
+
#~ msgid "Limit:"
|
616 |
+
#~ msgstr "Limiet:"
|
|
|
617 |
|
618 |
+
#~ msgid "Order:"
|
619 |
+
#~ msgstr "Volgorde:"
|
|
|
620 |
|
621 |
+
#~ msgid "Order By:"
|
622 |
+
#~ msgstr "Sorteer op:"
|
|
|
623 |
|
624 |
+
#~ msgid "Include:"
|
625 |
+
#~ msgstr "Omvat:"
|
|
|
626 |
|
627 |
+
#~ msgid "Exclude:"
|
628 |
+
#~ msgstr "Sluit uit:"
|
|
|
629 |
|
630 |
+
#, fuzzy
|
631 |
+
#~ msgid "Show full name?"
|
632 |
+
#~ msgstr "Aanpassingen tonen?"
|
633 |
|
634 |
+
#~ msgid "Save Changes"
|
635 |
+
#~ msgstr "Bewaren"
|
|
|
636 |
|
637 |
+
#, fuzzy
|
638 |
+
#~ msgid "New user role has been added."
|
639 |
+
#~ msgstr "Er is een gebruikersaccount aangemaakt voor %1$s."
|
640 |
|
|
|
|
|
641 |
#~ msgid ""
|
642 |
#~ "You tried going to %1$s, and it doesn't exist. All is not lost! You can "
|
643 |
#~ "search for what you're looking for."
|
644 |
#~ msgstr ""
|
645 |
#~ "Je wilde naar %1$s gaan, maar dit bestaat niet. Geen nood! Zoek hier "
|
646 |
#~ "wat je zocht:"
|
647 |
+
|
648 |
#~ msgid "Possibly Related"
|
649 |
#~ msgstr "Mogelijk gerelateerd"
|
650 |
+
|
651 |
#~ msgid "Continue reading"
|
652 |
#~ msgstr "Lees hier verder"
|
653 |
+
|
654 |
#~ msgid "Download "%1$s""
|
655 |
#~ msgstr "Download "%1$s""
|
656 |
+
|
657 |
#~ msgid "Pages:"
|
658 |
#~ msgstr "Pagina's:"
|
659 |
+
|
660 |
#~ msgid "Sorry, no applications matched your criteria."
|
661 |
#~ msgstr "Sorry, er zijn geen toepassingen die met je criteria overeenkomen."
|
662 |
+
|
663 |
#~ msgid "You are browsing the archive for %1$s."
|
664 |
#~ msgstr "Je bladert nu door het archief voor %1$s."
|
665 |
+
|
666 |
#~ msgid "By"
|
667 |
#~ msgstr "Door"
|
668 |
+
|
669 |
#~ msgid "on"
|
670 |
#~ msgstr "op"
|
671 |
+
|
672 |
#~ msgid "l, F jS, Y, g:i a"
|
673 |
#~ msgstr "l, j F, Y, G:i"
|
674 |
+
|
675 |
#~ msgid "F j, Y"
|
676 |
#~ msgstr "j F, Y"
|
677 |
+
|
678 |
#~ msgid "Posted in"
|
679 |
#~ msgstr "Gepost in"
|
680 |
+
|
681 |
#~ msgid "Tagged"
|
682 |
#~ msgstr "Tags:"
|
683 |
+
|
684 |
#~ msgid "Leave a response"
|
685 |
#~ msgstr "Reageer"
|
686 |
+
|
687 |
#~ msgid "1 Response"
|
688 |
#~ msgstr "1 Reactie"
|
689 |
+
|
690 |
#~ msgid "% Responses"
|
691 |
#~ msgstr "% Reacties"
|
692 |
+
|
693 |
#~ msgid "Sorry, there are no posts in this archive."
|
694 |
#~ msgstr "Sorry, dit archief bevat geen berichten."
|
695 |
+
|
696 |
#~ msgid "Archives by category"
|
697 |
#~ msgstr "Archieven per rubriek"
|
698 |
+
|
699 |
#~ msgid "Archives by month"
|
700 |
#~ msgstr "Archieven per maand"
|
701 |
+
|
702 |
#~ msgid "Sorry, no page matched your criteria."
|
703 |
#~ msgstr "Sorry, er bestaat geen pagina die aan je criteria voldoet."
|
704 |
+
|
705 |
#~ msgid "Sorry, no attachments matched your criteria."
|
706 |
#~ msgstr "Sorry, er zijn geen bijlages die aan je criteria voldoen."
|
707 |
+
|
708 |
#~ msgid "Sorry, no audio files matched your criteria."
|
709 |
#~ msgstr "Sorry, er zijn geen geluidsbestanden die aan je criteria voldoen."
|
710 |
+
|
711 |
#~ msgid "Send an email to %1$s"
|
712 |
#~ msgstr "Stuur een email aan %1$s"
|
713 |
+
|
714 |
#~ msgid "Email %1$s"
|
715 |
#~ msgstr "Email %1$s"
|
716 |
+
|
717 |
#~ msgid "%1$s hasn't written any posts yet."
|
718 |
#~ msgstr "%1$s heeft nog geen berichten geschreven."
|
719 |
+
|
720 |
#~ msgid "Nickname:"
|
721 |
#~ msgstr "Bijnaam:"
|
722 |
+
|
723 |
#~ msgid "Email:"
|
724 |
#~ msgstr "Email:"
|
725 |
+
|
726 |
#~ msgid "Website:"
|
727 |
#~ msgstr "Website:"
|
728 |
+
|
729 |
#~ msgid "AIM:"
|
730 |
#~ msgstr "AIM:"
|
731 |
+
|
732 |
#~ msgid "IM with %1$s"
|
733 |
#~ msgstr "IM met %1$s"
|
734 |
+
|
735 |
#~ msgid "Jabber:"
|
736 |
#~ msgstr "Jabber:"
|
737 |
+
|
738 |
#~ msgid "Yahoo:"
|
739 |
#~ msgstr "Yahoo:"
|
740 |
+
|
741 |
#~ msgid "Sorry, there are no posts in the %1$s category."
|
742 |
#~ msgstr "Sorry, er zijn geen berichten in de rubriek %1$s. "
|
743 |
+
|
744 |
#~ msgid "Please do not load this page directly. Thanks!"
|
745 |
#~ msgstr "Gelieve deze pagina niet rechtstreeks te laden. Dankjewel!"
|
746 |
+
|
747 |
#~ msgid "No Responses"
|
748 |
#~ msgstr "Geen reacties"
|
749 |
+
|
750 |
#~ msgid "One Response"
|
751 |
#~ msgstr "Een reactie"
|
752 |
+
|
753 |
#~ msgid "Responses"
|
754 |
#~ msgstr "Reacties"
|
755 |
+
|
756 |
#~ msgid "to"
|
757 |
#~ msgstr "naar"
|
758 |
+
|
759 |
#~ msgid "%1$s at %2$s"
|
760 |
#~ msgstr "%1$s op %2$s"
|
761 |
+
|
762 |
#~ msgid "Permalink to comment"
|
763 |
#~ msgstr "Permalink naar reactie"
|
764 |
+
|
765 |
#~ msgid "Permalink"
|
766 |
#~ msgstr "Permalink"
|
767 |
+
|
768 |
#~ msgid "Your comment is awaiting moderation."
|
769 |
#~ msgstr "Je reactie wacht op moderatie."
|
770 |
+
|
771 |
#~ msgid ""
|
772 |
#~ "Comments are closed, but <a href=\"%1$s\" title=\"Trackback URL for this "
|
773 |
#~ "post\">trackbacks</a> and pingbacks are open."
|
774 |
#~ msgstr ""
|
775 |
#~ "Reageren is niet mogelijk, maar <a href=\"%1$s\" title=\"Trackback URL "
|
776 |
#~ "for this post\">trackbacks</a> en pingbacks blijven open."
|
777 |
+
|
778 |
#~ msgid "Comments are closed."
|
779 |
#~ msgstr "Reageren is niet mogelijk."
|
780 |
+
|
781 |
#~ msgid "Leave a Reply"
|
782 |
#~ msgstr "Reageer"
|
783 |
+
|
784 |
#~ msgid ""
|
785 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to post a "
|
786 |
#~ "comment."
|
787 |
#~ msgstr ""
|
788 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn om te "
|
789 |
#~ "reageren."
|
790 |
+
|
791 |
#~ msgid "Logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
792 |
#~ msgstr "Ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
793 |
+
|
794 |
#~ msgid "Log out of this account"
|
795 |
#~ msgstr "Afmelden."
|
796 |
+
|
797 |
#~ msgid "Logout »"
|
798 |
#~ msgstr "Afmelden »"
|
799 |
+
|
800 |
#~ msgid "*"
|
801 |
#~ msgstr "*"
|
802 |
+
|
|
|
803 |
#~ msgid "Website"
|
804 |
#~ msgstr "Website"
|
805 |
+
|
806 |
#~ msgid "Submit"
|
807 |
#~ msgstr "Verstuur"
|
808 |
+
|
809 |
#~ msgid "Password Protected"
|
810 |
#~ msgstr "Beveiligd met wachtwoord"
|
811 |
+
|
812 |
#~ msgid "Enter the password to view comments."
|
813 |
#~ msgstr "Voer wachtwoord in om reacties te lezen."
|
814 |
+
|
815 |
#~ msgid "Leave a Reply to %s"
|
816 |
#~ msgstr "Reageer op %s"
|
817 |
+
|
818 |
#~ msgid "Click here to cancel reply."
|
819 |
#~ msgstr "Klik hier om de reactie te annuleren."
|
820 |
+
|
821 |
#~ msgid "F jS, Y"
|
822 |
#~ msgstr "j F, Y"
|
823 |
+
|
824 |
#~ msgid "Week %1$s of %2$s"
|
825 |
#~ msgstr "Week %1$s van %2$s"
|
826 |
+
|
827 |
#~ msgid "W"
|
828 |
#~ msgstr "W"
|
829 |
+
|
830 |
#~ msgid "Y"
|
831 |
#~ msgstr "Y"
|
832 |
+
|
833 |
#~ msgid "You are browsing the archive for week %1$s of %2$s."
|
834 |
#~ msgstr "Je bekijkt het archief voor week %1$s van %2$s."
|
835 |
+
|
836 |
#~ msgid "Sorry, there are no posts for %1$s."
|
837 |
#~ msgstr "Sorry, maar er zijn geen berichten voor %1$s."
|
838 |
+
|
839 |
#~ msgid "Sorry, no posts matched your criteria."
|
840 |
#~ msgstr "Sorry, er zijn geen berichten die met je criteria overeenkomen."
|
841 |
+
|
842 |
#~ msgid "Sorry, no images matched your criteria."
|
843 |
#~ msgstr "Sorry, er zijn geen afbeeldingen die met je criteria overeenkomen."
|
844 |
+
|
845 |
#~ msgid ""
|
846 |
#~ "You are currently logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
847 |
#~ msgstr ""
|
848 |
#~ "Je bent momenteel ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
849 |
+
|
850 |
#~ msgid ""
|
851 |
#~ "You have successfully logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</"
|
852 |
#~ "a>."
|
853 |
#~ msgstr ""
|
854 |
#~ "Je bent succesvol ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
855 |
+
|
856 |
#~ msgid ""
|
857 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to view the "
|
858 |
#~ "content of this page."
|
859 |
#~ msgstr ""
|
860 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn om de inhoud "
|
861 |
#~ "van deze pagina te bekijken."
|
862 |
+
|
863 |
#~ msgid ""
|
864 |
#~ "If you're not currently a member, please take a moment to <a href=\"%1$s"
|
865 |
#~ "\" title=\"Register\">register</a>."
|
866 |
#~ msgstr ""
|
867 |
#~ "Als je momenteel nog geen lid bent, neem dan een ogenblikje tijd om je te "
|
868 |
#~ "<a href=\"%1$s\" title=\"Register\">registreren</a>."
|
869 |
+
|
870 |
#~ msgid "You must enter a post title."
|
871 |
#~ msgstr "Je moet een titel voor het bericht invoeren."
|
872 |
+
|
873 |
#~ msgid "You must write something."
|
874 |
#~ msgstr "Je moet hier iets schrijven."
|
875 |
+
|
876 |
#~ msgid "Title"
|
877 |
#~ msgstr "Titel"
|
878 |
+
|
879 |
#~ msgid "Write"
|
880 |
#~ msgstr "Schrijf"
|
881 |
+
|
882 |
#~ msgid "Tags"
|
883 |
#~ msgstr "Tags"
|
884 |
+
|
885 |
#~ msgid "Publish"
|
886 |
#~ msgstr "Publiceer"
|
887 |
+
|
888 |
#~ msgid "You don't have the appropriate capabilities to publish posts."
|
889 |
#~ msgstr "Je hebt niet de nodige rechten om berichten te publiceren."
|
890 |
+
|
891 |
#~ msgid ""
|
892 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> with "
|
893 |
#~ "appropriate user capabilities to publish posts."
|
894 |
#~ msgstr ""
|
895 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn met de nodige "
|
896 |
#~ "gebruikersrechten om berichten te kunnen publiceren."
|
897 |
+
|
898 |
#~ msgid "A username is required for registration."
|
899 |
#~ msgstr "Om te registreren is een gebruikersnaam nodig."
|
900 |
+
|
901 |
#~ msgid "You must enter an email address."
|
902 |
#~ msgstr "Je moet een email-adres invoeren."
|
903 |
+
|
904 |
#~ msgid "You must enter a password."
|
905 |
#~ msgstr "Je moet een wachtwoord invoeren."
|
906 |
+
|
907 |
#~ msgid "You must enter your password twice."
|
908 |
#~ msgstr "Je moet je wachtwoord tweemaal invoeren."
|
909 |
+
|
910 |
#~ msgid "You must enter the same password twice."
|
911 |
#~ msgstr "Je moet tweemaal hetzelfde wachtwoord invoeren."
|
912 |
+
|
913 |
#~ msgid "User registration failed. Please try again."
|
914 |
#~ msgstr "Gebruikersregistratie mislukt. Probeer opnieuw."
|
915 |
+
|
916 |
#~ msgid ""
|
917 |
#~ "You are logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>. You don't "
|
918 |
#~ "need another account."
|
919 |
#~ msgstr ""
|
920 |
#~ "Je bent ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>. Je hebt "
|
921 |
#~ "geen bijkomend account nodig."
|
922 |
+
|
923 |
#~ msgid "Thank you for registering, %1$s."
|
924 |
#~ msgstr "Bedankt voor je registratie, %1$s."
|
925 |
+
|
926 |
#~ msgid "Users can register themselves or you can manually create users here."
|
927 |
#~ msgstr ""
|
928 |
#~ "Gebruikers kunnen zichzelf registreren of je kan hier handmatig "
|
929 |
#~ "gebruikersaccounts aanmaken."
|
930 |
+
|
931 |
#~ msgid ""
|
932 |
#~ "Users cannot currently register themselves, but you can manually create "
|
933 |
#~ "users here."
|
934 |
#~ msgstr ""
|
935 |
#~ "Gebruikers kunnen zichzelf niet registreren, maar je kan hier wel "
|
936 |
#~ "handmatig gebruikersaccounts aanmaken."
|
937 |
+
|
938 |
#~ msgid "Required fields are marked <span class=\"required\">*</span>"
|
939 |
#~ msgstr ""
|
940 |
#~ "Verplichte velden zijn aangeduid met <span class=\"required\">*</span>."
|
941 |
+
|
|
|
942 |
#~ msgid "Last Name"
|
943 |
#~ msgstr "Naam"
|
944 |
+
|
945 |
#~ msgid "E-mail *"
|
946 |
#~ msgstr "E-mail *"
|
947 |
+
|
948 |
#~ msgid "Repeat Password *"
|
949 |
#~ msgstr "Herhaal je wachtwoord*"
|
950 |
+
|
951 |
#~ msgid "Biographical Information"
|
952 |
#~ msgstr "Biografische informatie"
|
953 |
+
|
|
|
954 |
#~ msgid "You are browsing the search results for "%1$s""
|
955 |
#~ msgstr "Je bekijkt hier de zoekresultaten voor "%1$s""
|
956 |
+
|
957 |
#~ msgid "Maybe you'd like to try inputting different search terms."
|
958 |
#~ msgstr "Misschien wil je andere zoektermen invoeren."
|
959 |
+
|
960 |
#~ msgid "You are browsing the %1$s tag archive."
|
961 |
#~ msgstr "Je bekijkt het archief voor de tag %1$s"
|
962 |
+
|
963 |
#~ msgid "Sorry, there are no posts tagged %1$s."
|
964 |
#~ msgstr "Sorry, er zijn geen berichten met de tag %1$s."
|
965 |
+
|
966 |
#~ msgid "Sorry, no documents matched your criteria."
|
967 |
#~ msgstr "Sorry, er zijn geen documenten die met je criteria overeenkomen."
|
968 |
+
|
969 |
#~ msgid "Sorry, no videos matched your criteria."
|
970 |
#~ msgstr "Sorry, er zijn geen video's die met je criteria overeenkomen."
|
971 |
+
|
972 |
#~ msgid "Widget Template"
|
973 |
#~ msgstr "Widget Template"
|
974 |
+
|
975 |
#~ msgid "About This Theme"
|
976 |
#~ msgstr "Over dit Thema"
|
977 |
+
|
978 |
#~ msgid "Theme Description:"
|
979 |
#~ msgstr "Thema Beschrijving:"
|
980 |
+
|
|
|
981 |
#~ msgid "Theme Documentation:"
|
982 |
#~ msgstr "Thema Documentatie:"
|
983 |
+
|
|
|
|
|
|
|
984 |
#~ msgid "Get support for this theme"
|
985 |
#~ msgstr "Ondersteuning voor dit thema"
|
986 |
+
|
|
|
987 |
#~ msgid "Select your theme settings"
|
988 |
#~ msgstr "Selecteer de settings voor je thema"
|
989 |
|
1002 |
#~ msgstr ""
|
1003 |
#~ "Selecteer dit als je wenst dat je secundaire widgets standaard geladen "
|
1004 |
#~ "worden op de home-pagina als niet anders geselecteerd is."
|
1005 |
+
|
1006 |
#~ msgid "Stylesheets:"
|
1007 |
#~ msgstr "Stijlbladen (CSS)"
|
1008 |
+
|
1009 |
#~ msgid ""
|
1010 |
#~ "Select this to have the theme automatically include a print stylesheet."
|
1011 |
#~ msgstr ""
|
1012 |
#~ "Selecteer dit als je wil dat het thema automatisch een 'print' stijlblad "
|
1013 |
#~ "insluit."
|
1014 |
+
|
1015 |
#~ msgid "JavaScript:"
|
1016 |
#~ msgstr "JavaScript:"
|
1017 |
+
|
1018 |
#~ msgid "Include the pull quote JavaScript."
|
1019 |
#~ msgstr "Inclusief pull quote JavaScript."
|
1020 |
+
|
1021 |
#~ msgid "Feeds:"
|
1022 |
#~ msgstr "Feeds:"
|
1023 |
+
|
1024 |
#~ msgid ""
|
1025 |
#~ "If you have a an alternate feed address, such as one from <a href="
|
1026 |
#~ "\"http://feedburner.com\" title=\"Feedburner\">Feedburner</a>, you can "
|
1031 |
#~ "\"http://feedburner.com\" title=\"Feedburner\">Feedburner</a>, kan je dat "
|
1032 |
#~ "hier invoeren om het door het thema te laten gebruiken. Als je dit "
|
1033 |
#~ "blanco laat, wordt de standaard WordPress RSS feed gebruikt."
|
1034 |
+
|
1035 |
#~ msgid "Title & Meta:"
|
1036 |
#~ msgstr "Titel & Meta"
|
1037 |
+
|
1038 |
#~ msgid "Use category slugs on single posts for your meta keywords?"
|
1039 |
#~ msgstr ""
|
1040 |
#~ "Gebruik categorie 'slug' als meta keywoord voor afzonderlijke berichten."
|
1041 |
+
|
1042 |
#~ msgid "Use tag slugs on single posts for your meta keywords?"
|
1043 |
#~ msgstr "Gebruik tag 'slug' als meta keywoord voor afzonderlijke berichten."
|
1044 |
+
|
1045 |
#~ msgid "Use the excerpt on single posts for your meta description?"
|
1046 |
#~ msgstr ""
|
1047 |
#~ "Uittreksel als meta-omschrijving gebruiken voor afzonderlijke berichten?"
|
1048 |
+
|
1049 |
#~ msgid "Use the author bio on author archives for your meta description?"
|
1050 |
#~ msgstr ""
|
1051 |
#~ "Auteurs biografie als meta-omschrijving gebruiken voor afzonderlijke "
|
1052 |
#~ "berichten?"
|
1053 |
+
|
1054 |
#~ msgid ""
|
1055 |
#~ "Use the category description on category archives for your meta "
|
1056 |
#~ "description?"
|
1057 |
#~ msgstr ""
|
1058 |
#~ "Rubriek-omschrijving als meta-omschrijving gebruiken voor afzonderlijke "
|
1059 |
#~ "berichten?"
|
1060 |
+
|
1061 |
#~ msgid "Use the author's name on pages and posts as the meta author?"
|
1062 |
#~ msgstr ""
|
1063 |
#~ "Naam van de auteur als meta-auteur gebruiken op pagina's en berichten?"
|
1064 |
+
|
1065 |
#~ msgid "Append site title to the end of the page name?"
|
1066 |
#~ msgstr "Site-naam toevoegen aan het eind van de pagina-naam?"
|
1067 |
+
|
1068 |
#~ msgid ""
|
1069 |
#~ "You can change these settings in the box labeled <em>Hybrid Settings</em> "
|
1070 |
#~ "when writing a post or page."
|
1071 |
#~ msgstr ""
|
1072 |
#~ "Je kan deze settings aanpassen in het vak <em>Hybrid Settings</em> "
|
1073 |
#~ "wanneer je een bericht of pagina bewerkt."
|
1074 |
+
|
1075 |
#~ msgid ""
|
1076 |
#~ "The <a href=\"%1$s\" title=\"All-In-One SEO Pack\">All-In-One SEO Pack</"
|
1077 |
#~ "a> and <a href=\"%2$s\" title=\"Headspace2\">Headspace2</a> plugins will "
|
1080 |
#~ "De <a href=\"%1$s\" title=\"All-In-One SEO Pack\">All-In-One SEO Pack</a> "
|
1081 |
#~ "en <a href=\"%2$s\" title=\"Headspace2\">Headspace2</a> plugins zullen "
|
1082 |
#~ "deze en de indexeringssettings overschrijven."
|
1083 |
+
|
1084 |
#~ msgid "Indexing:"
|
1085 |
#~ msgstr "Indexeren:"
|
1086 |
+
|
1087 |
#~ msgid ""
|
1088 |
#~ "Choose which pages of your blog get indexed by the search engines. Only "
|
1089 |
#~ "selected pages will be indexed. If not selected, those pages will be "
|
1092 |
#~ "Kies welke pagina's van je blog door zoekmachines kunnen geïndexeerd "
|
1093 |
#~ "worden. Alleen de geselecteerde pagina's worden geïndexeerd. Niet "
|
1094 |
#~ "geselecteerde pagina's worden geblokkeerd."
|
1095 |
+
|
1096 |
#~ msgid ""
|
1097 |
#~ "Note: Some of these settings will render the Title & Meta settings "
|
1098 |
#~ "moot. Also, setting your site to privacy mode will override these "
|
1101 |
#~ "Let op: Sommige van deze settings kunnen conflicteren met de Titel & "
|
1102 |
#~ "Meta settings. Ook wanneer je je site in een beveiligde modus omzet, "
|
1103 |
#~ "worden deze settings overschreven."
|
1104 |
+
|
1105 |
#~ msgid "Home page"
|
1106 |
#~ msgstr "Homepage"
|
1107 |
+
|
1108 |
#~ msgid "Single posts"
|
1109 |
#~ msgstr "Afzonderlijke berichten"
|
1110 |
+
|
1111 |
#~ msgid "Attachments"
|
1112 |
#~ msgstr "Bijlages"
|
1113 |
+
|
1114 |
#~ msgid "Pages"
|
1115 |
#~ msgstr "Pagina's"
|
1116 |
+
|
1117 |
#~ msgid "Date-based archives"
|
1118 |
#~ msgstr "Datum-gebaseerd archief"
|
1119 |
+
|
1120 |
#~ msgid "Category archives"
|
1121 |
#~ msgstr "Archief per rubriek"
|
1122 |
+
|
1123 |
#~ msgid "Tag archives"
|
1124 |
#~ msgstr "Archief op tags"
|
1125 |
+
|
1126 |
#~ msgid "Author archives"
|
1127 |
#~ msgstr "Archief op auteur"
|
1128 |
+
|
1129 |
#~ msgid "Search"
|
1130 |
#~ msgstr "Zoek"
|
1131 |
+
|
1132 |
#~ msgid "404"
|
1133 |
#~ msgstr "404"
|
1134 |
+
|
1135 |
#~ msgid "Avatars:"
|
1136 |
#~ msgstr "Avatars:"
|
1137 |
+
|
1138 |
#~ msgid ""
|
1139 |
#~ "You can set a default avatar for users without one if you don't like the "
|
1140 |
#~ "choices WordPress offers you. Simply add the full path to the image file."
|
1142 |
#~ "Je kan een standaard-avatar instellen voor gebruikers zonder avatar, "
|
1143 |
#~ "wanneer de keuze van WordPress je niet bevalt. Voer daartoe hier het "
|
1144 |
#~ "complete pad naar de afbeelding in."
|
1145 |
+
|
1146 |
#~ msgid "Comments:"
|
1147 |
#~ msgstr "Reacties:"
|
1148 |
+
|
1149 |
#~ msgid "Check to use the comments popup window instead of regular comments."
|
1150 |
#~ msgstr ""
|
1151 |
#~ "Aanvinken om een popup-scherm voor reacties te gebruiken in plaats van "
|
1152 |
#~ "het gebruikelijke commentaarscherm."
|
1153 |
+
|
1154 |
#~ msgid "WP 2.7+ only."
|
1155 |
#~ msgstr "Enkel voor WP 2.7+"
|
1156 |
+
|
1157 |
#~ msgid "Footer Insert:"
|
1158 |
#~ msgstr "Inserts voor Footer:"
|
1159 |
+
|
1160 |
#~ msgid ""
|
1161 |
#~ "You can place XHTML and JavaScript here to have it inserted automatically "
|
1162 |
#~ "into your theme. If you have a script, such as one from Google "
|
1165 |
#~ "Je kan hier XHTML en Javascript plaatsen dat automatisch in de footer van "
|
1166 |
#~ "je thema wordt ingevoerd. Dit kan van pas komen als je een script hebt "
|
1167 |
#~ "zoals dat van Google Analytics."
|
1168 |
+
|
1169 |
#~ msgid ""
|
1170 |
#~ "Check this if you want the theme to auto-generate your site's copyright "
|
1171 |
#~ "and title in the footer."
|
1172 |
#~ msgstr ""
|
1173 |
#~ "Aanvinken wanneer je wil dat het thema automatisch een copyright voor je "
|
1174 |
#~ "site in de footer invoert."
|
1175 |
+
|
1176 |
#~ msgid ""
|
1177 |
#~ "Want to show your love of WordPress? Check this and a link will be added "
|
1178 |
#~ "to your footer back to WordPress.org."
|
1179 |
#~ msgstr ""
|
1180 |
#~ "Wil je laten zien hoezeer je WordPress waardeert? Vink dit aan om "
|
1181 |
#~ "automatisch een link naar WordPress.org aan de footer toe te voegen."
|
1182 |
+
|
1183 |
#~ msgid ""
|
1184 |
#~ "Check this to have a link back to Theme Hybrid automatically appended to "
|
1185 |
#~ "your footer. This is totally optional. Really."
|
1186 |
#~ msgstr ""
|
1187 |
#~ "Aanvinken om automatisch een link naar Theme Hybrid aan je footer toe te "
|
1188 |
#~ "voegen. Dit volkomen vrijwillig, echt waar!"
|
1189 |
+
|
1190 |
#~ msgid ""
|
1191 |
#~ "For testing purposes, this will append a database query counter and page "
|
1192 |
#~ "load timer to your footer."
|
1193 |
#~ msgstr ""
|
1194 |
#~ "Voor test-doeleinden wordt hiermee een database-query teller en de "
|
1195 |
#~ "laadtijd van de pagina aan je footer toegevoegd."
|
1196 |
+
|
1197 |
#~ msgid "Add a title that will be seen by search engines."
|
1198 |
#~ msgstr "Voeg een titel toe die door zoekmachines gezien wordt."
|
1199 |
+
|
1200 |
#~ msgid "Add a description that will be seen by search engines."
|
1201 |
#~ msgstr "Voeg een beschrijving toe die door zoekmachines gezien wordt."
|
1202 |
+
|
1203 |
#~ msgid "Keywords:"
|
1204 |
#~ msgstr "Trefwoorden:"
|
1205 |
+
|
1206 |
#~ msgid "Add keywords that will be seen by search engines."
|
1207 |
#~ msgstr "Voeg trefwoorden toe die door zoekmachines gezien worden."
|
1208 |
+
|
1209 |
#~ msgid "Series:"
|
1210 |
#~ msgstr "Series:"
|
1211 |
+
|
1212 |
#~ msgid "Post the title of your series of articles here."
|
1213 |
#~ msgstr "Post hier de titel van je artikelseries."
|
1214 |
+
|
1215 |
#~ msgid "Thumbnail:"
|
1216 |
#~ msgstr "Thumbnail:"
|
1217 |
+
|
1218 |
#~ msgid "Add an image URL here."
|
1219 |
#~ msgstr "Voeg hier de URL van een afbeelding toe."
|
1220 |
+
|
1221 |
#~ msgid "Page Navigation:"
|
1222 |
#~ msgstr "Pagina Navigatie:"
|
1223 |
+
|
1224 |
#~ msgid "Hybrid Theme Settings"
|
1225 |
#~ msgstr "Hybrid Theme Settings"
|
1226 |
+
|
1227 |
#~ msgid "Settings saved."
|
1228 |
#~ msgstr "Settings opgeslagen."
|
1229 |
+
|
1230 |
#~ msgid "Browse:"
|
1231 |
#~ msgstr "Blader:"
|
1232 |
+
|
1233 |
#~ msgid "Home"
|
1234 |
#~ msgstr "Home"
|
1235 |
+
|
1236 |
#~ msgid "Search results for "%1$s""
|
1237 |
#~ msgstr "Zoekresultaten voor "%1$s""
|
1238 |
+
|
1239 |
#~ msgid "m"
|
1240 |
#~ msgstr "m"
|
1241 |
+
|
1242 |
#~ msgid "F"
|
1243 |
#~ msgstr "F"
|
1244 |
+
|
1245 |
#~ msgid "j"
|
1246 |
#~ msgstr "j"
|
1247 |
+
|
1248 |
#~ msgid "404 Not Found"
|
1249 |
#~ msgstr "404 Niet Gevonden"
|
1250 |
+
|
1251 |
#~ msgid "Log in to reply."
|
1252 |
#~ msgstr "Log in op te reageren."
|
1253 |
+
|
1254 |
#~ msgid "This function has been removed or replaced by another function."
|
1255 |
#~ msgstr "Deze functie is verwijderd of vervangen door een andere functie."
|
1256 |
+
|
1257 |
#~ msgid ""
|
1258 |
#~ "You can use these <acronym title=\"Extensible Hypertext Markup Language"
|
1259 |
#~ "\">XHTML</acronym> tags:"
|
1260 |
#~ msgstr ""
|
1261 |
#~ "Je kan deze <acronym title=\"Extensible Hypertext Markup Language"
|
1262 |
#~ "\">XHTML</acronym> tags: gebruiken."
|
1263 |
+
|
1264 |
#~ msgid "Search this site..."
|
1265 |
#~ msgstr "Doorzoek deze site"
|
1266 |
+
|
1267 |
#~ msgid "Copyright"
|
1268 |
#~ msgstr "Copyright"
|
1269 |
+
|
1270 |
#~ msgid "Powered by"
|
1271 |
#~ msgstr "Aangedreven door "
|
1272 |
+
|
1273 |
#~ msgid ""
|
1274 |
#~ "Powered by WordPress, state-of-the-art semantic personal publishing "
|
1275 |
#~ "platform"
|
1276 |
#~ msgstr ""
|
1277 |
#~ "Aangedreven door WordPress, het state-of-the-art semantische platform "
|
1278 |
#~ "voor iedereen."
|
1279 |
+
|
1280 |
#~ msgid "WordPress"
|
1281 |
#~ msgstr "WordPress"
|
1282 |
+
|
1283 |
#~ msgid "and"
|
1284 |
#~ msgstr "en"
|
1285 |
+
|
1286 |
#~ msgid "Hybrid Theme Framework"
|
1287 |
#~ msgstr "Hybrid Theme Framework"
|
1288 |
+
|
1289 |
#~ msgid "Articles in this series"
|
1290 |
#~ msgstr "Artikelen in deze serie"
|
1291 |
+
|
1292 |
#~ msgid ""
|
1293 |
#~ "You have encountered an error. This is usually because you've changed "
|
1294 |
#~ "something in the core Hybrid theme files. Try undoing your last edit to "
|
1299 |
#~ "gewijzigd in de kernbestanden van het Hybrid-thema. Probeer je laatste "
|
1300 |
#~ "wijzigingen ongedaan te maken om dit op te lossen. Als dat niet lukt, "
|
1301 |
#~ "kan je je tot de support forums richten voor hulp."
|
1302 |
+
|
1303 |
#~ msgid "This page loaded in %1$s seconds with %2$s database queries."
|
1304 |
#~ msgstr "Deze pagina laadde in %1$s seconden met %2$s database queries."
|
1305 |
+
|
1306 |
#~ msgid ": Page %1$s"
|
1307 |
#~ msgstr ":Pagina %1$s"
|
1308 |
+
|
1309 |
#~ msgid "Search results for "%1$s.""
|
1310 |
#~ msgstr "Zoekresultaten voor "%1$s.""
|
1311 |
+
|
1312 |
#~ msgid "Archive for %1$s"
|
1313 |
#~ msgstr "Archief voor %1$s"
|
1314 |
+
|
1315 |
#~ msgid "Archive for week %1$s of %2$s"
|
1316 |
#~ msgstr "Archief voor week %1$s van %2$s"
|
1317 |
+
|
1318 |
#~ msgid "Comment on "%1$s""
|
1319 |
#~ msgstr "Reactie op "%1$s""
|
1320 |
+
|
1321 |
#~ msgid "Primary Home"
|
1322 |
#~ msgstr "Primair Home"
|
1323 |
+
|
1324 |
#~ msgid "Primary Author"
|
1325 |
#~ msgstr "Primaire Auteur"
|
1326 |
+
|
1327 |
#~ msgid "Primary Category"
|
1328 |
#~ msgstr "Primaire Rubriek"
|
1329 |
+
|
1330 |
#~ msgid "Primary Date"
|
1331 |
#~ msgstr "Primaire Datum"
|
1332 |
+
|
1333 |
#~ msgid "Primary Page"
|
1334 |
#~ msgstr "Primaire Pagina"
|
1335 |
+
|
1336 |
#~ msgid "Primary Search"
|
1337 |
#~ msgstr "Primaire Zoekresultaten"
|
1338 |
+
|
|
|
1339 |
#~ msgid "Primary Tag"
|
1340 |
#~ msgstr "Primaire Tag"
|
1341 |
+
|
1342 |
#~ msgid "Primary 404"
|
1343 |
#~ msgstr "Primaire 404"
|
1344 |
+
|
1345 |
#~ msgid "Secondary Home"
|
1346 |
#~ msgstr "Secundaire Home"
|
1347 |
+
|
1348 |
#~ msgid "Secondary Author"
|
1349 |
#~ msgstr "Secundaire Auteur"
|
1350 |
+
|
1351 |
#~ msgid "Secondary Category"
|
1352 |
#~ msgstr "Secundaire Rubriek"
|
1353 |
+
|
1354 |
#~ msgid "Secondary Date"
|
1355 |
#~ msgstr "Secundaire Datum "
|
1356 |
+
|
1357 |
#~ msgid "Secondary Page"
|
1358 |
#~ msgstr "Secundaire Pagina"
|
1359 |
+
|
1360 |
#~ msgid "Secondary Search"
|
1361 |
#~ msgstr "Secundaire Zoekresultaten"
|
1362 |
+
|
1363 |
#~ msgid "Secondary Single"
|
1364 |
#~ msgstr "Secundaire EnkelvoudigBericht"
|
1365 |
+
|
1366 |
#~ msgid "Secondary Tag"
|
1367 |
#~ msgstr "Secundaire Tag"
|
1368 |
+
|
1369 |
#~ msgid "Secondary 404"
|
1370 |
#~ msgstr "Secundaire 404"
|
1371 |
+
|
1372 |
#~ msgid "Subsidiary Default"
|
1373 |
#~ msgstr "Bijkomende Standaard"
|
1374 |
+
|
1375 |
#~ msgid "RSS 2.0"
|
1376 |
#~ msgstr "RSS 2.0"
|
1377 |
+
|
1378 |
#~ msgid "RSS .92"
|
1379 |
#~ msgstr "RSS .92"
|
1380 |
+
|
1381 |
#~ msgid "Atom 0.3"
|
1382 |
#~ msgstr "Atom 0.3"
|
1383 |
+
|
1384 |
#~ msgid "Subsidiary Home"
|
1385 |
#~ msgstr "Subsidiair Home"
|
1386 |
+
|
1387 |
#~ msgid "Previous Page"
|
1388 |
#~ msgstr "Vorige pagina"
|
1389 |
+
|
1390 |
#~ msgid "Next Page"
|
1391 |
#~ msgstr "Volgende pagina"
|
1392 |
+
|
1393 |
#~ msgid "Related Posts"
|
1394 |
#~ msgstr "Gerelateerde berichten"
|
1395 |
+
|
1396 |
#~ msgid "Logout"
|
1397 |
#~ msgstr "Afmelden"
|
1398 |
+
|
1399 |
#~ msgid "Select Year"
|
1400 |
#~ msgstr "Selecteer jaar"
|
1401 |
+
|
1402 |
#~ msgid "Select Week"
|
1403 |
#~ msgstr "Selecteer week"
|
1404 |
+
|
1405 |
#~ msgid "Select Day"
|
1406 |
#~ msgstr "Selecteer dag"
|
1407 |
+
|
1408 |
#~ msgid "Select Post"
|
1409 |
#~ msgstr "Selecteer bericht"
|
1410 |
+
|
1411 |
#~ msgid "Type:"
|
1412 |
#~ msgstr "Type:"
|
1413 |
+
|
1414 |
#~ msgid "Format:"
|
1415 |
#~ msgstr "Format:"
|
1416 |
+
|
1417 |
#~ msgid "Before:"
|
1418 |
#~ msgstr "Voor:"
|
1419 |
+
|
1420 |
#~ msgid "After:"
|
1421 |
#~ msgstr "Na:"
|
1422 |
+
|
1423 |
#~ msgid "Show post count?"
|
1424 |
#~ msgstr "Toon aantal berichten?"
|
1425 |
+
|
1426 |
#~ msgid ""
|
1427 |
#~ "An advanced widget that gives you total control over the output of your "
|
1428 |
#~ "archives."
|
1429 |
#~ msgstr ""
|
1430 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1431 |
#~ "van je archieven."
|
1432 |
+
|
1433 |
#~ msgid "Bookmarks"
|
1434 |
#~ msgstr "Favorieten"
|
1435 |
+
|
1436 |
#~ msgid "Categories:"
|
1437 |
#~ msgstr "Rubrieken:"
|
1438 |
+
|
1439 |
#~ msgid "Exclude Categories:"
|
1440 |
#~ msgstr "Uit te sluiten rubrieken:"
|
1441 |
+
|
1442 |
#~ msgid "Category:"
|
1443 |
#~ msgstr "Rubriek:"
|
1444 |
+
|
1445 |
#~ msgid "Category Order:"
|
1446 |
#~ msgstr "Rubriek volgorde:"
|
1447 |
+
|
1448 |
#~ msgid "Order Categories By:"
|
1449 |
#~ msgstr "Sorteer rubrieken op:"
|
1450 |
+
|
1451 |
#~ msgid "Include Bookmarks:"
|
1452 |
#~ msgstr "Inclusief favorieten:"
|
1453 |
+
|
1454 |
#~ msgid "Exclude Bookmarks:"
|
1455 |
#~ msgstr "Exclusief favorieten:"
|
1456 |
+
|
1457 |
#~ msgid "Bookmarks Order:"
|
1458 |
#~ msgstr "Favorieten volgorde:"
|
1459 |
+
|
1460 |
#~ msgid "Order Bookmarks By:"
|
1461 |
#~ msgstr "Sorteer favorieten op:"
|
1462 |
+
|
1463 |
#~ msgid "Between (Bookmark/Description):"
|
1464 |
#~ msgstr "Tussen (Favoriet/beschrijving)"
|
1465 |
+
|
1466 |
#~ msgid "Categorize?"
|
1467 |
#~ msgstr "Rubriceer?"
|
1468 |
+
|
1469 |
#~ msgid "Show description?"
|
1470 |
#~ msgstr "Beschrijving tonen?"
|
1471 |
+
|
1472 |
#~ msgid "Hide invisible bookmarks?"
|
1473 |
#~ msgstr "Onzichtbare favorieten verbergen?"
|
1474 |
+
|
1475 |
#~ msgid "Show private categories?"
|
1476 |
#~ msgstr "Private rubrieken tonen?"
|
1477 |
+
|
1478 |
#~ msgid "Show rating?"
|
1479 |
#~ msgstr "Waardering tonen?"
|
1480 |
+
|
1481 |
#~ msgid "Show images?"
|
1482 |
#~ msgstr "Afbeeldingen tonen?"
|
1483 |
+
|
1484 |
#~ msgid ""
|
1485 |
#~ "An advanced widget that gives you total control over the output of your "
|
1486 |
#~ "bookmarks (links)."
|
1487 |
#~ msgstr ""
|
1488 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1489 |
#~ "van je favorieten (links)."
|
1490 |
+
|
1491 |
#~ msgid "RSS"
|
1492 |
#~ msgstr "RSS"
|
1493 |
+
|
1494 |
#~ msgid "Depth:"
|
1495 |
#~ msgstr "Diepte:"
|
1496 |
+
|
1497 |
#~ msgid "Number:"
|
1498 |
#~ msgstr "Aantal:"
|
1499 |
+
|
1500 |
#~ msgid "Child Of:"
|
1501 |
#~ msgstr "'Child' van :"
|
1502 |
+
|
|
|
1503 |
#~ msgid "Hierarchical?"
|
1504 |
#~ msgstr "Hierarchisch?"
|
1505 |
+
|
1506 |
#~ msgid "Show RSS feed?"
|
1507 |
#~ msgstr "Toon RSS feed?"
|
1508 |
+
|
1509 |
#~ msgid "Use description for title?"
|
1510 |
#~ msgstr "Omschrijving gebruiken voor de titel?"
|
1511 |
+
|
1512 |
#~ msgid "Show last updated?"
|
1513 |
#~ msgstr "Toon laatste aanpassing?"
|
1514 |
+
|
1515 |
#~ msgid "Show count?"
|
1516 |
#~ msgstr "Toon aantal?"
|
1517 |
+
|
1518 |
#~ msgid "Hide empty?"
|
1519 |
#~ msgstr "Lege verbergen?"
|
1520 |
+
|
1521 |
#~ msgid ""
|
1522 |
#~ "An advanced widget that gives you total control over the output of your "
|
1523 |
#~ "category links."
|
1524 |
#~ msgstr ""
|
1525 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1526 |
#~ "van je rubrieken."
|
1527 |
+
|
1528 |
#~ msgid "Categories"
|
1529 |
#~ msgstr "Rubrieken"
|
1530 |
+
|
1531 |
#~ msgid "Sort Order:"
|
1532 |
#~ msgstr "Sorteervolgorde"
|
1533 |
+
|
1534 |
#~ msgid "Meta Key:"
|
1535 |
#~ msgstr "Meta Key:"
|
1536 |
+
|
1537 |
#~ msgid "Meta Value:"
|
1538 |
#~ msgstr "Meta Value:"
|
1539 |
+
|
1540 |
#~ msgid "Show home?"
|
1541 |
#~ msgstr "Toon home?"
|
1542 |
+
|
1543 |
#~ msgid "Show date?"
|
1544 |
#~ msgstr "Toon datum?"
|
1545 |
+
|
1546 |
#~ msgid "Search Text:"
|
1547 |
#~ msgstr "Zoek tekst:"
|
1548 |
+
|
1549 |
#~ msgid "Use theme's search form?"
|
1550 |
#~ msgstr "Zoekformulier van thema gebruiken?"
|
1551 |
+
|
1552 |
#~ msgid ""
|
1553 |
#~ "An advanced widget that gives you total control over the output of your "
|
1554 |
#~ "search form."
|
1555 |
#~ msgstr ""
|
1556 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1557 |
#~ "van je zoekformulier."
|
1558 |
+
|
1559 |
#~ msgid "Largest:"
|
1560 |
#~ msgstr "Grootste:"
|
1561 |
+
|
1562 |
#~ msgid "Smallest:"
|
1563 |
#~ msgstr "Kleinste:"
|
1564 |
+
|
1565 |
#~ msgid "Unit:"
|
1566 |
#~ msgstr "Eenheid:"
|
1567 |
+
|
1568 |
#~ msgid ""
|
1569 |
#~ "An advanced widget that gives you total control over the output of your "
|
1570 |
#~ "tags."
|
1571 |
#~ msgstr ""
|
1572 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1573 |
#~ "van je tags."
|
|
languages/members.pot
CHANGED
@@ -2,8 +2,8 @@ msgid ""
|
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Members WordPress Plugin\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
-
"POT-Creation-Date:
|
6 |
-
"PO-Revision-Date:
|
7 |
"Last-Translator: Justin Tadlock <justin@justintadlock.com>\n"
|
8 |
"Language-Team: <justin@justintadlock.com>\n"
|
9 |
"MIME-Version: 1.0\n"
|
@@ -11,864 +11,979 @@ msgstr ""
|
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
"X-Poedit-Language: English\n"
|
13 |
"X-Poedit-Country: UNITED STATES\n"
|
14 |
-
"X-Poedit-KeywordsList: _e;__\n"
|
15 |
"X-Poedit-Basepath: ../\n"
|
16 |
"X-Poedit-SearchPath-0: .\n"
|
17 |
|
18 |
-
#:
|
19 |
-
#:
|
20 |
-
|
21 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
22 |
|
23 |
-
#:
|
24 |
-
msgid "
|
25 |
msgstr ""
|
26 |
|
27 |
-
#:
|
28 |
-
msgid "
|
29 |
msgstr ""
|
30 |
|
31 |
-
#:
|
32 |
-
msgid "
|
33 |
msgstr ""
|
34 |
|
35 |
-
#:
|
36 |
-
msgid "
|
37 |
msgstr ""
|
38 |
|
39 |
-
#:
|
40 |
-
|
|
|
|
|
41 |
msgstr ""
|
42 |
|
43 |
-
#:
|
44 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
45 |
msgstr ""
|
46 |
|
47 |
-
#:
|
48 |
-
msgid "
|
49 |
msgstr ""
|
50 |
|
51 |
-
#:
|
52 |
-
msgid "
|
53 |
msgstr ""
|
54 |
|
55 |
-
#:
|
56 |
-
msgid "
|
57 |
msgstr ""
|
58 |
|
59 |
-
#:
|
60 |
-
|
61 |
-
msgid "
|
62 |
-
msgstr "
|
63 |
|
64 |
-
#:
|
65 |
-
msgid "
|
66 |
msgstr ""
|
67 |
|
68 |
-
#:
|
69 |
-
msgid "
|
70 |
msgstr ""
|
71 |
|
72 |
-
#:
|
73 |
-
msgid "
|
74 |
msgstr ""
|
75 |
|
76 |
-
#:
|
77 |
-
|
78 |
-
|
79 |
-
msgstr "Week %1$s"
|
80 |
|
81 |
-
#:
|
82 |
-
|
83 |
-
|
84 |
-
msgstr "Gebruikersnaam"
|
85 |
|
86 |
-
#:
|
87 |
-
|
88 |
-
|
89 |
-
msgstr "Wachtwoord"
|
90 |
|
91 |
-
#:
|
92 |
#, fuzzy
|
93 |
-
msgid "
|
94 |
-
msgstr "
|
95 |
-
|
96 |
-
#: functions.php:56
|
97 |
-
msgid "Remember me"
|
98 |
-
msgstr "Herinner deze gegevens."
|
99 |
-
|
100 |
-
#: functions.php:162
|
101 |
-
#, php-format
|
102 |
-
msgid "Posts by %s"
|
103 |
-
msgstr ""
|
104 |
|
105 |
-
#:
|
106 |
-
|
|
|
107 |
msgstr ""
|
108 |
|
109 |
-
#: settings.php:
|
110 |
#, fuzzy
|
111 |
-
msgid "
|
112 |
-
msgstr "
|
113 |
|
114 |
-
#: settings.php:
|
115 |
-
#: settings.php:38
|
116 |
#, fuzzy
|
117 |
-
msgid "
|
118 |
-
msgstr "
|
119 |
|
120 |
-
#: settings.php:
|
121 |
-
|
122 |
-
msgid "
|
123 |
-
msgstr "
|
124 |
|
125 |
-
#: settings.php:
|
126 |
#, fuzzy
|
127 |
-
msgid "
|
128 |
-
msgstr "
|
129 |
|
130 |
-
#:
|
131 |
-
msgid "
|
132 |
msgstr ""
|
133 |
|
134 |
-
#:
|
135 |
-
msgid "
|
136 |
msgstr ""
|
137 |
|
138 |
-
#:
|
139 |
-
msgid "
|
140 |
msgstr ""
|
141 |
|
142 |
-
#:
|
143 |
-
msgid "
|
144 |
msgstr ""
|
145 |
|
146 |
-
#:
|
147 |
-
msgid "
|
148 |
msgstr ""
|
149 |
|
150 |
-
#:
|
151 |
-
msgid "
|
152 |
msgstr ""
|
153 |
|
154 |
-
#:
|
155 |
-
|
156 |
-
|
157 |
-
msgstr "Reset"
|
158 |
|
159 |
-
#:
|
160 |
-
#: components/edit-roles/edit-roles.php:168
|
161 |
-
#: components/edit-roles/edit-roles.php:171
|
162 |
#, php-format
|
163 |
-
msgid "
|
164 |
msgstr ""
|
165 |
|
166 |
-
#:
|
167 |
#, fuzzy
|
168 |
-
msgid "
|
169 |
-
msgstr "
|
170 |
|
171 |
-
#:
|
172 |
-
#,
|
173 |
-
msgid "
|
|
|
|
|
|
|
|
|
174 |
msgstr ""
|
175 |
|
176 |
-
#:
|
177 |
-
|
178 |
-
#: components/edit-roles/edit-roles.php:147
|
179 |
-
msgid "Capabilities"
|
180 |
msgstr ""
|
181 |
|
182 |
-
#:
|
183 |
-
msgid "
|
184 |
msgstr ""
|
185 |
|
186 |
-
#:
|
187 |
-
msgid "
|
188 |
msgstr ""
|
189 |
|
190 |
-
#:
|
191 |
-
msgid "
|
192 |
msgstr ""
|
193 |
|
194 |
-
#:
|
195 |
-
|
196 |
-
|
197 |
-
msgstr "Bewerk"
|
198 |
|
199 |
-
#:
|
200 |
-
msgid "
|
201 |
msgstr ""
|
202 |
|
203 |
-
#:
|
204 |
-
msgid "
|
205 |
msgstr ""
|
206 |
|
207 |
-
#:
|
208 |
-
msgid "
|
209 |
msgstr ""
|
210 |
|
211 |
-
#:
|
212 |
#, fuzzy
|
213 |
-
msgid "
|
214 |
-
msgstr "
|
215 |
|
216 |
-
#:
|
217 |
-
|
218 |
-
|
219 |
-
msgstr "Archieven"
|
220 |
|
221 |
-
#:
|
222 |
-
|
223 |
-
msgid "Bulk Actions"
|
224 |
msgstr ""
|
225 |
|
226 |
-
#:
|
227 |
-
|
228 |
-
|
229 |
-
msgid "Delete"
|
230 |
msgstr ""
|
231 |
|
232 |
-
#:
|
233 |
-
|
234 |
-
|
235 |
-
|
236 |
-
|
237 |
-
msgid "
|
238 |
-
msgstr "
|
239 |
|
240 |
-
#:
|
241 |
-
#: components/edit-roles/edit-roles.php:144
|
242 |
#, fuzzy
|
243 |
-
msgid "Role
|
244 |
-
msgstr "
|
245 |
|
246 |
-
#:
|
247 |
-
#:
|
248 |
-
msgid "
|
249 |
msgstr ""
|
250 |
|
251 |
-
#:
|
252 |
-
#: components/edit-roles/edit-roles.php:146
|
253 |
#, fuzzy
|
254 |
-
msgid "
|
255 |
-
msgstr "
|
256 |
-
|
257 |
-
#: components/edit-roles/edit-roles.php:171
|
258 |
-
msgid "Edit"
|
259 |
-
msgstr "Bewerk"
|
260 |
|
261 |
-
#:
|
262 |
-
|
263 |
-
msgid "Delete the %1$s role"
|
264 |
msgstr ""
|
265 |
|
266 |
-
#:
|
267 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
268 |
msgstr ""
|
269 |
|
270 |
-
#:
|
271 |
-
msgid "
|
272 |
msgstr ""
|
273 |
|
274 |
-
#:
|
275 |
-
|
276 |
-
#: components/edit-roles/edit-roles.php:202
|
277 |
-
#, php-format
|
278 |
-
msgid "View all users with the %1$s role"
|
279 |
msgstr ""
|
280 |
|
281 |
-
#:
|
282 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
283 |
msgstr ""
|
284 |
|
285 |
-
#:
|
286 |
-
|
287 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
288 |
msgstr ""
|
289 |
|
290 |
-
#:
|
291 |
#, fuzzy
|
292 |
-
msgid "
|
293 |
-
msgstr "
|
294 |
|
295 |
-
#:
|
296 |
-
msgid "
|
297 |
msgstr ""
|
298 |
|
299 |
-
#:
|
300 |
-
#,
|
301 |
-
msgid "
|
|
|
|
|
|
|
|
|
302 |
msgstr ""
|
303 |
|
304 |
-
#:
|
305 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
306 |
msgstr ""
|
307 |
|
308 |
-
#:
|
309 |
-
|
|
|
|
|
310 |
msgstr ""
|
311 |
|
312 |
-
#:
|
313 |
-
#:
|
314 |
#, fuzzy
|
315 |
-
msgid "
|
316 |
-
msgstr "
|
317 |
|
318 |
-
#:
|
319 |
-
|
|
|
|
|
320 |
msgstr ""
|
321 |
|
322 |
-
#:
|
323 |
-
|
324 |
-
|
|
|
|
|
325 |
|
326 |
-
#:
|
327 |
-
|
|
|
328 |
msgstr ""
|
329 |
|
330 |
-
#:
|
|
|
331 |
#, fuzzy, php-format
|
332 |
-
msgid "
|
333 |
-
msgstr "
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
334 |
|
335 |
-
#:
|
336 |
-
msgid "
|
337 |
msgstr ""
|
338 |
|
339 |
-
#:
|
340 |
-
msgid "
|
341 |
msgstr ""
|
342 |
|
343 |
-
#:
|
|
|
344 |
#, php-format
|
345 |
-
msgid "
|
346 |
msgstr ""
|
347 |
|
348 |
-
#:
|
349 |
-
msgid "
|
350 |
msgstr ""
|
351 |
|
352 |
-
#:
|
353 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
354 |
msgstr ""
|
355 |
|
356 |
-
#:
|
357 |
#, fuzzy
|
358 |
-
msgid "
|
359 |
-
msgstr "
|
360 |
|
361 |
-
#:
|
362 |
-
|
363 |
-
|
|
|
364 |
|
365 |
-
#:
|
366 |
-
msgid "
|
367 |
msgstr ""
|
368 |
|
369 |
-
#:
|
370 |
-
msgid "
|
371 |
msgstr ""
|
372 |
|
373 |
-
#:
|
374 |
-
|
375 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
376 |
|
377 |
-
#:
|
378 |
-
#: trash/login-widget/login.php:6
|
379 |
msgid "A widget that allows users to log into your site."
|
380 |
msgstr ""
|
381 |
|
382 |
-
#:
|
383 |
-
#: trash/login-widget/login.php:8
|
384 |
#, fuzzy
|
385 |
msgid "Login Form"
|
386 |
msgstr "Aanmelden"
|
387 |
|
388 |
-
#:
|
389 |
-
#:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
390 |
msgid "Password"
|
391 |
msgstr "Wachtwoord"
|
392 |
|
393 |
-
#:
|
394 |
-
#: trash/login-widget/login.php:108
|
395 |
#, fuzzy
|
396 |
-
msgid "Remember
|
397 |
msgstr "Herinner deze gegevens."
|
398 |
|
399 |
-
#:
|
400 |
-
#: trash/login-widget/login.php:110
|
401 |
msgid "Please log into the site."
|
402 |
msgstr ""
|
403 |
|
404 |
-
#:
|
405 |
-
#: trash/login-widget/login.php:111
|
406 |
msgid "You are currently logged in."
|
407 |
msgstr ""
|
408 |
|
409 |
-
#:
|
410 |
-
#:
|
411 |
-
#: trash/login-widget/login.php:120
|
412 |
msgid "Title:"
|
413 |
msgstr "Titel"
|
414 |
|
415 |
-
#:
|
416 |
-
#: trash/login-widget/login.php:125
|
417 |
-
msgid "Logged out text:"
|
418 |
-
msgstr ""
|
419 |
-
|
420 |
-
#: components/widgets/login.php:136
|
421 |
-
#: trash/login-widget/login.php:130
|
422 |
-
msgid "Logged in text:"
|
423 |
-
msgstr ""
|
424 |
-
|
425 |
-
#: components/widgets/login.php:145
|
426 |
-
#: trash/login-widget/login.php:139
|
427 |
-
msgid "Display avatar?"
|
428 |
-
msgstr ""
|
429 |
-
|
430 |
-
#: components/widgets/login.php:148
|
431 |
-
#: trash/login-widget/login.php:142
|
432 |
-
#, fuzzy
|
433 |
-
msgid "Username Label:"
|
434 |
-
msgstr "Gebruikersnaam*"
|
435 |
-
|
436 |
-
#: components/widgets/login.php:152
|
437 |
-
#: trash/login-widget/login.php:146
|
438 |
#, fuzzy
|
439 |
-
msgid "
|
440 |
-
msgstr "
|
441 |
-
|
442 |
-
#: components/widgets/login.php:157
|
443 |
-
#: trash/login-widget/login.php:151
|
444 |
-
msgid "Submit Text:"
|
445 |
-
msgstr "Verstuur tekst:"
|
446 |
|
447 |
-
#:
|
448 |
-
#: trash/login-widget/login.php:155
|
449 |
#, fuzzy
|
450 |
-
msgid "
|
451 |
msgstr "Herinner deze gegevens."
|
452 |
|
453 |
-
#:
|
454 |
-
|
455 |
-
|
456 |
-
msgstr "Een geavanceerde widget die je de totale controle geeft over de output van je pagina-links."
|
457 |
|
458 |
-
#:
|
459 |
-
msgid "
|
460 |
-
msgstr "
|
461 |
|
462 |
-
#:
|
463 |
-
msgid "
|
464 |
-
msgstr "
|
465 |
|
466 |
-
#:
|
467 |
-
msgid "
|
468 |
-
msgstr "
|
469 |
|
470 |
-
#:
|
471 |
-
msgid "
|
472 |
-
msgstr "
|
473 |
|
474 |
-
#:
|
475 |
-
msgid "
|
476 |
-
msgstr "
|
477 |
|
478 |
-
#:
|
479 |
#, fuzzy
|
480 |
-
msgid "
|
481 |
-
msgstr "
|
482 |
|
483 |
-
#:
|
484 |
-
|
485 |
-
|
486 |
-
#: Copy.php:137
|
487 |
-
#: trash/manage-capabilities/capabilities.php:56
|
488 |
-
msgid "Save Changes"
|
489 |
-
msgstr "Bewaren"
|
490 |
|
491 |
-
#:
|
492 |
-
msgid "
|
493 |
msgstr ""
|
494 |
|
495 |
-
#:
|
496 |
#, fuzzy
|
497 |
-
msgid "
|
498 |
-
msgstr "
|
499 |
|
500 |
-
#:
|
501 |
-
#: trash/roles.php:40
|
502 |
#, fuzzy
|
503 |
-
msgid "
|
504 |
-
msgstr "
|
505 |
-
|
506 |
-
#: trash/members - Copy.php:266
|
507 |
-
#: trash/members-old.php:440
|
508 |
-
#, php-format
|
509 |
-
msgid "Choose which capabilities users of the <code>%1$s</code> role should have."
|
510 |
-
msgstr ""
|
511 |
|
512 |
-
#:
|
513 |
-
|
514 |
-
|
|
|
515 |
|
516 |
-
#:
|
517 |
-
msgid "
|
518 |
msgstr ""
|
519 |
|
520 |
-
#:
|
521 |
-
msgid "Hybrid"
|
522 |
-
msgstr "Hybrid"
|
523 |
-
|
524 |
-
#: trash/new-role.php:5
|
525 |
#, fuzzy
|
526 |
-
msgid "
|
527 |
-
msgstr "
|
528 |
|
529 |
-
#: trash/new-role.php:30
|
530 |
#, fuzzy
|
531 |
-
msgid "
|
532 |
-
msgstr "
|
533 |
|
534 |
-
|
535 |
-
|
536 |
-
|
537 |
-
msgstr ""
|
538 |
|
539 |
-
|
540 |
-
msgid "
|
541 |
-
msgstr ""
|
542 |
|
543 |
-
|
544 |
-
msgid "
|
545 |
-
msgstr ""
|
546 |
|
547 |
-
|
548 |
-
msgid "
|
549 |
-
msgstr ""
|
550 |
|
551 |
-
|
552 |
-
msgid "
|
553 |
-
msgstr ""
|
554 |
|
555 |
-
|
556 |
-
msgid "
|
557 |
-
msgstr ""
|
558 |
|
559 |
-
|
560 |
-
|
561 |
-
|
562 |
-
msgstr ""
|
563 |
|
564 |
-
|
565 |
-
msgid "
|
566 |
-
msgstr ""
|
567 |
|
568 |
-
|
569 |
-
|
570 |
-
msgstr ""
|
571 |
|
572 |
-
|
573 |
-
msgid "
|
574 |
-
msgstr ""
|
575 |
|
576 |
-
|
577 |
-
msgid "
|
578 |
-
|
|
|
|
|
|
|
|
|
579 |
|
580 |
-
|
581 |
-
|
582 |
-
msgstr ""
|
583 |
|
584 |
-
|
585 |
-
|
586 |
-
msgstr ""
|
587 |
|
588 |
-
|
589 |
-
|
590 |
-
msgstr ""
|
591 |
|
592 |
-
|
593 |
-
|
594 |
-
msgstr ""
|
595 |
|
596 |
-
|
597 |
-
|
598 |
-
msgstr ""
|
599 |
|
600 |
-
|
601 |
-
msgid "
|
602 |
-
msgstr ""
|
603 |
|
604 |
-
|
605 |
-
|
606 |
-
msgstr ""
|
607 |
|
608 |
-
|
609 |
-
msgid "
|
610 |
-
msgstr ""
|
611 |
|
612 |
-
#~ msgid "Not Found"
|
613 |
-
#~ msgstr "Niet gevonden"
|
614 |
#~ msgid ""
|
615 |
#~ "You tried going to %1$s, and it doesn't exist. All is not lost! You can "
|
616 |
#~ "search for what you're looking for."
|
617 |
#~ msgstr ""
|
618 |
#~ "Je wilde naar %1$s gaan, maar dit bestaat niet. Geen nood! Zoek hier "
|
619 |
#~ "wat je zocht:"
|
|
|
620 |
#~ msgid "Possibly Related"
|
621 |
#~ msgstr "Mogelijk gerelateerd"
|
|
|
622 |
#~ msgid "Continue reading"
|
623 |
#~ msgstr "Lees hier verder"
|
|
|
624 |
#~ msgid "Download "%1$s""
|
625 |
#~ msgstr "Download "%1$s""
|
|
|
626 |
#~ msgid "Pages:"
|
627 |
#~ msgstr "Pagina's:"
|
|
|
628 |
#~ msgid "Sorry, no applications matched your criteria."
|
629 |
#~ msgstr "Sorry, er zijn geen toepassingen die met je criteria overeenkomen."
|
|
|
630 |
#~ msgid "You are browsing the archive for %1$s."
|
631 |
#~ msgstr "Je bladert nu door het archief voor %1$s."
|
|
|
632 |
#~ msgid "By"
|
633 |
#~ msgstr "Door"
|
|
|
634 |
#~ msgid "on"
|
635 |
#~ msgstr "op"
|
|
|
636 |
#~ msgid "l, F jS, Y, g:i a"
|
637 |
#~ msgstr "l, j F, Y, G:i"
|
|
|
638 |
#~ msgid "F j, Y"
|
639 |
#~ msgstr "j F, Y"
|
|
|
640 |
#~ msgid "Posted in"
|
641 |
#~ msgstr "Gepost in"
|
|
|
642 |
#~ msgid "Tagged"
|
643 |
#~ msgstr "Tags:"
|
|
|
644 |
#~ msgid "Leave a response"
|
645 |
#~ msgstr "Reageer"
|
|
|
646 |
#~ msgid "1 Response"
|
647 |
#~ msgstr "1 Reactie"
|
|
|
648 |
#~ msgid "% Responses"
|
649 |
#~ msgstr "% Reacties"
|
|
|
650 |
#~ msgid "Sorry, there are no posts in this archive."
|
651 |
#~ msgstr "Sorry, dit archief bevat geen berichten."
|
|
|
652 |
#~ msgid "Archives by category"
|
653 |
#~ msgstr "Archieven per rubriek"
|
|
|
654 |
#~ msgid "Archives by month"
|
655 |
#~ msgstr "Archieven per maand"
|
|
|
656 |
#~ msgid "Sorry, no page matched your criteria."
|
657 |
#~ msgstr "Sorry, er bestaat geen pagina die aan je criteria voldoet."
|
|
|
658 |
#~ msgid "Sorry, no attachments matched your criteria."
|
659 |
#~ msgstr "Sorry, er zijn geen bijlages die aan je criteria voldoen."
|
|
|
660 |
#~ msgid "Sorry, no audio files matched your criteria."
|
661 |
#~ msgstr "Sorry, er zijn geen geluidsbestanden die aan je criteria voldoen."
|
|
|
662 |
#~ msgid "Send an email to %1$s"
|
663 |
#~ msgstr "Stuur een email aan %1$s"
|
|
|
664 |
#~ msgid "Email %1$s"
|
665 |
#~ msgstr "Email %1$s"
|
|
|
666 |
#~ msgid "%1$s hasn't written any posts yet."
|
667 |
#~ msgstr "%1$s heeft nog geen berichten geschreven."
|
|
|
668 |
#~ msgid "Nickname:"
|
669 |
#~ msgstr "Bijnaam:"
|
|
|
670 |
#~ msgid "Email:"
|
671 |
#~ msgstr "Email:"
|
|
|
672 |
#~ msgid "Website:"
|
673 |
#~ msgstr "Website:"
|
|
|
674 |
#~ msgid "AIM:"
|
675 |
#~ msgstr "AIM:"
|
|
|
676 |
#~ msgid "IM with %1$s"
|
677 |
#~ msgstr "IM met %1$s"
|
|
|
678 |
#~ msgid "Jabber:"
|
679 |
#~ msgstr "Jabber:"
|
|
|
680 |
#~ msgid "Yahoo:"
|
681 |
#~ msgstr "Yahoo:"
|
|
|
682 |
#~ msgid "Sorry, there are no posts in the %1$s category."
|
683 |
#~ msgstr "Sorry, er zijn geen berichten in de rubriek %1$s. "
|
|
|
684 |
#~ msgid "Please do not load this page directly. Thanks!"
|
685 |
#~ msgstr "Gelieve deze pagina niet rechtstreeks te laden. Dankjewel!"
|
|
|
686 |
#~ msgid "No Responses"
|
687 |
#~ msgstr "Geen reacties"
|
|
|
688 |
#~ msgid "One Response"
|
689 |
#~ msgstr "Een reactie"
|
|
|
690 |
#~ msgid "Responses"
|
691 |
#~ msgstr "Reacties"
|
|
|
692 |
#~ msgid "to"
|
693 |
#~ msgstr "naar"
|
|
|
694 |
#~ msgid "%1$s at %2$s"
|
695 |
#~ msgstr "%1$s op %2$s"
|
|
|
696 |
#~ msgid "Permalink to comment"
|
697 |
#~ msgstr "Permalink naar reactie"
|
|
|
698 |
#~ msgid "Permalink"
|
699 |
#~ msgstr "Permalink"
|
|
|
700 |
#~ msgid "Your comment is awaiting moderation."
|
701 |
#~ msgstr "Je reactie wacht op moderatie."
|
|
|
702 |
#~ msgid ""
|
703 |
#~ "Comments are closed, but <a href=\"%1$s\" title=\"Trackback URL for this "
|
704 |
#~ "post\">trackbacks</a> and pingbacks are open."
|
705 |
#~ msgstr ""
|
706 |
#~ "Reageren is niet mogelijk, maar <a href=\"%1$s\" title=\"Trackback URL "
|
707 |
#~ "for this post\">trackbacks</a> en pingbacks blijven open."
|
|
|
708 |
#~ msgid "Comments are closed."
|
709 |
#~ msgstr "Reageren is niet mogelijk."
|
|
|
710 |
#~ msgid "Leave a Reply"
|
711 |
#~ msgstr "Reageer"
|
|
|
712 |
#~ msgid ""
|
713 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to post a "
|
714 |
#~ "comment."
|
715 |
#~ msgstr ""
|
716 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn om te "
|
717 |
#~ "reageren."
|
|
|
718 |
#~ msgid "Logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
719 |
#~ msgstr "Ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
|
|
720 |
#~ msgid "Log out of this account"
|
721 |
#~ msgstr "Afmelden."
|
|
|
722 |
#~ msgid "Logout »"
|
723 |
#~ msgstr "Afmelden »"
|
|
|
724 |
#~ msgid "*"
|
725 |
#~ msgstr "*"
|
726 |
-
|
727 |
-
#~ msgstr "Email"
|
728 |
#~ msgid "Website"
|
729 |
#~ msgstr "Website"
|
|
|
730 |
#~ msgid "Submit"
|
731 |
#~ msgstr "Verstuur"
|
|
|
732 |
#~ msgid "Password Protected"
|
733 |
#~ msgstr "Beveiligd met wachtwoord"
|
|
|
734 |
#~ msgid "Enter the password to view comments."
|
735 |
#~ msgstr "Voer wachtwoord in om reacties te lezen."
|
|
|
736 |
#~ msgid "Leave a Reply to %s"
|
737 |
#~ msgstr "Reageer op %s"
|
|
|
738 |
#~ msgid "Click here to cancel reply."
|
739 |
#~ msgstr "Klik hier om de reactie te annuleren."
|
|
|
740 |
#~ msgid "F jS, Y"
|
741 |
#~ msgstr "j F, Y"
|
|
|
742 |
#~ msgid "Week %1$s of %2$s"
|
743 |
#~ msgstr "Week %1$s van %2$s"
|
|
|
744 |
#~ msgid "W"
|
745 |
#~ msgstr "W"
|
|
|
746 |
#~ msgid "Y"
|
747 |
#~ msgstr "Y"
|
|
|
748 |
#~ msgid "You are browsing the archive for week %1$s of %2$s."
|
749 |
#~ msgstr "Je bekijkt het archief voor week %1$s van %2$s."
|
|
|
750 |
#~ msgid "Sorry, there are no posts for %1$s."
|
751 |
#~ msgstr "Sorry, maar er zijn geen berichten voor %1$s."
|
|
|
752 |
#~ msgid "Sorry, no posts matched your criteria."
|
753 |
#~ msgstr "Sorry, er zijn geen berichten die met je criteria overeenkomen."
|
|
|
754 |
#~ msgid "Sorry, no images matched your criteria."
|
755 |
#~ msgstr "Sorry, er zijn geen afbeeldingen die met je criteria overeenkomen."
|
|
|
756 |
#~ msgid ""
|
757 |
#~ "You are currently logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
758 |
#~ msgstr ""
|
759 |
#~ "Je bent momenteel ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
|
|
760 |
#~ msgid ""
|
761 |
#~ "You have successfully logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</"
|
762 |
#~ "a>."
|
763 |
#~ msgstr ""
|
764 |
#~ "Je bent succesvol ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
|
|
765 |
#~ msgid ""
|
766 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to view the "
|
767 |
#~ "content of this page."
|
768 |
#~ msgstr ""
|
769 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn om de inhoud "
|
770 |
#~ "van deze pagina te bekijken."
|
|
|
771 |
#~ msgid ""
|
772 |
#~ "If you're not currently a member, please take a moment to <a href=\"%1$s"
|
773 |
#~ "\" title=\"Register\">register</a>."
|
774 |
#~ msgstr ""
|
775 |
#~ "Als je momenteel nog geen lid bent, neem dan een ogenblikje tijd om je te "
|
776 |
#~ "<a href=\"%1$s\" title=\"Register\">registreren</a>."
|
|
|
777 |
#~ msgid "You must enter a post title."
|
778 |
#~ msgstr "Je moet een titel voor het bericht invoeren."
|
|
|
779 |
#~ msgid "You must write something."
|
780 |
#~ msgstr "Je moet hier iets schrijven."
|
|
|
781 |
#~ msgid "Title"
|
782 |
#~ msgstr "Titel"
|
|
|
783 |
#~ msgid "Write"
|
784 |
#~ msgstr "Schrijf"
|
|
|
785 |
#~ msgid "Tags"
|
786 |
#~ msgstr "Tags"
|
|
|
787 |
#~ msgid "Publish"
|
788 |
#~ msgstr "Publiceer"
|
|
|
789 |
#~ msgid "You don't have the appropriate capabilities to publish posts."
|
790 |
#~ msgstr "Je hebt niet de nodige rechten om berichten te publiceren."
|
|
|
791 |
#~ msgid ""
|
792 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> with "
|
793 |
#~ "appropriate user capabilities to publish posts."
|
794 |
#~ msgstr ""
|
795 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn met de nodige "
|
796 |
#~ "gebruikersrechten om berichten te kunnen publiceren."
|
|
|
797 |
#~ msgid "A username is required for registration."
|
798 |
#~ msgstr "Om te registreren is een gebruikersnaam nodig."
|
|
|
799 |
#~ msgid "You must enter an email address."
|
800 |
#~ msgstr "Je moet een email-adres invoeren."
|
|
|
801 |
#~ msgid "You must enter a password."
|
802 |
#~ msgstr "Je moet een wachtwoord invoeren."
|
|
|
803 |
#~ msgid "You must enter your password twice."
|
804 |
#~ msgstr "Je moet je wachtwoord tweemaal invoeren."
|
|
|
805 |
#~ msgid "You must enter the same password twice."
|
806 |
#~ msgstr "Je moet tweemaal hetzelfde wachtwoord invoeren."
|
|
|
807 |
#~ msgid "User registration failed. Please try again."
|
808 |
#~ msgstr "Gebruikersregistratie mislukt. Probeer opnieuw."
|
|
|
809 |
#~ msgid ""
|
810 |
#~ "You are logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>. You don't "
|
811 |
#~ "need another account."
|
812 |
#~ msgstr ""
|
813 |
#~ "Je bent ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>. Je hebt "
|
814 |
#~ "geen bijkomend account nodig."
|
|
|
815 |
#~ msgid "Thank you for registering, %1$s."
|
816 |
#~ msgstr "Bedankt voor je registratie, %1$s."
|
|
|
817 |
#~ msgid "Users can register themselves or you can manually create users here."
|
818 |
#~ msgstr ""
|
819 |
#~ "Gebruikers kunnen zichzelf registreren of je kan hier handmatig "
|
820 |
#~ "gebruikersaccounts aanmaken."
|
|
|
821 |
#~ msgid ""
|
822 |
#~ "Users cannot currently register themselves, but you can manually create "
|
823 |
#~ "users here."
|
824 |
#~ msgstr ""
|
825 |
#~ "Gebruikers kunnen zichzelf niet registreren, maar je kan hier wel "
|
826 |
#~ "handmatig gebruikersaccounts aanmaken."
|
|
|
827 |
#~ msgid "Required fields are marked <span class=\"required\">*</span>"
|
828 |
#~ msgstr ""
|
829 |
#~ "Verplichte velden zijn aangeduid met <span class=\"required\">*</span>."
|
830 |
-
|
831 |
-
#~ msgstr "Voornaam"
|
832 |
#~ msgid "Last Name"
|
833 |
#~ msgstr "Naam"
|
|
|
834 |
#~ msgid "E-mail *"
|
835 |
#~ msgstr "E-mail *"
|
|
|
836 |
#~ msgid "Repeat Password *"
|
837 |
#~ msgstr "Herhaal je wachtwoord*"
|
|
|
838 |
#~ msgid "Biographical Information"
|
839 |
#~ msgstr "Biografische informatie"
|
840 |
-
|
841 |
-
#~ msgstr "Registreer"
|
842 |
#~ msgid "You are browsing the search results for "%1$s""
|
843 |
#~ msgstr "Je bekijkt hier de zoekresultaten voor "%1$s""
|
|
|
844 |
#~ msgid "Maybe you'd like to try inputting different search terms."
|
845 |
#~ msgstr "Misschien wil je andere zoektermen invoeren."
|
|
|
846 |
#~ msgid "You are browsing the %1$s tag archive."
|
847 |
#~ msgstr "Je bekijkt het archief voor de tag %1$s"
|
|
|
848 |
#~ msgid "Sorry, there are no posts tagged %1$s."
|
849 |
#~ msgstr "Sorry, er zijn geen berichten met de tag %1$s."
|
|
|
850 |
#~ msgid "Sorry, no documents matched your criteria."
|
851 |
#~ msgstr "Sorry, er zijn geen documenten die met je criteria overeenkomen."
|
|
|
852 |
#~ msgid "Sorry, no videos matched your criteria."
|
853 |
#~ msgstr "Sorry, er zijn geen video's die met je criteria overeenkomen."
|
|
|
854 |
#~ msgid "Widget Template"
|
855 |
#~ msgstr "Widget Template"
|
|
|
856 |
#~ msgid "About This Theme"
|
857 |
#~ msgstr "Over dit Thema"
|
|
|
858 |
#~ msgid "Theme Description:"
|
859 |
#~ msgstr "Thema Beschrijving:"
|
860 |
-
|
861 |
-
#~ msgstr "Thema versie:"
|
862 |
#~ msgid "Theme Documentation:"
|
863 |
#~ msgstr "Thema Documentatie:"
|
864 |
-
|
865 |
-
#~ msgstr "Thema Documentatie"
|
866 |
-
#~ msgid "Theme Support:"
|
867 |
-
#~ msgstr "Thema Ondersteuning:"
|
868 |
#~ msgid "Get support for this theme"
|
869 |
#~ msgstr "Ondersteuning voor dit thema"
|
870 |
-
|
871 |
-
#~ msgstr "Bezoek de support forums."
|
872 |
#~ msgid "Select your theme settings"
|
873 |
#~ msgstr "Selecteer de settings voor je thema"
|
874 |
|
@@ -887,19 +1002,25 @@ msgstr ""
|
|
887 |
#~ msgstr ""
|
888 |
#~ "Selecteer dit als je wenst dat je secundaire widgets standaard geladen "
|
889 |
#~ "worden op de home-pagina als niet anders geselecteerd is."
|
|
|
890 |
#~ msgid "Stylesheets:"
|
891 |
#~ msgstr "Stijlbladen (CSS)"
|
|
|
892 |
#~ msgid ""
|
893 |
#~ "Select this to have the theme automatically include a print stylesheet."
|
894 |
#~ msgstr ""
|
895 |
#~ "Selecteer dit als je wil dat het thema automatisch een 'print' stijlblad "
|
896 |
#~ "insluit."
|
|
|
897 |
#~ msgid "JavaScript:"
|
898 |
#~ msgstr "JavaScript:"
|
|
|
899 |
#~ msgid "Include the pull quote JavaScript."
|
900 |
#~ msgstr "Inclusief pull quote JavaScript."
|
|
|
901 |
#~ msgid "Feeds:"
|
902 |
#~ msgstr "Feeds:"
|
|
|
903 |
#~ msgid ""
|
904 |
#~ "If you have a an alternate feed address, such as one from <a href="
|
905 |
#~ "\"http://feedburner.com\" title=\"Feedburner\">Feedburner</a>, you can "
|
@@ -910,37 +1031,47 @@ msgstr ""
|
|
910 |
#~ "\"http://feedburner.com\" title=\"Feedburner\">Feedburner</a>, kan je dat "
|
911 |
#~ "hier invoeren om het door het thema te laten gebruiken. Als je dit "
|
912 |
#~ "blanco laat, wordt de standaard WordPress RSS feed gebruikt."
|
|
|
913 |
#~ msgid "Title & Meta:"
|
914 |
#~ msgstr "Titel & Meta"
|
|
|
915 |
#~ msgid "Use category slugs on single posts for your meta keywords?"
|
916 |
#~ msgstr ""
|
917 |
#~ "Gebruik categorie 'slug' als meta keywoord voor afzonderlijke berichten."
|
|
|
918 |
#~ msgid "Use tag slugs on single posts for your meta keywords?"
|
919 |
#~ msgstr "Gebruik tag 'slug' als meta keywoord voor afzonderlijke berichten."
|
|
|
920 |
#~ msgid "Use the excerpt on single posts for your meta description?"
|
921 |
#~ msgstr ""
|
922 |
#~ "Uittreksel als meta-omschrijving gebruiken voor afzonderlijke berichten?"
|
|
|
923 |
#~ msgid "Use the author bio on author archives for your meta description?"
|
924 |
#~ msgstr ""
|
925 |
#~ "Auteurs biografie als meta-omschrijving gebruiken voor afzonderlijke "
|
926 |
#~ "berichten?"
|
|
|
927 |
#~ msgid ""
|
928 |
#~ "Use the category description on category archives for your meta "
|
929 |
#~ "description?"
|
930 |
#~ msgstr ""
|
931 |
#~ "Rubriek-omschrijving als meta-omschrijving gebruiken voor afzonderlijke "
|
932 |
#~ "berichten?"
|
|
|
933 |
#~ msgid "Use the author's name on pages and posts as the meta author?"
|
934 |
#~ msgstr ""
|
935 |
#~ "Naam van de auteur als meta-auteur gebruiken op pagina's en berichten?"
|
|
|
936 |
#~ msgid "Append site title to the end of the page name?"
|
937 |
#~ msgstr "Site-naam toevoegen aan het eind van de pagina-naam?"
|
|
|
938 |
#~ msgid ""
|
939 |
#~ "You can change these settings in the box labeled <em>Hybrid Settings</em> "
|
940 |
#~ "when writing a post or page."
|
941 |
#~ msgstr ""
|
942 |
#~ "Je kan deze settings aanpassen in het vak <em>Hybrid Settings</em> "
|
943 |
#~ "wanneer je een bericht of pagina bewerkt."
|
|
|
944 |
#~ msgid ""
|
945 |
#~ "The <a href=\"%1$s\" title=\"All-In-One SEO Pack\">All-In-One SEO Pack</"
|
946 |
#~ "a> and <a href=\"%2$s\" title=\"Headspace2\">Headspace2</a> plugins will "
|
@@ -949,8 +1080,10 @@ msgstr ""
|
|
949 |
#~ "De <a href=\"%1$s\" title=\"All-In-One SEO Pack\">All-In-One SEO Pack</a> "
|
950 |
#~ "en <a href=\"%2$s\" title=\"Headspace2\">Headspace2</a> plugins zullen "
|
951 |
#~ "deze en de indexeringssettings overschrijven."
|
|
|
952 |
#~ msgid "Indexing:"
|
953 |
#~ msgstr "Indexeren:"
|
|
|
954 |
#~ msgid ""
|
955 |
#~ "Choose which pages of your blog get indexed by the search engines. Only "
|
956 |
#~ "selected pages will be indexed. If not selected, those pages will be "
|
@@ -959,6 +1092,7 @@ msgstr ""
|
|
959 |
#~ "Kies welke pagina's van je blog door zoekmachines kunnen geïndexeerd "
|
960 |
#~ "worden. Alleen de geselecteerde pagina's worden geïndexeerd. Niet "
|
961 |
#~ "geselecteerde pagina's worden geblokkeerd."
|
|
|
962 |
#~ msgid ""
|
963 |
#~ "Note: Some of these settings will render the Title & Meta settings "
|
964 |
#~ "moot. Also, setting your site to privacy mode will override these "
|
@@ -967,28 +1101,40 @@ msgstr ""
|
|
967 |
#~ "Let op: Sommige van deze settings kunnen conflicteren met de Titel & "
|
968 |
#~ "Meta settings. Ook wanneer je je site in een beveiligde modus omzet, "
|
969 |
#~ "worden deze settings overschreven."
|
|
|
970 |
#~ msgid "Home page"
|
971 |
#~ msgstr "Homepage"
|
|
|
972 |
#~ msgid "Single posts"
|
973 |
#~ msgstr "Afzonderlijke berichten"
|
|
|
974 |
#~ msgid "Attachments"
|
975 |
#~ msgstr "Bijlages"
|
|
|
976 |
#~ msgid "Pages"
|
977 |
#~ msgstr "Pagina's"
|
|
|
978 |
#~ msgid "Date-based archives"
|
979 |
#~ msgstr "Datum-gebaseerd archief"
|
|
|
980 |
#~ msgid "Category archives"
|
981 |
#~ msgstr "Archief per rubriek"
|
|
|
982 |
#~ msgid "Tag archives"
|
983 |
#~ msgstr "Archief op tags"
|
|
|
984 |
#~ msgid "Author archives"
|
985 |
#~ msgstr "Archief op auteur"
|
|
|
986 |
#~ msgid "Search"
|
987 |
#~ msgstr "Zoek"
|
|
|
988 |
#~ msgid "404"
|
989 |
#~ msgstr "404"
|
|
|
990 |
#~ msgid "Avatars:"
|
991 |
#~ msgstr "Avatars:"
|
|
|
992 |
#~ msgid ""
|
993 |
#~ "You can set a default avatar for users without one if you don't like the "
|
994 |
#~ "choices WordPress offers you. Simply add the full path to the image file."
|
@@ -996,16 +1142,21 @@ msgstr ""
|
|
996 |
#~ "Je kan een standaard-avatar instellen voor gebruikers zonder avatar, "
|
997 |
#~ "wanneer de keuze van WordPress je niet bevalt. Voer daartoe hier het "
|
998 |
#~ "complete pad naar de afbeelding in."
|
|
|
999 |
#~ msgid "Comments:"
|
1000 |
#~ msgstr "Reacties:"
|
|
|
1001 |
#~ msgid "Check to use the comments popup window instead of regular comments."
|
1002 |
#~ msgstr ""
|
1003 |
#~ "Aanvinken om een popup-scherm voor reacties te gebruiken in plaats van "
|
1004 |
#~ "het gebruikelijke commentaarscherm."
|
|
|
1005 |
#~ msgid "WP 2.7+ only."
|
1006 |
#~ msgstr "Enkel voor WP 2.7+"
|
|
|
1007 |
#~ msgid "Footer Insert:"
|
1008 |
#~ msgstr "Inserts voor Footer:"
|
|
|
1009 |
#~ msgid ""
|
1010 |
#~ "You can place XHTML and JavaScript here to have it inserted automatically "
|
1011 |
#~ "into your theme. If you have a script, such as one from Google "
|
@@ -1014,96 +1165,130 @@ msgstr ""
|
|
1014 |
#~ "Je kan hier XHTML en Javascript plaatsen dat automatisch in de footer van "
|
1015 |
#~ "je thema wordt ingevoerd. Dit kan van pas komen als je een script hebt "
|
1016 |
#~ "zoals dat van Google Analytics."
|
|
|
1017 |
#~ msgid ""
|
1018 |
#~ "Check this if you want the theme to auto-generate your site's copyright "
|
1019 |
#~ "and title in the footer."
|
1020 |
#~ msgstr ""
|
1021 |
#~ "Aanvinken wanneer je wil dat het thema automatisch een copyright voor je "
|
1022 |
#~ "site in de footer invoert."
|
|
|
1023 |
#~ msgid ""
|
1024 |
#~ "Want to show your love of WordPress? Check this and a link will be added "
|
1025 |
#~ "to your footer back to WordPress.org."
|
1026 |
#~ msgstr ""
|
1027 |
#~ "Wil je laten zien hoezeer je WordPress waardeert? Vink dit aan om "
|
1028 |
#~ "automatisch een link naar WordPress.org aan de footer toe te voegen."
|
|
|
1029 |
#~ msgid ""
|
1030 |
#~ "Check this to have a link back to Theme Hybrid automatically appended to "
|
1031 |
#~ "your footer. This is totally optional. Really."
|
1032 |
#~ msgstr ""
|
1033 |
#~ "Aanvinken om automatisch een link naar Theme Hybrid aan je footer toe te "
|
1034 |
#~ "voegen. Dit volkomen vrijwillig, echt waar!"
|
|
|
1035 |
#~ msgid ""
|
1036 |
#~ "For testing purposes, this will append a database query counter and page "
|
1037 |
#~ "load timer to your footer."
|
1038 |
#~ msgstr ""
|
1039 |
#~ "Voor test-doeleinden wordt hiermee een database-query teller en de "
|
1040 |
#~ "laadtijd van de pagina aan je footer toegevoegd."
|
|
|
1041 |
#~ msgid "Add a title that will be seen by search engines."
|
1042 |
#~ msgstr "Voeg een titel toe die door zoekmachines gezien wordt."
|
|
|
1043 |
#~ msgid "Add a description that will be seen by search engines."
|
1044 |
#~ msgstr "Voeg een beschrijving toe die door zoekmachines gezien wordt."
|
|
|
1045 |
#~ msgid "Keywords:"
|
1046 |
#~ msgstr "Trefwoorden:"
|
|
|
1047 |
#~ msgid "Add keywords that will be seen by search engines."
|
1048 |
#~ msgstr "Voeg trefwoorden toe die door zoekmachines gezien worden."
|
|
|
1049 |
#~ msgid "Series:"
|
1050 |
#~ msgstr "Series:"
|
|
|
1051 |
#~ msgid "Post the title of your series of articles here."
|
1052 |
#~ msgstr "Post hier de titel van je artikelseries."
|
|
|
1053 |
#~ msgid "Thumbnail:"
|
1054 |
#~ msgstr "Thumbnail:"
|
|
|
1055 |
#~ msgid "Add an image URL here."
|
1056 |
#~ msgstr "Voeg hier de URL van een afbeelding toe."
|
|
|
1057 |
#~ msgid "Page Navigation:"
|
1058 |
#~ msgstr "Pagina Navigatie:"
|
|
|
1059 |
#~ msgid "Hybrid Theme Settings"
|
1060 |
#~ msgstr "Hybrid Theme Settings"
|
|
|
1061 |
#~ msgid "Settings saved."
|
1062 |
#~ msgstr "Settings opgeslagen."
|
|
|
1063 |
#~ msgid "Browse:"
|
1064 |
#~ msgstr "Blader:"
|
|
|
1065 |
#~ msgid "Home"
|
1066 |
#~ msgstr "Home"
|
|
|
1067 |
#~ msgid "Search results for "%1$s""
|
1068 |
#~ msgstr "Zoekresultaten voor "%1$s""
|
|
|
1069 |
#~ msgid "m"
|
1070 |
#~ msgstr "m"
|
|
|
1071 |
#~ msgid "F"
|
1072 |
#~ msgstr "F"
|
|
|
1073 |
#~ msgid "j"
|
1074 |
#~ msgstr "j"
|
|
|
1075 |
#~ msgid "404 Not Found"
|
1076 |
#~ msgstr "404 Niet Gevonden"
|
|
|
1077 |
#~ msgid "Log in to reply."
|
1078 |
#~ msgstr "Log in op te reageren."
|
|
|
1079 |
#~ msgid "This function has been removed or replaced by another function."
|
1080 |
#~ msgstr "Deze functie is verwijderd of vervangen door een andere functie."
|
|
|
1081 |
#~ msgid ""
|
1082 |
#~ "You can use these <acronym title=\"Extensible Hypertext Markup Language"
|
1083 |
#~ "\">XHTML</acronym> tags:"
|
1084 |
#~ msgstr ""
|
1085 |
#~ "Je kan deze <acronym title=\"Extensible Hypertext Markup Language"
|
1086 |
#~ "\">XHTML</acronym> tags: gebruiken."
|
|
|
1087 |
#~ msgid "Search this site..."
|
1088 |
#~ msgstr "Doorzoek deze site"
|
|
|
1089 |
#~ msgid "Copyright"
|
1090 |
#~ msgstr "Copyright"
|
|
|
1091 |
#~ msgid "Powered by"
|
1092 |
#~ msgstr "Aangedreven door "
|
|
|
1093 |
#~ msgid ""
|
1094 |
#~ "Powered by WordPress, state-of-the-art semantic personal publishing "
|
1095 |
#~ "platform"
|
1096 |
#~ msgstr ""
|
1097 |
#~ "Aangedreven door WordPress, het state-of-the-art semantische platform "
|
1098 |
#~ "voor iedereen."
|
|
|
1099 |
#~ msgid "WordPress"
|
1100 |
#~ msgstr "WordPress"
|
|
|
1101 |
#~ msgid "and"
|
1102 |
#~ msgstr "en"
|
|
|
1103 |
#~ msgid "Hybrid Theme Framework"
|
1104 |
#~ msgstr "Hybrid Theme Framework"
|
|
|
1105 |
#~ msgid "Articles in this series"
|
1106 |
#~ msgstr "Artikelen in deze serie"
|
|
|
1107 |
#~ msgid ""
|
1108 |
#~ "You have encountered an error. This is usually because you've changed "
|
1109 |
#~ "something in the core Hybrid theme files. Try undoing your last edit to "
|
@@ -1114,196 +1299,275 @@ msgstr ""
|
|
1114 |
#~ "gewijzigd in de kernbestanden van het Hybrid-thema. Probeer je laatste "
|
1115 |
#~ "wijzigingen ongedaan te maken om dit op te lossen. Als dat niet lukt, "
|
1116 |
#~ "kan je je tot de support forums richten voor hulp."
|
|
|
1117 |
#~ msgid "This page loaded in %1$s seconds with %2$s database queries."
|
1118 |
#~ msgstr "Deze pagina laadde in %1$s seconden met %2$s database queries."
|
|
|
1119 |
#~ msgid ": Page %1$s"
|
1120 |
#~ msgstr ":Pagina %1$s"
|
|
|
1121 |
#~ msgid "Search results for "%1$s.""
|
1122 |
#~ msgstr "Zoekresultaten voor "%1$s.""
|
|
|
1123 |
#~ msgid "Archive for %1$s"
|
1124 |
#~ msgstr "Archief voor %1$s"
|
|
|
1125 |
#~ msgid "Archive for week %1$s of %2$s"
|
1126 |
#~ msgstr "Archief voor week %1$s van %2$s"
|
|
|
1127 |
#~ msgid "Comment on "%1$s""
|
1128 |
#~ msgstr "Reactie op "%1$s""
|
|
|
1129 |
#~ msgid "Primary Home"
|
1130 |
#~ msgstr "Primair Home"
|
|
|
1131 |
#~ msgid "Primary Author"
|
1132 |
#~ msgstr "Primaire Auteur"
|
|
|
1133 |
#~ msgid "Primary Category"
|
1134 |
#~ msgstr "Primaire Rubriek"
|
|
|
1135 |
#~ msgid "Primary Date"
|
1136 |
#~ msgstr "Primaire Datum"
|
|
|
1137 |
#~ msgid "Primary Page"
|
1138 |
#~ msgstr "Primaire Pagina"
|
|
|
1139 |
#~ msgid "Primary Search"
|
1140 |
#~ msgstr "Primaire Zoekresultaten"
|
1141 |
-
|
1142 |
-
#~ msgstr "Primaire EnkelvoudigBericht"
|
1143 |
#~ msgid "Primary Tag"
|
1144 |
#~ msgstr "Primaire Tag"
|
|
|
1145 |
#~ msgid "Primary 404"
|
1146 |
#~ msgstr "Primaire 404"
|
|
|
1147 |
#~ msgid "Secondary Home"
|
1148 |
#~ msgstr "Secundaire Home"
|
|
|
1149 |
#~ msgid "Secondary Author"
|
1150 |
#~ msgstr "Secundaire Auteur"
|
|
|
1151 |
#~ msgid "Secondary Category"
|
1152 |
#~ msgstr "Secundaire Rubriek"
|
|
|
1153 |
#~ msgid "Secondary Date"
|
1154 |
#~ msgstr "Secundaire Datum "
|
|
|
1155 |
#~ msgid "Secondary Page"
|
1156 |
#~ msgstr "Secundaire Pagina"
|
|
|
1157 |
#~ msgid "Secondary Search"
|
1158 |
#~ msgstr "Secundaire Zoekresultaten"
|
|
|
1159 |
#~ msgid "Secondary Single"
|
1160 |
#~ msgstr "Secundaire EnkelvoudigBericht"
|
|
|
1161 |
#~ msgid "Secondary Tag"
|
1162 |
#~ msgstr "Secundaire Tag"
|
|
|
1163 |
#~ msgid "Secondary 404"
|
1164 |
#~ msgstr "Secundaire 404"
|
|
|
1165 |
#~ msgid "Subsidiary Default"
|
1166 |
#~ msgstr "Bijkomende Standaard"
|
|
|
1167 |
#~ msgid "RSS 2.0"
|
1168 |
#~ msgstr "RSS 2.0"
|
|
|
1169 |
#~ msgid "RSS .92"
|
1170 |
#~ msgstr "RSS .92"
|
|
|
1171 |
#~ msgid "Atom 0.3"
|
1172 |
#~ msgstr "Atom 0.3"
|
|
|
1173 |
#~ msgid "Subsidiary Home"
|
1174 |
#~ msgstr "Subsidiair Home"
|
|
|
1175 |
#~ msgid "Previous Page"
|
1176 |
#~ msgstr "Vorige pagina"
|
|
|
1177 |
#~ msgid "Next Page"
|
1178 |
#~ msgstr "Volgende pagina"
|
|
|
1179 |
#~ msgid "Related Posts"
|
1180 |
#~ msgstr "Gerelateerde berichten"
|
|
|
1181 |
#~ msgid "Logout"
|
1182 |
#~ msgstr "Afmelden"
|
|
|
1183 |
#~ msgid "Select Year"
|
1184 |
#~ msgstr "Selecteer jaar"
|
|
|
1185 |
#~ msgid "Select Week"
|
1186 |
#~ msgstr "Selecteer week"
|
|
|
1187 |
#~ msgid "Select Day"
|
1188 |
#~ msgstr "Selecteer dag"
|
|
|
1189 |
#~ msgid "Select Post"
|
1190 |
#~ msgstr "Selecteer bericht"
|
|
|
1191 |
#~ msgid "Type:"
|
1192 |
#~ msgstr "Type:"
|
|
|
1193 |
#~ msgid "Format:"
|
1194 |
#~ msgstr "Format:"
|
|
|
1195 |
#~ msgid "Before:"
|
1196 |
#~ msgstr "Voor:"
|
|
|
1197 |
#~ msgid "After:"
|
1198 |
#~ msgstr "Na:"
|
|
|
1199 |
#~ msgid "Show post count?"
|
1200 |
#~ msgstr "Toon aantal berichten?"
|
|
|
1201 |
#~ msgid ""
|
1202 |
#~ "An advanced widget that gives you total control over the output of your "
|
1203 |
#~ "archives."
|
1204 |
#~ msgstr ""
|
1205 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1206 |
#~ "van je archieven."
|
|
|
1207 |
#~ msgid "Bookmarks"
|
1208 |
#~ msgstr "Favorieten"
|
|
|
1209 |
#~ msgid "Categories:"
|
1210 |
#~ msgstr "Rubrieken:"
|
|
|
1211 |
#~ msgid "Exclude Categories:"
|
1212 |
#~ msgstr "Uit te sluiten rubrieken:"
|
|
|
1213 |
#~ msgid "Category:"
|
1214 |
#~ msgstr "Rubriek:"
|
|
|
1215 |
#~ msgid "Category Order:"
|
1216 |
#~ msgstr "Rubriek volgorde:"
|
|
|
1217 |
#~ msgid "Order Categories By:"
|
1218 |
#~ msgstr "Sorteer rubrieken op:"
|
|
|
1219 |
#~ msgid "Include Bookmarks:"
|
1220 |
#~ msgstr "Inclusief favorieten:"
|
|
|
1221 |
#~ msgid "Exclude Bookmarks:"
|
1222 |
#~ msgstr "Exclusief favorieten:"
|
|
|
1223 |
#~ msgid "Bookmarks Order:"
|
1224 |
#~ msgstr "Favorieten volgorde:"
|
|
|
1225 |
#~ msgid "Order Bookmarks By:"
|
1226 |
#~ msgstr "Sorteer favorieten op:"
|
|
|
1227 |
#~ msgid "Between (Bookmark/Description):"
|
1228 |
#~ msgstr "Tussen (Favoriet/beschrijving)"
|
|
|
1229 |
#~ msgid "Categorize?"
|
1230 |
#~ msgstr "Rubriceer?"
|
|
|
1231 |
#~ msgid "Show description?"
|
1232 |
#~ msgstr "Beschrijving tonen?"
|
|
|
1233 |
#~ msgid "Hide invisible bookmarks?"
|
1234 |
#~ msgstr "Onzichtbare favorieten verbergen?"
|
|
|
1235 |
#~ msgid "Show private categories?"
|
1236 |
#~ msgstr "Private rubrieken tonen?"
|
|
|
1237 |
#~ msgid "Show rating?"
|
1238 |
#~ msgstr "Waardering tonen?"
|
|
|
1239 |
#~ msgid "Show images?"
|
1240 |
#~ msgstr "Afbeeldingen tonen?"
|
|
|
1241 |
#~ msgid ""
|
1242 |
#~ "An advanced widget that gives you total control over the output of your "
|
1243 |
#~ "bookmarks (links)."
|
1244 |
#~ msgstr ""
|
1245 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1246 |
#~ "van je favorieten (links)."
|
|
|
1247 |
#~ msgid "RSS"
|
1248 |
#~ msgstr "RSS"
|
|
|
1249 |
#~ msgid "Depth:"
|
1250 |
#~ msgstr "Diepte:"
|
|
|
1251 |
#~ msgid "Number:"
|
1252 |
#~ msgstr "Aantal:"
|
|
|
1253 |
#~ msgid "Child Of:"
|
1254 |
#~ msgstr "'Child' van :"
|
1255 |
-
|
1256 |
-
#~ msgstr "Feed afbeelding:"
|
1257 |
#~ msgid "Hierarchical?"
|
1258 |
#~ msgstr "Hierarchisch?"
|
|
|
1259 |
#~ msgid "Show RSS feed?"
|
1260 |
#~ msgstr "Toon RSS feed?"
|
|
|
1261 |
#~ msgid "Use description for title?"
|
1262 |
#~ msgstr "Omschrijving gebruiken voor de titel?"
|
|
|
1263 |
#~ msgid "Show last updated?"
|
1264 |
#~ msgstr "Toon laatste aanpassing?"
|
|
|
1265 |
#~ msgid "Show count?"
|
1266 |
#~ msgstr "Toon aantal?"
|
|
|
1267 |
#~ msgid "Hide empty?"
|
1268 |
#~ msgstr "Lege verbergen?"
|
|
|
1269 |
#~ msgid ""
|
1270 |
#~ "An advanced widget that gives you total control over the output of your "
|
1271 |
#~ "category links."
|
1272 |
#~ msgstr ""
|
1273 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1274 |
#~ "van je rubrieken."
|
|
|
1275 |
#~ msgid "Categories"
|
1276 |
#~ msgstr "Rubrieken"
|
|
|
1277 |
#~ msgid "Sort Order:"
|
1278 |
#~ msgstr "Sorteervolgorde"
|
|
|
1279 |
#~ msgid "Meta Key:"
|
1280 |
#~ msgstr "Meta Key:"
|
|
|
1281 |
#~ msgid "Meta Value:"
|
1282 |
#~ msgstr "Meta Value:"
|
|
|
1283 |
#~ msgid "Show home?"
|
1284 |
#~ msgstr "Toon home?"
|
|
|
1285 |
#~ msgid "Show date?"
|
1286 |
#~ msgstr "Toon datum?"
|
|
|
1287 |
#~ msgid "Search Text:"
|
1288 |
#~ msgstr "Zoek tekst:"
|
|
|
1289 |
#~ msgid "Use theme's search form?"
|
1290 |
#~ msgstr "Zoekformulier van thema gebruiken?"
|
|
|
1291 |
#~ msgid ""
|
1292 |
#~ "An advanced widget that gives you total control over the output of your "
|
1293 |
#~ "search form."
|
1294 |
#~ msgstr ""
|
1295 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1296 |
#~ "van je zoekformulier."
|
|
|
1297 |
#~ msgid "Largest:"
|
1298 |
#~ msgstr "Grootste:"
|
|
|
1299 |
#~ msgid "Smallest:"
|
1300 |
#~ msgstr "Kleinste:"
|
|
|
1301 |
#~ msgid "Unit:"
|
1302 |
#~ msgstr "Eenheid:"
|
|
|
1303 |
#~ msgid ""
|
1304 |
#~ "An advanced widget that gives you total control over the output of your "
|
1305 |
#~ "tags."
|
1306 |
#~ msgstr ""
|
1307 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1308 |
#~ "van je tags."
|
1309 |
-
|
2 |
msgstr ""
|
3 |
"Project-Id-Version: Members WordPress Plugin\n"
|
4 |
"Report-Msgid-Bugs-To: \n"
|
5 |
+
"POT-Creation-Date: 2011-06-03 12:36-0600\n"
|
6 |
+
"PO-Revision-Date: 2011-06-03 12:38-0600\n"
|
7 |
"Last-Translator: Justin Tadlock <justin@justintadlock.com>\n"
|
8 |
"Language-Team: <justin@justintadlock.com>\n"
|
9 |
"MIME-Version: 1.0\n"
|
11 |
"Content-Transfer-Encoding: 8bit\n"
|
12 |
"X-Poedit-Language: English\n"
|
13 |
"X-Poedit-Country: UNITED STATES\n"
|
14 |
+
"X-Poedit-KeywordsList: _e;__;esc_attr__;esc_attr_e;_n;_x;esc_html__;esc_html_e\n"
|
15 |
"X-Poedit-Basepath: ../\n"
|
16 |
"X-Poedit-SearchPath-0: .\n"
|
17 |
|
18 |
+
#: members.php:191
|
19 |
+
#: admin/meta-box-plugin-settings.php:30
|
20 |
+
#, fuzzy
|
21 |
+
msgid "Role Manager"
|
22 |
+
msgstr "Naam"
|
23 |
+
|
24 |
+
#: admin/admin.php:44
|
25 |
+
#: admin/roles-list-table.php:57
|
26 |
+
#, fuzzy
|
27 |
+
msgid "Roles"
|
28 |
+
msgstr "Reset"
|
29 |
+
|
30 |
+
#: admin/admin.php:47
|
31 |
+
#: admin/role-new.php:44
|
32 |
+
#, fuzzy
|
33 |
+
msgid "Add New Role"
|
34 |
+
msgstr "Voeg gebruiker toe"
|
35 |
|
36 |
+
#: admin/admin.php:135
|
37 |
+
msgid "<strong>Role Manager:</strong> This feature allows you to manage roles on your site by giving you the ability to create, edit, and delete any role. Note that changes to roles do not change settings for the Members plugin. You are literally changing data in your WordPress database. This plugin feature merely provides an interface for you to make these changes."
|
38 |
msgstr ""
|
39 |
|
40 |
+
#: admin/admin.php:136
|
41 |
+
msgid "<strong>Content Permissions:</strong> This feature adds a meta box to the post edit screen that allows you to grant permissions for who can read the post content based on the user's role. Only users of roles with the <code>restrict_content</code> capability will be able to use this component."
|
42 |
msgstr ""
|
43 |
|
44 |
+
#: admin/admin.php:137
|
45 |
+
msgid "<strong>Sidebar Widgets:</strong> This feature creates additional widgets for use in your theme's sidebars. You can access them by clicking Widgets in the menu."
|
46 |
msgstr ""
|
47 |
|
48 |
+
#: admin/admin.php:138
|
49 |
+
msgid "<strong>Private Site:</strong> This feature allows you to redirect all users who are not logged into the site to the login page, creating an entirely private site. You may also replace your feed content with a custom error message."
|
50 |
msgstr ""
|
51 |
|
52 |
+
#: admin/admin.php:140
|
53 |
+
#: admin/admin.php:167
|
54 |
+
#: admin/admin.php:183
|
55 |
+
msgid "For more information:"
|
56 |
msgstr ""
|
57 |
|
58 |
+
#: admin/admin.php:143
|
59 |
+
#: admin/admin.php:171
|
60 |
+
#: admin/admin.php:187
|
61 |
+
#, fuzzy
|
62 |
+
msgid "Documentation"
|
63 |
+
msgstr "Thema Documentatie"
|
64 |
+
|
65 |
+
#: admin/admin.php:144
|
66 |
+
#: admin/admin.php:172
|
67 |
+
#: admin/admin.php:188
|
68 |
+
#, fuzzy
|
69 |
+
msgid "Support Forums"
|
70 |
+
msgstr "Bezoek de support forums."
|
71 |
+
|
72 |
+
#: admin/admin.php:156
|
73 |
+
msgid "This screen allows you to edit the capabilities given to the role. You can tick the checkbox next to a capability to add the capability to the role. You can untick the checkbox next to a capability to remove a capability from the role. You can also add as many custom capabilities as you need in the Custom Capabilities section."
|
74 |
msgstr ""
|
75 |
|
76 |
+
#: admin/admin.php:157
|
77 |
+
msgid "Capabilities are both powerful and dangerous tools. You should not add or remove a capability to a role unless you understand what permission you are granting or removing."
|
78 |
msgstr ""
|
79 |
|
80 |
+
#: admin/admin.php:162
|
81 |
+
msgid "This screen lists all the user roles available on this site. Roles are given to users as a way to \"group\" them. Roles are made up of capabilities (permissions), which decide what functions users of each role can perform on the site. From this screen, you can manage these roles and their capabilities."
|
82 |
msgstr ""
|
83 |
|
84 |
+
#: admin/admin.php:163
|
85 |
+
msgid "To add a role to a user, click Users in the menu. To create a new role, click the Add New button at the top of the screen or Add New Role under the Users menu."
|
86 |
msgstr ""
|
87 |
|
88 |
+
#: admin/admin.php:170
|
89 |
+
#: admin/admin.php:186
|
90 |
+
msgid "Users, Roles, and Capabilities"
|
91 |
+
msgstr ""
|
92 |
|
93 |
+
#: admin/admin.php:180
|
94 |
+
msgid "This screen allows you to create a new user role for your site. You must input a unique role name and role label. You can also grant capabilities (permissions) to the new role. Capabilities are both powerful and dangerous tools. You should not add a capability to a role unless you understand what permission you are granting."
|
95 |
msgstr ""
|
96 |
|
97 |
+
#: admin/admin.php:181
|
98 |
+
msgid "To add a role to a user, click Users in the menu. To edit roles, click Roles under the Users menu."
|
99 |
msgstr ""
|
100 |
|
101 |
+
#: admin/admin.php:202
|
102 |
+
msgid "Role deleted."
|
103 |
msgstr ""
|
104 |
|
105 |
+
#: admin/admin.php:211
|
106 |
+
msgid "Selected roles deleted."
|
107 |
+
msgstr ""
|
|
|
108 |
|
109 |
+
#: admin/meta-box-plugin-settings.php:21
|
110 |
+
msgid "About"
|
111 |
+
msgstr ""
|
|
|
112 |
|
113 |
+
#: admin/meta-box-plugin-settings.php:24
|
114 |
+
msgid "Like this plugin?"
|
115 |
+
msgstr ""
|
|
|
116 |
|
117 |
+
#: admin/meta-box-plugin-settings.php:27
|
118 |
#, fuzzy
|
119 |
+
msgid "Support"
|
120 |
+
msgstr "Thema Ondersteuning:"
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
121 |
|
122 |
+
#: admin/meta-box-plugin-settings.php:33
|
123 |
+
#: admin/meta-box-post-content-permissions.php:28
|
124 |
+
msgid "Content Permissions"
|
125 |
msgstr ""
|
126 |
|
127 |
+
#: admin/meta-box-plugin-settings.php:36
|
128 |
#, fuzzy
|
129 |
+
msgid "Sidebar Widgets"
|
130 |
+
msgstr "Widgets invoegen:"
|
131 |
|
132 |
+
#: admin/meta-box-plugin-settings.php:39
|
|
|
133 |
#, fuzzy
|
134 |
+
msgid "Private Site"
|
135 |
+
msgstr "Primaire EnkelvoudigBericht"
|
136 |
|
137 |
+
#: admin/meta-box-plugin-settings.php:52
|
138 |
+
#, fuzzy
|
139 |
+
msgid "Version:"
|
140 |
+
msgstr "Thema versie:"
|
141 |
|
142 |
+
#: admin/meta-box-plugin-settings.php:55
|
143 |
#, fuzzy
|
144 |
+
msgid "Description:"
|
145 |
+
msgstr "Beschrijving"
|
146 |
|
147 |
+
#: admin/meta-box-plugin-settings.php:69
|
148 |
+
msgid "Here's how you can give back:"
|
149 |
msgstr ""
|
150 |
|
151 |
+
#: admin/meta-box-plugin-settings.php:72
|
152 |
+
msgid "Members on the WordPress plugin repository"
|
153 |
msgstr ""
|
154 |
|
155 |
+
#: admin/meta-box-plugin-settings.php:72
|
156 |
+
msgid "Give the plugin a good rating."
|
157 |
msgstr ""
|
158 |
|
159 |
+
#: admin/meta-box-plugin-settings.php:73
|
160 |
+
msgid "Donate via PayPal"
|
161 |
msgstr ""
|
162 |
|
163 |
+
#: admin/meta-box-plugin-settings.php:73
|
164 |
+
msgid "Donate a few dollars."
|
165 |
msgstr ""
|
166 |
|
167 |
+
#: admin/meta-box-plugin-settings.php:74
|
168 |
+
msgid "Justin Tadlock's Amazon Wish List"
|
169 |
msgstr ""
|
170 |
|
171 |
+
#: admin/meta-box-plugin-settings.php:74
|
172 |
+
msgid "Get me something from my wish list."
|
173 |
+
msgstr ""
|
|
|
174 |
|
175 |
+
#: admin/meta-box-plugin-settings.php:86
|
|
|
|
|
176 |
#, php-format
|
177 |
+
msgid "Support for this plugin is provided via the support forums at %1$s. If you need any help using it, please ask your support questions there."
|
178 |
msgstr ""
|
179 |
|
180 |
+
#: admin/meta-box-plugin-settings.php:86
|
181 |
#, fuzzy
|
182 |
+
msgid "Theme Hybrid Support Forums"
|
183 |
+
msgstr "Thema Ondersteuning:"
|
184 |
|
185 |
+
#: admin/meta-box-plugin-settings.php:86
|
186 |
+
#, fuzzy
|
187 |
+
msgid "Theme Hybrid"
|
188 |
+
msgstr "Hybrid"
|
189 |
+
|
190 |
+
#: admin/meta-box-plugin-settings.php:99
|
191 |
+
msgid "Enable the role manager."
|
192 |
msgstr ""
|
193 |
|
194 |
+
#: admin/meta-box-plugin-settings.php:102
|
195 |
+
msgid "Your roles and capabilities will not revert back to their previous settings after deactivating or uninstalling this plugin, so use this feature wisely."
|
|
|
|
|
196 |
msgstr ""
|
197 |
|
198 |
+
#: admin/meta-box-plugin-settings.php:116
|
199 |
+
msgid "Enable the content permissions feature."
|
200 |
msgstr ""
|
201 |
|
202 |
+
#: admin/meta-box-plugin-settings.php:120
|
203 |
+
msgid "Default post error message:"
|
204 |
msgstr ""
|
205 |
|
206 |
+
#: admin/meta-box-plugin-settings.php:122
|
207 |
+
msgid "You can use <abbr title=\"Hypertext Markup Language\">HTML</abbr> and/or shortcodes to create a custom error message for users that don't have permission to view posts."
|
208 |
msgstr ""
|
209 |
|
210 |
+
#: admin/meta-box-plugin-settings.php:136
|
211 |
+
msgid "Enable the login form widget."
|
212 |
+
msgstr ""
|
|
|
213 |
|
214 |
+
#: admin/meta-box-plugin-settings.php:141
|
215 |
+
msgid "Enable the users widget."
|
216 |
msgstr ""
|
217 |
|
218 |
+
#: admin/meta-box-plugin-settings.php:155
|
219 |
+
msgid "Redirect all logged-out users to the login page before allowing them to view the site."
|
220 |
msgstr ""
|
221 |
|
222 |
+
#: admin/meta-box-plugin-settings.php:160
|
223 |
+
msgid "Show error message for feed items."
|
224 |
msgstr ""
|
225 |
|
226 |
+
#: admin/meta-box-plugin-settings.php:164
|
227 |
#, fuzzy
|
228 |
+
msgid "Feed error message:"
|
229 |
+
msgstr "Feed afbeelding:"
|
230 |
|
231 |
+
#: admin/meta-box-plugin-settings.php:167
|
232 |
+
msgid "You can use <abbr title=\"Hypertext Markup Language\">HTML</abbr> and/or shortcodes to create a custom error message to display instead of feed item content."
|
233 |
+
msgstr ""
|
|
|
234 |
|
235 |
+
#: admin/meta-box-post-content-permissions.php:51
|
236 |
+
msgid "Limit access to this post's content to users of the selected roles."
|
|
|
237 |
msgstr ""
|
238 |
|
239 |
+
#: admin/meta-box-post-content-permissions.php:75
|
240 |
+
#, php-format
|
241 |
+
msgid "If no roles are selected, everyone can view the content. The post author, any users who can edit this post, and users with the %s capability can view the content regardless of role."
|
|
|
242 |
msgstr ""
|
243 |
|
244 |
+
#: admin/meta-box-post-content-permissions.php:79
|
245 |
+
msgid "Custom error messsage:"
|
246 |
+
msgstr ""
|
247 |
+
|
248 |
+
#: admin/meta-box-post-content-permissions.php:82
|
249 |
+
msgid "Message shown to users that do no have permission to view the post."
|
250 |
+
msgstr ""
|
251 |
|
252 |
+
#: admin/role-edit.php:67
|
|
|
253 |
#, fuzzy
|
254 |
+
msgid "Edit Role"
|
255 |
+
msgstr "Bewerk"
|
256 |
|
257 |
+
#: admin/role-edit.php:68
|
258 |
+
#: admin/roles-list-table.php:58
|
259 |
+
msgid "Add New"
|
260 |
msgstr ""
|
261 |
|
262 |
+
#: admin/role-edit.php:71
|
|
|
263 |
#, fuzzy
|
264 |
+
msgid "Role updated."
|
265 |
+
msgstr "Aanpassingen tonen?"
|
|
|
|
|
|
|
|
|
266 |
|
267 |
+
#: admin/role-edit.php:71
|
268 |
+
msgid "← Back to Roles"
|
|
|
269 |
msgstr ""
|
270 |
|
271 |
+
#: admin/role-edit.php:85
|
272 |
+
#: admin/role-new.php:60
|
273 |
+
#: admin/roles-list-table.php:111
|
274 |
+
#, fuzzy
|
275 |
+
msgid "Role Name"
|
276 |
+
msgstr "Naam"
|
277 |
+
|
278 |
+
#: admin/role-edit.php:94
|
279 |
+
#: admin/roles-list-table.php:113
|
280 |
+
#: admin/roles-list-table.php:123
|
281 |
+
msgid "Capabilities"
|
282 |
msgstr ""
|
283 |
|
284 |
+
#: admin/role-edit.php:112
|
285 |
+
msgid "Custom Capabilities"
|
286 |
msgstr ""
|
287 |
|
288 |
+
#: admin/role-edit.php:117
|
289 |
+
msgid "Add New Capability"
|
|
|
|
|
|
|
290 |
msgstr ""
|
291 |
|
292 |
+
#: admin/role-edit.php:127
|
293 |
+
#, fuzzy
|
294 |
+
msgid "Update Role"
|
295 |
+
msgstr "Bewerk"
|
296 |
+
|
297 |
+
#: admin/role-new.php:46
|
298 |
+
#, fuzzy, php-format
|
299 |
+
msgid "The %s role has been created."
|
300 |
+
msgstr "Er is een gebruikersaccount aangemaakt voor %1$s."
|
301 |
+
|
302 |
+
#: admin/role-new.php:65
|
303 |
+
msgid "<strong>Required:</strong> The role name should be unique and contain only alphanumeric characters and underscores."
|
304 |
msgstr ""
|
305 |
|
306 |
+
#: admin/role-new.php:71
|
307 |
+
#: admin/roles-list-table.php:110
|
308 |
+
#: admin/roles-list-table.php:120
|
309 |
+
#, fuzzy
|
310 |
+
msgid "Role Label"
|
311 |
+
msgstr "Zoek label:"
|
312 |
+
|
313 |
+
#: admin/role-new.php:76
|
314 |
+
msgid "<strong>Required:</strong> The role label is used to represent your role in the WordPress admin."
|
315 |
msgstr ""
|
316 |
|
317 |
+
#: admin/role-new.php:82
|
318 |
#, fuzzy
|
319 |
+
msgid "Role Capabilities"
|
320 |
+
msgstr "Aanpassingen tonen?"
|
321 |
|
322 |
+
#: admin/role-new.php:86
|
323 |
+
msgid "<strong>Optional:</strong> Select the capabilities this role should have. These may be updated later."
|
324 |
msgstr ""
|
325 |
|
326 |
+
#: admin/role-new.php:102
|
327 |
+
#, fuzzy
|
328 |
+
msgid "Add Role"
|
329 |
+
msgstr "Bewerk"
|
330 |
+
|
331 |
+
#: admin/roles-list-table.php:70
|
332 |
+
msgid "All"
|
333 |
msgstr ""
|
334 |
|
335 |
+
#: admin/roles-list-table.php:71
|
336 |
+
#, fuzzy
|
337 |
+
msgid "Has Users"
|
338 |
+
msgstr "Gebruikersnaam"
|
339 |
+
|
340 |
+
#: admin/roles-list-table.php:72
|
341 |
+
#, fuzzy
|
342 |
+
msgid "No Users"
|
343 |
+
msgstr "Gebruikersnaam"
|
344 |
+
|
345 |
+
#: admin/roles-list-table.php:83
|
346 |
+
#: admin/roles-list-table.php:215
|
347 |
+
msgid "Bulk Actions"
|
348 |
msgstr ""
|
349 |
|
350 |
+
#: admin/roles-list-table.php:86
|
351 |
+
#: admin/roles-list-table.php:158
|
352 |
+
#: admin/roles-list-table.php:218
|
353 |
+
msgid "Delete"
|
354 |
msgstr ""
|
355 |
|
356 |
+
#: admin/roles-list-table.php:91
|
357 |
+
#: admin/roles-list-table.php:223
|
358 |
#, fuzzy
|
359 |
+
msgid "Apply"
|
360 |
+
msgstr "Reageer"
|
361 |
|
362 |
+
#: admin/roles-list-table.php:98
|
363 |
+
#: admin/roles-list-table.php:230
|
364 |
+
#, php-format
|
365 |
+
msgid "%s item"
|
366 |
msgstr ""
|
367 |
|
368 |
+
#: admin/roles-list-table.php:112
|
369 |
+
#: admin/roles-list-table.php:122
|
370 |
+
#, fuzzy
|
371 |
+
msgid "Users"
|
372 |
+
msgstr "Gebruikersnaam"
|
373 |
|
374 |
+
#: admin/roles-list-table.php:121
|
375 |
+
#: includes/admin-bar.php:29
|
376 |
+
msgid "Role"
|
377 |
msgstr ""
|
378 |
|
379 |
+
#: admin/roles-list-table.php:146
|
380 |
+
#: admin/roles-list-table.php:154
|
381 |
#, fuzzy, php-format
|
382 |
+
msgid "Edit the %s role"
|
383 |
+
msgstr "Bewerk"
|
384 |
+
|
385 |
+
#: admin/roles-list-table.php:154
|
386 |
+
msgid "Edit"
|
387 |
+
msgstr "Bewerk"
|
388 |
+
|
389 |
+
#: admin/roles-list-table.php:158
|
390 |
+
#, php-format
|
391 |
+
msgid "Delete the %s role"
|
392 |
+
msgstr ""
|
393 |
|
394 |
+
#: admin/roles-list-table.php:162
|
395 |
+
msgid "Change default role"
|
396 |
msgstr ""
|
397 |
|
398 |
+
#: admin/roles-list-table.php:162
|
399 |
+
msgid "Default Role"
|
400 |
msgstr ""
|
401 |
|
402 |
+
#: admin/roles-list-table.php:166
|
403 |
+
#: admin/roles-list-table.php:182
|
404 |
#, php-format
|
405 |
+
msgid "View all users with the %s role"
|
406 |
msgstr ""
|
407 |
|
408 |
+
#: admin/roles-list-table.php:166
|
409 |
+
msgid "View Users"
|
410 |
msgstr ""
|
411 |
|
412 |
+
#: admin/roles-list-table.php:182
|
413 |
+
#: admin/roles-list-table.php:184
|
414 |
+
#, fuzzy, php-format
|
415 |
+
msgid "%s User"
|
416 |
+
msgstr "Voeg gebruiker toe"
|
417 |
+
|
418 |
+
#: admin/roles-list-table.php:194
|
419 |
+
#, php-format
|
420 |
+
msgid "%s Capability"
|
421 |
msgstr ""
|
422 |
|
423 |
+
#: admin/settings.php:28
|
424 |
#, fuzzy
|
425 |
+
msgid "Members Settings"
|
426 |
+
msgstr "Hybrid Settings"
|
427 |
|
428 |
+
#: admin/settings.php:28
|
429 |
+
#, fuzzy
|
430 |
+
msgid "Members"
|
431 |
+
msgstr "Hybrid Settings"
|
432 |
|
433 |
+
#: admin/settings.php:66
|
434 |
+
msgid "Sorry, but you do not have permission to view this content."
|
435 |
msgstr ""
|
436 |
|
437 |
+
#: admin/settings.php:67
|
438 |
+
msgid "You must be logged into the site to view this content."
|
439 |
msgstr ""
|
440 |
|
441 |
+
#: admin/settings.php:145
|
442 |
+
#, fuzzy
|
443 |
+
msgid "Members Plugin Settings"
|
444 |
+
msgstr "Hybrid Settings"
|
445 |
+
|
446 |
+
#: admin/settings.php:160
|
447 |
+
#, fuzzy
|
448 |
+
msgid "Update Settings"
|
449 |
+
msgstr "Footer Settings:"
|
450 |
|
451 |
+
#: includes/widget-login-form.php:26
|
|
|
452 |
msgid "A widget that allows users to log into your site."
|
453 |
msgstr ""
|
454 |
|
455 |
+
#: includes/widget-login-form.php:37
|
|
|
456 |
#, fuzzy
|
457 |
msgid "Login Form"
|
458 |
msgstr "Aanmelden"
|
459 |
|
460 |
+
#: includes/widget-login-form.php:158
|
461 |
+
#: includes/widget-login-form.php:161
|
462 |
+
#, fuzzy
|
463 |
+
msgid "Log In"
|
464 |
+
msgstr "Aanmelden"
|
465 |
+
|
466 |
+
#: includes/widget-login-form.php:159
|
467 |
+
#, fuzzy
|
468 |
+
msgid "Username"
|
469 |
+
msgstr "Gebruikersnaam"
|
470 |
+
|
471 |
+
#: includes/widget-login-form.php:160
|
472 |
msgid "Password"
|
473 |
msgstr "Wachtwoord"
|
474 |
|
475 |
+
#: includes/widget-login-form.php:162
|
|
|
476 |
#, fuzzy
|
477 |
+
msgid "Remember Me"
|
478 |
msgstr "Herinner deze gegevens."
|
479 |
|
480 |
+
#: includes/widget-login-form.php:172
|
|
|
481 |
msgid "Please log into the site."
|
482 |
msgstr ""
|
483 |
|
484 |
+
#: includes/widget-login-form.php:173
|
|
|
485 |
msgid "You are currently logged in."
|
486 |
msgstr ""
|
487 |
|
488 |
+
#: includes/widget-login-form.php:185
|
489 |
+
#: includes/widget-users.php:157
|
|
|
490 |
msgid "Title:"
|
491 |
msgstr "Titel"
|
492 |
|
493 |
+
#: includes/widget-login-form.php:235
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
494 |
#, fuzzy
|
495 |
+
msgid "\"Remember me\" checkbox?"
|
496 |
+
msgstr "Herinner deze gegevens."
|
|
|
|
|
|
|
|
|
|
|
497 |
|
498 |
+
#: includes/widget-login-form.php:239
|
|
|
499 |
#, fuzzy
|
500 |
+
msgid "Check \"remember me\"?"
|
501 |
msgstr "Herinner deze gegevens."
|
502 |
|
503 |
+
#: includes/widget-login-form.php:243
|
504 |
+
msgid "Display avatar?"
|
505 |
+
msgstr ""
|
|
|
506 |
|
507 |
+
#: includes/widget-login-form.php:246
|
508 |
+
msgid "Logged out text:"
|
509 |
+
msgstr ""
|
510 |
|
511 |
+
#: includes/widget-login-form.php:251
|
512 |
+
msgid "Logged in text:"
|
513 |
+
msgstr ""
|
514 |
|
515 |
+
#: includes/widget-users.php:26
|
516 |
+
msgid "Provides the ability to list the users of the site."
|
517 |
+
msgstr ""
|
518 |
|
519 |
+
#: includes/widget-users.php:145
|
520 |
+
msgid "Ascending"
|
521 |
+
msgstr ""
|
522 |
|
523 |
+
#: includes/widget-users.php:145
|
524 |
+
msgid "Descending"
|
525 |
+
msgstr ""
|
526 |
|
527 |
+
#: includes/widget-users.php:146
|
528 |
#, fuzzy
|
529 |
+
msgid "Display Name"
|
530 |
+
msgstr "Voornaam"
|
531 |
|
532 |
+
#: includes/widget-users.php:146
|
533 |
+
msgid "Email"
|
534 |
+
msgstr "Email"
|
|
|
|
|
|
|
|
|
535 |
|
536 |
+
#: includes/widget-users.php:146
|
537 |
+
msgid "ID"
|
538 |
msgstr ""
|
539 |
|
540 |
+
#: includes/widget-users.php:146
|
541 |
#, fuzzy
|
542 |
+
msgid "Nice Name"
|
543 |
+
msgstr "Naam"
|
544 |
|
545 |
+
#: includes/widget-users.php:146
|
|
|
546 |
#, fuzzy
|
547 |
+
msgid "Post Count"
|
548 |
+
msgstr "Niet gevonden"
|
|
|
|
|
|
|
|
|
|
|
|
|
549 |
|
550 |
+
#: includes/widget-users.php:146
|
551 |
+
#, fuzzy
|
552 |
+
msgid "Registered"
|
553 |
+
msgstr "Registreer"
|
554 |
|
555 |
+
#: includes/widget-users.php:146
|
556 |
+
msgid "URL"
|
557 |
msgstr ""
|
558 |
|
559 |
+
#: includes/widget-users.php:146
|
|
|
|
|
|
|
|
|
560 |
#, fuzzy
|
561 |
+
msgid "Login"
|
562 |
+
msgstr "Aanmelden"
|
563 |
|
|
|
564 |
#, fuzzy
|
565 |
+
#~ msgid "Welcome, %1$s!"
|
566 |
+
#~ msgstr "Week %1$s"
|
567 |
|
568 |
+
#, fuzzy
|
569 |
+
#~ msgid "Password:"
|
570 |
+
#~ msgstr "Wachtwoord"
|
|
|
571 |
|
572 |
+
#, fuzzy
|
573 |
+
#~ msgid "Select Components"
|
574 |
+
#~ msgstr "Selecteer maand"
|
575 |
|
576 |
+
#, fuzzy
|
577 |
+
#~ msgid "Component"
|
578 |
+
#~ msgstr "Reactie"
|
579 |
|
580 |
+
#, fuzzy
|
581 |
+
#~ msgid "Activate"
|
582 |
+
#~ msgstr "Archieven"
|
583 |
|
584 |
+
#, fuzzy
|
585 |
+
#~ msgid "Active"
|
586 |
+
#~ msgstr "Archieven"
|
587 |
|
588 |
+
#, fuzzy
|
589 |
+
#~ msgid "Inactive"
|
590 |
+
#~ msgstr "Archieven"
|
591 |
|
592 |
+
#, fuzzy
|
593 |
+
#~ msgid "Username Label:"
|
594 |
+
#~ msgstr "Gebruikersnaam*"
|
|
|
595 |
|
596 |
+
#, fuzzy
|
597 |
+
#~ msgid "Password Label:"
|
598 |
+
#~ msgstr "Wachtwoord*"
|
599 |
|
600 |
+
#~ msgid "Submit Text:"
|
601 |
+
#~ msgstr "Verstuur tekst:"
|
|
|
602 |
|
603 |
+
#, fuzzy
|
604 |
+
#~ msgid "Remember User Text:"
|
605 |
+
#~ msgstr "Herinner deze gegevens."
|
606 |
|
607 |
+
#, fuzzy
|
608 |
+
#~ msgid ""
|
609 |
+
#~ "An advanced widget that gives you total control over the output of your "
|
610 |
+
#~ "user lists."
|
611 |
+
#~ msgstr ""
|
612 |
+
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
613 |
+
#~ "van je pagina-links."
|
614 |
|
615 |
+
#~ msgid "Limit:"
|
616 |
+
#~ msgstr "Limiet:"
|
|
|
617 |
|
618 |
+
#~ msgid "Order:"
|
619 |
+
#~ msgstr "Volgorde:"
|
|
|
620 |
|
621 |
+
#~ msgid "Order By:"
|
622 |
+
#~ msgstr "Sorteer op:"
|
|
|
623 |
|
624 |
+
#~ msgid "Include:"
|
625 |
+
#~ msgstr "Omvat:"
|
|
|
626 |
|
627 |
+
#~ msgid "Exclude:"
|
628 |
+
#~ msgstr "Sluit uit:"
|
|
|
629 |
|
630 |
+
#, fuzzy
|
631 |
+
#~ msgid "Show full name?"
|
632 |
+
#~ msgstr "Aanpassingen tonen?"
|
633 |
|
634 |
+
#~ msgid "Save Changes"
|
635 |
+
#~ msgstr "Bewaren"
|
|
|
636 |
|
637 |
+
#, fuzzy
|
638 |
+
#~ msgid "New user role has been added."
|
639 |
+
#~ msgstr "Er is een gebruikersaccount aangemaakt voor %1$s."
|
640 |
|
|
|
|
|
641 |
#~ msgid ""
|
642 |
#~ "You tried going to %1$s, and it doesn't exist. All is not lost! You can "
|
643 |
#~ "search for what you're looking for."
|
644 |
#~ msgstr ""
|
645 |
#~ "Je wilde naar %1$s gaan, maar dit bestaat niet. Geen nood! Zoek hier "
|
646 |
#~ "wat je zocht:"
|
647 |
+
|
648 |
#~ msgid "Possibly Related"
|
649 |
#~ msgstr "Mogelijk gerelateerd"
|
650 |
+
|
651 |
#~ msgid "Continue reading"
|
652 |
#~ msgstr "Lees hier verder"
|
653 |
+
|
654 |
#~ msgid "Download "%1$s""
|
655 |
#~ msgstr "Download "%1$s""
|
656 |
+
|
657 |
#~ msgid "Pages:"
|
658 |
#~ msgstr "Pagina's:"
|
659 |
+
|
660 |
#~ msgid "Sorry, no applications matched your criteria."
|
661 |
#~ msgstr "Sorry, er zijn geen toepassingen die met je criteria overeenkomen."
|
662 |
+
|
663 |
#~ msgid "You are browsing the archive for %1$s."
|
664 |
#~ msgstr "Je bladert nu door het archief voor %1$s."
|
665 |
+
|
666 |
#~ msgid "By"
|
667 |
#~ msgstr "Door"
|
668 |
+
|
669 |
#~ msgid "on"
|
670 |
#~ msgstr "op"
|
671 |
+
|
672 |
#~ msgid "l, F jS, Y, g:i a"
|
673 |
#~ msgstr "l, j F, Y, G:i"
|
674 |
+
|
675 |
#~ msgid "F j, Y"
|
676 |
#~ msgstr "j F, Y"
|
677 |
+
|
678 |
#~ msgid "Posted in"
|
679 |
#~ msgstr "Gepost in"
|
680 |
+
|
681 |
#~ msgid "Tagged"
|
682 |
#~ msgstr "Tags:"
|
683 |
+
|
684 |
#~ msgid "Leave a response"
|
685 |
#~ msgstr "Reageer"
|
686 |
+
|
687 |
#~ msgid "1 Response"
|
688 |
#~ msgstr "1 Reactie"
|
689 |
+
|
690 |
#~ msgid "% Responses"
|
691 |
#~ msgstr "% Reacties"
|
692 |
+
|
693 |
#~ msgid "Sorry, there are no posts in this archive."
|
694 |
#~ msgstr "Sorry, dit archief bevat geen berichten."
|
695 |
+
|
696 |
#~ msgid "Archives by category"
|
697 |
#~ msgstr "Archieven per rubriek"
|
698 |
+
|
699 |
#~ msgid "Archives by month"
|
700 |
#~ msgstr "Archieven per maand"
|
701 |
+
|
702 |
#~ msgid "Sorry, no page matched your criteria."
|
703 |
#~ msgstr "Sorry, er bestaat geen pagina die aan je criteria voldoet."
|
704 |
+
|
705 |
#~ msgid "Sorry, no attachments matched your criteria."
|
706 |
#~ msgstr "Sorry, er zijn geen bijlages die aan je criteria voldoen."
|
707 |
+
|
708 |
#~ msgid "Sorry, no audio files matched your criteria."
|
709 |
#~ msgstr "Sorry, er zijn geen geluidsbestanden die aan je criteria voldoen."
|
710 |
+
|
711 |
#~ msgid "Send an email to %1$s"
|
712 |
#~ msgstr "Stuur een email aan %1$s"
|
713 |
+
|
714 |
#~ msgid "Email %1$s"
|
715 |
#~ msgstr "Email %1$s"
|
716 |
+
|
717 |
#~ msgid "%1$s hasn't written any posts yet."
|
718 |
#~ msgstr "%1$s heeft nog geen berichten geschreven."
|
719 |
+
|
720 |
#~ msgid "Nickname:"
|
721 |
#~ msgstr "Bijnaam:"
|
722 |
+
|
723 |
#~ msgid "Email:"
|
724 |
#~ msgstr "Email:"
|
725 |
+
|
726 |
#~ msgid "Website:"
|
727 |
#~ msgstr "Website:"
|
728 |
+
|
729 |
#~ msgid "AIM:"
|
730 |
#~ msgstr "AIM:"
|
731 |
+
|
732 |
#~ msgid "IM with %1$s"
|
733 |
#~ msgstr "IM met %1$s"
|
734 |
+
|
735 |
#~ msgid "Jabber:"
|
736 |
#~ msgstr "Jabber:"
|
737 |
+
|
738 |
#~ msgid "Yahoo:"
|
739 |
#~ msgstr "Yahoo:"
|
740 |
+
|
741 |
#~ msgid "Sorry, there are no posts in the %1$s category."
|
742 |
#~ msgstr "Sorry, er zijn geen berichten in de rubriek %1$s. "
|
743 |
+
|
744 |
#~ msgid "Please do not load this page directly. Thanks!"
|
745 |
#~ msgstr "Gelieve deze pagina niet rechtstreeks te laden. Dankjewel!"
|
746 |
+
|
747 |
#~ msgid "No Responses"
|
748 |
#~ msgstr "Geen reacties"
|
749 |
+
|
750 |
#~ msgid "One Response"
|
751 |
#~ msgstr "Een reactie"
|
752 |
+
|
753 |
#~ msgid "Responses"
|
754 |
#~ msgstr "Reacties"
|
755 |
+
|
756 |
#~ msgid "to"
|
757 |
#~ msgstr "naar"
|
758 |
+
|
759 |
#~ msgid "%1$s at %2$s"
|
760 |
#~ msgstr "%1$s op %2$s"
|
761 |
+
|
762 |
#~ msgid "Permalink to comment"
|
763 |
#~ msgstr "Permalink naar reactie"
|
764 |
+
|
765 |
#~ msgid "Permalink"
|
766 |
#~ msgstr "Permalink"
|
767 |
+
|
768 |
#~ msgid "Your comment is awaiting moderation."
|
769 |
#~ msgstr "Je reactie wacht op moderatie."
|
770 |
+
|
771 |
#~ msgid ""
|
772 |
#~ "Comments are closed, but <a href=\"%1$s\" title=\"Trackback URL for this "
|
773 |
#~ "post\">trackbacks</a> and pingbacks are open."
|
774 |
#~ msgstr ""
|
775 |
#~ "Reageren is niet mogelijk, maar <a href=\"%1$s\" title=\"Trackback URL "
|
776 |
#~ "for this post\">trackbacks</a> en pingbacks blijven open."
|
777 |
+
|
778 |
#~ msgid "Comments are closed."
|
779 |
#~ msgstr "Reageren is niet mogelijk."
|
780 |
+
|
781 |
#~ msgid "Leave a Reply"
|
782 |
#~ msgstr "Reageer"
|
783 |
+
|
784 |
#~ msgid ""
|
785 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to post a "
|
786 |
#~ "comment."
|
787 |
#~ msgstr ""
|
788 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn om te "
|
789 |
#~ "reageren."
|
790 |
+
|
791 |
#~ msgid "Logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
792 |
#~ msgstr "Ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
793 |
+
|
794 |
#~ msgid "Log out of this account"
|
795 |
#~ msgstr "Afmelden."
|
796 |
+
|
797 |
#~ msgid "Logout »"
|
798 |
#~ msgstr "Afmelden »"
|
799 |
+
|
800 |
#~ msgid "*"
|
801 |
#~ msgstr "*"
|
802 |
+
|
|
|
803 |
#~ msgid "Website"
|
804 |
#~ msgstr "Website"
|
805 |
+
|
806 |
#~ msgid "Submit"
|
807 |
#~ msgstr "Verstuur"
|
808 |
+
|
809 |
#~ msgid "Password Protected"
|
810 |
#~ msgstr "Beveiligd met wachtwoord"
|
811 |
+
|
812 |
#~ msgid "Enter the password to view comments."
|
813 |
#~ msgstr "Voer wachtwoord in om reacties te lezen."
|
814 |
+
|
815 |
#~ msgid "Leave a Reply to %s"
|
816 |
#~ msgstr "Reageer op %s"
|
817 |
+
|
818 |
#~ msgid "Click here to cancel reply."
|
819 |
#~ msgstr "Klik hier om de reactie te annuleren."
|
820 |
+
|
821 |
#~ msgid "F jS, Y"
|
822 |
#~ msgstr "j F, Y"
|
823 |
+
|
824 |
#~ msgid "Week %1$s of %2$s"
|
825 |
#~ msgstr "Week %1$s van %2$s"
|
826 |
+
|
827 |
#~ msgid "W"
|
828 |
#~ msgstr "W"
|
829 |
+
|
830 |
#~ msgid "Y"
|
831 |
#~ msgstr "Y"
|
832 |
+
|
833 |
#~ msgid "You are browsing the archive for week %1$s of %2$s."
|
834 |
#~ msgstr "Je bekijkt het archief voor week %1$s van %2$s."
|
835 |
+
|
836 |
#~ msgid "Sorry, there are no posts for %1$s."
|
837 |
#~ msgstr "Sorry, maar er zijn geen berichten voor %1$s."
|
838 |
+
|
839 |
#~ msgid "Sorry, no posts matched your criteria."
|
840 |
#~ msgstr "Sorry, er zijn geen berichten die met je criteria overeenkomen."
|
841 |
+
|
842 |
#~ msgid "Sorry, no images matched your criteria."
|
843 |
#~ msgstr "Sorry, er zijn geen afbeeldingen die met je criteria overeenkomen."
|
844 |
+
|
845 |
#~ msgid ""
|
846 |
#~ "You are currently logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
847 |
#~ msgstr ""
|
848 |
#~ "Je bent momenteel ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
849 |
+
|
850 |
#~ msgid ""
|
851 |
#~ "You have successfully logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</"
|
852 |
#~ "a>."
|
853 |
#~ msgstr ""
|
854 |
#~ "Je bent succesvol ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>."
|
855 |
+
|
856 |
#~ msgid ""
|
857 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> to view the "
|
858 |
#~ "content of this page."
|
859 |
#~ msgstr ""
|
860 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn om de inhoud "
|
861 |
#~ "van deze pagina te bekijken."
|
862 |
+
|
863 |
#~ msgid ""
|
864 |
#~ "If you're not currently a member, please take a moment to <a href=\"%1$s"
|
865 |
#~ "\" title=\"Register\">register</a>."
|
866 |
#~ msgstr ""
|
867 |
#~ "Als je momenteel nog geen lid bent, neem dan een ogenblikje tijd om je te "
|
868 |
#~ "<a href=\"%1$s\" title=\"Register\">registreren</a>."
|
869 |
+
|
870 |
#~ msgid "You must enter a post title."
|
871 |
#~ msgstr "Je moet een titel voor het bericht invoeren."
|
872 |
+
|
873 |
#~ msgid "You must write something."
|
874 |
#~ msgstr "Je moet hier iets schrijven."
|
875 |
+
|
876 |
#~ msgid "Title"
|
877 |
#~ msgstr "Titel"
|
878 |
+
|
879 |
#~ msgid "Write"
|
880 |
#~ msgstr "Schrijf"
|
881 |
+
|
882 |
#~ msgid "Tags"
|
883 |
#~ msgstr "Tags"
|
884 |
+
|
885 |
#~ msgid "Publish"
|
886 |
#~ msgstr "Publiceer"
|
887 |
+
|
888 |
#~ msgid "You don't have the appropriate capabilities to publish posts."
|
889 |
#~ msgstr "Je hebt niet de nodige rechten om berichten te publiceren."
|
890 |
+
|
891 |
#~ msgid ""
|
892 |
#~ "You must be <a href=\"%1$s\" title=\"Log in\">logged in</a> with "
|
893 |
#~ "appropriate user capabilities to publish posts."
|
894 |
#~ msgstr ""
|
895 |
#~ "Je moet <a href=\"%1$s\" title=\"Log in\">ingelogd</a> zijn met de nodige "
|
896 |
#~ "gebruikersrechten om berichten te kunnen publiceren."
|
897 |
+
|
898 |
#~ msgid "A username is required for registration."
|
899 |
#~ msgstr "Om te registreren is een gebruikersnaam nodig."
|
900 |
+
|
901 |
#~ msgid "You must enter an email address."
|
902 |
#~ msgstr "Je moet een email-adres invoeren."
|
903 |
+
|
904 |
#~ msgid "You must enter a password."
|
905 |
#~ msgstr "Je moet een wachtwoord invoeren."
|
906 |
+
|
907 |
#~ msgid "You must enter your password twice."
|
908 |
#~ msgstr "Je moet je wachtwoord tweemaal invoeren."
|
909 |
+
|
910 |
#~ msgid "You must enter the same password twice."
|
911 |
#~ msgstr "Je moet tweemaal hetzelfde wachtwoord invoeren."
|
912 |
+
|
913 |
#~ msgid "User registration failed. Please try again."
|
914 |
#~ msgstr "Gebruikersregistratie mislukt. Probeer opnieuw."
|
915 |
+
|
916 |
#~ msgid ""
|
917 |
#~ "You are logged in as <a href=\"%1$s\" title=\"%2$s\">%2$s</a>. You don't "
|
918 |
#~ "need another account."
|
919 |
#~ msgstr ""
|
920 |
#~ "Je bent ingelogd als <a href=\"%1$s\" title=\"%2$s\">%2$s</a>. Je hebt "
|
921 |
#~ "geen bijkomend account nodig."
|
922 |
+
|
923 |
#~ msgid "Thank you for registering, %1$s."
|
924 |
#~ msgstr "Bedankt voor je registratie, %1$s."
|
925 |
+
|
926 |
#~ msgid "Users can register themselves or you can manually create users here."
|
927 |
#~ msgstr ""
|
928 |
#~ "Gebruikers kunnen zichzelf registreren of je kan hier handmatig "
|
929 |
#~ "gebruikersaccounts aanmaken."
|
930 |
+
|
931 |
#~ msgid ""
|
932 |
#~ "Users cannot currently register themselves, but you can manually create "
|
933 |
#~ "users here."
|
934 |
#~ msgstr ""
|
935 |
#~ "Gebruikers kunnen zichzelf niet registreren, maar je kan hier wel "
|
936 |
#~ "handmatig gebruikersaccounts aanmaken."
|
937 |
+
|
938 |
#~ msgid "Required fields are marked <span class=\"required\">*</span>"
|
939 |
#~ msgstr ""
|
940 |
#~ "Verplichte velden zijn aangeduid met <span class=\"required\">*</span>."
|
941 |
+
|
|
|
942 |
#~ msgid "Last Name"
|
943 |
#~ msgstr "Naam"
|
944 |
+
|
945 |
#~ msgid "E-mail *"
|
946 |
#~ msgstr "E-mail *"
|
947 |
+
|
948 |
#~ msgid "Repeat Password *"
|
949 |
#~ msgstr "Herhaal je wachtwoord*"
|
950 |
+
|
951 |
#~ msgid "Biographical Information"
|
952 |
#~ msgstr "Biografische informatie"
|
953 |
+
|
|
|
954 |
#~ msgid "You are browsing the search results for "%1$s""
|
955 |
#~ msgstr "Je bekijkt hier de zoekresultaten voor "%1$s""
|
956 |
+
|
957 |
#~ msgid "Maybe you'd like to try inputting different search terms."
|
958 |
#~ msgstr "Misschien wil je andere zoektermen invoeren."
|
959 |
+
|
960 |
#~ msgid "You are browsing the %1$s tag archive."
|
961 |
#~ msgstr "Je bekijkt het archief voor de tag %1$s"
|
962 |
+
|
963 |
#~ msgid "Sorry, there are no posts tagged %1$s."
|
964 |
#~ msgstr "Sorry, er zijn geen berichten met de tag %1$s."
|
965 |
+
|
966 |
#~ msgid "Sorry, no documents matched your criteria."
|
967 |
#~ msgstr "Sorry, er zijn geen documenten die met je criteria overeenkomen."
|
968 |
+
|
969 |
#~ msgid "Sorry, no videos matched your criteria."
|
970 |
#~ msgstr "Sorry, er zijn geen video's die met je criteria overeenkomen."
|
971 |
+
|
972 |
#~ msgid "Widget Template"
|
973 |
#~ msgstr "Widget Template"
|
974 |
+
|
975 |
#~ msgid "About This Theme"
|
976 |
#~ msgstr "Over dit Thema"
|
977 |
+
|
978 |
#~ msgid "Theme Description:"
|
979 |
#~ msgstr "Thema Beschrijving:"
|
980 |
+
|
|
|
981 |
#~ msgid "Theme Documentation:"
|
982 |
#~ msgstr "Thema Documentatie:"
|
983 |
+
|
|
|
|
|
|
|
984 |
#~ msgid "Get support for this theme"
|
985 |
#~ msgstr "Ondersteuning voor dit thema"
|
986 |
+
|
|
|
987 |
#~ msgid "Select your theme settings"
|
988 |
#~ msgstr "Selecteer de settings voor je thema"
|
989 |
|
1002 |
#~ msgstr ""
|
1003 |
#~ "Selecteer dit als je wenst dat je secundaire widgets standaard geladen "
|
1004 |
#~ "worden op de home-pagina als niet anders geselecteerd is."
|
1005 |
+
|
1006 |
#~ msgid "Stylesheets:"
|
1007 |
#~ msgstr "Stijlbladen (CSS)"
|
1008 |
+
|
1009 |
#~ msgid ""
|
1010 |
#~ "Select this to have the theme automatically include a print stylesheet."
|
1011 |
#~ msgstr ""
|
1012 |
#~ "Selecteer dit als je wil dat het thema automatisch een 'print' stijlblad "
|
1013 |
#~ "insluit."
|
1014 |
+
|
1015 |
#~ msgid "JavaScript:"
|
1016 |
#~ msgstr "JavaScript:"
|
1017 |
+
|
1018 |
#~ msgid "Include the pull quote JavaScript."
|
1019 |
#~ msgstr "Inclusief pull quote JavaScript."
|
1020 |
+
|
1021 |
#~ msgid "Feeds:"
|
1022 |
#~ msgstr "Feeds:"
|
1023 |
+
|
1024 |
#~ msgid ""
|
1025 |
#~ "If you have a an alternate feed address, such as one from <a href="
|
1026 |
#~ "\"http://feedburner.com\" title=\"Feedburner\">Feedburner</a>, you can "
|
1031 |
#~ "\"http://feedburner.com\" title=\"Feedburner\">Feedburner</a>, kan je dat "
|
1032 |
#~ "hier invoeren om het door het thema te laten gebruiken. Als je dit "
|
1033 |
#~ "blanco laat, wordt de standaard WordPress RSS feed gebruikt."
|
1034 |
+
|
1035 |
#~ msgid "Title & Meta:"
|
1036 |
#~ msgstr "Titel & Meta"
|
1037 |
+
|
1038 |
#~ msgid "Use category slugs on single posts for your meta keywords?"
|
1039 |
#~ msgstr ""
|
1040 |
#~ "Gebruik categorie 'slug' als meta keywoord voor afzonderlijke berichten."
|
1041 |
+
|
1042 |
#~ msgid "Use tag slugs on single posts for your meta keywords?"
|
1043 |
#~ msgstr "Gebruik tag 'slug' als meta keywoord voor afzonderlijke berichten."
|
1044 |
+
|
1045 |
#~ msgid "Use the excerpt on single posts for your meta description?"
|
1046 |
#~ msgstr ""
|
1047 |
#~ "Uittreksel als meta-omschrijving gebruiken voor afzonderlijke berichten?"
|
1048 |
+
|
1049 |
#~ msgid "Use the author bio on author archives for your meta description?"
|
1050 |
#~ msgstr ""
|
1051 |
#~ "Auteurs biografie als meta-omschrijving gebruiken voor afzonderlijke "
|
1052 |
#~ "berichten?"
|
1053 |
+
|
1054 |
#~ msgid ""
|
1055 |
#~ "Use the category description on category archives for your meta "
|
1056 |
#~ "description?"
|
1057 |
#~ msgstr ""
|
1058 |
#~ "Rubriek-omschrijving als meta-omschrijving gebruiken voor afzonderlijke "
|
1059 |
#~ "berichten?"
|
1060 |
+
|
1061 |
#~ msgid "Use the author's name on pages and posts as the meta author?"
|
1062 |
#~ msgstr ""
|
1063 |
#~ "Naam van de auteur als meta-auteur gebruiken op pagina's en berichten?"
|
1064 |
+
|
1065 |
#~ msgid "Append site title to the end of the page name?"
|
1066 |
#~ msgstr "Site-naam toevoegen aan het eind van de pagina-naam?"
|
1067 |
+
|
1068 |
#~ msgid ""
|
1069 |
#~ "You can change these settings in the box labeled <em>Hybrid Settings</em> "
|
1070 |
#~ "when writing a post or page."
|
1071 |
#~ msgstr ""
|
1072 |
#~ "Je kan deze settings aanpassen in het vak <em>Hybrid Settings</em> "
|
1073 |
#~ "wanneer je een bericht of pagina bewerkt."
|
1074 |
+
|
1075 |
#~ msgid ""
|
1076 |
#~ "The <a href=\"%1$s\" title=\"All-In-One SEO Pack\">All-In-One SEO Pack</"
|
1077 |
#~ "a> and <a href=\"%2$s\" title=\"Headspace2\">Headspace2</a> plugins will "
|
1080 |
#~ "De <a href=\"%1$s\" title=\"All-In-One SEO Pack\">All-In-One SEO Pack</a> "
|
1081 |
#~ "en <a href=\"%2$s\" title=\"Headspace2\">Headspace2</a> plugins zullen "
|
1082 |
#~ "deze en de indexeringssettings overschrijven."
|
1083 |
+
|
1084 |
#~ msgid "Indexing:"
|
1085 |
#~ msgstr "Indexeren:"
|
1086 |
+
|
1087 |
#~ msgid ""
|
1088 |
#~ "Choose which pages of your blog get indexed by the search engines. Only "
|
1089 |
#~ "selected pages will be indexed. If not selected, those pages will be "
|
1092 |
#~ "Kies welke pagina's van je blog door zoekmachines kunnen geïndexeerd "
|
1093 |
#~ "worden. Alleen de geselecteerde pagina's worden geïndexeerd. Niet "
|
1094 |
#~ "geselecteerde pagina's worden geblokkeerd."
|
1095 |
+
|
1096 |
#~ msgid ""
|
1097 |
#~ "Note: Some of these settings will render the Title & Meta settings "
|
1098 |
#~ "moot. Also, setting your site to privacy mode will override these "
|
1101 |
#~ "Let op: Sommige van deze settings kunnen conflicteren met de Titel & "
|
1102 |
#~ "Meta settings. Ook wanneer je je site in een beveiligde modus omzet, "
|
1103 |
#~ "worden deze settings overschreven."
|
1104 |
+
|
1105 |
#~ msgid "Home page"
|
1106 |
#~ msgstr "Homepage"
|
1107 |
+
|
1108 |
#~ msgid "Single posts"
|
1109 |
#~ msgstr "Afzonderlijke berichten"
|
1110 |
+
|
1111 |
#~ msgid "Attachments"
|
1112 |
#~ msgstr "Bijlages"
|
1113 |
+
|
1114 |
#~ msgid "Pages"
|
1115 |
#~ msgstr "Pagina's"
|
1116 |
+
|
1117 |
#~ msgid "Date-based archives"
|
1118 |
#~ msgstr "Datum-gebaseerd archief"
|
1119 |
+
|
1120 |
#~ msgid "Category archives"
|
1121 |
#~ msgstr "Archief per rubriek"
|
1122 |
+
|
1123 |
#~ msgid "Tag archives"
|
1124 |
#~ msgstr "Archief op tags"
|
1125 |
+
|
1126 |
#~ msgid "Author archives"
|
1127 |
#~ msgstr "Archief op auteur"
|
1128 |
+
|
1129 |
#~ msgid "Search"
|
1130 |
#~ msgstr "Zoek"
|
1131 |
+
|
1132 |
#~ msgid "404"
|
1133 |
#~ msgstr "404"
|
1134 |
+
|
1135 |
#~ msgid "Avatars:"
|
1136 |
#~ msgstr "Avatars:"
|
1137 |
+
|
1138 |
#~ msgid ""
|
1139 |
#~ "You can set a default avatar for users without one if you don't like the "
|
1140 |
#~ "choices WordPress offers you. Simply add the full path to the image file."
|
1142 |
#~ "Je kan een standaard-avatar instellen voor gebruikers zonder avatar, "
|
1143 |
#~ "wanneer de keuze van WordPress je niet bevalt. Voer daartoe hier het "
|
1144 |
#~ "complete pad naar de afbeelding in."
|
1145 |
+
|
1146 |
#~ msgid "Comments:"
|
1147 |
#~ msgstr "Reacties:"
|
1148 |
+
|
1149 |
#~ msgid "Check to use the comments popup window instead of regular comments."
|
1150 |
#~ msgstr ""
|
1151 |
#~ "Aanvinken om een popup-scherm voor reacties te gebruiken in plaats van "
|
1152 |
#~ "het gebruikelijke commentaarscherm."
|
1153 |
+
|
1154 |
#~ msgid "WP 2.7+ only."
|
1155 |
#~ msgstr "Enkel voor WP 2.7+"
|
1156 |
+
|
1157 |
#~ msgid "Footer Insert:"
|
1158 |
#~ msgstr "Inserts voor Footer:"
|
1159 |
+
|
1160 |
#~ msgid ""
|
1161 |
#~ "You can place XHTML and JavaScript here to have it inserted automatically "
|
1162 |
#~ "into your theme. If you have a script, such as one from Google "
|
1165 |
#~ "Je kan hier XHTML en Javascript plaatsen dat automatisch in de footer van "
|
1166 |
#~ "je thema wordt ingevoerd. Dit kan van pas komen als je een script hebt "
|
1167 |
#~ "zoals dat van Google Analytics."
|
1168 |
+
|
1169 |
#~ msgid ""
|
1170 |
#~ "Check this if you want the theme to auto-generate your site's copyright "
|
1171 |
#~ "and title in the footer."
|
1172 |
#~ msgstr ""
|
1173 |
#~ "Aanvinken wanneer je wil dat het thema automatisch een copyright voor je "
|
1174 |
#~ "site in de footer invoert."
|
1175 |
+
|
1176 |
#~ msgid ""
|
1177 |
#~ "Want to show your love of WordPress? Check this and a link will be added "
|
1178 |
#~ "to your footer back to WordPress.org."
|
1179 |
#~ msgstr ""
|
1180 |
#~ "Wil je laten zien hoezeer je WordPress waardeert? Vink dit aan om "
|
1181 |
#~ "automatisch een link naar WordPress.org aan de footer toe te voegen."
|
1182 |
+
|
1183 |
#~ msgid ""
|
1184 |
#~ "Check this to have a link back to Theme Hybrid automatically appended to "
|
1185 |
#~ "your footer. This is totally optional. Really."
|
1186 |
#~ msgstr ""
|
1187 |
#~ "Aanvinken om automatisch een link naar Theme Hybrid aan je footer toe te "
|
1188 |
#~ "voegen. Dit volkomen vrijwillig, echt waar!"
|
1189 |
+
|
1190 |
#~ msgid ""
|
1191 |
#~ "For testing purposes, this will append a database query counter and page "
|
1192 |
#~ "load timer to your footer."
|
1193 |
#~ msgstr ""
|
1194 |
#~ "Voor test-doeleinden wordt hiermee een database-query teller en de "
|
1195 |
#~ "laadtijd van de pagina aan je footer toegevoegd."
|
1196 |
+
|
1197 |
#~ msgid "Add a title that will be seen by search engines."
|
1198 |
#~ msgstr "Voeg een titel toe die door zoekmachines gezien wordt."
|
1199 |
+
|
1200 |
#~ msgid "Add a description that will be seen by search engines."
|
1201 |
#~ msgstr "Voeg een beschrijving toe die door zoekmachines gezien wordt."
|
1202 |
+
|
1203 |
#~ msgid "Keywords:"
|
1204 |
#~ msgstr "Trefwoorden:"
|
1205 |
+
|
1206 |
#~ msgid "Add keywords that will be seen by search engines."
|
1207 |
#~ msgstr "Voeg trefwoorden toe die door zoekmachines gezien worden."
|
1208 |
+
|
1209 |
#~ msgid "Series:"
|
1210 |
#~ msgstr "Series:"
|
1211 |
+
|
1212 |
#~ msgid "Post the title of your series of articles here."
|
1213 |
#~ msgstr "Post hier de titel van je artikelseries."
|
1214 |
+
|
1215 |
#~ msgid "Thumbnail:"
|
1216 |
#~ msgstr "Thumbnail:"
|
1217 |
+
|
1218 |
#~ msgid "Add an image URL here."
|
1219 |
#~ msgstr "Voeg hier de URL van een afbeelding toe."
|
1220 |
+
|
1221 |
#~ msgid "Page Navigation:"
|
1222 |
#~ msgstr "Pagina Navigatie:"
|
1223 |
+
|
1224 |
#~ msgid "Hybrid Theme Settings"
|
1225 |
#~ msgstr "Hybrid Theme Settings"
|
1226 |
+
|
1227 |
#~ msgid "Settings saved."
|
1228 |
#~ msgstr "Settings opgeslagen."
|
1229 |
+
|
1230 |
#~ msgid "Browse:"
|
1231 |
#~ msgstr "Blader:"
|
1232 |
+
|
1233 |
#~ msgid "Home"
|
1234 |
#~ msgstr "Home"
|
1235 |
+
|
1236 |
#~ msgid "Search results for "%1$s""
|
1237 |
#~ msgstr "Zoekresultaten voor "%1$s""
|
1238 |
+
|
1239 |
#~ msgid "m"
|
1240 |
#~ msgstr "m"
|
1241 |
+
|
1242 |
#~ msgid "F"
|
1243 |
#~ msgstr "F"
|
1244 |
+
|
1245 |
#~ msgid "j"
|
1246 |
#~ msgstr "j"
|
1247 |
+
|
1248 |
#~ msgid "404 Not Found"
|
1249 |
#~ msgstr "404 Niet Gevonden"
|
1250 |
+
|
1251 |
#~ msgid "Log in to reply."
|
1252 |
#~ msgstr "Log in op te reageren."
|
1253 |
+
|
1254 |
#~ msgid "This function has been removed or replaced by another function."
|
1255 |
#~ msgstr "Deze functie is verwijderd of vervangen door een andere functie."
|
1256 |
+
|
1257 |
#~ msgid ""
|
1258 |
#~ "You can use these <acronym title=\"Extensible Hypertext Markup Language"
|
1259 |
#~ "\">XHTML</acronym> tags:"
|
1260 |
#~ msgstr ""
|
1261 |
#~ "Je kan deze <acronym title=\"Extensible Hypertext Markup Language"
|
1262 |
#~ "\">XHTML</acronym> tags: gebruiken."
|
1263 |
+
|
1264 |
#~ msgid "Search this site..."
|
1265 |
#~ msgstr "Doorzoek deze site"
|
1266 |
+
|
1267 |
#~ msgid "Copyright"
|
1268 |
#~ msgstr "Copyright"
|
1269 |
+
|
1270 |
#~ msgid "Powered by"
|
1271 |
#~ msgstr "Aangedreven door "
|
1272 |
+
|
1273 |
#~ msgid ""
|
1274 |
#~ "Powered by WordPress, state-of-the-art semantic personal publishing "
|
1275 |
#~ "platform"
|
1276 |
#~ msgstr ""
|
1277 |
#~ "Aangedreven door WordPress, het state-of-the-art semantische platform "
|
1278 |
#~ "voor iedereen."
|
1279 |
+
|
1280 |
#~ msgid "WordPress"
|
1281 |
#~ msgstr "WordPress"
|
1282 |
+
|
1283 |
#~ msgid "and"
|
1284 |
#~ msgstr "en"
|
1285 |
+
|
1286 |
#~ msgid "Hybrid Theme Framework"
|
1287 |
#~ msgstr "Hybrid Theme Framework"
|
1288 |
+
|
1289 |
#~ msgid "Articles in this series"
|
1290 |
#~ msgstr "Artikelen in deze serie"
|
1291 |
+
|
1292 |
#~ msgid ""
|
1293 |
#~ "You have encountered an error. This is usually because you've changed "
|
1294 |
#~ "something in the core Hybrid theme files. Try undoing your last edit to "
|
1299 |
#~ "gewijzigd in de kernbestanden van het Hybrid-thema. Probeer je laatste "
|
1300 |
#~ "wijzigingen ongedaan te maken om dit op te lossen. Als dat niet lukt, "
|
1301 |
#~ "kan je je tot de support forums richten voor hulp."
|
1302 |
+
|
1303 |
#~ msgid "This page loaded in %1$s seconds with %2$s database queries."
|
1304 |
#~ msgstr "Deze pagina laadde in %1$s seconden met %2$s database queries."
|
1305 |
+
|
1306 |
#~ msgid ": Page %1$s"
|
1307 |
#~ msgstr ":Pagina %1$s"
|
1308 |
+
|
1309 |
#~ msgid "Search results for "%1$s.""
|
1310 |
#~ msgstr "Zoekresultaten voor "%1$s.""
|
1311 |
+
|
1312 |
#~ msgid "Archive for %1$s"
|
1313 |
#~ msgstr "Archief voor %1$s"
|
1314 |
+
|
1315 |
#~ msgid "Archive for week %1$s of %2$s"
|
1316 |
#~ msgstr "Archief voor week %1$s van %2$s"
|
1317 |
+
|
1318 |
#~ msgid "Comment on "%1$s""
|
1319 |
#~ msgstr "Reactie op "%1$s""
|
1320 |
+
|
1321 |
#~ msgid "Primary Home"
|
1322 |
#~ msgstr "Primair Home"
|
1323 |
+
|
1324 |
#~ msgid "Primary Author"
|
1325 |
#~ msgstr "Primaire Auteur"
|
1326 |
+
|
1327 |
#~ msgid "Primary Category"
|
1328 |
#~ msgstr "Primaire Rubriek"
|
1329 |
+
|
1330 |
#~ msgid "Primary Date"
|
1331 |
#~ msgstr "Primaire Datum"
|
1332 |
+
|
1333 |
#~ msgid "Primary Page"
|
1334 |
#~ msgstr "Primaire Pagina"
|
1335 |
+
|
1336 |
#~ msgid "Primary Search"
|
1337 |
#~ msgstr "Primaire Zoekresultaten"
|
1338 |
+
|
|
|
1339 |
#~ msgid "Primary Tag"
|
1340 |
#~ msgstr "Primaire Tag"
|
1341 |
+
|
1342 |
#~ msgid "Primary 404"
|
1343 |
#~ msgstr "Primaire 404"
|
1344 |
+
|
1345 |
#~ msgid "Secondary Home"
|
1346 |
#~ msgstr "Secundaire Home"
|
1347 |
+
|
1348 |
#~ msgid "Secondary Author"
|
1349 |
#~ msgstr "Secundaire Auteur"
|
1350 |
+
|
1351 |
#~ msgid "Secondary Category"
|
1352 |
#~ msgstr "Secundaire Rubriek"
|
1353 |
+
|
1354 |
#~ msgid "Secondary Date"
|
1355 |
#~ msgstr "Secundaire Datum "
|
1356 |
+
|
1357 |
#~ msgid "Secondary Page"
|
1358 |
#~ msgstr "Secundaire Pagina"
|
1359 |
+
|
1360 |
#~ msgid "Secondary Search"
|
1361 |
#~ msgstr "Secundaire Zoekresultaten"
|
1362 |
+
|
1363 |
#~ msgid "Secondary Single"
|
1364 |
#~ msgstr "Secundaire EnkelvoudigBericht"
|
1365 |
+
|
1366 |
#~ msgid "Secondary Tag"
|
1367 |
#~ msgstr "Secundaire Tag"
|
1368 |
+
|
1369 |
#~ msgid "Secondary 404"
|
1370 |
#~ msgstr "Secundaire 404"
|
1371 |
+
|
1372 |
#~ msgid "Subsidiary Default"
|
1373 |
#~ msgstr "Bijkomende Standaard"
|
1374 |
+
|
1375 |
#~ msgid "RSS 2.0"
|
1376 |
#~ msgstr "RSS 2.0"
|
1377 |
+
|
1378 |
#~ msgid "RSS .92"
|
1379 |
#~ msgstr "RSS .92"
|
1380 |
+
|
1381 |
#~ msgid "Atom 0.3"
|
1382 |
#~ msgstr "Atom 0.3"
|
1383 |
+
|
1384 |
#~ msgid "Subsidiary Home"
|
1385 |
#~ msgstr "Subsidiair Home"
|
1386 |
+
|
1387 |
#~ msgid "Previous Page"
|
1388 |
#~ msgstr "Vorige pagina"
|
1389 |
+
|
1390 |
#~ msgid "Next Page"
|
1391 |
#~ msgstr "Volgende pagina"
|
1392 |
+
|
1393 |
#~ msgid "Related Posts"
|
1394 |
#~ msgstr "Gerelateerde berichten"
|
1395 |
+
|
1396 |
#~ msgid "Logout"
|
1397 |
#~ msgstr "Afmelden"
|
1398 |
+
|
1399 |
#~ msgid "Select Year"
|
1400 |
#~ msgstr "Selecteer jaar"
|
1401 |
+
|
1402 |
#~ msgid "Select Week"
|
1403 |
#~ msgstr "Selecteer week"
|
1404 |
+
|
1405 |
#~ msgid "Select Day"
|
1406 |
#~ msgstr "Selecteer dag"
|
1407 |
+
|
1408 |
#~ msgid "Select Post"
|
1409 |
#~ msgstr "Selecteer bericht"
|
1410 |
+
|
1411 |
#~ msgid "Type:"
|
1412 |
#~ msgstr "Type:"
|
1413 |
+
|
1414 |
#~ msgid "Format:"
|
1415 |
#~ msgstr "Format:"
|
1416 |
+
|
1417 |
#~ msgid "Before:"
|
1418 |
#~ msgstr "Voor:"
|
1419 |
+
|
1420 |
#~ msgid "After:"
|
1421 |
#~ msgstr "Na:"
|
1422 |
+
|
1423 |
#~ msgid "Show post count?"
|
1424 |
#~ msgstr "Toon aantal berichten?"
|
1425 |
+
|
1426 |
#~ msgid ""
|
1427 |
#~ "An advanced widget that gives you total control over the output of your "
|
1428 |
#~ "archives."
|
1429 |
#~ msgstr ""
|
1430 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1431 |
#~ "van je archieven."
|
1432 |
+
|
1433 |
#~ msgid "Bookmarks"
|
1434 |
#~ msgstr "Favorieten"
|
1435 |
+
|
1436 |
#~ msgid "Categories:"
|
1437 |
#~ msgstr "Rubrieken:"
|
1438 |
+
|
1439 |
#~ msgid "Exclude Categories:"
|
1440 |
#~ msgstr "Uit te sluiten rubrieken:"
|
1441 |
+
|
1442 |
#~ msgid "Category:"
|
1443 |
#~ msgstr "Rubriek:"
|
1444 |
+
|
1445 |
#~ msgid "Category Order:"
|
1446 |
#~ msgstr "Rubriek volgorde:"
|
1447 |
+
|
1448 |
#~ msgid "Order Categories By:"
|
1449 |
#~ msgstr "Sorteer rubrieken op:"
|
1450 |
+
|
1451 |
#~ msgid "Include Bookmarks:"
|
1452 |
#~ msgstr "Inclusief favorieten:"
|
1453 |
+
|
1454 |
#~ msgid "Exclude Bookmarks:"
|
1455 |
#~ msgstr "Exclusief favorieten:"
|
1456 |
+
|
1457 |
#~ msgid "Bookmarks Order:"
|
1458 |
#~ msgstr "Favorieten volgorde:"
|
1459 |
+
|
1460 |
#~ msgid "Order Bookmarks By:"
|
1461 |
#~ msgstr "Sorteer favorieten op:"
|
1462 |
+
|
1463 |
#~ msgid "Between (Bookmark/Description):"
|
1464 |
#~ msgstr "Tussen (Favoriet/beschrijving)"
|
1465 |
+
|
1466 |
#~ msgid "Categorize?"
|
1467 |
#~ msgstr "Rubriceer?"
|
1468 |
+
|
1469 |
#~ msgid "Show description?"
|
1470 |
#~ msgstr "Beschrijving tonen?"
|
1471 |
+
|
1472 |
#~ msgid "Hide invisible bookmarks?"
|
1473 |
#~ msgstr "Onzichtbare favorieten verbergen?"
|
1474 |
+
|
1475 |
#~ msgid "Show private categories?"
|
1476 |
#~ msgstr "Private rubrieken tonen?"
|
1477 |
+
|
1478 |
#~ msgid "Show rating?"
|
1479 |
#~ msgstr "Waardering tonen?"
|
1480 |
+
|
1481 |
#~ msgid "Show images?"
|
1482 |
#~ msgstr "Afbeeldingen tonen?"
|
1483 |
+
|
1484 |
#~ msgid ""
|
1485 |
#~ "An advanced widget that gives you total control over the output of your "
|
1486 |
#~ "bookmarks (links)."
|
1487 |
#~ msgstr ""
|
1488 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1489 |
#~ "van je favorieten (links)."
|
1490 |
+
|
1491 |
#~ msgid "RSS"
|
1492 |
#~ msgstr "RSS"
|
1493 |
+
|
1494 |
#~ msgid "Depth:"
|
1495 |
#~ msgstr "Diepte:"
|
1496 |
+
|
1497 |
#~ msgid "Number:"
|
1498 |
#~ msgstr "Aantal:"
|
1499 |
+
|
1500 |
#~ msgid "Child Of:"
|
1501 |
#~ msgstr "'Child' van :"
|
1502 |
+
|
|
|
1503 |
#~ msgid "Hierarchical?"
|
1504 |
#~ msgstr "Hierarchisch?"
|
1505 |
+
|
1506 |
#~ msgid "Show RSS feed?"
|
1507 |
#~ msgstr "Toon RSS feed?"
|
1508 |
+
|
1509 |
#~ msgid "Use description for title?"
|
1510 |
#~ msgstr "Omschrijving gebruiken voor de titel?"
|
1511 |
+
|
1512 |
#~ msgid "Show last updated?"
|
1513 |
#~ msgstr "Toon laatste aanpassing?"
|
1514 |
+
|
1515 |
#~ msgid "Show count?"
|
1516 |
#~ msgstr "Toon aantal?"
|
1517 |
+
|
1518 |
#~ msgid "Hide empty?"
|
1519 |
#~ msgstr "Lege verbergen?"
|
1520 |
+
|
1521 |
#~ msgid ""
|
1522 |
#~ "An advanced widget that gives you total control over the output of your "
|
1523 |
#~ "category links."
|
1524 |
#~ msgstr ""
|
1525 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1526 |
#~ "van je rubrieken."
|
1527 |
+
|
1528 |
#~ msgid "Categories"
|
1529 |
#~ msgstr "Rubrieken"
|
1530 |
+
|
1531 |
#~ msgid "Sort Order:"
|
1532 |
#~ msgstr "Sorteervolgorde"
|
1533 |
+
|
1534 |
#~ msgid "Meta Key:"
|
1535 |
#~ msgstr "Meta Key:"
|
1536 |
+
|
1537 |
#~ msgid "Meta Value:"
|
1538 |
#~ msgstr "Meta Value:"
|
1539 |
+
|
1540 |
#~ msgid "Show home?"
|
1541 |
#~ msgstr "Toon home?"
|
1542 |
+
|
1543 |
#~ msgid "Show date?"
|
1544 |
#~ msgstr "Toon datum?"
|
1545 |
+
|
1546 |
#~ msgid "Search Text:"
|
1547 |
#~ msgstr "Zoek tekst:"
|
1548 |
+
|
1549 |
#~ msgid "Use theme's search form?"
|
1550 |
#~ msgstr "Zoekformulier van thema gebruiken?"
|
1551 |
+
|
1552 |
#~ msgid ""
|
1553 |
#~ "An advanced widget that gives you total control over the output of your "
|
1554 |
#~ "search form."
|
1555 |
#~ msgstr ""
|
1556 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1557 |
#~ "van je zoekformulier."
|
1558 |
+
|
1559 |
#~ msgid "Largest:"
|
1560 |
#~ msgstr "Grootste:"
|
1561 |
+
|
1562 |
#~ msgid "Smallest:"
|
1563 |
#~ msgstr "Kleinste:"
|
1564 |
+
|
1565 |
#~ msgid "Unit:"
|
1566 |
#~ msgstr "Eenheid:"
|
1567 |
+
|
1568 |
#~ msgid ""
|
1569 |
#~ "An advanced widget that gives you total control over the output of your "
|
1570 |
#~ "tags."
|
1571 |
#~ msgstr ""
|
1572 |
#~ "Een geavanceerde widget die je de totale controle geeft over de output "
|
1573 |
#~ "van je tags."
|
|
members.php
CHANGED
@@ -1,137 +1,210 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* Plugin Name: Members
|
4 |
-
* Plugin URI: http://justintadlock.com/archives/2009/09/17/members-wordpress-plugin
|
5 |
-
* Description: A user, role, and content management plugin for controlling permissions and access. A plugin for making WordPress a more powerful <acronym title="Content Management System">CMS</acronym>.
|
6 |
-
* Version: 0.
|
7 |
-
* Author: Justin Tadlock
|
8 |
-
* Author URI: http://justintadlock.com
|
9 |
-
*
|
10 |
-
* The members plugin was created because the WordPress community is lacking
|
11 |
-
*
|
12 |
-
*
|
13 |
-
*
|
14 |
-
*
|
15 |
-
*
|
16 |
-
*
|
17 |
-
*
|
18 |
-
*
|
19 |
-
*
|
20 |
-
*
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
/**
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
120 |
-
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
|
129 |
-
|
130 |
-
|
131 |
-
|
132 |
-
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
137 |
?>
|
1 |
+
<?php
|
2 |
+
/**
|
3 |
+
* Plugin Name: Members
|
4 |
+
* Plugin URI: http://justintadlock.com/archives/2009/09/17/members-wordpress-plugin
|
5 |
+
* Description: A user, role, and content management plugin for controlling permissions and access. A plugin for making WordPress a more powerful <acronym title="Content Management System">CMS</acronym>.
|
6 |
+
* Version: 0.2
|
7 |
+
* Author: Justin Tadlock
|
8 |
+
* Author URI: http://justintadlock.com
|
9 |
+
*
|
10 |
+
* The members plugin was created because the WordPress community is lacking a solid permissions
|
11 |
+
* plugin that is both open source and works completely within the confines of the APIs in WordPress.
|
12 |
+
* But, the plugin is so much more than just a plugin to control permissions. It is meant to extend
|
13 |
+
* WordPress by making user, role, and content management as simple as using WordPress itself.
|
14 |
+
*
|
15 |
+
* This program is free software; you can redistribute it and/or modify it under the terms of the GNU
|
16 |
+
* General Public License version 2, as published by the Free Software Foundation. You may NOT assume
|
17 |
+
* that you can use any other version of the GPL.
|
18 |
+
*
|
19 |
+
* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without
|
20 |
+
* even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
21 |
+
*
|
22 |
+
* @package Members
|
23 |
+
* @version 0.2.0
|
24 |
+
* @author Justin Tadlock <justin@justintadlock.com>
|
25 |
+
* @copyright Copyright (c) 2009 - 2011, Justin Tadlock
|
26 |
+
* @link http://justintadlock.com/archives/2009/09/17/members-wordpress-plugin
|
27 |
+
* @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
|
28 |
+
*/
|
29 |
+
|
30 |
+
/**
|
31 |
+
* @since 0.2.0
|
32 |
+
*/
|
33 |
+
class Members_Load {
|
34 |
+
|
35 |
+
/**
|
36 |
+
* PHP4 constructor method. This will be removed once the plugin only supports WordPress 3.2,
|
37 |
+
* which is the version that drops PHP4 support.
|
38 |
+
*
|
39 |
+
* @since 0.2.0
|
40 |
+
*/
|
41 |
+
function Members_Load() {
|
42 |
+
$this->__construct();
|
43 |
+
}
|
44 |
+
|
45 |
+
/**
|
46 |
+
* PHP5 constructor method.
|
47 |
+
*
|
48 |
+
* @since 0.2.0
|
49 |
+
*/
|
50 |
+
function __construct() {
|
51 |
+
|
52 |
+
/* Set the constants needed by the plugin. */
|
53 |
+
add_action( 'plugins_loaded', array( &$this, 'constants' ), 1 );
|
54 |
+
|
55 |
+
/* Internationalize the text strings used. */
|
56 |
+
add_action( 'plugins_loaded', array( &$this, 'i18n' ), 2 );
|
57 |
+
|
58 |
+
/* Load the functions files. */
|
59 |
+
add_action( 'plugins_loaded', array( &$this, 'includes' ), 3 );
|
60 |
+
|
61 |
+
/* Load the admin files. */
|
62 |
+
add_action( 'plugins_loaded', array( &$this, 'admin' ), 4 );
|
63 |
+
|
64 |
+
/* Register activation hook. */
|
65 |
+
register_activation_hook( __FILE__, array( &$this, 'activation' ) );
|
66 |
+
}
|
67 |
+
|
68 |
+
/**
|
69 |
+
* Defines constants used by the plugin.
|
70 |
+
*
|
71 |
+
* @since 0.2.0
|
72 |
+
*/
|
73 |
+
function constants() {
|
74 |
+
|
75 |
+
/* Set the version number of the plugin. */
|
76 |
+
define( 'MEMBERS_VERSION', '0.2.0' );
|
77 |
+
|
78 |
+
/* Set the database version number of the plugin. */
|
79 |
+
define( 'MEMBERS_DB_VERSION', 2 );
|
80 |
+
|
81 |
+
/* Set constant path to the members plugin directory. */
|
82 |
+
define( 'MEMBERS_DIR', trailingslashit( plugin_dir_path( __FILE__ ) ) );
|
83 |
+
|
84 |
+
/* Set constant path to the members plugin URL. */
|
85 |
+
define( 'MEMBERS_URI', trailingslashit( plugin_dir_url( __FILE__ ) ) );
|
86 |
+
|
87 |
+
/* Set the constant path to the members includes directory. */
|
88 |
+
define( 'MEMBERS_INCLUDES', MEMBERS_DIR . trailingslashit( 'includes' ) );
|
89 |
+
|
90 |
+
/* Set the constant path to the members admin directory. */
|
91 |
+
define( 'MEMBERS_ADMIN', MEMBERS_DIR . trailingslashit( 'admin' ) );
|
92 |
+
}
|
93 |
+
|
94 |
+
/**
|
95 |
+
* Loads the initial files needed by the plugin.
|
96 |
+
*
|
97 |
+
* @since 0.2.0
|
98 |
+
*/
|
99 |
+
function includes() {
|
100 |
+
|
101 |
+
/* Load the plugin functions file. */
|
102 |
+
require_once( MEMBERS_INCLUDES . 'functions.php' );
|
103 |
+
|
104 |
+
/* Load the update functionality. */
|
105 |
+
require_once( MEMBERS_INCLUDES . 'update.php' );
|
106 |
+
|
107 |
+
/* Load the deprecated functions file. */
|
108 |
+
require_once( MEMBERS_INCLUDES . 'deprecated.php' );
|
109 |
+
|
110 |
+
/* Load the admin bar functions. */
|
111 |
+
require_once( MEMBERS_INCLUDES . 'admin-bar.php' );
|
112 |
+
|
113 |
+
/* Load the functions related to capabilities. */
|
114 |
+
require_once( MEMBERS_INCLUDES . 'capabilities.php' );
|
115 |
+
|
116 |
+
/* Load the content permissions functions. */
|
117 |
+
require_once( MEMBERS_INCLUDES . 'content-permissions.php' );
|
118 |
+
|
119 |
+
/* Load the private site functions. */
|
120 |
+
require_once( MEMBERS_INCLUDES . 'private-site.php' );
|
121 |
+
|
122 |
+
/* Load the shortcodes functions file. */
|
123 |
+
require_once( MEMBERS_INCLUDES . 'shortcodes.php' );
|
124 |
+
|
125 |
+
/* Load the template functions. */
|
126 |
+
require_once( MEMBERS_INCLUDES . 'template.php' );
|
127 |
+
|
128 |
+
/* Load the widgets functions file. */
|
129 |
+
require_once( MEMBERS_INCLUDES . 'widgets.php' );
|
130 |
+
}
|
131 |
+
|
132 |
+
/**
|
133 |
+
* Loads the translation files.
|
134 |
+
*
|
135 |
+
* @since 0.2.0
|
136 |
+
*/
|
137 |
+
function i18n() {
|
138 |
+
|
139 |
+
/* Load the translation of the plugin. */
|
140 |
+
load_plugin_textdomain( 'members', false, 'members/languages' );
|
141 |
+
}
|
142 |
+
|
143 |
+
/**
|
144 |
+
* Loads the admin functions and files.
|
145 |
+
*
|
146 |
+
* @since 0.2.0
|
147 |
+
*/
|
148 |
+
function admin() {
|
149 |
+
|
150 |
+
/* Only load files if in the WordPress admin. */
|
151 |
+
if ( is_admin() ) {
|
152 |
+
|
153 |
+
/* Load the main admin file. */
|
154 |
+
require_once( MEMBERS_ADMIN . 'admin.php' );
|
155 |
+
|
156 |
+
/* Load the plugin settings. */
|
157 |
+
require_once( MEMBERS_ADMIN . 'settings.php' );
|
158 |
+
}
|
159 |
+
}
|
160 |
+
|
161 |
+
/**
|
162 |
+
* Method that runs only when the plugin is activated.
|
163 |
+
*
|
164 |
+
* @since 0.2.0
|
165 |
+
*/
|
166 |
+
function activation() {
|
167 |
+
|
168 |
+
/* Get the administrator role. */
|
169 |
+
$role =& get_role( 'administrator' );
|
170 |
+
|
171 |
+
/* If the administrator role exists, add required capabilities for the plugin. */
|
172 |
+
if ( !empty( $role ) ) {
|
173 |
+
|
174 |
+
/* Role management capabilities. */
|
175 |
+
$role->add_cap( 'list_roles' );
|
176 |
+
$role->add_cap( 'create_roles' );
|
177 |
+
$role->add_cap( 'delete_roles' );
|
178 |
+
$role->add_cap( 'edit_roles' );
|
179 |
+
|
180 |
+
/* Content permissions capabilities. */
|
181 |
+
$role->add_cap( 'restrict_content' );
|
182 |
+
}
|
183 |
+
|
184 |
+
/**
|
185 |
+
* If the administrator role does not exist for some reason, we have a bit of a problem
|
186 |
+
* because this is a role management plugin and requires that someone actually be able to
|
187 |
+
* manage roles. So, we're going to create a custom role here. The site administrator can
|
188 |
+
* assign this custom role to any user they wish to work around this problem. We're only
|
189 |
+
* doing this for single-site installs of WordPress. The 'super admin' has permission to do
|
190 |
+
* pretty much anything on a multisite install.
|
191 |
+
*/
|
192 |
+
elseif ( empty( $role ) && !is_multisite() ) {
|
193 |
+
|
194 |
+
/* Add the 'members_role_manager' role with limited capabilities. */
|
195 |
+
add_role(
|
196 |
+
'members_role_manager',
|
197 |
+
_x( 'Role Manager', 'role', 'members' ),
|
198 |
+
array(
|
199 |
+
'read' => true,
|
200 |
+
'list_roles' => true,
|
201 |
+
'edit_roles' => true
|
202 |
+
)
|
203 |
+
);
|
204 |
+
}
|
205 |
+
}
|
206 |
+
}
|
207 |
+
|
208 |
+
$members_load = new Members_Load();
|
209 |
+
|
210 |
?>
|
readme.html
DELETED
@@ -1,376 +0,0 @@
|
|
1 |
-
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
2 |
-
<html xmlns="http://www.w3.org/1999/xhtml">
|
3 |
-
<head>
|
4 |
-
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
|
5 |
-
<title>A guide to the Members plugin</title>
|
6 |
-
|
7 |
-
<link rel="stylesheet" href="readme.css" type="text/css" media="screen" />
|
8 |
-
|
9 |
-
</head>
|
10 |
-
<body>
|
11 |
-
|
12 |
-
<h1>A guide to the Members plugin</h1>
|
13 |
-
|
14 |
-
<p class="first">The <em>Members</em> plugin is meant to be a complete user, role, and content management plugin for WordPress. Its purpose is to give you fine-grained control over who has access to what.</p>
|
15 |
-
|
16 |
-
<p class="second">Right now, it's in the early stages of development. It's my hope that this provides that true <acronym title="Content Management System">CMS</acronym> experience that many users long for in WordPress. There's a long road ahead, and I hope you join me for the ride.</p>
|
17 |
-
|
18 |
-
<h2>The plugin documentation</h2>
|
19 |
-
|
20 |
-
<p>Use the links below to navigate to a specific section in the documentation:</p>
|
21 |
-
|
22 |
-
<ul>
|
23 |
-
<li><a href="#users-roles-caps">The relationship of users, roles, and capabilities</a></li>
|
24 |
-
<li><a href="#install">How to install the plugin</a></li>
|
25 |
-
<li><a href="#how-to">How to use the plugin</a></li>
|
26 |
-
<li>Components
|
27 |
-
<ul>
|
28 |
-
<li><a href="#edit-roles">Edit Roles component</a></li>
|
29 |
-
<li><a href="#new-roles">New Roles component</a></li>
|
30 |
-
<li><a href="#content-permissions">Content Permissions component</a></li>
|
31 |
-
<li><a href="#shortcodes">Shortcodes component</a>
|
32 |
-
<ul>
|
33 |
-
<li><a href="#access">[access]</a></li>
|
34 |
-
<li><a href="#get-avatar">[get_avatar]</a></li>
|
35 |
-
<li><a href="#is-user-logged-in">[is_user_logged_in]</a></li>
|
36 |
-
<li><a href="#feed">[feed]</a></li>
|
37 |
-
<li><a href="#login-form">[login-form]</a></li>
|
38 |
-
</ul>
|
39 |
-
</li>
|
40 |
-
<li><a href="#template-tags">Template Tags component</a>
|
41 |
-
<ul>
|
42 |
-
<li><a href="#current_user_has_role">current_user_has_role()</a></li>
|
43 |
-
<li><a href="#has_role">has_role()</a></li>
|
44 |
-
<li><a href="#members_list_users">members_list_users()</a></li>
|
45 |
-
<li><a href="#members_author_profile">members_author_profile()</a></li>
|
46 |
-
</ul>
|
47 |
-
</li>
|
48 |
-
<li><a href="#widgets">Widgets component</a>
|
49 |
-
<ul>
|
50 |
-
<li><a href="#login-widget">Login Form widget</a></li>
|
51 |
-
<li><a href="#users-widget">Users widget</a></li>
|
52 |
-
</ul>
|
53 |
-
</li>
|
54 |
-
<li><a href="#private-blog">Private Blog component</a></li>
|
55 |
-
</ul>
|
56 |
-
</li>
|
57 |
-
<li><a href="#capability-check">Checking if the current user has a capability</a></li>
|
58 |
-
<li>Plugin/theme integration for developers
|
59 |
-
<ul>
|
60 |
-
<li><a href="#components-api">Creating custom components</a></li>
|
61 |
-
<li><a href="#filter-caps">Adding new capabilities</a></li>
|
62 |
-
<li><a href="#cap-check">Checking for capabilities</a></li>
|
63 |
-
</ul>
|
64 |
-
</li>
|
65 |
-
<li><a href="#old-levels">Need the old user levels system?</a></li>
|
66 |
-
<li><a href="#plugin-support">Plugin support</a></li>
|
67 |
-
<li><a href="#copyright">Copyright & License</a></li>
|
68 |
-
</ul>
|
69 |
-
|
70 |
-
<h2 id="users-roles-caps">The relationship of users, roles, and capabilities</h2>
|
71 |
-
|
72 |
-
<p>This is the most important thing to understand with this plugin. It's so important that I took the time out of my day to write a complete tutorial on understanding this: <a href="http://justintadlock.com/archives/2009/08/30/users-roles-and-capabilities-in-wordpress" title="Users, roles, and capabilities in WordPress">Users, roles, and capabilities in WordPress</a>. If you don't understand this concept, you won't understand what this plugin does. This is not a concept created by the plugin. This is how it's done in WordPress.</p>
|
73 |
-
|
74 |
-
<p>I highly recommend reading that blog post, but here's the short version:</p>
|
75 |
-
|
76 |
-
<ul>
|
77 |
-
<li><strong>Users</strong> are people that have registered on your site. I'm sure you already knew that. In WordPress, users are assigned a specific role. This role defines what the user can/can't do.</li>
|
78 |
-
<li><strong>Roles</strong> are a way of grouping users. Each user on your site will have a specific role. Roles are a set of capabilities. It is important to note that <strong>roles are not hierarchical</strong>. For example, "Administrator" is not higher than "Subscriber" in WordPress. You could literally give the Subscriber role more capabilities than the Administrator role. It's very important that you grasp this concept.</li>
|
79 |
-
<li><strong>Capabilities</strong> give meaning to roles. It's a permissions system. They're a way of saying a role <em>can</em> do something or a role <em>can't</em> do something (e.g., Role A can <code>edit_posts</code>, Role B can't <code>activate_plugins</code>, etc.).</li>
|
80 |
-
</ul>
|
81 |
-
|
82 |
-
<h2 id="install">How to install the plugin</h2>
|
83 |
-
|
84 |
-
<ol>
|
85 |
-
<li>Uzip the <code>members.zip</code> folder.</li>
|
86 |
-
<li>Upload the <code>members</code> folder to your <code>/wp-content/plugins</code> directory.</li>
|
87 |
-
<li>In your WordPress dashboard, head over to the <em>Plugins</em> section.</li>
|
88 |
-
<li>Activate <em>Members</em>.</li>
|
89 |
-
</ol>
|
90 |
-
|
91 |
-
<h2 id="how-to">How to use the plugin</h2>
|
92 |
-
|
93 |
-
<p>This plugin is set up to have a components-based system. The reason for this is that I don't want to stick everyone with a bunch of features they don't need. There's no point in using the <em>Edit Roles</em> component if all you need is just a login widget and some shortcodes. So, it's a <em>use-only-what-you-want</em> system.</p>
|
94 |
-
|
95 |
-
<p>To add components, look for the <em>Members Components</em> link under your <em>Settings</em> menu while in your WordPress admin. When on the new page, you'll be able to select the components you want to use.</p>
|
96 |
-
|
97 |
-
<p>I recommend at least activating <em>Edit Roles</em> component. It is at the heart of this plugin, and many other components will likely require its use in some form.</p>
|
98 |
-
|
99 |
-
<h2 id="edit-roles">Edit Roles Component</h2>
|
100 |
-
|
101 |
-
<p>This component can be both a blessing and a curse, so I'm going to ask that you use it wisely. Use extreme caution when assigning new capabilities to roles. You wouldn't want to give Average Joe the <code>edit_plugins</code> capability, for example.</p>
|
102 |
-
|
103 |
-
<p><em>Edit Roles</em> is the big daddy of all the components. It allows you to edit and assign new capabilities to existing roles.</p>
|
104 |
-
|
105 |
-
<p>You can find the settings page for this component under the <em>Users</em> menu. It will be labeled <em>Roles</em>. When clicking on the menu item, you'll get a list of all the available roles. From there, you can select a role to edit.</p>
|
106 |
-
|
107 |
-
<p>To delete a role, you must have the <code>delete_roles</code> capability. If you don't have that, you won't see a delete option on the <em>Roles</em> page.</p>
|
108 |
-
|
109 |
-
<p class="alert">It is important that you assign the capability of <code>edit_roles</code> to a role (the administrator role would be a good one). That way, only users with that particular capability can edit roles.</p>
|
110 |
-
|
111 |
-
<h2 id="new-roles">New Roles Component</h2>
|
112 |
-
|
113 |
-
<p>The <em>New Roles</em> component allows you to create new roles. The menu item for this is located under the <em>Users</em> menu and is labeled <em>New Roles</em>.</p>
|
114 |
-
|
115 |
-
<p>You can only use this component (create new roles) if you have the <code>create_roles</code> capability. So, if you don't have that, you need to use the <em>Manage Roles</em> component to add that capability to the role you currently have.</p>
|
116 |
-
|
117 |
-
<p>Adding new roles is pretty straightforward. You need to input a <em>Role</em> (only use letters, numbers, and underscores), <em>Role Name</em>, and select which capabilities the new role should have. You can later manage this role using the <em>Edit Roles</em> component.</p>
|
118 |
-
|
119 |
-
<p>You can assign new roles to users from the <em>Authors & Users</em> screen in WordPress. This is nothing particular to the plugin and is a default part of WordPress. I believe you need the <code>edit_users</code> capability to do this (I'll have to check).</p>
|
120 |
-
|
121 |
-
<h2 id="content-permissions">Content Permissions Component</h2>
|
122 |
-
|
123 |
-
<p>The <em>Content Permissions</em> component will be the heart and soul of this plugin in the future. Right now, it only adds an additional meta box on the post/page edit screen. This meta box allows you to select which roles can view the content of the post/page. If no roles are selected, anyone can view the content.</p>
|
124 |
-
|
125 |
-
<p>You need the <code>restrict_content</code> capability to use this component. So, you'll need to add this capability to your role using the <em>Edit Roles</em> component.</p>
|
126 |
-
|
127 |
-
<p class="alert">Note that you'll see a <em>Role</em> custom field key and values when testing this component. This is for my personal testing only right now.</p>
|
128 |
-
|
129 |
-
<h2 id="shortcodes">Shortcodes Component</h2>
|
130 |
-
|
131 |
-
<p>There are several shortcodes that you can use in your post/page editor. These need some major testing right now, so please offer any feedback you can.</p>
|
132 |
-
|
133 |
-
<h3 id="access">[access]</h3>
|
134 |
-
|
135 |
-
<p>The <code>[access]</code> shortcode is for hiding content from particular roles and capabilities. You need to wrap your content when using this shortcode:</p>
|
136 |
-
|
137 |
-
<pre><code>[access role="editor"]Hide this content from everyone but editors.[/access]</code></pre>
|
138 |
-
|
139 |
-
<p><strong>Parameters:</strong></p>
|
140 |
-
|
141 |
-
<ul>
|
142 |
-
<li><code>capability</code>: A capability that has been assigned to a role.</li>
|
143 |
-
<li><code>role</code>: A user role from WordPress or one that you've created.</li>
|
144 |
-
<li><code>feed</code>: Set to <code>true</code> if you'd like to show the content in feeds.</li>
|
145 |
-
</ul>
|
146 |
-
|
147 |
-
<p>Note that <code>capability</code> and <code>role</code> parameters aren't used in conjunction. The code first checks for the capability (if input) then checks for the role (if input).</p>
|
148 |
-
|
149 |
-
<h3 id="get-avatar">[get_avatar]</h3>
|
150 |
-
|
151 |
-
<p>This shortcode is for showing a user's avatar through <a href="http://gravatar.com" title="Gravatar">Gravatar</a>. It should be used like so within your post/page editor:</p>
|
152 |
-
|
153 |
-
<pre><code>[get_avatar id="30"]</code></pre>
|
154 |
-
|
155 |
-
<p><strong>Parameters:</strong></p>
|
156 |
-
|
157 |
-
<ul>
|
158 |
-
<li><code>id</code>: The ID of the user's avatar you'd like to show.</li>
|
159 |
-
<li><code>email</code>: The email of the user's avatar you'd like to show (you can use either <code>id</code> or <code>email</code></li>
|
160 |
-
<li><code>size</code>: The width and height in pixels of the avatar.</li>
|
161 |
-
<li><code>alt</code>: The <code>alt="Text"</code> that should appear for the image.</li>
|
162 |
-
<li><code>default</code>: A default image for users without a gravatar.</li>
|
163 |
-
</ul>
|
164 |
-
|
165 |
-
<h3 id="is-user-logged-in">[is_user_logged_in]</h3>
|
166 |
-
|
167 |
-
<p>The <code>[is_user_logged_in]</code> shortcode should be used to check if a user is currently logged into the site. If not, the content will be hidden.</p>
|
168 |
-
|
169 |
-
<pre><code>[is_user_logged_in]This content is only shown to logged-in users.[/is_user_logged_in]</code></pre>
|
170 |
-
|
171 |
-
<p>This shortcode has no parameters.</p>
|
172 |
-
|
173 |
-
<h3 id="feed">[feed]</h3>
|
174 |
-
|
175 |
-
<p>If you have content you only want to show to subscribers of your feed, wrap it in this shortcode:</p>
|
176 |
-
|
177 |
-
<pre><code>[feed]This content will only be shown in feeds.[/feed]</code></pre>
|
178 |
-
|
179 |
-
<p>This shortcode has no parameters.</p>
|
180 |
-
|
181 |
-
<h3 id="login-form">[login-form]</h3>
|
182 |
-
|
183 |
-
<p>The <code>[login-form]</code>shortcode produces a form for users to log into your site. More than likely, you'll want to use the <em>Login Form</em> widget for something like this. The shortcode should be used like so:</p>
|
184 |
-
|
185 |
-
<pre><code>[login-form]</code></pre>
|
186 |
-
|
187 |
-
<p>This shortcode has no parameters.</p>
|
188 |
-
|
189 |
-
<h2 id="template-tags">Template Tags Component</h2>
|
190 |
-
|
191 |
-
<p>The <em>Template Tags</em> component gives you additional functions (i.e., template tags) to use within your WordPress theme.</p>
|
192 |
-
|
193 |
-
<h3 id="current_user_has_role">current_user_has_role()</h3>
|
194 |
-
|
195 |
-
<p>This template tag checks if the currently logged-in user has a specific role.</p>
|
196 |
-
|
197 |
-
<pre><code><?php if ( function_exists( 'current_user_has_role' ) && current_user_has_role( 'editor' ) ) { ?>
|
198 |
-
Only users with the editor role can see this content.
|
199 |
-
<?php } ?></code></pre>
|
200 |
-
|
201 |
-
<h3 id="has_role">has_role()</h3>
|
202 |
-
|
203 |
-
<p>This function will check if a specific user (by ID) has the given role.</p>
|
204 |
-
|
205 |
-
<pre><code><?php if ( function_exists( 'has_role' ) && has_role( 'editor', 30 ) ) { ?>
|
206 |
-
If the user with the ID or 30 has the editor role, this will be shown.
|
207 |
-
<?php } ?></code></pre>
|
208 |
-
|
209 |
-
<h3 id="members_list_users">members_list_users()</h3>
|
210 |
-
|
211 |
-
<p>The <code>members_list_users()</code> template tag works much like <code>wp_list_authors()</code>. This is also a widget called <em>Users</em> if you're using the <em>Widgets</em> component.</p>
|
212 |
-
|
213 |
-
<pre><code><?php if ( function_exists( 'members_list_users' ) ) { ?>
|
214 |
-
|
215 |
-
<ul>
|
216 |
-
<?php members_list_users( array( 'order' => 'ASC', 'orderby' => 'display_name' ) ); ?>
|
217 |
-
</ul>
|
218 |
-
|
219 |
-
<?php } ?></code></pre>
|
220 |
-
|
221 |
-
<p>This function currently only takes in a few parameters, but I hope to work more in sometime in the future.</p>
|
222 |
-
|
223 |
-
<ul>
|
224 |
-
<li><code>order</code>: Takes in <code>ASC</code> (ascending) or <code>DESC</code> (descending). The default is <code>ASC</code>.</li>
|
225 |
-
<li><code>orderby</code>: What to order your users by. The possible values are <code>display_name</code>, <code>ID</code>, and <code>user_login</code>. The default is <code>display_name</code>.</li>
|
226 |
-
<li><code>include</code>: Comma-separated list of user IDs to include in the list.</li>
|
227 |
-
<li><code>exclude</code>: Comma-separated list of user IDs to exclude from the list.</li>
|
228 |
-
<li><code>limit</code>: The number of users to show. Note that large lists can really hit the database.</li>
|
229 |
-
<li><code>show_fullname</code> This is set to <code>true</code> by default. If set to <code>false</code>, the users' display names will be shown.</li>
|
230 |
-
<li><code>echo</code>: Set to <code>false</code> to return the list of users rather than displaying them on screen.</li>
|
231 |
-
</ul>
|
232 |
-
|
233 |
-
<h3 id="members_author_profile">members_author_profile()</h3>
|
234 |
-
|
235 |
-
<p>A template tag to be used within The Loop for showing the current author's avatar, name (linked to author archive), and bio. A good place to use this is in your <code>single.php</code> template after the post.</p>
|
236 |
-
|
237 |
-
<pre><code><?php if ( function_exists( 'members_author_profile' ) ) members_author_profile(); ?></code></pre>
|
238 |
-
|
239 |
-
<h2 id="widgets">Widgets Component</h2>
|
240 |
-
|
241 |
-
<p>The widgets component provides easy-to-use widgets for your site. They can be used in any WordPress widget area (provided by your theme). Currently, there's the <em>Login Form</em> and <em>Users</em> widgets.</p>
|
242 |
-
|
243 |
-
<h3 id="login-widget">Login Form widget</h3>
|
244 |
-
|
245 |
-
<p>The <em>Login Form</em> gives you a login form. It's a mixture of a text widget and login form. It can also show your avatar.</p>
|
246 |
-
|
247 |
-
<p>It's pretty straightforward, but I'll provide more documentation later.</p>
|
248 |
-
|
249 |
-
<h3 id="users-widget">Users widget</h3>
|
250 |
-
|
251 |
-
<p>The <em>Users</em> widget allows you to list users in any widget area. It's based off the <code>members_list_users()</code> function, so all of the <a href="#members_list_users" title="members_list_users() template tag">parameters are the same</a>.</p>
|
252 |
-
|
253 |
-
<h2 id="private-blog">Private Blog Component</h2>
|
254 |
-
|
255 |
-
<p>The <em>Private Blog</em> component makes sure that only logged-in users can see anything on your site. If a user visits your site and is not logged in, they are immediately redirected to your <code>wp-login.php</code> (WordPress login) page.</p>
|
256 |
-
|
257 |
-
<p class="alert">Note that feeds are not currently blocked with this component, but it's likely they will be later with an introduction of a feeds component.</p>
|
258 |
-
|
259 |
-
<h2 id="capability-check">Checking if the current user has a capability</h2>
|
260 |
-
|
261 |
-
<p>In plugins and your theme template files, you might sometimes need to check if the currently logged in user has permission to do something. We do this by using the WordPress function <code>current_user_can()</code>. The basic format looks like this:</p>
|
262 |
-
|
263 |
-
<pre><code><?php if ( current_user_can( 'capability_name' ) ) echo 'This user can do something'; ?></code></pre>
|
264 |
-
|
265 |
-
<p>For a more practical situation, let's say you created a new capability called <code>read_pages</code>. Well, you might want to hide the content within your <code>page.php</code> template by adding this:</p>
|
266 |
-
|
267 |
-
<pre><code><?php if ( current_user_can( 'read_pages ' ) ) { ?>
|
268 |
-
<?php the_content(); ?>
|
269 |
-
<?php } ?></code></pre>
|
270 |
-
|
271 |
-
<p>Only users with a role that has the <code>read_pages</code> capability will be able to see the content.</p>
|
272 |
-
|
273 |
-
<h2 id="components-api">Components API</h2>
|
274 |
-
|
275 |
-
<p>The components API is for developing new components to use within the Members plugin. This API is meant to be used so that users can select which components they want to run. While it is possible to build something on top of the <em>Members</em> plugin without using the components API, this provides a way to jump start development and keep code clean and organized.</p>
|
276 |
-
|
277 |
-
<h3>Creating a custom component</h3>
|
278 |
-
|
279 |
-
<p>To create a custom component, you need to use the <code>register_members_component()</code> function in your plugin. You should wrap it within its own function.</p>
|
280 |
-
|
281 |
-
<pre><code>function register_my_components() {
|
282 |
-
|
283 |
-
register_members_component( array(
|
284 |
-
'name' => 'component_name',
|
285 |
-
'label' => __('Component Label', 'members'),
|
286 |
-
'callback' => 'component_callback_function',
|
287 |
-
'hook' => false,
|
288 |
-
'description' => __('Add a description of your component.', 'members')
|
289 |
-
) );
|
290 |
-
}</code></pre>
|
291 |
-
|
292 |
-
<ul>
|
293 |
-
<li><strong><em>Required</em></strong> <code>name</code>: A unique name for your component (do not localize this, use spaces, or hyphens).</li>
|
294 |
-
<li><strong><em>Required</em></strong> <code>label</code>: The name of the component that users will see (should be localized).</li>
|
295 |
-
<li><strong><em>Required</em></strong> <code>description</code>: The description of your plugin (should be localized).</li>
|
296 |
-
<li><strong><em>Optional</em></strong> <code>callback</code>: The function to call for your component.</li>
|
297 |
-
<li><strong><em>Optional</em></strong> <code>hook</code>: The action hook used to fire your callback function.</li>
|
298 |
-
</ul>
|
299 |
-
|
300 |
-
<p>Once you've done the above, you need to add your function to the <code>members_register_components</code> hook.</p>
|
301 |
-
|
302 |
-
<pre><code>add_action( 'members_register_components', 'register_my_components' );</code></pre>
|
303 |
-
|
304 |
-
<h3>Checking if a component is active</h3>
|
305 |
-
|
306 |
-
<p>If you want to check if a component is active (nice way to only load code if needed), you can use the <code>is_active_members_component()</code> function.</p>
|
307 |
-
|
308 |
-
<pre><code>if ( is_active_members_component( $component_name ) ) {
|
309 |
-
/* Load files or do something else. */
|
310 |
-
}</code></pre>
|
311 |
-
|
312 |
-
<h3>Getting a component</h3>
|
313 |
-
|
314 |
-
<p>If you need to grab a component object, you can do so with the <code>get_members_component()</code> function.</p>
|
315 |
-
|
316 |
-
<pre><code>$component = get_members_component( $component_name );
|
317 |
-
|
318 |
-
echo $component->name;
|
319 |
-
echo $component->label;
|
320 |
-
echo $component->description;
|
321 |
-
echo $component->callback;
|
322 |
-
echo $component->hook;</code></pre>
|
323 |
-
|
324 |
-
<h2 id="filter-caps">Adding new default capabilities</h2>
|
325 |
-
|
326 |
-
<p>Your plugin/theme can add new capabilities to the <em>Edit Roles</em> component if needed. This will allow users to easily select the additional capabilities for whichever roles they choose.</p>
|
327 |
-
|
328 |
-
<pre><code>add_filter( 'members_get_capabilities', 'my_plugin_new_caps' );
|
329 |
-
|
330 |
-
function my_plugin_new_caps( $capabilities ) {
|
331 |
-
|
332 |
-
$capabilities[] = 'cap_name_1';
|
333 |
-
$capabilities[] = 'cap_name_2';
|
334 |
-
$capabilities[] = 'cap_name_3';
|
335 |
-
|
336 |
-
return $capabilities;
|
337 |
-
}</code></pre>
|
338 |
-
|
339 |
-
<p>Note that you need to respect the existing capabilities and return the original array.</p>
|
340 |
-
|
341 |
-
<h2 id="cap-check">Checking for capabilities</h2>
|
342 |
-
|
343 |
-
<p>In WordPress, you can use the <code>current_user_can()</code> function to check if the current user has a particular capability. Since you don't know whether a user has this plugin installed, you might want to check first.</p>
|
344 |
-
|
345 |
-
<p>The <code>members_check_for_cap()</code> function (only use in admin) checks if any role has a particular capability. This can be useful in setting up something like admin menus. For example, you can set up a theme settings menu for users that have the <code>edit_themes</code> capability. But, if this plugin is installed and a user has the <code>edit_my_theme</code> capability, that'll be used instead.</p>
|
346 |
-
|
347 |
-
<pre><code>if ( function_exists( 'members_check_for_cap' ) && members_check_for_cap( 'some_cap' ) ) {
|
348 |
-
/* Do something if any role has the 'some_cap' capability. */
|
349 |
-
else {
|
350 |
-
/* Do something for people without the plugin. */
|
351 |
-
}</code></pre>
|
352 |
-
|
353 |
-
<h2 id="old-levels">Need the old user levels system?</h2>
|
354 |
-
|
355 |
-
<p>Some plugins and themes might rely on the old user level system in WordPress. WordPress still has legacy support for these, but I'm hoping to continue phasing out the use of them.</p>
|
356 |
-
|
357 |
-
<p>By default, the levels aren't shown. They still exist, but are tucked away behind the scenes. If you need to control who has what level (levels are just capabilities), add this to your plugin or your theme's <code>functions.php</code>:</p>
|
358 |
-
|
359 |
-
<pre><code>remove_filter( 'members_get_capabilities', 'members_remove_old_levels' );</code></pre>
|
360 |
-
|
361 |
-
<h2 id="plugin-support">Plugin support</h2>
|
362 |
-
|
363 |
-
<p>I run a WordPress community called <a href="http://themehybrid.com" title="Theme Hybrid">Theme Hybrid</a>, which is where I fully support all of my WordPress projects, including plugins. You can sign up for an account to get plugin support for a small yearly fee ($25 <acronym title="United States Dollars">USD</acronym> at the time of writing).</p>
|
364 |
-
|
365 |
-
<p>I know. I know. You might not want to pay for support, but just consider it a donation to the project. To continue making cool, <acronym title="GNU General Public License">GPL</acronym>-licensed plugins and having the time to support them, I must pay the bills.</p>
|
366 |
-
|
367 |
-
<h2 id="copyright">Copyright & license</h2>
|
368 |
-
|
369 |
-
<p><em>Members</em> is licensed under the <a href="http://www.gnu.org/licenses/old-licenses/gpl-2.0.html" title="GNU GPL">GNU General Public License</a>, version 2 (<acronym title="GNU General Public License">GPL</acronym>).</p>
|
370 |
-
|
371 |
-
<p>This plugin is copyrighted to <a href="http://justintadlock.com" title="Justin Tadlock">Justin Tadlock</a>.</p>
|
372 |
-
|
373 |
-
<p>2009 © Justin Tadlock</p>
|
374 |
-
|
375 |
-
</body>
|
376 |
-
</html>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
readme.txt
CHANGED
@@ -1,63 +1,94 @@
|
|
1 |
-
=== Members ===
|
2 |
-
Contributors: greenshady
|
3 |
-
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3687060
|
4 |
-
Tags: admin,
|
5 |
-
Requires at least:
|
6 |
-
Tested up to: 2
|
7 |
-
Stable tag: 0.
|
8 |
-
|
9 |
-
A user, role, and content management plugin that makes WordPress a more powerful CMS.
|
10 |
-
|
11 |
-
== Description ==
|
12 |
-
|
13 |
-
*Members* is a plugin that extends your control over your blog. It's a user, role, and content management plugin that was created to make WordPress a more powerful CMS.
|
14 |
-
|
15 |
-
The plugin is
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
*
|
22 |
-
*
|
23 |
-
*
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
== Installation ==
|
30 |
-
|
31 |
-
1. Upload `members` to the `/wp-content/plugins/` directory.
|
32 |
-
1. Activate the plugin through the 'Plugins' menu in WordPress.
|
33 |
-
1. Go to <em>Settings > Members Components</em> to select which components you'd like to use.
|
34 |
-
|
35 |
-
More detailed instructions are included in the plugin's `readme.html` file.
|
36 |
-
|
37 |
-
== Frequently Asked Questions ==
|
38 |
-
|
39 |
-
= Why was this plugin created? =
|
40 |
-
|
41 |
-
I wasn't satisfied with the current user, role, and permissions plugins available. Yes, some of them are good, but nothing fit what I had in mind perfectly. Some offered few features. Some worked completely outside of the WordPress APIs. Others lacked the GPL license.
|
42 |
-
|
43 |
-
This plugin is still a long way away from my goals, but it'll get there eventually.
|
44 |
-
|
45 |
-
= How do I use it? =
|
46 |
-
|
47 |
-
Most things should be fairly straightforward, but I've included an in-depth guide in the plugin download. It's a file called `readme.html
|
48 |
-
|
49 |
-
You'll want to look over that. It's probably the most in-depth plugin documentation you'll ever read. ;)
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
=== Members ===
|
2 |
+
Contributors: greenshady
|
3 |
+
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=3687060
|
4 |
+
Tags: admin, role, roles, member, members, profile, shortcode, user, users, widget, widgets
|
5 |
+
Requires at least: 3.1
|
6 |
+
Tested up to: 3.2
|
7 |
+
Stable tag: 0.2
|
8 |
+
|
9 |
+
A user, role, and content management plugin that makes WordPress a more powerful CMS.
|
10 |
+
|
11 |
+
== Description ==
|
12 |
+
|
13 |
+
*Members* is a plugin that extends your control over your blog. It's a user, role, and content management plugin that was created to make WordPress a more powerful CMS.
|
14 |
+
|
15 |
+
The foundation of the plugin is its extensive role and capability management system. This is the backbone of all the current features and planned future features.
|
16 |
+
|
17 |
+
**Plugin Features:**
|
18 |
+
|
19 |
+
* Role Manager: Allows you to edit, create, and delete roles as well as capabilities for these roles.
|
20 |
+
* Content Permissions: Gives you control over which users (by role) have access to post content.
|
21 |
+
* Shortcodes: Shortcodes to control who has access to content.
|
22 |
+
* Widgets: A login form widget and users widget to show in your theme's sidebars.
|
23 |
+
* Private Site: You can make your site and its feed completely private if you want.
|
24 |
+
|
25 |
+
**If updating from a previous version:**
|
26 |
+
|
27 |
+
If you've used a previous version of the Members plugin, please check your settings under Settings > Members and reset your Users and Login Form widgets (if you were using them).
|
28 |
+
|
29 |
+
== Installation ==
|
30 |
+
|
31 |
+
1. Upload `members` to the `/wp-content/plugins/` directory.
|
32 |
+
1. Activate the plugin through the 'Plugins' menu in WordPress.
|
33 |
+
1. Go to <em>Settings > Members Components</em> to select which components you'd like to use.
|
34 |
+
|
35 |
+
More detailed instructions are included in the plugin's `readme.html` file.
|
36 |
+
|
37 |
+
== Frequently Asked Questions ==
|
38 |
+
|
39 |
+
= Why was this plugin created? =
|
40 |
+
|
41 |
+
I wasn't satisfied with the current user, role, and permissions plugins available. Yes, some of them are good, but nothing fit what I had in mind perfectly. Some offered few features. Some worked completely outside of the WordPress APIs. Others lacked the GPL license.
|
42 |
+
|
43 |
+
This plugin is still a long way away from my goals, but it'll get there eventually.
|
44 |
+
|
45 |
+
= How do I use it? =
|
46 |
+
|
47 |
+
Most things should be fairly straightforward, but I've included an in-depth guide in the plugin download. It's a file called `readme.html` in the `/docs` folder.
|
48 |
+
|
49 |
+
You'll want to look over that. It's probably the most in-depth plugin documentation you'll ever read. ;)
|
50 |
+
|
51 |
+
Now, open up the `/docs/readme.html` file included in the plugin download and read the documentation.
|
52 |
+
|
53 |
+
= I can't access the "Role Manager" features. =
|
54 |
+
|
55 |
+
When the plugin is first activated, it runs a script that sets specific capabilities to the "Administrator" role on your site that grants you access to this feature. So, you must be logged in with the administrator account to access the role manager.
|
56 |
+
|
57 |
+
If, for some reason, you do have the administrator role and the role manager is still inaccesible to you, deactivate the plugin. Then, reactivate it.
|
58 |
+
|
59 |
+
= Help! I've locked myself out of my site! =
|
60 |
+
|
61 |
+
Well, that's why you really need to read the documentation for the plugin before actually using it, especially a plugin that controls permissions for your site.
|
62 |
+
|
63 |
+
== Screenshots ==
|
64 |
+
|
65 |
+
1. Members plugin settings
|
66 |
+
2. Role management screen
|
67 |
+
3. Edit role screen
|
68 |
+
4. Members settings help tab
|
69 |
+
5. Content permissions on the edit post screen
|
70 |
+
|
71 |
+
== Changelog ==
|
72 |
+
|
73 |
+
**Version 0.2**
|
74 |
+
|
75 |
+
* Updated everything. Nearly all the code was rewritten from the ground up to make for a better user experience.
|
76 |
+
* Plugin users should check their plugin settings.
|
77 |
+
|
78 |
+
**Version 0.1.1**
|
79 |
+
|
80 |
+
* Fixed a bug with the Content Permissions component that restricted access to everyone.
|
81 |
+
* Added missing internationalization function call: `load_plugin_textdomain()`.
|
82 |
+
* Added new `/languages` folder for holding translations.
|
83 |
+
* Added `members-en_EN.po`, `members-en_EN.mo`, and `members.pot` to the `/languages` folder.
|
84 |
+
* Updated some non-internationalized strings.
|
85 |
+
|
86 |
+
**Version 0.1**
|
87 |
+
|
88 |
+
* Plugin launch. Everything's new!
|
89 |
+
|
90 |
+
== Upgrade Notice ==
|
91 |
+
|
92 |
+
= Version 0.2 =
|
93 |
+
|
94 |
+
Version 0.2 is a complete overhaul of the plugin. It includes security fixes, bug fixes, and a few new features. Please check your plugin settings and widget settings.
|
screenshot-1.png
ADDED
Binary file
|
screenshot-2.png
ADDED
Binary file
|
screenshot-3.png
ADDED
Binary file
|
screenshot-4.png
ADDED
Binary file
|
screenshot-5.png
ADDED
Binary file
|
settings.php
DELETED
@@ -1,83 +0,0 @@
|
|
1 |
-
<?php
|
2 |
-
/**
|
3 |
-
* The components settings page is an admin page that allows users to select which
|
4 |
-
* components of the plugin they wish to use.
|
5 |
-
*
|
6 |
-
* @package Members
|
7 |
-
*/
|
8 |
-
|
9 |
-
/* Get the global $members object. */
|
10 |
-
global $members; ?>
|
11 |
-
|
12 |
-
<div class="wrap">
|
13 |
-
|
14 |
-
<h2><?php _e('Select Components', 'members'); ?></h2>
|
15 |
-
|
16 |
-
<?php do_action( 'members_pre_components_form' ); // Pre-form hook. Useful for things like messages once a component has been activated. ?>
|
17 |
-
|
18 |
-
<div id="poststuff">
|
19 |
-
|
20 |
-
<form method="post" action="options.php">
|
21 |
-
|
22 |
-
<?php settings_fields( 'members_plugin_settings' ); ?>
|
23 |
-
<?php $options = get_option( 'members_settings' ); ?>
|
24 |
-
|
25 |
-
<table id="all-plugins-table" class="widefat">
|
26 |
-
|
27 |
-
<thead>
|
28 |
-
<tr>
|
29 |
-
<th class='check-column'><input type='checkbox' /></th>
|
30 |
-
<th class='name-column'><?php _e('Component', 'members'); ?></th>
|
31 |
-
<th><?php _e('Description', 'members'); ?></th>
|
32 |
-
</tr>
|
33 |
-
</thead>
|
34 |
-
|
35 |
-
<tfoot>
|
36 |
-
<tr>
|
37 |
-
<th class='check-column'><input type='checkbox' /></th>
|
38 |
-
<th class='name-column'><?php _e('Component', 'members'); ?></th>
|
39 |
-
<th><?php _e('Description', 'members'); ?></th>
|
40 |
-
</tr>
|
41 |
-
</tfoot>
|
42 |
-
|
43 |
-
<?php if ( is_array( $members->registered_components ) ) { ?>
|
44 |
-
|
45 |
-
<tbody class="plugins">
|
46 |
-
|
47 |
-
<?php foreach ( $members->registered_components as $component ) { ?>
|
48 |
-
|
49 |
-
<?php if ( !$component->name ) continue; ?>
|
50 |
-
|
51 |
-
<tr valign="top" class="<?php if ( $options[$component->name] ) echo 'active'; else echo 'inactive'; ?>">
|
52 |
-
|
53 |
-
<th class="manage-column column-cb check-column">
|
54 |
-
<input type="checkbox" name="members_settings[<?php echo $component->name; ?>]" id="<?php echo $component->name; ?>" value="1" <?php checked( '1', $options[$component->name] ); ?> />
|
55 |
-
</th><!-- manage-column .column-cb .check-column -->
|
56 |
-
|
57 |
-
<td class="plugin-title">
|
58 |
-
<label for="<?php echo $component->name; ?>"><strong><?php echo $component->label; ?></strong></label>
|
59 |
-
</td><!-- .plugin-title -->
|
60 |
-
|
61 |
-
<td class="desc">
|
62 |
-
<p><?php echo $component->description; ?></p>
|
63 |
-
</td><!-- .desc -->
|
64 |
-
|
65 |
-
</tr><!-- .active/.inactive -->
|
66 |
-
|
67 |
-
<?php } // End loop through registered components. ?>
|
68 |
-
|
69 |
-
</tbody><!-- .plugins -->
|
70 |
-
|
71 |
-
<?php } // End check for registered components ?>
|
72 |
-
|
73 |
-
</table><!-- #all-plugins-table .widefat -->
|
74 |
-
|
75 |
-
<p class="submit">
|
76 |
-
<input type="submit" class="button-primary" value="<?php _e('Activate', 'members') ?>" />
|
77 |
-
</p><!-- .submit -->
|
78 |
-
|
79 |
-
</form>
|
80 |
-
|
81 |
-
</div><!-- #poststuff -->
|
82 |
-
|
83 |
-
</div><!-- .wrap -->
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|