Ejemplo n.º 1
0
function nf_sendEmail($email, $subject, $message)
{
    global $_USER, $_CONF, $_TABLES, $CONF_NF;
    if ($CONF_NF['debug']) {
        COM_errorLog("Nexflow - Sending message to: {$email}, subject: {$subject},Message: {$message}");
    }
    if (empty($LANG_CHARSET)) {
        $charset = $_CONF['default_charset'];
        if (empty($charset)) {
            $charset = "iso-8859-1";
        }
    } else {
        $charset = $LANG_CHARSET;
    }
    if ($CONF_NF['email_notifications_enabled']) {
        COM_mail($email, $subject, $message);
        nf_logNotification("Nexflow: {$email}, {$subject}");
    }
    return true;
}
Ejemplo n.º 2
0
 function private_sendTaskReminders()
 {
     global $_TABLES, $_CONF;
     // Retrieve all the un-completed interactive type tasks in the queue that have a reminder task time set
     $fields = 'a.id, a.nextReminderTime, a.status, a.nf_templateDataID, a.numRemindersSent, a.uid, a.createdDate, ';
     $fields .= 'c.nf_templateID,c.taskname,c.reminderInterval,c.subsequentReminderInterval,c.assignedByVariable, ';
     $fields .= 'c.numReminders,c.escalateVariableID, b.id AS processID ';
     $sql = "SELECT distinct {$fields} ";
     $sql .= "FROM {$_TABLES['nf_queue']} a ";
     $sql .= "INNER JOIN {$_TABLES['nf_process']} b on a.nf_processID = b.id ";
     $sql .= "INNER JOIN {$_TABLES['nf_templatedata']} c on a.nf_templateDataID = c.id ";
     $sql .= "WHERE a.status = 0 AND  a.nextReminderTime > 0 ";
     // Uncompleted task and reminder datetime set
     $sql .= "AND c.reminderInterval > 0 ";
     // Interval set for reminder in number of days
     $sql .= "AND (c.nf_stepType=1 OR c.nf_stepType=7 OR c.nf_stepType=8) ";
     // Interactive Task Types
     $sql .= "AND (a.archived <> 1 OR a.archived IS NULL OR a.archived=0 ) AND (b.complete=0) ";
     $sql .= "AND NOW() > a.nextReminderTime ";
     // Current time has passed reminder time
     $q1 = DB_query($sql);
     // For each un-completed task in the queue - check if reminder notification should be sent out.
     while ($A = DB_fetchArray($q1)) {
         // Check if have exceeded the number of notifications and need to send out Escalation email.
         if ($A['numReminders'] != 0 and $A['numReminders'] == $A['numRemindersSent'] + 1) {
             $notifyUID = DB_getItem($_TABLES['nf_processvariables'], 'variableValue', "nf_templateVariableID = '{$A['escalateVariableID']}' AND nf_processID = '{$A['processID']}'");
             $email = DB_getItem($_TABLES['users'], 'email', "uid='{$notifyUID}'");
             $notifyUser = COM_getDisplayName($notifyUID);
             $subject = 'Workflow Task Escalation Notification';
             list($subject, $message) = nf_formatEmailMessage('escalation', $A['nf_templateDataID'], $A['id'], $notifyUser);
             nf_sendEmail($email, $subject, $message);
             DB_query("UPDATE {$_TABLES['nf_queue']} SET numRemindersSent = '0' WHERE id = '{$A['id']}';");
         } else {
             $subject = 'Workflow Task Reminder Notification';
             $message = "Task: {$A['taskname']} is un-completed.";
             DB_query("UPDATE {$_TABLES['nf_queue']} SET numRemindersSent = numRemindersSent + 1 WHERE id = '{$A['id']}';");
             // Determine which process variables contain users to send reminder to
             $sql = "SELECT DISTINCT b.variableValue FROM {$_TABLES['nf_templateassignment']} a, {$_TABLES['nf_processvariables']} b ";
             $sql .= "WHERE a.nf_remindernotifyVariable=b.nf_templateVariableID AND b.nf_processID='{$A['processID']}'";
             $sql .= "AND b.variableValue > 1 AND a.nf_templateDataID={$A['nf_templateDataID']}";
             $q2 = DB_query($sql);
             // Loop through users setup to receive reminders for this task
             while (list($notifyUID) = DB_fetchArray($q2)) {
                 if (strpos($notifyUID, ':') !== false) {
                     $notifyUIDs = explode(':', $notifyUIDs);
                 } else {
                     $notifyUIDs = array($notifyUID);
                 }
                 foreach ($notifyUIDs as $notifyUID) {
                     nf_logNotification("Nexflow: Send reminder for task id: {$A['id']} ({$A['nf_templateDataID']}), {$A['taskname']} to: {$notifyUID} ");
                     $email = DB_getItem($_TABLES['users'], 'email', "uid='{$notifyUID}'");
                     if ($email != '') {
                         $notifyUser = COM_getDisplayName($notifyUID);
                         $logmsg = "Nexflow: Send task reminder notification for task id: {$A['id']} ";
                         $logmsg .= "({$A['nf_templateDataID']}), {$A['taskname']} to: {$notifyUser} ";
                         nf_notificationLog($logmsg);
                         list($subject, $message) = nf_formatEmailMessage('reminder', $A['nf_templateDataID'], $A['id'], $notifyUser);
                         nf_sendEmail($email, $subject, $message);
                     }
                 }
             }
             // Now check and see if this task has a reminder set for the special "TASK_OWNER" resource variable (id=999)
             if (DB_count($_TABLES['nf_templateassignment'], array('nf_templateDataID', 'nf_remindernotifyVariable'), array($A['nf_templateDataID'], 999)) == 1) {
                 // Check if this task is assigned by variable or UID - Get all assigned users
                 $sql = "SELECT b.uid,b.nf_processVariable FROM {$_TABLES['nf_templateassignment']} b ";
                 $sql .= "WHERE b.nf_templateDataID = '{$A['nf_templateDataID']}' ";
                 $sql .= "AND (uid IS NOT NULL OR nf_processVariable IS NOT NULL) ";
                 $q3 = DB_query($sql);
                 while (list($notifyUID, $variableid) = DB_fetchArray($q3)) {
                     $email = '';
                     if ($variableid != NULL and $A['assignedByVariable'] == 1) {
                         $notifyUID = DB_getItem($_TABLES['nf_processvariables'], 'variableValue', "nf_processID='{$A['processID']}' AND nf_templateVariableID='{$variableid}'");
                         $email = DB_getItem($_TABLES['users'], 'email', "uid='{$notifyUID}'");
                     } elseif ($A['assignedByVariable'] == 0) {
                         $email = DB_getItem($_TABLES['users'], 'email', "uid='{$notifyUID}'");
                     }
                     if ($email != '') {
                         $notifyUser = COM_getDisplayName($notifyUID);
                         $logmsg = "Nexflow: Send task reminder notification for task id: {$A['id']} ";
                         $logmsg .= "({$A['nf_templateDataID']}), {$A['taskname']} to: {$notifyUser} ";
                         nf_logNotification($logmsg);
                         list($subject, $message) = nf_formatEmailMessage('reminder', $A['nf_templateDataID'], $A['id'], $notifyUser);
                         nf_sendEmail($email, $subject, $message);
                     }
                 }
             }
             // Update the nextReminder Timestamp for this task in the queue
             if ($A['subsequentReminderInterval'] > 0) {
                 $reminderInterval = $A['subsequentReminderInterval'];
             } else {
                 $reminderInterval = $A['reminderInterval'];
             }
             $sql = "UPDATE {$_TABLES['nf_queue']} SET nextReminderTime = DATE_ADD( NOW(), INTERVAL {$reminderInterval} DAY) WHERE id='{$A['id']}'";
             DB_query($sql);
         }
     }
 }