internal virtual IDataReader GetActivities(Transaction trans, int userId, int tenantId, int startIndex, string locale, string additionalWhereClauses, int maxActivitiesReturned)
        {
            StringBuilder sql = new StringBuilder();

            sql.AppendFormat(@"
                WITH INBOXACTIVITIES AS (
                    SELECT 
                        ROW_NUMBER() OVER (
                            ORDER BY (CASE ACT.DUE_DATE WHEN @NULLDATE THEN @LONGFUTUREDATE ELSE ACT.DUE_DATE END) ASC,
                            ACT.OPENED DESC,
                            ACT.CREATED DESC) AS ROWNUMBER,
                        ACT.ID ID, 
                        AD.LABEL LABEL, 
                        ADL.LABEL LABEL_LANG, 
                        ACT.INBOX_DETAIL INBOX_DETAIL, 
                        ACT.DUE_DATE DUE_DATE, 
                        (CASE ACT.STATUS_ID WHEN 2 THEN 1 ELSE 0 END) AS OPENED, 
                        (CASE WHEN ACT.ID > {0} THEN 0 ELSE 1 END) AS SEEN ",
                             GetTaskboxLastSeenActivitySql(GetCachedTableName(trans, Constants.EpaTaskboxSeenActivityKey)));

            GetTaskboxFromClauseSql(sql, true);
            GetTaskboxWhereClauseSql(sql, trans, false, additionalWhereClauses);

            sql.Append(@"
                )

                SELECT ID, LABEL, LABEL_LANG, INBOX_DETAIL, DUE_DATE, OPENED, SEEN
                FROM INBOXACTIVITIES
                WHERE ROWNUMBER > @STARTINDEX AND ROWNUMBER <= @ENDINDEX ");

            Command cmd = trans.CreateCommand(sql.ToString());

            cmd.CreateParameter("@USERID", DbType.Int32, userId);
            cmd.CreateParameter("@TENANTID", DbType.Int32, tenantId);
            cmd.CreateParameter("@STARTINDEX", DbType.Int32, startIndex);
            cmd.CreateParameter("@ENDINDEX", DbType.Int32, startIndex + maxActivitiesReturned);
            cmd.CreateParameter("@NULLDATE", DbType.DateTime, BuiltInFunction.NullDate());
            cmd.CreateParameter("@LONGFUTUREDATE", DbType.DateTime, BuiltInFunction.NewDate(3000, 1, 1));
            cmd.CreateParameter("@LOCALE", DbType.String, locale);
            IDataReader reader = cmd.ExecuteReader();

            return(reader);
        }
        public static void ClientCertificateGetDetails(
            HeContext heContext,
            out string cookie,
            out int flags,
            out bool isPresent,
            out string issuer,
            out bool isValid,
            out string serialNumber,
            out string serverIssuer,
            out string serverSubject,
            out string subject,
            out DateTime validFrom,
            out DateTime validUntil)
        {
            cookie        = "";
            flags         = 0;
            isPresent     = false;
            issuer        = "";
            isValid       = false;
            serialNumber  = "";
            serverIssuer  = "";
            serverSubject = "";
            subject       = "";
            validFrom     = BuiltInFunction.NullDate();
            validUntil    = BuiltInFunction.NullDate();


            {
                System.Web.HttpClientCertificate cert = System.Web.HttpContext.Current.Request.ClientCertificate;
                cookie        = cert.Cookie;
                flags         = cert.Flags;
                isPresent     = cert.IsPresent;
                issuer        = cert.Issuer;
                isValid       = cert.IsValid;
                serialNumber  = cert.SerialNumber;
                serverIssuer  = cert.ServerIssuer;
                serverSubject = cert.ServerSubject;
                subject       = cert.Subject;
                validFrom     = cert.ValidFrom;
                validUntil    = cert.ValidUntil;
            }
        }