2016-09-12 6 views
0

私はPrivatemsgモジュールで受信者をあらかじめ入力していますが、どこが間違っているのか理解できません。私は成功した形式で、選択リストにオプションを印刷Drupal Privatemsg Pre-Populate Recipients

... 55 =>クリス (UID =>ユーザ名)

ここ

私のモジュールのコードがある...

function MYMODULE_form_alter(&$form, &$form_state, $form_id) { 
    if ($form_id == 'privatemsg_new') { 
     global $user; 
     if (in_array('Venue Manager', $user->roles) || in_array('Couples Page Manager', $user->roles)) { 
      $form['recipient']['#title'] = 'Choose which of your Couples you would like to message.'; 
      $form['recipient']['#type'] = 'select'; 
      $form['recipient']['#size'] = 1; 
      $options = couples_page_messages_recipients(); 
      $form['recipient']['#options'] = $options; 
      array_unshift($form['actions']['submit']['#validate'], 'couples_page_messages_validate'); 
     } 
     if (in_array('Couples Page Manager', $user->roles)) { 
      $form['recipient']['#title'] = 'Send a message to your venue.'; 
     } 
    } 
} 

function MYMODULE_recipients() { 
    global $user; 
    $options = array(); 
    if (in_array('Manager', $user->roles)) { 
     $result = db_query('SELECT `entity_id` FROM `field_data_field_parent_user` WHERE `field_parent_user_target_id` = :uid', array(':uid' => $user->uid)); 
     if (is_array($result) || is_object($result)) { 
      foreach ($result as $record) { 
       $child = user_load($record->entity_id); 
       $childlist[$child->name] = $child->name; 
      } 
     } 
    } 
    if (in_array('Page Manager', $user->roles)) { 
     $result = db_query('SELECT `field_parent_user_target_id` FROM `field_data_field_parent_user` WHERE `entity_id` = :uid', array(':uid' => $user->uid)); 
     if (is_array($result) || is_object($result)) { 
      foreach ($result as $record) { 
       $child = user_load($record->field_parent_user_target_id); 
      $childlist[$child->name] = $child->name; 
      } 
     } 
    } 
    return $childlist; 
} 

function MYMODULE_validate($form, &$form_state) { 
    $recipients = $form_state['values']['recipient']; 
    $usernames = array(); 
    foreach ($recipients as $recipient) { 
    $user = user_load((int) $recipient); 
    $usernames[] = $user->name; 
    } 
    $form_state['values']['recipient'] = implode(', ', $usernames); 
} 

フォームが正常に読み込まれ、ドロップダウンからユーザーを選択し、メッセージに記入して送信をクリックすると、次のエラーが表示されます。

警告:無効な引数suppli MYMODULE_validate()内のforeach()の行( の行60 /example.com/sites/all/modules/custom/MYMODULE/MYMODULE.module)。 には、少なくとも1人の有効な受信者が含まれている必要があります。

誰かが何が間違っているのを見るのに役立つことができますか?

私が検証機能にDSM($ form_state)を追加した場合、私はそれを見ることができます。..

$form['values']['recipient'] = [email protected] 

これは、受信者はそのが立ち往生場所がわからないイム、成功裏に通過していることを意味します。

答えて

0

私は余分な検証機能を捨てることに決めました。 validate配列を見ると、すでに十分なバリデーションが実行されており、オーバーライドする必要はありませんでした。

function MYMODULE_form_alter(&$form, &$form_state, $form_id) { 
    if ($form_id == 'privatemsg_new') { 
     global $user; 
     if (in_array('Venue Manager', $user->roles) || in_array('Couples Page Manager', $user->roles)) { 
      $form['recipient']['#title'] = 'Choose which of your Couples you would like to message.'; 
      $form['recipient']['#type'] = 'select'; 
      $form['recipient']['#size'] = 1; 
      $options = couples_page_messages_recipients(); 
      $form['recipient']['#options'] = $options; 
     } 
     if (in_array('Couples Page Manager', $user->roles)) { 
      $form['recipient']['#title'] = 'Send a message to your venue.'; 
     } 
    } 
} 

function MYMODULE_recipients() { 
    global $user; 
    $options = array(); 
    if (in_array('Manager', $user->roles)) { 
     $result = db_query('SELECT `entity_id` FROM `field_data_field_parent_user` WHERE `field_parent_user_target_id` = :uid', array(':uid' => $user->uid)); 
     if (is_array($result) || is_object($result)) { 
      foreach ($result as $record) { 
       $child = user_load($record->entity_id); 
       $childlist[$child->name] = $child->name; 
      } 
     } 
    } 
    if (in_array('Page Manager', $user->roles)) { 
     $result = db_query('SELECT `field_parent_user_target_id` FROM `field_data_field_parent_user` WHERE `entity_id` = :uid', array(':uid' => $user->uid)); 
     if (is_array($result) || is_object($result)) { 
      foreach ($result as $record) { 
       $child = user_load($record->field_parent_user_target_id); 
      $childlist[$child->name] = $child->name; 
      } 
     } 
    } 
    return $childlist; 
} 

この検証が回避されるとすぐに、フォームが送信され、メッセージが送信されます。