aboutsummaryrefslogtreecommitdiff
path: root/mod/invitefriends
diff options
context:
space:
mode:
Diffstat (limited to 'mod/invitefriends')
-rw-r--r--mod/invitefriends/actions/invite.php187
-rw-r--r--mod/invitefriends/index.php24
-rw-r--r--mod/invitefriends/languages/en.php47
-rw-r--r--mod/invitefriends/manifest.xml23
-rw-r--r--mod/invitefriends/start.php63
-rw-r--r--mod/invitefriends/views/default/forms/invitefriends/invite.php35
-rw-r--r--mod/invitefriends/views/default/invitefriends/form.php22
-rw-r--r--mod/invitefriends/views/default/invitefriends/formitems.php27
8 files changed, 206 insertions, 222 deletions
diff --git a/mod/invitefriends/actions/invite.php b/mod/invitefriends/actions/invite.php
index 7e0bd54b8..eed156d69 100644
--- a/mod/invitefriends/actions/invite.php
+++ b/mod/invitefriends/actions/invite.php
@@ -1,117 +1,88 @@
<?php
- /**
- * Elgg invite action
- *
- * @package ElggFile
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2010
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @link http://elgg.org/
- */
-
- global $CONFIG;
-
- gatekeeper();
-
- $emails = get_input('emails');
- $emailmessage = get_input('emailmessage');
-
- $emails = trim($emails);
- if (strlen($emails) > 0) {
- $emails = preg_split('/\\s+/', $emails, -1, PREG_SPLIT_NO_EMPTY);
+/**
+ * Elgg invite friends action
+ *
+ * @package ElggInviteFriends
+ */
+
+$site = elgg_get_site_entity();
+
+$emails = get_input('emails');
+$emailmessage = get_input('emailmessage');
+
+$emails = trim($emails);
+if (strlen($emails) > 0) {
+ $emails = preg_split('/\\s+/', $emails, -1, PREG_SPLIT_NO_EMPTY);
+}
+
+if (!is_array($emails) || count($emails) == 0) {
+ register_error(elgg_echo('invitefriends:noemails'));
+ forward(REFERER);
+}
+
+$current_user = elgg_get_logged_in_user_entity();
+
+$error = FALSE;
+$bad_emails = array();
+$already_members = array();
+$sent_total = 0;
+foreach ($emails as $email) {
+
+ $email = trim($email);
+ if (empty($email)) {
+ continue;
}
-
- if (!is_array($emails) || count($emails) == 0) {
- register_error(elgg_echo('invitefriends:failure'));
- forward($_SERVER['HTTP_REFERER']);
+
+ // send out other email addresses
+ if (!is_email_address($email)) {
+ $error = TRUE;
+ $bad_emails[] = $email;
+ continue;
}
-
- $error = FALSE;
- $bad_emails = array();
- foreach($emails as $email) {
-
- $email = trim($email);
- if (empty($email)) {
- continue;
- }
-
- // send out other email addresses
- if (!is_email_address($email)) {
- $error = TRUE;
- $bad_emails[] = $email;
- continue;
- }
-
- $link = $CONFIG->wwwroot . 'pg/register?friend_guid=' . $_SESSION['guid'] . '&invitecode=' . generate_invite_code($_SESSION['user']->username);
- $message = sprintf(elgg_echo('invitefriends:email'),
- $CONFIG->site->name,
- $_SESSION['user']->name,
- $emailmessage,
- $link
- );
-
- // **** this should be replaced by a core function for sending emails to people who are not members
- $site = get_entity($CONFIG->site_guid);
- // If there's an email address, use it - but only if its not from a user.
- if (($site) && (isset($site->email))) {
- // Has the current site got a from email address?
- $from = $site->email;
- } else if (isset($from->url)) {
- // If we have a url then try and use that.
- $breakdown = parse_url($from->url);
- $from = 'noreply@' . $breakdown['host']; // Handle anything with a url
- } else {
- // If all else fails, use the domain of the site.
- $from = 'noreply@' . get_site_domain($CONFIG->site_guid);
- }
-
- if (is_callable('mb_internal_encoding')) {
- mb_internal_encoding('UTF-8');
- }
- $site = get_entity($CONFIG->site_guid);
- $sitename = $site->name;
- if (is_callable('mb_encode_mimeheader')) {
- $sitename = mb_encode_mimeheader($site->name,"UTF-8", "B");
- }
-
- $header_eol = "\r\n";
- if ((isset($CONFIG->broken_mta)) && ($CONFIG->broken_mta)) {
- // Allow non-RFC 2822 mail headers to support some broken MTAs
- $header_eol = "\n";
- }
-
- $from_email = "\"$sitename\" <$from>";
- if (strtolower(substr(PHP_OS, 0 , 3)) == 'win') {
- // Windows is somewhat broken, so we use a different format from header
- $from_email = "$from";
- }
-
- $headers = "From: $from_email{$header_eol}"
- . "Content-Type: text/plain; charset=UTF-8; format=flowed{$header_eol}"
- . "MIME-Version: 1.0{$header_eol}"
- . "Content-Transfer-Encoding: 8bit{$header_eol}";
-
- $subject = sprintf(elgg_echo('invitefriends:subject'), $CONFIG->site->name);
- if (is_callable('mb_encode_mimeheader')) {
- $subject = mb_encode_mimeheader($subject,"UTF-8", "B");
- }
-
- // Format message
- $message = html_entity_decode($message, ENT_COMPAT, 'UTF-8'); // Decode any html entities
- $message = strip_tags($message); // Strip tags from message
- $message = preg_replace("/(\r\n|\r)/", "\n", $message); // Convert to unix line endings in body
- $message = preg_replace("/^From/", ">From", $message); // Change lines starting with From to >From
-
- mail($email, $subject, wordwrap($message), $headers);
+
+ if (get_user_by_email($email)) {
+ $error = TRUE;
+ $already_members[] = $email;
+ continue;
+ }
+
+ $link = elgg_get_site_url() . 'register?friend_guid=' . $current_user->guid . '&invitecode=' . generate_invite_code($current_user->username);
+ $message = elgg_echo('invitefriends:email', array(
+ $site->name,
+ $current_user->name,
+ $emailmessage,
+ $link
+ )
+ );
+
+ $subject = elgg_echo('invitefriends:subject', array($site->name));
+
+ // create the from address
+ $site = get_entity($site->guid);
+ if ($site && $site->email) {
+ $from = $site->email;
+ } else {
+ $from = 'noreply@' . get_site_domain($site->guid);
+ }
+
+ elgg_send_email($from, $email, $subject, $message);
+ $sent_total++;
+}
+
+if ($error) {
+ register_error(elgg_echo('invitefriends:invitations_sent', array($sent_total)));
+
+ if (count($bad_emails) > 0) {
+ register_error(elgg_echo('invitefriends:email_error', array(implode(', ', $bad_emails))));
}
- if ($error) {
- register_error(sprintf(elgg_echo('invitefriends:email_error'), implode(', ', $bad_emails)));
- } else {
- system_message(elgg_echo('invitefriends:success'));
+ if (count($already_members) > 0) {
+ register_error(elgg_echo('invitefriends:already_members', array(implode(', ', $already_members))));
}
- forward($_SERVER['HTTP_REFERER']);
+} else {
+ system_message(elgg_echo('invitefriends:success'));
+}
-?>
+forward(REFERER);
diff --git a/mod/invitefriends/index.php b/mod/invitefriends/index.php
deleted file mode 100644
index 2a9aee790..000000000
--- a/mod/invitefriends/index.php
+++ /dev/null
@@ -1,24 +0,0 @@
-<?php
-/**
- * Elgg invite page
- *
- * @package ElggFile
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2010
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @link http://elgg.org/
- */
-
- require_once(dirname(dirname(dirname(__FILE__))) . '/engine/start.php');
-
- gatekeeper();
-
- set_context('friends');
- set_page_owner($_SESSION['guid']);
-
- $body = elgg_view('invitefriends/form');
- $body = elgg_view_layout('one_column_with_sidebar', $body);
-
- page_draw(elgg_echo('friends:invite'),$body);
-
-?> \ No newline at end of file
diff --git a/mod/invitefriends/languages/en.php b/mod/invitefriends/languages/en.php
index 357ceeeea..f31d79bd8 100644
--- a/mod/invitefriends/languages/en.php
+++ b/mod/invitefriends/languages/en.php
@@ -1,31 +1,33 @@
<?php
- /**
- * Elgg invite page
- *
- * @package ElggFile
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2010
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @link http://elgg.org/
- */
-
- $english = array(
-
- 'friends:invite' => 'Invite friends',
- 'invitefriends:introduction' => 'To invite friends to join you on this network, enter their email addresses below (one per line):',
- 'invitefriends:message' => 'Enter a message they will receive with your invitation:',
- 'invitefriends:subject' => 'Invitation to join %s',
+/**
+ * Elgg invite language file
+ *
+ * @package ElggInviteFriends
+ */
+
+$english = array(
+
+ 'friends:invite' => 'Invite friends',
- 'invitefriends:success' => 'Your friends were invited.',
- 'invitefriends:email_error' => 'Invitations were sent, but the following addresses are not valid: %s',
- 'invitefriends:failure' => 'Your friends could not be invited.',
+ 'invitefriends:registration_disabled' => 'New user registration has been disabled on this site; you are unable to invite new users.',
- 'invitefriends:message:default' => '
+ 'invitefriends:introduction' => 'To invite friends to join you on this network, enter their email addresses below (one per line):',
+ 'invitefriends:message' => 'Enter a message they will receive with your invitation:',
+ 'invitefriends:subject' => 'Invitation to join %s',
+
+ 'invitefriends:success' => 'Your friends were invited.',
+ 'invitefriends:invitations_sent' => 'Invites sent: %s. There were the following problems:',
+ 'invitefriends:email_error' => 'The following addresses are not valid: %s',
+ 'invitefriends:already_members' => 'The following are already members: %s',
+ 'invitefriends:noemails' => 'No email addresses were entered.',
+
+ 'invitefriends:message:default' => '
Hi,
I want to invite you to join my network here on %s.',
- 'invitefriends:email' => '
+
+ 'invitefriends:email' => '
You have been invited to join %s by %s. They included the following message:
%s
@@ -38,5 +40,4 @@ You will automatically add them as a friend when you create your account.',
);
- add_translation("en",$english);
-?>
+add_translation("en", $english);
diff --git a/mod/invitefriends/manifest.xml b/mod/invitefriends/manifest.xml
index 4e17a5d27..b36238a05 100644
--- a/mod/invitefriends/manifest.xml
+++ b/mod/invitefriends/manifest.xml
@@ -1,10 +1,17 @@
<?xml version="1.0" encoding="UTF-8"?>
-<plugin_manifest>
- <field key="author" value="Curverider" />
- <field key="version" value="1.7" />
- <field key="description" value="Invite friends to Elgg network via email invites." />
- <field key="website" value="http://www.elgg.org/" />
- <field key="copyright" value="(C) Curverider 2008-2010" />
- <field key="licence" value="GNU Public License version 2" />
- <field key="elgg_version" value="2010030101" />
+<plugin_manifest xmlns="http://www.elgg.org/plugin_manifest/1.8">
+ <name>Invite Friends</name>
+ <author>Core developers</author>
+ <version>1.8</version>
+ <category>bundled</category>
+ <category>social</category>
+ <description>Invite friends via email invites.</description>
+ <website>http://www.elgg.org/</website>
+ <copyright>See COPYRIGHT.txt</copyright>
+ <license>GNU General Public License version 2</license>
+ <requires>
+ <type>elgg_release</type>
+ <version>1.8</version>
+ </requires>
+ <activate_on_install>true</activate_on_install>
</plugin_manifest>
diff --git a/mod/invitefriends/start.php b/mod/invitefriends/start.php
index f2b532253..368f6348a 100644
--- a/mod/invitefriends/start.php
+++ b/mod/invitefriends/start.php
@@ -1,25 +1,50 @@
<?php
/**
- * Elgg invite page
- *
- * @package ElggFile
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2010
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @link http://elgg.org/
+ * Elgg invite friends
+ *
+ * @package ElggInviteFriends
*/
-function invitefriends_pagesetup() {
-
- // Menu options
- global $CONFIG;
- if (get_context() == "friends" ||
- get_context() == "friendsof") {
- add_submenu_item(elgg_echo('friends:invite'),$CONFIG->wwwroot."mod/invitefriends/",'invite');
- }
+elgg_register_event_handler('init', 'system', 'invitefriends_init');
+
+function invitefriends_init() {
+ elgg_register_page_handler('invite', 'invitefriends_page_handler');
+
+ elgg_register_action('invitefriends/invite', elgg_get_plugins_path() . 'invitefriends/actions/invite.php');
+
+ if (elgg_is_logged_in()) {
+ $params = array(
+ 'name' => 'invite',
+ 'text' => elgg_echo('friends:invite'),
+ 'href' => "invite",
+ 'contexts' => array('friends'),
+ );
+ elgg_register_menu_item('page', $params);
}
+}
+
+/**
+ * Page handler function
+ *
+ * @param array $page Page URL segments
+ * @return bool
+ */
+function invitefriends_page_handler($page) {
+ gatekeeper();
+
+ elgg_set_context('friends');
+ elgg_set_page_owner_guid(elgg_get_logged_in_user_guid());
+
+ $title = elgg_echo('friends:invite');
+
+ $body = elgg_view('invitefriends/form');
+
+ $params = array(
+ 'content' => $body,
+ 'title' => $title,
+ );
+ $body = elgg_view_layout('one_sidebar', $params);
- global $CONFIG;
- register_action('invitefriends/invite', false, $CONFIG->pluginspath . 'invitefriends/actions/invite.php');
- register_elgg_event_handler('pagesetup','system','invitefriends_pagesetup',1000);
-?> \ No newline at end of file
+ echo elgg_view_page($title, $body);
+ return true;
+}
diff --git a/mod/invitefriends/views/default/forms/invitefriends/invite.php b/mod/invitefriends/views/default/forms/invitefriends/invite.php
new file mode 100644
index 000000000..0d7f5d9f2
--- /dev/null
+++ b/mod/invitefriends/views/default/forms/invitefriends/invite.php
@@ -0,0 +1,35 @@
+<?php
+
+/**
+ * Elgg invite form contents
+ *
+ * @package ElggInviteFriends
+ */
+
+if (elgg_get_config('allow_registration')) {
+ $site = elgg_get_site_entity();
+ $introduction = elgg_echo('invitefriends:introduction');
+ $message = elgg_echo('invitefriends:message');
+ $default = elgg_echo('invitefriends:message:default', array($site->name));
+
+ echo <<< HTML
+<div>
+ <label>
+ $introduction
+ <textarea class="elgg-input-textarea" name="emails" ></textarea>
+ </label>
+</div>
+<div>
+ <label>
+ $message
+ <textarea class="elgg-input-textarea" name="emailmessage" >$default</textarea>
+ </label>
+</div>
+HTML;
+
+ echo '<div class="elgg-foot">';
+ echo elgg_view('input/submit', array('value' => elgg_echo('send')));
+ echo '</div>';
+} else {
+ echo elgg_echo('invitefriends:registration_disabled');
+}
diff --git a/mod/invitefriends/views/default/invitefriends/form.php b/mod/invitefriends/views/default/invitefriends/form.php
index ef66c1e84..badcf8759 100644
--- a/mod/invitefriends/views/default/invitefriends/form.php
+++ b/mod/invitefriends/views/default/invitefriends/form.php
@@ -1,18 +1,8 @@
<?php
- /**
- * Elgg invite page
- *
- * @package ElggFile
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2010
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @link http://elgg.org/
- */
- echo elgg_view('input/form', array(
- 'action' => $vars['url'] . 'action/invitefriends/invite',
- 'body' => elgg_view('invitefriends/formitems'),
- 'method' => 'post'
- )
- );
+/**
+ * Elgg invite form wrapper
+ *
+ * @package ElggInviteFriends
+ */
-?>
+echo elgg_view_form('invitefriends/invite');
diff --git a/mod/invitefriends/views/default/invitefriends/formitems.php b/mod/invitefriends/views/default/invitefriends/formitems.php
index 875287821..afdff4164 100644
--- a/mod/invitefriends/views/default/invitefriends/formitems.php
+++ b/mod/invitefriends/views/default/invitefriends/formitems.php
@@ -1,25 +1,4 @@
-<?php
+<?php
- /**
- * Elgg invite page
- *
- * @package ElggFile
- * @author Curverider Ltd
- * @copyright Curverider Ltd 2008-2010
- * @license http://www.gnu.org/licenses/old-licenses/gpl-2.0.html GNU Public License version 2
- * @link http://elgg.org/
- */
-
-
-echo "<h2>".elgg_echo('friends:invite')."</h2>";
-?>
-<p class="margin_top">
-<label>
- <?php echo elgg_echo('invitefriends:introduction'); ?>
-<textarea class="input_textarea" name="emails" ></textarea></label></p>
-<p><label>
- <?php echo elgg_echo('invitefriends:message'); ?>
-<textarea class="input_textarea" name="emailmessage" ><?php
- echo sprintf(elgg_echo('invitefriends:message:default'),$CONFIG->site->name);
-?></textarea></label></p>
-<?php echo elgg_view('input/submit', array('value' => elgg_echo('send'))); ?>
+elgg_deprecated_notice("invitefriends/formitems was moved to forms/invitefriends/invite", 1.8);
+echo elgg_view('forms/invitefriends/invite'); \ No newline at end of file