t('Nyhedsbrev'), 'ajax' => TRUE, ]; $output = ctools_modal_form_wrapper('mkbh_general_nyhedsbrev_form', $form_state); if (!empty($form_state['executed'])) { // We'll just overwrite form output if it was successful. $output = []; // Close popup. $output[] = ['command' => 'nyhedsbrev_dismiss'];//ctools_modal_command_dismiss(); } print ajax_render($output); exit; } /** * Page callback for a "popup/%ctools_js/skriver" * skriver modal * * @param null|bool $js * * @return array|mixed * * @see mkbh_general_skriver_form() */ function mkbh_general_modal_skriver($js = NULL) { if (!$js) { return drupal_get_form('mkbh_general_skriver_form'); } ctools_include('modal'); ctools_modal_add_js(); ctools_include('ajax'); $form_state = [ 'title' => t('Nyhedsbrev'), 'ajax' => TRUE, ]; $output = ctools_modal_form_wrapper('mkbh_general_skriver_form', $form_state); if (!empty($form_state['executed'])) { // We'll just overwrite form output if it was successful. $output = []; // Close popup. $output[] = ctools_modal_command_dismiss(); } print ajax_render($output); exit; } /** * Skriver modal form. * * @param $form * @param $form_state * * @return array * * @see mkbh_general_modal_skriver() * @see mkbh_general_theme() */ function mkbh_general_skriver_form($form, &$form_state) { $form = []; $form['content'] = [ '#theme' => 'mkbh_general_skriver_modal_form', ]; return $form; } /** * All includes that we need for modal. */ function _mkbh_general_include_modal_nyhedsbrev() { static $added = FALSE; if ($added == FALSE) { $added = TRUE; ctools_include('modal'); ctools_modal_add_js(); ctools_include('ajax'); drupal_add_js(drupal_get_path('module', 'mkbh_general') . '/js/mkbh_nyhedsbrev.js'); // Array with all settings for the modal. $styles = [ 'ctools-nyhedsbrev-style' => [ 'modalSize' => [ 'type' => 'fixed', 'width' => 570, 'height' => 410, 'addWidth' => 20, ], 'modalOptions' => [ 'opacity' => .5, 'background-color' => '#000', ], 'animation' => 'nyhedsbrev', 'animationSpeed' => 'fast', ], 'ctools-skriver-style' => [ 'modalSize' => [ 'type' => 'fixed', 'width' => 570, 'height' => 410, 'addWidth' => 20, ], 'modalOptions' => [ 'opacity' => .5, 'background-color' => '#000', ], 'modalClass' => 'du-skriver', 'animation' => 'fadeIn', 'animationSpeed' => 'fast', ], ]; // Connecting our settings to all settings. drupal_add_js($styles, 'setting'); } } /** * Function to get html of a button that opens nyhedsbrev modal. * * @return string */ function mkbh_general_generate_nyhedsbrev_button() { $button = [ '#theme' => 'mkbh_general_nyhedsbrev_modal_button', ]; return render($button); } /** * Nyhedsbrev modal form. * * @param $form * @param $form_state * * @return array * * @see mkbh_general_modal_nyhedsbrev() * @see mkbh_general_nyhedsbrev_form_validate() * @see mkbh_general_nyhedsbrev_form_submit() */ function mkbh_general_nyhedsbrev_form($form, &$form_state) { $form['image'] = [ '#type' => 'html_tag', '#tag' => 'div', '#attributes' => [ 'class' => 'nyhedsbrev-modal-image', ], '#value' => '
Mandag, onsdag og fredag morgen sender vi en nyhedsmail med nyt om byens rum og byens liv.
Ikke noget pjat, ikke noget spam, og du kan altid framelde dig igen med ét klik fra nyhedsbrevet.
', '#attributes' => [ 'class' => 'nyhedsbrev-modal-description', ], ]; $form['helper'] = [ '#type' => 'html_tag', '#tag' => 'div', '#value' => '* = skal udfyldes', '#attributes' => [ 'class' => 'nyhedsbrev-modal-helper', ], ]; $form['email'] = [ '#type' => 'textfield', '#title' => t('Email'), '#required' => TRUE, '#attributes' => [ 'placeholder' => t('Din email adresse'), ], ]; $form['names_container'] = [ '#type' => 'container', '#attributes' => [ 'class' => ['names-container'], ], ]; $form['names_container']['first_name'] = [ '#type' => 'textfield', '#title' => t('Fornavn'), '#attributes' => [ 'placeholder' => t('Fornavn'), ], ]; $form['names_container']['last_name'] = [ '#type' => 'textfield', '#title' => t('Efternavn'), '#attributes' => [ 'placeholder' => t('Efternavn'), ], ]; // // $form['gender'] = [ // '#type' => 'radios', // '#title' => 'Gender', // '#options' => [ // 1 => t('kvinde'), // 0 => t('mand'), // ], // ]; $form['submit'] = [ '#type' => 'submit', '#value' => t('Ja tak'), ]; return $form; } /** * Validation for a nyhedsbrev modal form. * * @param $form * @param $form_state * * @see mkbh_general_nyhedsbrev_form() * @see mkbh_general_nyhedsbrev_form_submit() */ function mkbh_general_nyhedsbrev_form_validate($form, &$form_state) { if (!valid_email_address($form_state['values']['email'])) { form_set_error('email', t('Please provide correct email address.')); } $errors = form_get_errors(); if (empty($errors)) { $mcListID = variable_get('mkbh_mailchimp_list'); $mcAPIKey = variable_get('mailchimp_api_key'); $mcClient = new DrupalMailchimp($mcAPIKey); $mergeVars = [ 'EMAIL' => $form_state['values']['email'], 'FORNAVN' => $form_state['values']['first_name'], 'EFTERNAVN' => $form_state['values']['last_name'], // 'GENDER' => $form_state['values']['gender'] == 0 ? 'Mand' : 'Kvinde', ]; try { $result = $mcClient->lists->addOrUpdateMember($mcListID, $mergeVars['EMAIL'], [ 'status' => 'subscribed', 'merge_fields' => $mergeVars, ]); variable_del('mailchimp_user_subscriber_member_info:' . sha1($mergeVars['EMAIL'])); if (isset($result->error)) { form_set_error('', t('An error occurred while processing your request. Please check your input and try again.')); watchdog('mkbh_mailchimp', $result->error, WATCHDOG_ERROR); } // else { // drupal_set_message(t('You have been successfully subscribed to our newsletter.'), 'status'); // } } catch (Exception $e) { form_set_error('', t('An error occurred while processing your request. Please check your input and try again.')); watchdog('mkbh_mailchimp', $e->getMessage(), WATCHDOG_ERROR); } } } /** * Submit for a nyhedsbrev modal form. * * @param $form * @param $form_state * * @see mkbh_general_nyhedsbrev_form() * @see mkbh_general_nyhedsbrev_form_validate() */ function mkbh_general_nyhedsbrev_form_submit($form, &$form_state) { // all business logic has been moved to validation callback to be able to show response from MC... }