Как к комментарию прикрепить форму, так чтобы эта форма относилась к конкретному комментарию

Главные вкладки

Аватар пользователя HarryAscent HarryAscent 14 октября 2013 в 17:51

Всем привет.
Мне необходимо решить следующее. В кастомном модуле я создал форму в которой есть текстовое поле и кнопка Отправить. Сделал для формы функции валидации и сабмита, затем запихнул данную форму в переменную template_preprocess_comment и вывел в шаблоне comment.tpl.php
Мой код:

<?php
/**
 * Реализация template_preprocess_comment()
 **/
function comment_email_form_preprocess_comment(&$variables){
    
$variables['email_form'] = drupal_render(drupal_get_form('comment_email_form_form'));
    
//dsm($variables);
}
/**
 * Создаем форму, которая будет хранить данные email адресов бригад и отправлять письмо.
 **/
function comment_email_form_form($form$form_state){
$query db_select('comment''c')
    ->
fields('c', array('cid''nid'));
$result $query->execute();
$comments = array();
foreach(
$result as $value){
    
$comments[$value->cid] = comment_load($value->cid);
}
     
dsm($comments);
  
$form['email'] = array(
    
'#type' => 'textfield',
    
'#access' => TRUE,
    
'#default_value' => $comments[$value->cid]->brigade_select['und'][0]['value'], // ???
    
'#required' => TRUE,
  );
 
  
$form['actions']['submit'] = array(
    
'#type' => 'submit',
    
'#value' => t('Send'),
  );
  
$form['#validate'][] = 'comment_email_form_validate';
  
$form['#submit'][] = 'comment_email_form_submit';
  
$form_state['rebuild'] = TRUE;
  return 
$form;
}
function 
comment_email_form_validate($form, &$form_state) {
  
$form_state['rebuild'] = TRUE;
  
$valid_email $form_state['values']['email'];
  
/*if (!valid_email_address($valid_email)) {
  form_set_error('email', 'Sorry. Your email address,' . $valid_email . ', is not valid. Please submit a valid E-mail address.');
  }*/
}
function 
comment_email_form_mail($key, &$message$params) {
if(
$key == 'some_mail_key'){
  
$headers = array(
    
'MIME-Version' => '1.0',
    
'Content-Type' => 'text/html; charset=UTF-8;',
    
'Content-Transfer-Encoding' => '8Bit',
    
'X-Mailer' => 'Drupal'
  
);
 
  foreach (
$headers as $key => $value) {
    
$message['headers'][$key] = $value;
  }
 
  
$message['subject'] = $params['subject'];
  
$message['body'] = $params['body'];
  }
}
 
function 
comment_email_form_submit($form, &$form_state) {
    
$valid_email $form_state['values']['email'];
    
$from 'noreply@example.com';
    
$body[] = 'Email: '.$valid_email.'<br />URL: '.request_uri().'Вот такое вот хаха :0';
    
$to $valid_email// Set this email address - emails will be sent to this email address! 
    
$params = array(
    
'body' => $body,
    
'subject' => 'Website Information Request',
    );
 
    if (
drupal_mail('comment_email_form''some_mail_key'$tolanguage_default(), $params$fromTRUE))
    {
        
drupal_set_message(t('Thank you for writing team has been sent successfully. Please wait for further instructions.'));     
    } else {
        
drupal_set_message(t('Error sending e-mail. Please try again later'));
    }
}
?>

Судя по коду уже можно увидеть какая основная задача модуля, мне нужно отправлять email на адрес пользователя который оставил при создании бригады(нода) а затем прокомментаровал заявку в которой и есть наша форма отправки Email. Проблема в том, что я не знаю как мне прицепить email адрес пользователя к текстовому полю по умолчанию. Нужно как-то привязать форму к самому комментарию.

Комментарии

Аватар пользователя HarryAscent HarryAscent 14 октября 2013 в 21:44

Если бы можно было я бы сделал) увы но нет, мне нужно привязать идентификатор ноды или комментария к кастомному полю формы которое я создал в этом модуле, который выше описан

Аватар пользователя Chyvakoff Chyvakoff 15 октября 2013 в 9:26

Не стал вглядываться в код, прочитал то что ниже. Мыло

//текущий
global $user;
$user->email;

//если тянуть с автора ноды
$user = user_load($node->uid)
$user->email;

И главный вопрос - средствами [module=rules] нельзя запилить,

Аватар пользователя HarryAscent HarryAscent 15 октября 2013 в 10:45

Смотрите, изначально пользователь под ролью Бригада создает бригаду(ноду) в ней указывает емейл адрес, затем пользователь под ролью Клиент создает заявку(так-же нода) и отправляет емейл с ссылкой на заявку избранным бригадам(этот функционал я уже сделал), после бригада прикрепляет с помощью комментариев файл сметы, где ниже заявки они публикуются после премодерации эти файлы сметы, скрытое текстовое поле емейла этой бригады и кнопка отправить итак от разных бригад которые оставили комментарий, так и вот если пользователю понравилась та или иная бригада по расценкам из сметы, то он отправляет им емейл с ссылкой на подписку для заявки, тем самым заключая договор о сотрудничестве.
По средствами Rules я смогу сделать отправку после создания, обновления или просмотра комментария, но не постоянную кнопку отправить для клиента.