source: trunk/common/newsletter.php @ 987

Revision 987, 2.9 KB checked in by strat.cristian@…, 3 years ago (diff)

HTML Newsletter

This patch adds support for HTML in the infoarena newsletter. A newsletter can be created just like a regular wiki page, using textile, macros, and templates. Sending is still done with a command-line script.

  • Adds HTML newsletter library.
  • Adds UI, display index of all newsletters.
  • Adds UI, view newsletter in browser.
  • Adds migration script to convert old text/plain newsletters to decent textile versions.
  • Adds external library: PHPMailer ( http://phpmailer.codeworxtech.com/index.php?pg=phpmailer).
Line 
1<?php
2
3require_once(IA_ROOT_DIR . "common/db/db.php");
4require_once(IA_ROOT_DIR . "common/textblock.php");
5require_once(IA_ROOT_DIR . "common/user.php");
6require_once(IA_ROOT_DIR . "www/wiki/wiki.php");
7require_once(IA_ROOT_DIR . "www/url.php");
8
9// Render HTML newsletter for recipient $user, from given $textblock.
10// The newsletter is personalized for the recipient by doing a
11// textblock_template_replace(...) for %username% tags.
12function newsletter_body_html($textblock, $user, $in_browser = false) {
13    log_assert_valid(textblock_validate($textblock));
14    $user_is_anonymous = !$user;
15    if ($user_is_anonymous) {
16        // Anonymous user. Build fake user object.
17        $user = newsletter_anonymous_user();
18    }
19    log_assert_valid(user_validate($user));
20
21    // Personalize newsletter and process textile.
22
23    $replace = array("username" => $user['username']);
24    textblock_template_replace($textblock, $replace);
25    $body_html = wiki_process_text($textblock['text']);
26    $subject = newsletter_subject($textblock, $user);
27
28    // Generate HTML using newsletter template.
29
30    ob_start();
31    include(IA_ROOT_DIR . "common/newsletter_template.php");
32    $buffer = ob_get_contents();
33    ob_end_clean();
34    return $buffer;
35}
36
37// Alternate body in text/plain format. This should be displayed by email
38// clients that don't support HTML.
39function newsletter_body_alternate($textblock, $user) {
40    log_assert_valid(user_validate($user));
41    log_assert_valid(textblock_validate($textblock));
42    $unsubscribe_url = url_absolute(url_unsubscribe($user['username'],
43            user_unsubscribe_key($user)));
44    return join("", array(
45        "Acest email este redactat in format HTML. Daca nu se afiseaza\n",
46        "corect, te rog sa il vizualizezi in browser la adresa:\n\n",
47        url_absolute(url_newsletter($textblock['name'])), "\n\n\n",
48        "Ai primit acest mesaj deoarece esti inscris pe ",
49        url_absolute(url_home()), "\n", "cu numele \"{$user['full_name']}\", ",
50        "utilizator \"{$user['username']}\",\n",
51        "adresa de email \"{$user['email']}\".\n\n",
52        "Daca nu mai doresti sa primesti astfel de mesaje te poti dezabona\n",
53        "acum la adresa:\n\n", $unsubscribe_url));
54}
55
56// Generate newsletter subject for recipient $user.
57function newsletter_subject($textblock, $user) {
58    log_assert_valid(textblock_validate($textblock));
59    if (!$user) {
60        // Anonymous user. Build fake user object.
61        $user = newsletter_anonymous_user();
62    }
63    log_assert_valid(user_validate($user));
64    return 'infoarena: '.$textblock['title'];
65}
66
67// Fake, anonymous recipient.
68function newsletter_anonymous_user() {
69    $user = user_init();
70    $user['username'] = 'anonymous';
71    $user['password'] = '*';
72    $user['full_name'] = 'Utilizator infoarena';
73    $user['email'] = 'utilizator-infoarena@example.com';
74    $user['newsletter'] = '1';
75    return $user;
76}
77
78?>
Note: See TracBrowser for help on using the repository browser.