Parent Directory
|
Revision Log
|
Revision Graph
Re-factored email send out functions:
| 1 | <?php |
| 2 | // $Id: enewsletter.module,v 1.14 2005/03/24 00:41:46 MegaGrunt Exp $ |
| 3 | |
| 4 | // Author: Robert Castelo |
| 5 | // Support: development@cortextcommunications.com |
| 6 | // Info: http://www.cortextcommunications.com/development/newsletter |
| 7 | |
| 8 | // ********** LINKS, PERMISIONS & HELP ***************************** |
| 9 | |
| 10 | |
| 11 | define('ANNOUNCEMENT', 1); |
| 12 | define('ANNOUNCEMENT_ENABLED', 1); |
| 13 | define('ANNOUNCEMENT_AUTO', 1); |
| 14 | |
| 15 | function enewsletter_help($section = "admin/help#enewsletter") { |
| 16 | |
| 17 | switch ($section) { |
| 18 | case 'admin/modules#description': |
| 19 | return t('Enables users to subscribe to email announcements and newsletters.'); |
| 20 | case 'admin/help#enewsletter': |
| 21 | return t('Enables users to subscribe to an email newsletter.'); |
| 22 | case 'admin/enewsletters': |
| 23 | return t('Statistics for email newsletters.'); |
| 24 | case 'admin/enewsletters/add': |
| 25 | return t('Create an email newsletter.'); |
| 26 | case 'admin/enewsletters/templates': |
| 27 | return t('Create an email newsletter template.'); |
| 28 | case 'admin/enewsletters/templates/add': |
| 29 | return '<p>' . t('Create an email newsletter template.') . '</p>'; |
| 30 | case 'admin/enewsletters/templates/edit': |
| 31 | return '<p>' . t('Edit an email newsletter template.') . '</p>'; |
| 32 | case 'enewsletters/newsletter': |
| 33 | return t('Select content you would like included in this email newsletter.'); |
| 34 | } |
| 35 | } |
| 36 | |
| 37 | |
| 38 | function enewsletter_perm() { |
| 39 | return array("administer enewsletters", "subscribe to enewsletters"); |
| 40 | } |
| 41 | |
| 42 | |
| 43 | function enewsletter_menu($may_cache) { |
| 44 | |
| 45 | $items = array(); |
| 46 | $administer = user_access('administer enewsletters'); |
| 47 | $subscribe = user_access('subscribe to enewsletters'); |
| 48 | $email_link = 1; |
| 49 | |
| 50 | $items[] = array('path' => 'enewsletters', 'title' => t('email subscription'), 'callback' => 'enewsletter_callback_subscriptions', 'access' => $email_link); |
| 51 | $items[] = array('path' => 'enewsletters/newsletter', 'title' => t('email newsletter'), 'callback' => 'enewsletter_callback_subscription_edit', 'access' => $email_link, 'type' => MENU_CALLBACK); |
| 52 | |
| 53 | if ($may_cache) { |
| 54 | |
| 55 | $items[] = array('path' => 'admin/enewsletters', 'title' => t('email newsletters'), 'callback' => 'enewsletter_callback_admin', 'access' => $administer); |
| 56 | $items[] = array('path' => 'admin/enewsletters/list', 'title' => t('list'), 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10); |
| 57 | $items[] = array('path' => 'admin/enewsletters/history', 'title' => t('history'), 'callback' => 'enewsletter_callback_newsletter_history', 'type' => MENU_CALLBACK); |
| 58 | $items[] = array('path' => 'admin/enewsletters/subscribers', 'title' => t('subscribers'), 'callback' => 'enewsletter_callback_newsletter_subscribers', 'type' => MENU_CALLBACK); |
| 59 | |
| 60 | $items[] = array('path' => 'admin/enewsletters/newsletters', 'title' => t('newsletters'), 'callback' => 'enewsletter_callback_newsletters', 'access' => $administer); |
| 61 | $items[] = array('path' => 'admin/enewsletters/newsletters/list', 'title' => t('list'), 'access' => $administer, 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10); |
| 62 | $items[] = array('path' => 'admin/enewsletters/newsletters/add', 'title' => t('add'), 'callback' => 'enewsletter_callback_newsletter_add', 'access' => $administer, 'type' => MENU_LOCAL_TASK); |
| 63 | |
| 64 | $items[] = array('path' => 'admin/enewsletters/templates', 'title' => t('templates'), 'callback' => 'enewsletter_callback_templates', 'access' => $administer); |
| 65 | $items[] = array('path' => 'admin/enewsletters/templates/list', 'title' => t('list'), 'access' => $administer, 'type' => MENU_DEFAULT_LOCAL_TASK, 'weight' => -10); |
| 66 | $items[] = array('path' => 'admin/enewsletters/templates/edit', 'title' => t('edit'), 'callback' => 'enewsletter_callback_template_edit', 'access' => $administer, 'type' => MENU_CALLBACK); |
| 67 | $items[] = array('path' => 'admin/enewsletters/templates/add', 'title' => t('add'), 'callback' => 'enewsletter_callback_template_add', 'access' => $administer, 'type' => MENU_LOCAL_TASK); |
| 68 | |
| 69 | $items[] = array('path' => 'admin/enewsletters/announcements', 'title' => t('announcements'), 'callback' => 'enewsletter_callback_announcements', 'access' => $administer, 'weight' => 9); |
| 70 | |
| 71 | $items[] = array('path' => 'admin/enewsletters/undelivered', 'title' => t('undelivered'), 'callback' => 'enewsletter_callback_undelivered', 'access' => $administer, 'weight' => 10); |
| 72 | $items[] = array('path' => 'admin/enewsletters/configuration', 'title' => t('configuration'), 'callback' => 'enewsletter_callback_config', 'access' => $administer); |
| 73 | |
| 74 | } |
| 75 | |
| 76 | return $items; |
| 77 | } |
| 78 | |
| 79 | |
| 80 | // ********** ADMINISTRATION ***************************** |
| 81 | |
| 82 | |
| 83 | // Display all newsletters |
| 84 | function enewsletter_callback_admin() { |
| 85 | |
| 86 | $newsletters = enewsletter_get_db_rows("SELECT * FROM {enewsletter_newsletters} WHERE enewsletter_id != '%d'", ANNOUNCEMENT); |
| 87 | |
| 88 | if (!$newsletters) return print theme('page', 'There are no email newsletters.'); |
| 89 | |
| 90 | $configuration = enewsletter_get_configuration(); |
| 91 | |
| 92 | // convert to function |
| 93 | foreach($newsletters as $newsletter) { |
| 94 | unset($rows); |
| 95 | $header = array(t('last publication'), t('sent (last)'), t('in que'), t('next publication')); |
| 96 | $last = ($newsletter->last == 0) ? '-' : format_date($newsletter->last, 'small'); |
| 97 | $next = ($newsletter->next == 0) ? t('manual') : format_date($newsletter->next, 'small'); |
| 98 | |
| 99 | $sent_count = enewsletter_count_sent($newsletter->enewsletter_id, $newsletter->next, $newsletter->last); |
| 100 | $qued_count = enewsletter_count_qued($newsletter->enewsletter_id, $newsletter->next, $configuration['bounce_limit']); |
| 101 | |
| 102 | $last_subscribers = db_result(db_query("SELECT count(*) FROM {enewsletter_subscriptions} WHERE enewsletter_id = '%d' AND subscribed <= '%d'", $newsletter->enewsletter_id, $newsletter->last)); |
| 103 | |
| 104 | if ($que == 0) { |
| 105 | $sent = $last_subscribers; |
| 106 | } else { |
| 107 | $sent = db_result(db_query("SELECT count(*) FROM {enewsletter_subscriptions} WHERE enewsletter_id = '%d' AND uid <= '%d' AND subscribed <= '%d'", $newsletter->enewsletter_id, $que, $newsletter->last)); |
| 108 | } |
| 109 | |
| 110 | $qued = $last_subscribers - $sent; |
| 111 | |
| 112 | $rows[] = array( |
| 113 | array("data" => $last, "align" => "center"), |
| 114 | array("data" => $sent_count, "align" => "center"), |
| 115 | array("data" => $qued_count, "align" => "center"), |
| 116 | array("data" => $next, "align" => "center") |
| 117 | ); |
| 118 | |
| 119 | $output .= '<div class="enewsletter-status">'; |
| 120 | $output .= '<h2>'; |
| 121 | $output .= $newsletter->title; |
| 122 | $output .= '</h2>'; |
| 123 | $output .= '<p>'; |
| 124 | $output .= $newsletter->description; |
| 125 | $output .= '</p>'; |
| 126 | $output .= theme('table', $header, $rows, array('id' => 'enewsletter-admin')); |
| 127 | $output .= '</div>'; |
| 128 | } |
| 129 | |
| 130 | print theme('page', $output); |
| 131 | return; |
| 132 | } |
| 133 | |
| 134 | |
| 135 | function enewsletter_count_qued($publication_id, $publication_timestamp, $bounce_limit) { |
| 136 | |
| 137 | // publication has finished sending |
| 138 | if ($publication_timestamp > time() || $publication_timestamp == 0) return 0; |
| 139 | |
| 140 | $qued_count = db_result(db_query(" |
| 141 | SELECT count(*) |
| 142 | FROM {enewsletter_subscriptions} s |
| 143 | LEFT JOIN {users} u ON s.uid = u.uid |
| 144 | LEFT JOIN {enewsletter_bounce_count} b ON u.mail = b.email |
| 145 | LEFT JOIN {enewsletter_sent} m ON (m.uid = s.uid AND m.enewsletter_id = s.enewsletter_id AND m.pub_time = '%d') |
| 146 | WHERE s.enewsletter_id = '%d' |
| 147 | AND (b.bounces IS NULL OR b.bounces < '%d') |
| 148 | AND m.sent IS NULL |
| 149 | ORDER BY u.name |
| 150 | ", $publication_timestamp, $publication_id, $bounce_limit)); |
| 151 | |
| 152 | return $qued_count; |
| 153 | |
| 154 | } |
| 155 | |
| 156 | |
| 157 | function enewsletter_count_sent($publication_id, $publication_timestamp, $previous_publication_timestamp) { |
| 158 | |
| 159 | // publication finished sending? |
| 160 | // count all emails on this send out - or |
| 161 | // count all emails on last send out |
| 162 | $timestamp = ($publication_timestamp > time() || $publication_timestamp == 0) ? $previous_publication_timestamp : $publication_timestamp; |
| 163 | |
| 164 | $sent_count = db_result(db_query(" |
| 165 | SELECT count(*) |
| 166 | FROM {enewsletter_sent} |
| 167 | WHERE enewsletter_id = '%d' |
| 168 | AND pub_time = '%d' |
| 169 | ", $publication_id, $timestamp)); |
| 170 | |
| 171 | return $sent_count; |
| 172 | } |
| 173 | |
| 174 | |
| 175 | function enewsletter_callback_newsletter_subscribers($newsletter_id) { |
| 176 | |
| 177 | $result = db_query("SELECT s.uid, s.format, s.subscribed, u.name FROM {enewsletter_subscriptions} s LEFT JOIN {users} u ON s.uid = u.uid WHERE s.enewsletter_id = '%d'", $newsletter_id); |
| 178 | if (!$result) return print theme('page', 'No subscribers'); |
| 179 | |
| 180 | $header = array(t('user'), t('format'), t('subscribed')); |
| 181 | |
| 182 | while ($subscriber = db_fetch_object($result)) { |
| 183 | |
| 184 | $name = l($subscriber->name, "user/$subscriber->uid/edit"); |
| 185 | $format = $subscriber->format; |
| 186 | |
| 187 | if ( !$subscriber->subscribed ) { |
| 188 | $subscriber->subscribed = time(); |
| 189 | db_query("UPDATE {enewsletter_subscriptions} SET subscribed = '%d' WHERE enewsletter_id = '%d' AND uid = '%d'", $subscriber->subscribed, $newsletter_id, $subscriber->uid); |
| 190 | } |
| 191 | |
| 192 | $subscribed= format_date($subscriber->subscribed, 'medium'); |
| 193 | $rows[] = array(array("data" => $name), array("data" => $format), array("data" => $subscribed)); |
| 194 | } |
| 195 | |
| 196 | $newsletter = enewsletter_get_newsletter($newsletter_id); |
| 197 | $title = t('Subscribers to %newsletter', array('%newsletter' => $newsletter['title'])); |
| 198 | $output = theme('table', $header, $rows, array('id' => 'enewsletter-subscriptions')); |
| 199 | |
| 200 | print theme('page', $output, $title); |
| 201 | return; |
| 202 | } |
| 203 | |
| 204 | |
| 205 | function enewsletter_callback_config() { |
| 206 | |
| 207 | $edit = $_POST["edit"]; |
| 208 | |
| 209 | if ($edit) { |
| 210 | enewsletter_set_configuration($edit); |
| 211 | drupal_set_message (t("Newsletter settings have been updated." )); |
| 212 | } |
| 213 | $configuration = enewsletter_get_configuration(); |
| 214 | $output = enewsletter_form_configuration($configuration); |
| 215 | $output .= form_submit(t("Save settings")); |
| 216 | $output = form($output); |
| 217 | print theme('page', $output); |
| 218 | return; |
| 219 | } |
| 220 | |
| 221 | |
| 222 | // Display all newsletters |
| 223 | function enewsletter_callback_newsletters() { |
| 224 | |
| 225 | $edit = $_POST["edit"]; |
| 226 | $operation = $_POST["op"]; |
| 227 | |
| 228 | |
| 229 | switch ($operation) { |
| 230 | |
| 231 | case t('Send Now'): |
| 232 | case t('Send'): |
| 233 | $form = enewsletter_form_send_now($edit, $operation); |
| 234 | break; |
| 235 | case t('Schedule'): |
| 236 | case t('Set Schedule'): |
| 237 | $form = enewsletter_callback_newsletter_schedule($edit, $operation); |
| 238 | break; |
| 239 | case t('Set Content'): |
| 240 | case t('Save Newsletter'): |
| 241 | $form = enewsletter_callback_newsletter_content($edit, $operation); |
| 242 | break; |
| 243 | case t('Delete'): |
| 244 | case t('Delete Newsletter'): |
| 245 | $form = enewsletter_callback_newsletter_delete($edit, $operation); |
| 246 | break; |
| 247 | default: |
| 248 | break; |
| 249 | } |
| 250 | |
| 251 | if ($form) { |
| 252 | print theme('page', form($form)); |
| 253 | return; |
| 254 | } |
| 255 | |
| 256 | $newsletters = enewsletter_get_db_rows('SELECT * FROM {enewsletter_newsletters} WHERE enewsletter_id != ' . ANNOUNCEMENT); |
| 257 | if (!$newsletters) return print theme('page', 'There are no email newsletters.'); |
| 258 | |
| 259 | foreach($newsletters as $newsletter) { |
| 260 | |
| 261 | $header = array(t('first published'), t('last published'), t('next published'), t('subscribers')); |
| 262 | $first = ($newsletter->first == 0) ? '-' : format_date($newsletter->first, 'small'); |
| 263 | $last = ($newsletter->last == 0) ? '-' : format_date($newsletter->last, 'small'); |
| 264 | $next = ($newsletter->next== 0) ? t('manual') : format_date($newsletter->next, 'small'); |
| 265 | $subscribers = db_result(db_query("SELECT count(*) FROM {enewsletter_subscriptions} WHERE enewsletter_id = '%d'", $newsletter->enewsletter_id)); |
| 266 | $subscribers = ($subscribers) ? l($subscribers, "admin/enewsletters/subscribers/$newsletter->enewsletter_id") : 0; |
| 267 | |
| 268 | unset($rows); |
| 269 | $rows[] = array( |
| 270 | array('data' => $first, 'align' => 'center'), |
| 271 | array('data' => $last, 'align' => 'center'), |
| 272 | array('data' => $next, 'align' => 'center'), |
| 273 | array('data' => $subscribers, 'align' => 'center') |
| 274 | ); |
| 275 | |
| 276 | $controls = form_hidden ('enewsletter_id' , $newsletter->enewsletter_id); |
| 277 | $controls .= form_submit(t('Send Now')); |
| 278 | $controls .= form_submit(t('Schedule')); |
| 279 | $controls .= form_submit(t('Set Content')); |
| 280 | $controls .= form_submit(t('Delete')); |
| 281 | |
| 282 | $form = '<div class="enewsletter-controls">'; |
| 283 | $form .= '<h2>' . $newsletter->title . '</h2>'; |
| 284 | $form .= '<p>' . $newsletter->description . '</p>'; |
| 285 | $form .= theme('table', $header, $rows, array('id' => 'enewsletter-newsletters')); |
| 286 | $form .= '<p>' . $controls . '</p>'; |
| 287 | $form .= '</div>'; |
| 288 | $output .= form($form); |
| 289 | } |
| 290 | |
| 291 | print theme('page', $output); |
| 292 | return; |
| 293 | } |
| 294 | |
| 295 | |
| 296 | // Create new newsletter |
| 297 | function enewsletter_callback_newsletter_add() { |
| 298 | |
| 299 | $edit = $_POST["edit"]; |
| 300 | $operation = $_POST["op"]; |
| 301 | |
| 302 | if ($operation == 'Cancel') { |
| 303 | drupal_goto('admin/enewsletters/newsletters'); |
| 304 | } |
| 305 | |
| 306 | if ($operation == 'Save newsletter') { |
| 307 | $edit['tid'] = enewsletter_selected_checkboxes($edit['tid']); |
| 308 | enewsletter_validate_content($edit); |
| 309 | enewsletter_validate_schedule($edit); |
| 310 | $error = form_get_errors(); |
| 311 | |
| 312 | if ($error) { |
| 313 | $output = enewsletter_form_content($edit); |
| 314 | $output .= enewsletter_form_schedule($edit); |
| 315 | $output .= form_submit(t("Save newsletter")); |
| 316 | $output .= form_submit(t("Cancel")); |
| 317 | return print theme('page', form($output)); |
| 318 | } |
| 319 | |
| 320 | db_query("INSERT INTO {enewsletter_newsletters} (enewsletter_id, title, description, track, template_text, template_html, start, next, every, frequency) VALUES (NULL, '%s', '%s', '%d', '%d', '%d', '%d', '%d', '%d', '%s')", $edit['title'], $edit['description'], $edit['track'], $edit['template_text'], $edit['template_html'], $edit['start'], $edit['next'], $edit['every'], $edit['frequency']); |
| 321 | $edit['enewsletter_id'] = db_result(db_query("SELECT LAST_INSERT_ID()")); |
| 322 | enewsletter_set_allowed_terms($edit); |
| 323 | drupal_set_message (t('Email newsletter settings have been saved for "' . $edit['title'] . '"')); |
| 324 | drupal_goto('admin/enewsletters/newsletters'); |
| 325 | } |
| 326 | |
| 327 | $output = enewsletter_form_content(); |
| 328 | $output .= enewsletter_form_schedule(); |
| 329 | $output .= form_submit(t("Save newsletter")); |
| 330 | $output .= form_submit(t("Cancel")); |
| 331 | print theme('page', form($output)); |
| 332 | return; |
| 333 | } |
| 334 | |
| 335 | |
| 336 | // Edit content of existing newsletter |
| 337 | function enewsletter_callback_newsletter_content($edit, $operation) { |
| 338 | |
| 339 | if ($operation == t('Save Newsletter')) { |
| 340 | $edit['tid'] = enewsletter_selected_checkboxes($edit['tid']); |
| 341 | enewsletter_validate_content($edit); |
| 342 | $error = form_get_errors(); |
| 343 | if (!$error) { |
| 344 | if ($edit['enewsletter_id']) { |
| 345 | db_query("UPDATE {enewsletter_newsletters} SET title = '%s', description = '%s', track = '%d', template_text = '%d', template_html = '%d' WHERE enewsletter_id = '%d'", $edit['title'], $edit['description'], $edit['track'], $edit['template_text'], $edit['template_html'], $edit['enewsletter_id']); |
| 346 | } |
| 347 | enewsletter_set_allowed_terms($edit); |
| 348 | drupal_set_message (t('Email newsletter content settings have been saved for "' . $edit['title'] . '"')); |
| 349 | return; |
| 350 | } |
| 351 | } |
| 352 | |
| 353 | $edit = enewsletter_get_newsletter($edit['enewsletter_id']); |
| 354 | $edit['tid'] = enewsletter_get_allowed_terms($edit['enewsletter_id']); |
| 355 | $output = enewsletter_form_content($edit); |
| 356 | $output .= form_submit(t("Save Newsletter")); |
| 357 | $output .= form_submit(t("Cancel")); |
| 358 | |
| 359 | return $output; |
| 360 | } |
| 361 | |
| 362 | |
| 363 | // Edit schedule of existing newsletter |
| 364 | function enewsletter_callback_newsletter_schedule($edit, $operation) { |
| 365 | |
| 366 | if ($operation == t('Set Schedule')) { |
| 367 | enewsletter_validate_schedule($edit); |
| 368 | $error = form_get_errors(); |
| 369 | if (!$error) { |
| 370 | db_query("UPDATE {enewsletter_newsletters} SET start = '%d', next = '%d', every = '%d', frequency = '%s' WHERE enewsletter_id = '%d'", $edit['start'], $edit['next'], $edit['every'], $edit['frequency'], $edit['enewsletter_id']); |
| 371 | drupal_set_message (t('Publication schedule settings have been saved for "' . $edit['title'] . '"')); |
| 372 | return; |
| 373 | } |
| 374 | } |
| 375 | |
| 376 | $edit = enewsletter_get_newsletter($edit['enewsletter_id']); |
| 377 | $output = '<h2>' . t('Schedule: ') . $edit['title'] . '</h2>'; |
| 378 | $output .= enewsletter_form_schedule($edit); |
| 379 | $output .= form_submit(t('Set Schedule')); |
| 380 | $output .= form_submit(t("Cancel")); |
| 381 | return $output; |
| 382 | } |
| 383 | |
| 384 | |
| 385 | // Edit content of existing newsletter |
| 386 | function enewsletter_callback_newsletter_delete($edit, $operation) { |
| 387 | |
| 388 | if ($operation == t('Delete Newsletter')) { |
| 389 | |
| 390 | if ($edit['enewsletter_id']) { |
| 391 | |
| 392 | $newsletter = db_fetch_object(db_query("SELECT enewsletter_id, title FROM {enewsletter_newsletters} WHERE enewsletter_id = '%d' LIMIT 1", $edit['enewsletter_id'])); |
| 393 | if ($newsletter) { |
| 394 | db_query("DELETE FROM {enewsletter_newsletters} WHERE enewsletter_id = '%d'", $newsletter->enewsletter_id); |
| 395 | db_query("DELETE FROM {enewsletter_allowed} WHERE enewsletter_id = '%d'", $newsletter->enewsletter_id); |
| 396 | db_query("DELETE FROM {enewsletter_selected} WHERE enewsletter_id = '%d'", $newsletter->enewsletter_id); |
| 397 | db_query("DELETE FROM {enewsletter_subscriptions} WHERE enewsletter_id = '%d'", $newsletter->enewsletter_id); |
| 398 | watchdog("special", "Email newsletter: deleted newsletter '$enewsletter_id'"); |
| 399 | drupal_set_message(t('The newsletter "' . $newsletter->title . '" has been deleted.')); |
| 400 | cache_clear_all(); |
| 401 | } else { |
| 402 | drupal_set_message(t("Newsletter doesn't exist.")); |
| 403 | } |
| 404 | |
| 405 | return;; |
| 406 | } |
| 407 | } |
| 408 | |
| 409 | $edit = enewsletter_get_newsletter($edit['enewsletter_id']); |
| 410 | $output = '<p>'; |
| 411 | $output .= t('Are you sure you want to delete the email newsletter ') . '<strong>' . $edit['title'] . '</strong>'; |
| 412 | $output .= '</p>'; |
| 413 | $output .= form_hidden ('enewsletter_id', $edit['enewsletter_id']); |
| 414 | $output .= form_submit(t('Delete Newsletter')); |
| 415 | $output .= form_submit(t('Cancel')); |
| 416 | |
| 417 | return $output; |
| 418 | } |
| 419 | |
| 420 | |
| 421 | // Display all templates |
| 422 | function enewsletter_callback_templates() { |
| 423 | $templates = enewsletter_get_db_rows("SELECT * FROM {enewsletter_templates} WHERE template_id > 2 ORDER BY type"); |
| 424 | $output .= enewsletter_form_templates($templates); |
| 425 | print theme('page', $output); |
| 426 | } |
| 427 | |
| 428 | |
| 429 | // add template |
| 430 | function enewsletter_callback_template_add() { |
| 431 | |
| 432 | $edit = $_POST["edit"]; |
| 433 | |
| 434 | if ($edit) { |
| 435 | enewsletter_validate_template($edit); |
| 436 | $errors = form_get_errors(); |
| 437 | if ($errors) return print theme('page', enewsletter_form_template($edit)); |
| 438 | |
| 439 | $edit['template_id'] = enewsletter_set_template($edit); |
| 440 | drupal_set_message (t('Settings have been saved for "' . $edit['name'] . '" template.')); |
| 441 | drupal_goto('admin/enewsletters/templates'); |
| 442 | } |
| 443 | |
| 444 | $output .= enewsletter_form_template(); |
| 445 | print theme('page', $output); |
| 446 | return; |
| 447 | } |
| 448 | |
| 449 | |
| 450 | // edit template |
| 451 | function enewsletter_callback_template_edit($template_id = NULL) { |
| 452 | |
| 453 | $edit = $_POST["edit"]; |
| 454 | $operation = $_POST["op"]; |
| 455 | |
| 456 | if ($operation == 'Delete template') { |
| 457 | enewsletter_template_delete($edit['template_id']); |
| 458 | drupal_goto('admin/enewsletters/templates'); |
| 459 | return; |
| 460 | } |
| 461 | |
| 462 | if ($operation == 'Save template') { |
| 463 | enewsletter_validate_template($edit); |
| 464 | |
| 465 | $errors = form_get_errors(); |
| 466 | if ($errors) return print theme('page', enewsletter_form_template($edit)); |
| 467 | |
| 468 | enewsletter_set_template($edit); |
| 469 | drupal_set_message (t('Settings have been saved for "' . $edit['name'] . '" template.')); |
| 470 | drupal_goto('admin/enewsletters/templates'); |
| 471 | return; |
| 472 | } |
| 473 | |
| 474 | // if new form |
| 475 | $edit = enewsletter_get_template($template_id); |
| 476 | $edit['delete_button'] = 'YES'; |
| 477 | $output = enewsletter_form_template($edit); |
| 478 | print theme('page', $output); |
| 479 | return; |
| 480 | } |
| 481 | |
| 482 | |
| 483 | // Process edited template form |
| 484 | function enewsletter_validate_template($edit) { |
| 485 | |
| 486 | if (!$edit['name']) form_set_error('name', t('Template name must be set.')); |
| 487 | |
| 488 | // Check if template has unique title |
| 489 | $template_id = db_result(db_query("SELECT template_id FROM {enewsletter_templates} WHERE name = '%s' LIMIT 1", $edit['name'])); |
| 490 | if ($template_id && $template_id != $edit['template_id']) { |
| 491 | form_set_error('name', t('Title already in use by another email template.')); |
| 492 | } |
| 493 | |
| 494 | if (!$edit['template']) form_set_error('template', t('Template layout must be set.')); |
| 495 | |
| 496 | return; |
| 497 | } |
| 498 | |
| 499 | function enewsletter_callback_announcements() { |
| 500 | |
| 501 | $edit = $_POST["edit"]; |
| 502 | $operation = $_POST["op"]; |
| 503 | |
| 504 | $configuration = enewsletter_get_configuration(); |
| 505 | |
| 506 | if ($configuration['announce_enable'] != ANNOUNCEMENT_ENABLED) { |
| 507 | $output = t('Announcements must be enabled in ') . l('configuration', 'admin/enewsletters/configuration'); |
| 508 | return print theme('page', $output); |
| 509 | } |
| 510 | |
| 511 | switch ($operation) { |
| 512 | |
| 513 | case t('Send Now'): |
| 514 | enewsletter_validate_announcement($edit); |
| 515 | $errors = form_get_errors(); |
| 516 | if (!$errors) { |
| 517 | enewsletter_set_template(array('template_id' => 1, 'name' => t('announcements'), 'template' => $edit['announce_text_msg'], 'type' => 0, 'format' => $edit['format_text'])); |
| 518 | enewsletter_set_template(array('template_id' => 2, 'name' => t('announcements HTML'), 'template' => $edit['announce_html_msg'], 'type' => 1, 'format' => $edit['format_html'])); |
| 519 | $form = enewsletter_form_send_now($edit, $operation); |
| 520 | } |
| 521 | break; |
| 522 | case t('Send'): |
| 523 | db_query("UPDATE {enewsletter_newsletters} SET next = '%d' WHERE enewsletter_id = '%d'", time(), $edit['enewsletter_id']); |
| 524 | $form = enewsletter_form_send_now($edit, $operation); |
| 525 | break; |
| 526 | case t('Schedule'): |
| 527 | enewsletter_validate_announcement($edit); |
| 528 | $errors = form_get_errors(); |
| 529 | if (!$errors) { |
| 530 | enewsletter_set_template(array('template_id' => 1, 'name' => t('announcements'), 'template' => $edit['announce_text_msg'], 'type' => 0, 'format' => $edit['format_text'])); |
| 531 | enewsletter_set_template(array('template_id' => 2, 'name' => t('announcements HTML'), 'template' => $edit['announce_html_msg'], 'type' => 1, 'format' => $edit['format_html'])); |
| 532 | $form = enewsletter_callback_newsletter_schedule($edit, $operation); |
| 533 | } |
| 534 | break; |
| 535 | case t('Set Schedule'): |
| 536 | $form = enewsletter_callback_newsletter_schedule($edit, $operation); |
| 537 | break; |
| 538 | default: |
| 539 | break; |
| 540 | } |
| 541 | |
| 542 | if ($form) { |
| 543 | print theme('page', form($form)); |
| 544 | return; |
| 545 | } |
| 546 | |
| 547 | $announcement = enewsletter_get_template(1); |
| 548 | $announcement_HTML = enewsletter_get_template(2); |
| 549 | |
| 550 | $edit['announce_text_msg'] = $announcement['template']; |
| 551 | $edit['format_text'] = $announcement['format']; |
| 552 | $edit['announce_html_msg'] = $announcement_HTML['template']; |
| 553 | $edit['format_html'] = $announcement_HTML['format']; |
| 554 | |
| 555 | $output .= enewsletter_form_announcement($edit); |
| 556 | |
| 557 | print theme('page', $output); |
| 558 | return; |
| 559 | } |
| 560 | |
| 561 | function enewsletter_form_announcement($edit = NULL) { |
| 562 | |
| 563 | $output .= enewsletter_form_profile_fields(); |
| 564 | $output .= form_hidden ('enewsletter_id' , ANNOUNCEMENT); |
| 565 | $output .= form_textarea(t('Text Message'), 'announce_text_msg', $edit['announce_text_msg'], 50, 6, t('Plain text version of announcement message'), '', TRUE); |
| 566 | $output .= filter_form('format_text', $edit['format_text']); |
| 567 | $output .= form_textarea(t('HTML Message'), 'announce_html_msg', $edit['announce_html_msg'], 50, 6, t("HTML version of announcement message - leave blank if you don't want to send a HTML version")); |
| 568 | $output .= filter_form('format_html', $edit['format_html']); |
| 569 | $output .= form_submit(t('Send Now')); |
| 570 | $output .= form_submit(t('Schedule')); |
| 571 | return form($output); |
| 572 | } |
| 573 | |
| 574 | function enewsletter_validate_announcement($edit) { |
| 575 | |
| 576 | if (!$edit['announce_text_msg']) form_set_error('announce_text_msg', t('Plain text version of announcement message must be set.')); |
| 577 | return; |
| 578 | } |
| 579 | |
| 580 | |
| 581 | |
| 582 | // Get rows from database |
| 583 | function enewsletter_get_db_rows($query) { |
| 584 | |
| 585 | $results = db_query($query); |
| 586 | |
| 587 | while ($row = db_fetch_object($results)) { |
| 588 | $rows[] = $row; |
| 589 | } |
| 590 | |
| 591 | return $rows; |
| 592 | } |
| 593 | |
| 594 | |
| 595 | function enewsletter_get_configuration() { |
| 596 | $results = db_query("SELECT * FROM {enewsletter_config}"); |
| 597 | while ($row = db_fetch_object($results)) { |
| 598 | $configuration[$row->variable] = $row->value; |
| 599 | } |
| 600 | return $configuration; |
| 601 | } |
| 602 | |
| 603 | |
| 604 | function enewsletter_set_configuration($configuration) { |
| 605 | |
| 606 | while(list($variable, $value) = each ($configuration)) { |
| 607 | db_query("DELETE FROM {enewsletter_config} WHERE variable = '%s'", $variable); |
| 608 | db_query("INSERT INTO {enewsletter_config} (variable, value) VALUES ('%s', '%s')", $variable, $value); |
| 609 | } |
| 610 | |
| 611 | return; |
| 612 | } |
| 613 | |
| 614 | |
| 615 | function enewsletter_form_configuration($configuration) { |
| 616 | |
| 617 | // Email Addresses |
| 618 | if ($configuration[ "set_return_path" ] == NULL) $configuration[ "set_return_path" ] = 'Yes'; |
| 619 | $addresses = form_textfield (t('From'), 'from_address', $configuration[ 'from_address' ], 40, 64, t('The email address you would like messages to be sent from.')); |
| 620 | $addresses .= form_textfield (t('Reply-To'), 'reply_address', $configuration[ 'reply_address' ], 40, 64, t('The email address you would like messages to go to when a recipient uses their Reply button. (can be the same as the From address)')); |
| 621 | $addresses .= form_textfield (t('Bounce'), 'bounce_addresss', $configuration[ 'bounce_addresss' ], 40, 64, t('The email address you would like messages to bounce back to if undelivered - configuration settings below. (sets Errors-To: and Return-Path:)')); |
| 622 | $addresses .= form_radios(t("Set Return-Path"), "set_return_path", $configuration["set_return_path"], array(t('No'), t('Yes')), t("It's preferable to set the Return-Path, but some systems do not allow Drupal to set this.")); |
| 623 | $output = form_group(t('Email Addresses'), $addresses, t('Make sure that these addresses correspond to mailboxes you have set up on your server.')); |
| 624 | |
| 625 | // Sending Configuration |
| 626 | if ($configuration[ 'send_maximum' ] == NULL) $configuration[ 'send_maximum' ] = 50; |
| 627 | if ($configuration[ 'send_delay' ] == NULL) $configuration[ 'send_delay' ] = 2; |
| 628 | $send = form_textfield (t('Maximum Emails'), 'send_maximum', $configuration[ 'send_maximum' ], 10, 64, t('The maximum number of emails to send at each cron run')); |
| 629 | $send .= form_textfield (t('Send Delay'), 'send_delay', $configuration[ 'send_delay' ], 10, 64, t('Delay in microseconds between each email (avoid chocking mail server)')); |
| 630 | $output .= form_group( t('Sending'), $send ); |
| 631 | |
| 632 | // Announcements |
| 633 | $announcements = form_checkbox(t('Enabled'), 'announce_enable', ANNOUNCEMENT_ENABLED, $configuration['announce_enable'], t('Allow announcement messages.')); |
| 634 | $announcements .= form_checkbox(t('Automatic Subscription'), 'announce_auto', ANNOUNCEMENT_AUTO, $configuration['announce_auto'], t('When users create accounts, automatically subscribe them to announcements.')); |
| 635 | $announcements .= form_textarea(t('Subscribe Message (Optional)'), 'announce_optional_msg', $configuration['announce_optional_msg'], 50, 2, t('Displayed when users have the option to subscribe to announcements - always displayed on the user account page')); |
| 636 | $announcements .= form_textarea(t('Subscribe Message (Automatic)'), 'announce_auto_msg', $configuration['announce_auto_msg'], 50, 2, t('Displayed when users are automatically subscribed as part of account creation')); |
| 637 | $output .= form_group( t('Announcements'), $announcements ); |
| 638 | |
| 639 | // Security |
| 640 | if ($configuration[ 'loggin' ] == NULL) $configuration[ 'loggin' ] = 0; |
| 641 | $loggin = form_radios(t("Loggin"), "loggin", $configuration["loggin"], array(t('Limited'), t('Full')), t("Restricts access to just the subscription settings, or all aspects of an account.")); |
| 642 | $output .= form_group( t('Security'), $loggin, t("Controls how much access links in email newsletters give to an account. Limited loggin gives access to specific pages only, the user is still treated as if they have not logged in." ) ); |
| 643 | |
| 644 | // Receiving Configuration |
| 645 | if ($configuration[ "bounce_store_deleted" ] == NULL) $configuration[ "bounce_store_deleted" ] = '48'; |
| 646 | if ($configuration[ "bounce_mailbox_connection" ] == NULL) $configuration[ "bounce_mailbox_connection" ] = 'POP'; |
| 647 | $receive = form_radios(t("Connection Type"), "bounce_mailbox_connection", $configuration["bounce_mailbox_connection"], array(t('POP'), t('IMAP')), t("How to connect to your mail server.")); |
| 648 | $receive .= form_textfield (t("Mailbox Host" ), "bounce_mailbox_host" , $configuration[ "bounce_mailbox_host" ], 40, 64, t('Your host mail sever, usualy in the format: mail.yourdomain.com')); |
| 649 | $receive .= form_textfield (t("Mailbox Port" ), "bounce_port" , $configuration[ "bounce_port" ], 40, 64, t("For POP connection usually: '110/pop3' or '110/pop3/notls'. For IMAP usually: '143'.")); |
| 650 | $receive .= form_textfield (t("Mailbox Username" ), "bounce_mailbox_user" , $configuration[ "bounce_mailbox_user" ], 40, 64, t("Username of mailbox for receiving undelivered email, usually the address of the mailbox: bounce@yourdomain.com.")); |
| 651 | $receive .= form_password (t("Mailbox Password" ), "bounce_mailbox_password" , $configuration[ "bounce_mailbox_password" ], 40, 64, t("Password of mailbox for receiving undelivered email.")); |
| 652 | $receive .= form_textfield (t("Max Process" ), "bounce_max_process" , $configuration[ "bounce_max_process" ], 10, 64, t("Maximum number of bounced emails to process per run.")); |
| 653 | $receive .= form_textfield (t("Store Processed" ), "bounce_store_processed" , $configuration[ "bounce_store_processed" ], 10, 64, t("How long to store copy of processed messages in Drupal. (hours)")); |
| 654 | $receive .= form_textfield (t("Bounce Limit" ), "bounce_limit" , $configuration[ "bounce_limit" ], 10, 64, t("Stop sending to an address after this number of bounces")); |
| 655 | $output .= form_group(t('Receiving (Undelivered)'), $receive, t("Settings for connecting to a mailbox and processing emails that have bounced back as undelivered" )); |
| 656 | |
| 657 | return $output; |
| 658 | } |
| 659 | |
| 660 | |
| 661 | // Get newsletter settings from database (single) |
| 662 | function enewsletter_get_newsletter($enewsletter_id) { |
| 663 | |
| 664 | $settings = db_fetch_array(db_query("SELECT * FROM {enewsletter_newsletters} WHERE enewsletter_id = '%d'", $enewsletter_id)); |
| 665 | |
| 666 | return $settings; |
| 667 | } |
| 668 | |
| 669 | |
| 670 | // Get terms allowed in newsletter from database (all) (single) |
| 671 | function enewsletter_get_allowed_terms($enewsletter_id = NULL) { |
| 672 | |
| 673 | if ($enewsletter_id == NULL) { |
| 674 | $terms = db_query("SELECT DISTINCT tid FROM {enewsletter_allowed} ORDER BY tid"); |
| 675 | } else { |
| 676 | $terms = db_query("SELECT tid FROM {enewsletter_allowed} WHERE enewsletter_id = '%d' ORDER BY tid", $enewsletter_id); |
| 677 | } |
| 678 | |
| 679 | $term_rows = db_num_rows($terms) - 1; |
| 680 | |
| 681 | for ($counter = 0; $counter <= $term_rows; $counter++) { |
| 682 | $allowed_terms[] = db_result($terms, $counter); |
| 683 | } |
| 684 | |
| 685 | return $allowed_terms; |
| 686 | } |
| 687 | |
| 688 | |
| 689 | // Update database with terms allowed in database (single) |
| 690 | function enewsletter_set_allowed_terms($settings) { |
| 691 | |
| 692 | db_query("DELETE FROM {enewsletter_allowed} WHERE enewsletter_id = '%d'", $settings['enewsletter_id']); |
| 693 | |
| 694 | foreach($settings['tid'] as $tid) { |
| 695 | db_query("INSERT INTO {enewsletter_allowed} (enewsletter_id, tid) VALUES ('%d', '%d')", $settings['enewsletter_id'], $tid); |
| 696 | } |
| 697 | |
| 698 | return; |
| 699 | } |
| 700 | |
| 701 | |
| 702 | |
| 703 | function enewsletter_validate_content(&$edit) { |
| 704 | |
| 705 | // Check that there is a title |
| 706 | if (!$edit['title']) form_set_error('title', t('A title must be set.')); |
| 707 | |
| 708 | // Check if new newsletter has unique title |
| 709 | $newsletter_id = db_result(db_query("SELECT enewsletter_id FROM {enewsletter_newsletters} WHERE title = '%s' LIMIT 1", $edit['title'])); |
| 710 | if (is_string($newsletter_id) == true && $edit['enewsletter_id'] != $newsletter_id) { |
| 711 | form_set_error('title', t('Title already in use by another email newsletter.')); |
| 712 | } |
| 713 | |
| 714 | // Check that at least one term has been selected |
| 715 | if (!$edit['tid']) form_set_error('tid', t('At least one term must be selected.')); |
| 716 | |
| 717 | return; |
| 718 | } |
| 719 | |
| 720 | |
| 721 | // Date and time checks |
| 722 | function enewsletter_validate_schedule(&$edit) { |
| 723 | |
| 724 | // Skip these checks if announcement is being validated |
| 725 | if ($edit['enewsletter_id'] != ANNOUNCEMENT) { |
| 726 | |
| 727 | // Check node inclusion date |
| 728 | // - if before first publication |
| 729 | if ($edit['last'] == 0) { |
| 730 | |
| 731 | if ($edit['start'] == 0) { |
| 732 | $edit['start'] = mktime (1, 0, 0, 1, 1, 1999, -1); |
| 733 | } else { |
| 734 | |
| 735 | $edit['start'] = strtotime ($edit['start']); |
| 736 | $include_nodes_date = getdate($edit['start']); |
| 737 | |
| 738 | // Is node inclusion date a valid date? |
| 739 | if (checkdate( $include_nodes_date['mon'], $include_nodes_date['mday'], $include_nodes_date['year'] ) == FALSE) { |
| 740 | form_set_error('start', t("The 'Include Nodes From' date is not correct, please use the mm/dd/yy format.")); |
| 741 | $edit['start'] = mktime (1, 0, 0, 1, 1, 1999, -1); |
| 742 | } |
| 743 | |
| 744 | } |
| 745 | } |
| 746 | |
| 747 | // If schedule set to Manual, set 'every' to 0 |
| 748 | if ($edit['frequency'] == 'manual') { |
| 749 | $edit['every'] = 0; |
| 750 | $edit['next_date'] = 0; |
| 751 | return; |
| 752 | } |
| 753 | |
| 754 | // Check frequency amount has been set |
| 755 | if ($edit['every'] == 0) form_set_error('every', t("Send Schedule: 'Every' cannot be 0")); |
| 756 | |
| 757 | } |
| 758 | |
| 759 | // Check there is a publication date |
| 760 | if ($edit['next_date'] == 0) { |
| 761 | |
| 762 | form_set_error('next_date', t("The 'Send Start' date must be set if you want to send a scheduled email.")); |
| 763 | |
| 764 | } else { |
| 765 | |
| 766 | $next = strtotime ($edit['next_date']); |
| 767 | $next_array = getdate($next); |
| 768 | |
| 769 | // Is this a valid date? |
| 770 | if (checkdate( $next_array['mon'], $next_array['mday'], $next_array['year'] ) == FALSE) { |
| 771 | drupal_set_message (t("The 'Send Start' date is not correct, please use the mm/dd/yy format."), 'error'); |
| 772 | $edit['next'] = time(); |
| 773 | } else { |
| 774 | $edit['next'] = mktime ($edit['next_hour'], 0, 0, $next_array['mon'], $next_array['mday'], $next_array['year'], -1); |
| 775 | } |
| 776 | |
| 777 | // Has publication time already passed? |
| 778 | $send_time = mktime ($edit['next_hour'], 0, 0, $next_array['mon'], $next_array['mday'], $next_array['year'], -1); |
| 779 | if ( $send_time <= time() ) form_set_error('next_hour', t("The 'Send Start' date has already passed.")); |
| 780 | |
| 781 | } |
| 782 | |
| 783 | // Is nodes inclusion date earlier than send out time? |
| 784 | if ( $edit['start'] > $send_time && $edit['frequency'] != 'manual' && $edit['enewsletter_id'] != 1) form_set_error('start', t("The 'Include Nodes From' date is later than the send time.")); |
| 785 | |
| 786 | return; |
| 787 | } |
| 788 | |
| 789 | |
| 790 | |
| 791 | // Validate 'save newsletter' form submition |
| 792 | function enewsletter_validate_newsletter(&$edit) { |
| 793 | |
| 794 | // Check that there is a title |
| 795 | if (!$edit['title']) form_set_error('title', t('A title must be set.')); |
| 796 | |
| 797 | // Check if new newsletter has unique title |
| 798 | $newsletter_id = db_result(db_query("SELECT enewsletter_id FROM {enewsletter_newsletters} WHERE title = '%s' LIMIT 1", $edit['title'])); |
| 799 | if (is_string($newsletter_id) == true && $edit['enewsletter_id'] != $newsletter_id) { |
| 800 | form_set_error('title', t('Title already in use by another email newsletter.')); |
| 801 | } |
| 802 | |
| 803 | // Check that at least one term has been selected |
| 804 | if (!$edit['tid']) form_set_error('tid', t('At least one term must be selected.')); |
| 805 | |
| 806 | // If schedule set to Manual, set 'every' to 0 |
| 807 | if ($edit['frequency'] == 'manual') { |
| 808 | |
| 809 | $edit['every'] = 0; |
| 810 | |
| 811 | } else { |
| 812 | |
| 813 | // Date and time checks |
| 814 | |
| 815 | // Check Schedule (every) has been set |
| 816 | if ($edit['every'] == 0) form_set_error('every', t("Send Schedule: 'Every' cannot be 0")); |
| 817 | |
| 818 | // Check there is a start date |
| 819 | if ($edit['next_date'] == 0) { |
| 820 | |
| 821 | form_set_error('next_date', t("The 'Send Start' date must be set if you want to send a scheduled email.")); |
| 822 | |
| 823 | } else { |
| 824 | |
| 825 | $next = strtotime ($edit['next_date']); |
| 826 | $next_array = getdate($next); |
| 827 | |
| 828 | // Is this a valid date? |
| 829 | if (checkdate( $next_array['mon'], $next_array['mday'], $next_array['year'] ) == FALSE) { |
| 830 | drupal_set_message (t("The 'Send Start' date is not correct, please use the mm/dd/yy format."), 'error'); |
| 831 | $edit['next'] = time(); |
| 832 | } else { |
| 833 | $edit['next'] = mktime ($edit['next_hour'], 0, 0, $next_array['mon'], $next_array['mday'], $next_array['year'], -1); |
| 834 | } |
| 835 | |
| 836 | // Has Start time already passed? |
| 837 | $send_time = mktime ($edit['next_hour'], 0, 0, $next_array['mon'], $next_array['mday'], $next_array['year'], -1); |
| 838 | if ( $send_time <= time() ) form_set_error('next_hour', t("The 'Send Start' date has already passed.")); |
| 839 | |
| 840 | } |
| 841 | |
| 842 | // Check Node Start date (if before first publication) |
| 843 | if ($edit['last'] == 0) { |
| 844 | if ($edit['start'] == 0) { |
| 845 | $edit['start'] = mktime (1, 0, 0, 1, 1, 1999, -1); |
| 846 | } else { |
| 847 | |
| 848 | $edit['start'] = strtotime ($edit['start']); |
| 849 | $include_nodes_date = getdate($edit['start']); |
| 850 | |
| 851 | // Is node start date a valid date? |
| 852 | if (checkdate( $include_nodes_date['mon'], $include_nodes_date['mday'], $next_array['year'] ) == FALSE) { |
| 853 | form_set_error('start', t("The 'Include Nodes From' date is not correct, please use the mm/dd/yy format.")); |
| 854 | $edit['start'] = mktime (1, 0, 0, 1, 1, 1999, -1); |
| 855 | } |
| 856 | |
| 857 | // Is Nodes Start time earlier than send out time? |
| 858 | if ( $edit['start'] > $send_time) form_set_error('start', t("The 'Include Nodes From' date is later than the send time.")); |
| 859 | |
| 860 | } |
| 861 | } |
| 862 | } |
| 863 | |
| 864 | return; |
| 865 | } |
| 866 | |
| 867 | |
| 868 | function enewsletter_form_content($settings = array()) { |
| 869 | |
| 870 | $allowed_terms = $settings['tid']; |
| 871 | if ($settings['enewsletter_id']) $output .= form_hidden ("enewsletter_id" , $settings['enewsletter_id']); |
| 872 | if ($settings['last']) $output .= form_hidden ("last" , $settings['last']); |
| 873 | $description .= form_textfield(t("Title" ), "title" , $settings[ "title" ], 50, 64, t('Used as the subject line of each email')); |
| 874 | $description .= form_textarea(t("Description" ), "description" , $settings[ "description" ], 50, 2, t('Description for subscribers')); |
| 875 | $output .= form_group(t('Description'), $description); |
| 876 | |
| 877 | $after_send = form_checkbox(t('Track'), "track", 1, $settings[ "track" ]); |
| 878 | $output .= form_group(t('After Sending'), $after_send, t('Track user behaviour after email is sent')); |
| 879 | $templates = enewsletter_get_db_rows("SELECT * FROM {enewsletter_templates} WHERE template_id > 2 ORDER BY type"); |
| 880 | |
| 881 | foreach($templates as $template) { |
| 882 | // set default to text template |
| 883 | if ($template->type == '0') { |
| 884 | $text_templates["$template->template_id"] = $template->name; |
| 885 | } else { |
| 886 | $html_templates["$template->template_id"] = $template->name; |
| 887 | } |
| 888 | } |
| 889 | |
| 890 | $template_select .= form_select(t('Text Template'), 'template_text', $settings['template_text'], $text_templates); |
| 891 | $template_select .= form_select(t('HTMLTemplate'), 'template_html', $settings['template_html'], $html_templates); |
| 892 | $output .= form_group(t('Templates'), $template_select, t('Select a plain text template and a HTML template')); |
| 893 | $header = array(t("include"), t("name"), t("node types")); |
| 894 | $vocabularies = taxonomy_get_vocabularies(); |
| 895 | |
| 896 | foreach ($vocabularies as $vocabulary) { |
| 897 | $links = array(); |
| 898 | $types = array(); |
| 899 | foreach(explode(",", $vocabulary->nodes) as $type) { |
| 900 | $types[] = node_invoke($type, "node_name"); |
| 901 | } |
| 902 | $rows[] = array('select', $vocabulary->name, array("data" => implode(", ", $types), "align" => "center")); |
| 903 | |
| 904 | $tree = taxonomy_get_tree($vocabulary->vid); |
| 905 | if ($tree) { |
| 906 | unset($checkboxes); |
| 907 | unset($data); |
| 908 | foreach ($tree as $term) { |
| 909 | $label = _taxonomy_depth($term->depth) ." ". $term->name; |
| 910 | if (is_array($allowed_terms)) { |
| 911 | $checked = in_array($term->tid, $allowed_terms) ? 1 : 0; |
| 912 | } else { |
| 913 | $checked = 0; |
| 914 | } |
| 915 | $checkboxes = form_checkbox($label, "tid][$term->tid", 1, $checked); |
| 916 | $rows[] = array(array("data" => $checkboxes, "colspan" => 3)); |
| 917 | } |
| 918 | |
| 919 | } |
| 920 | |
| 921 | } |
| 922 | |
| 923 | $taxonomy .= theme('table', $header, $rows, array('id' => 'enewsletter-content')); |
| 924 | $output .= form_group(t('Content'), $taxonomy); |
| 925 | return $output; |
| 926 | } |
| 927 | |
| 928 | |
| 929 | function enewsletter_form_schedule($settings = array()) { |
| 930 | |
| 931 | // Frequency form group |
| 932 | $start_date = date ("m/d/y", time()); |
| 933 | $start_day = date ("l, M j Y", time()); |
| 934 | if ($settings['enewsletter_id']) $output .= form_hidden ('enewsletter_id', $settings['enewsletter_id']); |
| 935 | if ($settings['title']) $output .= form_hidden ('title', $settings[ 'title' ]); |
| 936 | if ($settings['last']) $output .= form_hidden ('last', $settings[ 'last' ]); |
| 937 | if ($settings[ 'frequency' ] == NULL) $settings[ 'frequency' ] = 'manual'; |
| 938 | |
| 939 | if ($settings['enewsletter_id'] != ANNOUNCEMENT) { |
| 940 | |
| 941 | if ($settings[ 'next' ] == NULL OR $settings[ 'next' ] == 0) { |
| 942 | $start_hour = ($settings[ 'next_hour' ]) ? $settings[ 'next_hour' ] : '8'; |
| 943 | } else { |
| 944 | $start_hour = date ('G', $settings[ 'next' ]); |
| 945 | $start_date = date ('m/d/y', $settings[ 'next' ]); |
| 946 | $start_day = date ('l, M j Y', $settings[ 'next' ]); |
| 947 | } |
| 948 | |
| 949 | $frequency .= form_textfield (t("Every" ), "every" , $settings[ "every" ], 5, 3); |
| 950 | $frequency .= form_radios(t("Frequency"), "frequency", $settings[ 'frequency' ], array('hour' => t('Hour(s)'), 'day' => t('Day(s)'), 'month' => t('Month(s)'), 'manual' => t('Manual'))); |
| 951 | $output .= form_group(t('Frequency'), $frequency, t('How often this email newsletter should be sent')); |
| 952 | } |
| 953 | |
| 954 | // Include start form group |
| 955 | // Only needed before first send out |
| 956 | if ($settings[ "last" ] == 0) { |
| 957 | if ($settings[ "start" ] == NULL OR $settings[ "start" ] == 0) { |
| 958 | $nodes_date = '1/1/99'; |
| 959 | } else { |
| 960 | $nodes_date = date ("m/d/y", $settings[ "start" ]); |
| 961 | } |
| 962 | |
| 963 | $include_start .= form_textfield (t("Include Nodes From (date)" ), |