diff options
Diffstat (limited to 'mod/invitefriends')
| -rw-r--r-- | mod/invitefriends/actions/invite.php | 187 | ||||
| -rw-r--r-- | mod/invitefriends/index.php | 24 | ||||
| -rw-r--r-- | mod/invitefriends/languages/en.php | 47 | ||||
| -rw-r--r-- | mod/invitefriends/manifest.xml | 23 | ||||
| -rw-r--r-- | mod/invitefriends/start.php | 63 | ||||
| -rw-r--r-- | mod/invitefriends/views/default/forms/invitefriends/invite.php | 35 | ||||
| -rw-r--r-- | mod/invitefriends/views/default/invitefriends/form.php | 22 | ||||
| -rw-r--r-- | mod/invitefriends/views/default/invitefriends/formitems.php | 27 |
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 |
