Commit 232ce9bb authored by Dianne Tennent's avatar Dianne Tennent Committed by Robert Lyon
Browse files

Bug 800511 directing 'Contact us' emails

If a person is logged in and is a member of
an institution, their 'Contact us' email is
sent to their institution admin.

If they do not have an institution admin,
it is sent to the site admin.

If they are not a member of an institution
or they are logged out, it is sent to
the site admin.

Email message footer has been updated, and
institution admins can adjust their
'Contact us' email settings.

Change-Id: Ia55feb53a7001d6bb3069464c082d29209874c53
parent 7dc1ecd3
Loading
Loading
Loading
Loading
+11 −5
Original line number Diff line number Diff line
@@ -123,15 +123,21 @@ function contactus_validate(Pieform $form, $values) {
}

function contactus_submit(Pieform $form, $values) {
    global $SESSION;
    global $SESSION, $USER;
    $institutions = array();
    if ($USER->is_logged_in()) {
        $institutions = array_keys($USER->get('institutions'));
    }
    $data = new stdClass();
    $data->fromname     = $values['name'];
    $data->fromemail    = $values['email'];
    $data->subject      = $values['subject'];
    $data->message      = $values['message'];
    $data->institutions = $institutions;
    if ($values['userid']) {
        $data->fromuser = $values['userid'];
    }

    require_once('activity.php');
    activity_occurred('contactus', $data);
    $SESSION->add_ok_msg(get_string('messagesent'));
+4 −4
Original line number Diff line number Diff line
@@ -102,7 +102,6 @@ function handle_activity($activitytype, $data, $cron=false, $queuedactivity=null
    if (!$activity->any_users()) {
        return 0;
    }

    return $activity->notify_users();
}

@@ -181,7 +180,7 @@ function activity_get_users($activitytype, $userids=null, $userobjs=null, $admin
            u.id, u.username, u.firstname, u.lastname, u.preferredname, u.email, u.admin, u.staff,
            u.suspendedctime,
            p.method, ap.value, apm.value, aic.value, h.appname
        HAVING (u.admin = 1 OR SUM(ui.admin) > 0)';
        HAVING (SUM(ui.admin) > 0)';
    } else if ($adminonly) {
        $sql .= ' AND u.admin = 1';
    }
@@ -833,10 +832,11 @@ function get_special_notifications($user, $activitytypes) {
        }
    }

    // If user is an institution admin, should receive objectionable material notifications
    // If user is an institution admin, should receive objectionable material and contactus notifications
    if ($user->is_institutional_admin()) {
        $objectionable = get_records_array('activity_type', 'name', 'objectionable', 'id');
        $activitytypes = array_merge($activitytypes, $objectionable);
        $contactus = get_records_array('activity_type', 'name', 'contactus', 'id');
        $activitytypes = array_merge($activitytypes, $objectionable, $contactus);
    }

    return $activitytypes;
+13 −2
Original line number Diff line number Diff line
<?php

require_once('ActivityTypeAdmin.php');
require_once('ActivityType.php');

/**
 * Contactus class for the contact form activity.
 *
 * This activity type is only available to administrators.
 */
class ActivityTypeContactus extends ActivityTypeAdmin {
class ActivityTypeContactus extends ActivityType {

  /**
   * @var string Display name for the sender.
@@ -38,10 +38,21 @@ class ActivityTypeContactus extends ActivityTypeAdmin {
   */
  function __construct($data, $cron=false) {
      parent::__construct($data, $cron);
      $this->users = activity_get_users($this->get_id(), null, null, true);
      // check if user is logged in
      if (!empty($this->fromuser)) {
          $this->url = profile_url($this->fromuser, false);
          // check if user belongs to institution
          if (!empty($data->institutions)) {
              $results = activity_get_users($this->get_id(), null, null, null, $data->institutions);
              // check if there is an admin for their institution(s)
              if (!empty($results)) {
                  $this->users = $results;
              }
          }
      }
      else {
          // user is not logged in
          $this->customheaders = array(
              'Reply-to: ' . $this->fromname . ' <' . $this->fromemail . '>',
          );
+3 −1
Original line number Diff line number Diff line
@@ -14,7 +14,9 @@ defined('INTERNAL') || die();
$string['name'] = 'Email';
$string['emailsubject'] = '%s';
$string['emailheader'] = 'You have been sent a notification from %s. Message follows:';
$string['emailfooter'] = 'This is an auto-generated notification from %s. To update your notification preferences, visit %s';
$string['emailfooter'] = 'You are receiving this message because you are an administrator for the institution of which this person is a member.

This is an auto-generated notification from %s. To update your notification preferences, visit %s';
$string['referurl'] = 'See %s';
$string['unsubscribe'] = 'To unsubscribe go to %s';
$string['unsubscribetitle'] = 'Unsubscribe';