Exemple #1
0
/**
 * This functions return number of unreaded mails
 *
 * @uses $CFG, $DB
 * @param int $userid User ID
 * @param int $courseid Course ID
 * @param int $folderid Folder ID (Optional) When fault this param, return total number of unreaded mails
 * @return int Number of unread mails.
 * @todo Finish documenting this function
 **/
function email_count_unreaded_mails($userid, $courseid, $folderid = NULL)
{
    global $CFG, $DB;
    require_once $CFG->dirroot . '/blocks/email_list/email/folder.class.php';
    $folderman = new folder();
    if (!$folderid or $folderid <= 0) {
        $myfolders = $folderman->get_folders($userid, EMAIL_INBOX);
        // Prepare list of folders
        foreach ($myfolders as $myfolder) {
            $folders[] = $myfolder->id;
        }
        list($fsql, $params2) = $DB->get_in_or_equal($folders);
        $params = array('userid' => $userid, 'courseid' => $courseid, 'readed' => 0, 'sended' => 1);
        $params = array_merge($params, $params2);
        $sql = "SELECT COUNT(m.id)\n\t                            FROM {block_email_list_mail} m\n\t                   LEFT JOIN {block_email_list_send} s ON m.id = s.mailid\n\t                   LEFT JOIN {block_email_list_foldermail} fm ON m.id = fm.mailid ";
        // WHERE principal clause for filter by user and course
        $wheresql = " WHERE s.userid = ?\n\t\t\t\t\t  AND s.course = ?\n\t\t\t\t\t  AND s.readed = ?\n\t\t\t\t\t  AND s.sended = ?\n\t\t\t\t\t  AND fm.folderid {$fsql}";
        return $DB->count_records_sql($sql . $wheresql, $params);
    } else {
        // Get folder
        if (!($folder = $folderman->get_folder($folderid))) {
            return 0;
        }
        if ($folder->isparenttype == EMAIL_INBOX) {
            // For apply order, I've writting an sql clause
            $sql = "SELECT count(*)\n\t\t                            FROM {block_email_list_mail} m\n\t\t                   LEFT JOIN {block_email_list_send} s ON m.id = s.mailid\n\t\t                   LEFT JOIN {block_email_list_foldermail} fm ON m.id = fm.mailid ";
            $params = array('userid' => $userid, 'course' => $courseid, 'folderid' => $folder->id, 'readed' => 0, 'sended' => 1);
            // WHERE principal clause for filter by user and course
            $wheresql = " WHERE s.userid = :userid\n\t\t\t\t\t\t  AND s.course = :course\n\t\t\t\t\t\t  AND fm.folderid = :folderid\n\t\t\t\t\t\t  AND s.readed = :readed\n\t\t\t\t\t\t  AND s.sended = :sended";
            return $DB->count_records_sql($sql . $wheresql, $params);
        } else {
            if ($folder->isparenttype == EMAIL_DRAFT) {
                // For apply order, I've writting an sql clause
                $sql = "SELECT count(*)\n\t\t                   \tFROM {block_email_list_mail} m\n\t\t                   \tLEFT JOIN {block_email_list_foldermail} fm ON m.id = fm.mailid ";
                $params = array('userid' => $userid, 'course' => $courseid, 'folderid' => $folder->id);
                // WHERE principal clause for filter user and course
                $wheresql = " WHERE m.userid = :userid\n\t\t\t\t\t\t  AND m.course = :course\n\t\t\t\t\t\t  AND fm.folderid = :folderid";
                return $DB->count_records_sql($sql . $wheresql, $params);
            } else {
                return 0;
            }
        }
    }
}