我目前正在为艺术家组织开发一个新网站。允许管理员角色创建帐户和其他一些节点内容,创建的帐户具有相同的默认角色“artisan”。管理员也是工匠。工匠可以创建和编辑自己的内容。管理员和工匠都应该能够编辑用户配置文件(全部用于管理员,只有他们自己的工匠)。事实是admin可以创建一个用户但是没有人(user1除外)可以在编辑后保存用户配置文件(但它适用于其他节点)。权限已被扫描多次。我一直在寻找没有成功的地方,我错过了什么?我做了很少的更改,我写的唯一相关代码如下:
<?php
function canardesign_system_form_alter(&$form, &$form_state, $form_id){
global $user;
switch ($form_id){
case 'oeuvre_node_form':
$form['actions']['submit']['#submit'][] = 'canardesign_system_oeuvre_redirect';
if (in_array('artisan', array_values($user->roles))){
$form['field_auteur']['#type']= 'hidden';
$form['field_auteur']['und']['#default_value']= $user->uid;
}
break;
case 'user_profile_form':
if (in_array('artisan', array_values($user->roles))){
$form['actions']['submit']['#submit'][] = 'canardesign_system_user_profile_form_submit';
}
break;
}
}
function canardesign_system_oeuvre_redirect($form, &$form_state) {
$type=$form['#node']->type;
if(isset($type))
{
$node = node_load($form_state['nid']);
$uid=field_get_items('node', $node, 'field_auteur')[0]['target_id'];
$form_state['redirect'] = 'oeuvres/'.$uid;
}
}
function canardesign_system_user_profile_form_submit($form, &$form_state) {
drupal_goto('artisans');
}
/*default role when administrator (who is artisan as well) creates an account*/
function canardesign_system_user_insert(&$edit, $account, $category) {
global $user;
if (in_array('artisan', array_values($user->roles))){
$account->role = 'artisan';
}
}
?>
感谢您的帮助。
答案 0 :(得分:0)
我不确定这是否是导致问题的原因,但在提交挂钩内调用drupal_goto()
肯定是有问题的。它基本上会短缺表格的处理。
这可能会导致阻止执行其他必要代码的问题。
您应该将redirect
的{{1}}键设置为您希望用户结束的目的地。
表单处理完成后,Drupal会将用户发送到那里。
$form_state