- Statut : non résolu
- Ce sujet contient 11 réponses, 4 participants et a été mis à jour pour la dernière fois par
El-Cherubin, le il y a 16 années et 10 mois.
-
AuteurMessages
-
26 mai 2008 à 16 h 38 min #459851
Hello,
J’aimerais que les créateurs de blogs puissent ajouter directement des contributeurs en évitant le côté lourd de l’inscription préalable sur la plateforme de blogs, et donc que l’administrateur d’un blog puisse ajouter des utilisateurs directement à partir de l’interface.
J’ai déjà vu ça sur plusieurs plateformes wpmu (lewebpedagogique, edublogs, …) mais je ne trouve pas le plugin qui fait ça …Merci de votre aide.
2 juin 2008 à 17 h 30 min #631450Personne sur le coup ?
2 juin 2008 à 18 h 06 min #631451C’est pas le truc qui dois être bien difficile à faire, et cela m’intéresse également, je regarderais donc mais heu dans quelques/plusieurs jours si personne ne te trouve ca.
2 juin 2008 à 18 h 25 min #631452Salut Soph ..
En fait, si tu veux une base, il y a déjà celui-ci.http://www.wordpress-fr.net/support/sujet-10526-plugin-ajout-utilisateur
2 juin 2008 à 19 h 58 min #631453J’avais les mêmes besoins. Je n’ai pas utilisé de plugin (cependant c’est peut-être transférable mais je n’en ai pas vraiment les compétences et le temps).
– Je suis parti du postulat suivant, wordpress et wordpress mu restent très proches l’un de l’autre pour le code. Or il est possible de créer des utilisateurs dans wordpress. D’ailleurs, plusieurs utilisateurs peuvent avoir le même courriel, ce qui était une nécessité pour moi puisque des élèves publient sur les blogs avec l’encadrement d’enseignants. Or ces élèves n’ont souvent pas de courriel personnel mais un courriel classe.
Je ne sais si cette manip est valable pour wordpress mu 1.5.1 mais sans doute (si je viens de la tester) :
1. télécharger wordpress 1.5.1. Cela permet de comparer les fichiers avec winmerge par exemple.
2. dans wp-admin/includes/schema ajouter le droit de créer des utilisateurs aux administrateurs des blogs = $role->add_cap(‘create_users’); (à partir de la ligne 365)
3. Remplacer le fichier user.php dans wp-admin par le code ci-joint :<?php
require_once('admin.php');
require_once( ABSPATH . WPINC . '/registration.php');
if ( !current_user_can('edit_users') )
wp_die(__('Cheatin’ uh?'));
$title = __('Users');
$parent_file = 'users.php';
$action = $_REQUEST['action'];
$update = '';
if ( empty($action) ) {
if ( isset($_GET['removeit']) )
$action = 'removeuser';
elseif ( isset($_GET['changeit']) && !empty($_GET['new_role']) )
$action = 'promote';
}
if ( empty($_REQUEST) ) {
$referer = '’;
} elseif ( isset($_REQUEST[‘wp_http_referer’]) ) {
$redirect = remove_query_arg(array(‘wp_http_referer’, ‘updated’, ‘delete_count’), stripslashes($_REQUEST[‘wp_http_referer’]));
$referer = »;
} else {
$redirect = ‘users.php’;
}
switch ($action) {
case ‘promote’:
check_admin_referer(‘bulk-users’);
if (empty($_REQUEST[‘users’])) {
wp_redirect($redirect);
exit();
}
if ( !current_user_can(‘edit_users’) )
wp_die(__(‘You can’t edit users.’));
$userids = $_REQUEST[‘users’];
$update = ‘promote’;
foreach($userids as $id) {
if ( ! current_user_can(‘edit_user’, $id) )
wp_die(__(‘You can’t edit that user.’));
// The new role of the current user must also have edit_users caps
if($id == $current_user->ID && !$wp_roles->role_objects[$_REQUEST[‘new_role’]]->has_cap(‘edit_users’)) {
$update = ‘err_admin_role’;
continue;
}
$user = new WP_User($id);
$user->set_role($_REQUEST[‘new_role’]);
}
wp_redirect(add_query_arg(‘update’, $update, $redirect));
exit();
break;
case ‘dodelete’:
wp_die(__(‘This function is disabled.’));
check_admin_referer(‘delete-users’);
if ( empty($_REQUEST[‘users’]) ) {
wp_redirect($redirect);
exit();
}
if ( !current_user_can(‘delete_users’) )
wp_die(__(‘You can’t delete users.’));
$userids = $_REQUEST[‘users’];
$update = ‘del’;
$delete_count = 0;
foreach ( (array) $userids as $id) {
if ( ! current_user_can(‘delete_user’, $id) )
wp_die(__(‘You can’t delete that user.’));
if($id == $current_user->ID) {
$update = ‘err_admin_del’;
continue;
}
switch($_REQUEST[‘delete_option’]) {
case ‘delete’:
wp_delete_user($id);
break;
case ‘reassign’:
wp_delete_user($id, $_REQUEST[‘reassign_user’]);
break;
}
++$delete_count;
}
$redirect = add_query_arg( array(‘delete_count’ => $delete_count, ‘update’ => $update), $redirect);
wp_redirect($redirect);
exit();
break;
case ‘delete’:
wp_die(__(‘This function is disabled.’));
check_admin_referer(‘bulk-users’);
if ( empty($_REQUEST[‘users’]) ) {
wp_redirect($redirect);
exit();
}
if ( !current_user_can(‘delete_users’) )
$errors = new WP_Error(‘edit_users’, __(‘You can’t delete users.’));
$userids = $_REQUEST[‘users’];
include (‘admin-header.php’);
?>
<form action="" method="post" name="updateusers" id="updateusers">
<div class="wrap">
<h2></h2>
<p></p>
<ul>
ID ) {
echo « <li> » . sprintf(__(‘ID #%1s: %2s <strong>The current user will not be deleted.</strong>‘), $id, $user->user_login) . « </li>n »;
} else {
echo « <li> » . sprintf(__(‘ID #%1s: %2s’), $id, $user->user_login) . « </li>n »;
$go_delete = true;
}
}
$all_logins = $wpdb->get_results(« SELECT ID, user_login FROM $wpdb->users, $wpdb->usermeta WHERE $wpdb->users.ID = $wpdb->usermeta.user_id AND meta_key = ‘ ».$wpdb->prefix. »capabilities’ ORDER BY user_login »);
$user_dropdown = »;
foreach ( (array) $all_logins as $login )
if ( $login->ID == $current_user->ID || !in_array($login->ID, $userids) )
$user_dropdown .= « ID} »>{$login->user_login} »;
$user_dropdown .= »;
?>
</ul>
<p></p>
<ul>
<li><label>
</label></li>
<li>
<?php echo '<label for="delete_option1">‘.__(‘Attribute all posts and links to:’). »</label> $user_dropdown »; ?></li>
</ul>
<p class="submit"><input type="submit" name="submit" value=" » class= »button-secondary » /></p>
<p></p>
</div>
</form>
id) {
$update = ‘err_admin_remove’;
continue;
}
remove_user_from_blog($id);
}
wp_redirect(‘users.php?update=’ . $update);
break;
case ‘removeuser’:
check_admin_referer(‘bulk-users’);
if (empty($_REQUEST[‘users’])) {
wp_redirect(‘users.php’);
}
if ( !current_user_can(‘edit_users’) )
$error = new WP_Error(‘edit_users’, __(‘You can’t remove users.’));
$userids = $_REQUEST[‘users’];
include (‘admin-header.php’);
?>
<form action="" method="post" name="updateusers" id="updateusers">
<div class="wrap">
<h2></h2>
<p></p>
<ul>
id) {
echo « <li> » . sprintf(__(‘ID #%1s: %2s <strong>The current user will not be removed.</strong>‘), $id, $user->user_login) . « </li>n »;
} else {
echo « <li> » . sprintf(__(‘ID #%1s: %2s’), $id, $user->user_login) . « </li>n »;
$go_remove = true;
}
}
?>
<p class="submit"><input type="submit" name="submit" value=" » /></p>
<p></p>
</div>
</form>
urlencode($new_user_login), ‘update’ => $update), $redirect );
wp_redirect( $redirect . ‘#user-‘ . $user_id );
die();
}
case ‘addexistinguser’:
check_admin_referer(‘add-user’);
if ( !current_user_can(‘edit_users’) )
die(__(‘You can’t edit users.’));
$new_user_email = wp_specialchars(trim($_REQUEST[‘newuser’]));
/* checking that username has been typed */
if ( !empty($new_user_email) ) {
if ( $user_id = email_exists( $new_user_email ) ) {
$username = $wpdb->get_var( « SELECT user_login FROM {$wpdb->users} WHERE ID=’$user_id' » );
if( ($username != null && is_site_admin( $username ) == false ) && ( array_key_exists($blog_id, get_blogs_of_user($user_id)) ) ) {
$location = ‘users.php?update=add_existing’;
} else {
add_user_to_blog( », $user_id, $_REQUEST[ ‘new_role’ ]);
do_action( « added_existing_user », $user_id );
$location = ‘users.php?update=add’;
}
wp_redirect(« $location »);
die();
} else {
wp_redirect(‘users.php?update=notfound’ );
die();
}
}
wp_redirect(‘users.php’);
die();
break;
default:
if ( !empty($_GET[‘_wp_http_referer’]) ) {
wp_redirect(remove_query_arg(array(‘_wp_http_referer’, ‘_wpnonce’), stripslashes($_SERVER[‘REQUEST_URI’])));
exit;
}
wp_enqueue_script(‘admin-users’);
wp_enqueue_script(‘admin-forms’);
include(‘admin-header.php’);
// Query the users
$wp_user_search = new WP_User_Search($_GET[‘usersearch’], $_GET[‘userspage’], $_GET[‘role’]);
if ( isset($_GET[‘update’]) ) :
switch($_GET[‘update’]) {
case ‘del’:
case ‘del_many’:
?>
<div id="message" class="updated fade"><p></p></div>
<div id="message" class="updated fade"><p></p></div>
<div id="message" class="updated fade"><p></p></div>
<div id="message" class="updated fade"><p></p></div>
<div id="message" class="error"><p></p></div>
<div id="message" class="updated fade"><p></p></div>
<div id="message" class="error"><p></p></div>
<div id="message" class="updated fade"><p></p></div>
<div id="message" class="error"><p></p></div>
<div id="message" class="updated fade"><p></p></div>
<div id="message" class="updated fade"><p></p></div>
<div id="message" class="updated fade"><p></p></div>
<div id="message" class="updated fade"><p></p></div>
<div class="error">
<ul>
get_error_messages() as $message )
echo « <li>$message</li>« ;
?>
</ul>
</div>
<div class="wrap">
<form id="posts-filter" action="" method="get">
is_search() ) : ?>
<h2>search_term)); ?></h2>
<h2></h2>
<ul class="subsubsub">
meta_value);
foreach ( (array) $b_roles as $b_role => $val ) {
if ( !isset($avail_roles[$b_role]) )
$avail_roles[$b_role] = 0;
$avail_roles[$b_role]++;
}
}
unset($users_of_blog);
$current_role = false;
$class = empty($_GET[‘role’]) ? ‘ class= »current »‘ : »;
$role_links[] = « <li><a> » . __(‘All Users’) . « </a>« ;
foreach ( $wp_roles->get_names() as $role => $name ) {
if ( !isset($avail_roles[$role]) )
continue;
$class = »;
if ( $role == $_GET[‘role’] ) {
$current_role = $_GET[‘role’];
$class = ‘ class= »current »‘;
}
$name = translate_with_context($name);
$name = sprintf(_c(‘%1$s (%2$s)|user role with count’), $name, $avail_roles[$role]);
$role_links[] = « <li><a> » . $name . ‘</a>‘;
}
echo implode(‘ |</li>‘, $role_links) . ‘</li>‘;
unset($role_links);
?>
</ul>
<p id="post-search">
<input type="text" id="post-search-input" name="usersearch" value="search_term); ?> » />
<input type="submit" value=" » class= »button » />
</p>
<div class="tablenav">
results_are_paged() ) : ?>
<div class="tablenav-pages">page_links(); ?></div>
<div class="alignleft">
<input type="submit" value=" » name= »removeit » class= »button-secondary delete » />
»
<input type="submit" value=" » name= »changeit » class= »button-secondary » />
</div>
<br class="clear" />
</div>
<br class="clear" />
search_errors ) ) : ?>
<div class="error">
<ul>
search_errors->get_error_messages() as $message )
echo « <li>$message</li>« ;
?>
</ul>
</div>
get_results() ) : ?>
is_search() ) : ?>
<p><a href="users.php"></a></p>
<table class="widefat">
<thead>
<tr class="thead">
<th scope="col" class="check-column"> </th>
<th></th>
<th></th>
<th></th>
<th></th>
<th class="num"></th>
</tr>
</thead>
<tbody id="users" class="list:user user-list">
get_results() as $userid ) {
$user_object = new WP_User($userid);
$roles = $user_object->roles;
$role = array_shift($roles);
$style = ( ‘ class= »alternate »‘ == $style ) ? » : ‘ class= »alternate »‘;
echo « nt » . user_row($user_object, $style, $role);
}
?>
</tbody>
</table>
<div class="tablenav">
results_are_paged() ) : ?>
<div class="tablenav-pages">page_links(); ?></div>
<br class="clear" />
</div>
</form>
</div>
‘user_login’, ‘first_name’ => ‘user_firstname’, ‘last_name’ => ‘user_lastname’, ’email’ => ‘user_email’, ‘url’ => ‘user_uri’, ‘role’ => ‘user_role’) as $formpost => $var ) {
$var = ‘new_’ . $var;
$$var = attribute_escape(stripslashes($_REQUEST[$formpost]));
}
unset($name);
}
?>
<br class="clear" />
<div class="wrap">
<h2></h2>
<div class="narrow">
<form action="" method="post" name="adduser" id="adduser">
<p></p>
<table>
<tr><th scope="row"> </th><td></td></tr>
<tr>
<th scope="row"></th>
<td>role_names as $role => $name) {
$selected = »;
if( $role == ‘subscriber’ )
$selected = ‘selected= »selected »‘;
echo « {$name} »;
}
?></td>
</tr>
</table>
<p class="submit">
<input name="adduser" type="submit" id="addusersub" value=" » />
</p>
</div>
</form>
<div class="error">
get_error_messages() as $message )
echo « <p>$message</p>« ;
?>
</div>
<div id="ajax-response">Il restera ensuite à reconfigurer le fichier .po à l’aide de poedit (catalogue, configuration, mettre le chemin du dossier contenant wordpress mu puis mettre à jour les sources et traduire les nouvelles chaînes de caractères).
Et voilà mais c’est une méthode qui nécessite de tester les fichiers avant chaque mise à jour. L’idéal serait un plugin.2 juin 2008 à 20 h 01 min #631454Sans indiscrétion, tu l’as fait pour quel site ?
2 juin 2008 à 20 h 11 min #631455Pour une plateforme de blogs pédagogiques d’une académie française
2 juin 2008 à 20 h 13 min #631456OK. Euh tu as fait d’autres changements qui pourraient être intéressants ?
Ma plateforme étant une plateforme de blogs pédagogiques … ça m’intéresse 😉Le code que tu donnes là, c’est une adaptation de 1.5.1 ou de 1.3.3 ?
3 juin 2008 à 7 h 48 min #631457Seule la dernière partie du code est légèrement modifiée (j’ai repris ni plus ni moins le formulaire de wordpress 2.3.3 mais je suis persuadé que cela fonctionne avec le formulaire de wordpress 2.5.1.
C’est la seule grosse modification que j’ai faite à part l’utilisation du plugin Role manager pour permettre au statut de contributeur de joindre des fichiers aux articles. Par défaut, ce n’est pas le cas. Or le statut contributeur est l’idéal pour des élèves puisqu’ils soumettent leur article à la validation de l’enseignant, administrateur du blog.3 juin 2008 à 7 h 55 min #631458Est-ce qu’il y a toujours la possibilité d’ajouter des utilisateurs normaux avec ton code ?
Est-ce que tu peux me l’envoyer par mail ou par mp ?Merci de ta contribution.
3 juin 2008 à 9 h 45 min #631459En fait le code ci-dessus ajoute simplement un formulaire dans utilisateurs qui permet à l’administrateur de créer ses propres utilisateurs tout en conservant la possibilité de récupérer les utilisateurs normaux via leur courriel.
Il te suffit de copier le code que j’ai joint au dessus dans notepad ++ ou le blocnote puis d’appeler le fichier users.php.
Pense aussi à rajouter le droit de créer des utilisateurs dans schema.php
Teste ensuite en local (avec wamp par exemple) pour voir ce que cela donne.
Si cela te convient, tu peux passer en production mais pas avant.27 juillet 2008 à 21 h 22 min #631460merci pour ce bout de code 🙂
-
AuteurMessages
- Vous devez être connecté pour répondre à ce sujet.