function engagements_get_alert_count_by_type

6.x engagements.module engagements_get_alert_count_by_type($account = NULL)

Implements hook_get_count_for_alert_type

Set and Return back "unread" (not in content_last_access)

File

modules/engagements/engagements.module, line 169
This is the primary module file for the engagements module.

Code

function engagements_get_alert_count_by_type($account = NULL) {
  global $user;
  if ($account === NULL) {
    $account = $user;
  }

  if ($account->id == 0) {
    return FALSE;
  }


  $rtn = array();

  $rtn ['engagement']['total'] = 0;
  $rtn ['engagement']['read'] = 0;
  $rtn ['engagement']['unread'] = 0;



  $already_counted = array();

  // We need to know this user's list of advisees.
  $advisees = advise_get_advisees($account->cwid);

  $advisee_line = "";
  if ($advisees && count($advisees) > 0) {

    $advisees_list = "'" . join("','", $advisees) . "'";

    $advisee_line = " AND b.field__student_id IN (" . $advisees_list . ") ";


    /*          
    $total_count = db_result(db_query("SELECT COUNT(*) as mycount 
                      FROM content__engagement b,                                            
                           content n
                     WHERE n.type = ?
                     AND b.vid = n.vid
                     AND b.cid = n.cid
                     AND n.published = 1
                     AND n.delete_flag = 0                     
                     AND field__direction = 'received'
                     AND field__engagement_type IN ('email', 'txt_msg')
                     AND (field__manual_entry IS NULL OR field__manual_entry != 'Y')
                     $advisee_line ", array('engagement'))); 
  */

    $total_count = 0;
    $res = db_query("SELECT b.cid  
                      FROM content__engagement b,                                            
                           content n
                     WHERE n.type = ?
                     AND b.vid = n.vid
                     AND b.cid = n.cid
                     AND n.published = 1
                     AND n.delete_flag = 0                     
                     AND field__direction = 'received'
                     AND field__engagement_type IN ('email', 'txt_msg')
                     AND (field__manual_entry IS NULL OR field__manual_entry != 'Y')
                     $advisee_line ", array('engagement'));
    while ($cur = db_fetch_array($res)) {
      $cid = $cur ['cid'];
      $already_counted [$cid] = $cid;
      $total_count++;
    }



    $read_count = db_result(db_query("SELECT COUNT(*) as mycount 
                      FROM content_last_access a,
                           content__engagement b,                                            
                           content n
                     WHERE n.type = ?
                     AND n.published = 1
                     AND b.vid = n.vid
                     AND b.cid = n.cid                                          
                     AND n.delete_flag = 0
                     AND n.cid = a.cid
                     AND field__direction = 'received'
                     AND field__engagement_type IN ('email', 'txt_msg')
                     AND (field__manual_entry IS NULL OR field__manual_entry != 'Y')
                     $advisee_line
                     AND a.user_id = ?", array('engagement', $account->id)));


    $rtn ['engagement']['total'] = intval($total_count);
    $rtn ['engagement']['read'] = intval($read_count);
    $rtn ['engagement']['unread'] = $total_count - $read_count;

  } // if advisees      

  // We should ALSO get these students to show up when we're the recipient of a text number, regardless of if they are
  // considered our "advisee" or not.
  $numbers = engagements_get_user_notify_sms_receipt_values($account->id);

  if ($numbers && is_array($numbers) && count($numbers) > 0) {
    // Were there any txt messages sent to these number, which we have not read?    
    $numbers_line = "";
    $numbers_list = "'" . join("','", $numbers) . "'";

    $numbers_line = " AND b.field__to_sms_phone IN (" . $numbers_list . ") ";

    // So, we should also search for results where we received at these numbers, regardless of if the user was our advisee or not.

    $total_count = 0;
    $res = db_query("SELECT b.cid  
                      FROM content__engagement b,                                            
                           content n
                     WHERE n.type = ?
                     AND b.vid = n.vid
                     AND b.cid = n.cid
                     AND n.published = 1
                     AND n.delete_flag = 0                     
                     AND field__direction = 'received'
                     AND field__engagement_type IN ('email', 'txt_msg')
                     AND (field__manual_entry IS NULL OR field__manual_entry != 'Y')
                     $numbers_line ", array('engagement'));
    while ($cur = db_fetch_array($res)) {
      $cid = $cur ['cid'];
      if (!in_array($cid, $already_counted)) {
        $already_counted [$cid] = $cid;
        $total_count++;
      }
    }


    $read_count = db_result(db_query("SELECT COUNT(*) as mycount 
                      FROM content_last_access a,
                           content__engagement b,                                            
                           content n
                     WHERE n.type = ?
                     AND n.published = 1
                     AND b.vid = n.vid
                     AND b.cid = n.cid                                          
                     AND n.delete_flag = 0
                     AND n.cid = a.cid
                     AND field__direction = 'received'
                     AND field__engagement_type IN ('email', 'txt_msg')
                     AND (field__manual_entry IS NULL OR field__manual_entry != 'Y')
                     $numbers_line
                     AND a.user_id = ?", array('engagement', $account->id)));


    $rtn ['engagement']['total'] += intval($total_count);
    $rtn ['engagement']['read'] += intval($read_count);
    $rtn ['engagement']['unread'] += ($total_count - $read_count);



  } // if numbers




  if (count($rtn) == 0) {
    return FALSE;
  }

  return $rtn;

}