コード例 #1
0
        private List <string> getmd5list(string user_id)
        {
            List <string> retValue = new List <string>();

            user_id = user_id.ToUpper();
            StringBuilder sb = new StringBuilder();

            sb.Append("select u.pk1 as id, u.firstname, u.lastname,u.user_id as username,s.timestamp,s.md5 ");
            sb.Append(" from sessions s ");
            sb.Append(" inner join users u on u.user_id = s.user_id ");
            sb.Append(" where upper(s.user_id) = '" + user_id + "'");
            sb.Append(" order by s.timestamp desc");
            RequesterAsync rr = new RequesterAsync(sb.ToString(), BbQuery.BbUrl, BbQuery.BbToken, true);

            Debug.WriteLine(sb.ToString());
            DataTable md5 = rr.execute();

            if (md5 != null && md5.Rows.Count > 0 && !md5.TableName.Equals("error"))
            {
                foreach (DataRow dr in md5.Rows)
                {
                    retValue.Add(dr["md5"].ToString());
                }
            }
            return(retValue);
        }
コード例 #2
0
        private string getUser(string username)
        {
            Debug.WriteLine("AT getUser check with " + username);
            string         retvalue = "";
            string         sql      = "select u.passwd from users u where u.user_id = '" + username + "'";
            RequesterAsync rr       = new RequesterAsync(sql, BbQuery.BbUrl, BbQuery.BbToken, true);
            DataTable      user     = rr.execute();

            if (user != null && user.Rows.Count > 0 && !user.TableName.Equals("error"))
            {
                retvalue = user.Rows[0]["passwd"].ToString();
            }
            Debug.WriteLine("AT getUser check with password " + retvalue);
            return(retvalue);
        }
コード例 #3
0
ファイル: PRUtility.cs プロジェクト: pheisen/EACDM-Utility
        public static void Modify(string BbUrl, string token, int qdpk1)
        {
            // get students - active
            StringBuilder sql = new StringBuilder();

            sql.Append("select u.firstname,u.lastname,u.user_id,cu.users_pk1 ");
            sql.Append("from qti_asi_data qd ");
            sql.Append(" inner join course_users cu on cu.crsmain_pk1 = qd.crsmain_pk1 ");
            sql.Append(" inner join users u on u.pk1 = cu.users_pk1 ");
            sql.Append(" where cu.role='S' and cu.available_ind = 'Y' and cu.row_status = 0 ");
            sql.Append(" and qd.pk1 = " + qdpk1.ToString());
            sql.Append(" order by u.lastname, u.firstname ");
            RequesterAsync rr = new RequesterAsync(sql.ToString(), BbUrl, token, true);

            students = rr.execute();
            multipleChoiceItem m = fromExisting(BbUrl, token, qdpk1, students);

            return;
        }
コード例 #4
0
ファイル: LoginX.cs プロジェクト: pheisen/EACDM-Utility
        /*if (ds.Tables.Count > 0)
         *          {
         *              string name = "";
         *              string firstname = "";
         *              string lastname = "";
         *              string username = "";
         *              if (ds.Tables.Contains("user"))
         *              {
         *                  DataTable user = ds.Tables["user"];
         *                  id = Convert.ToInt32(user.Rows[0]["id"]);
         *                  firstname = user.Rows[0]["firstname"].ToString();
         *                  lastname = user.Rows[0]["lastname"].ToString();
         *                  name = user.Rows[0]["firstname"].ToString() + " " + user.Rows[0]["lastname"];
         *                  username = user.Rows[0]["username"].ToString();
         *
         *              }
         *              if (!firstname.Equals("") && !lastname.Equals("")
         *                  && (!lastname.ToUpper().Equals("GUEST")) && (!username.ToUpper().Equals("GUEST")))
         *              {
         *
         *                  retValue = true;
         *                  BbQuery.BbLoginString = name + " logged in.";
         *                  BbQuery.BbLoggedInName = name;
         *                  BbQuery.BbloggedIn = true;
         *                  BbQuery.BbInstructor_id = id;
         *                  BbQuery.BbUsername = username;
         *              }
         *          }*/
        private bool Check(string user_id, string session_id)
        {
            bool retValue = false;

            BbQuery.getBbParams();

            user_id = user_id.ToUpper();
            StringBuilder sb = new StringBuilder();

            sb.Append("select u.pk1 as id, u.firstname, u.lastname,u.user_id as username ");
            sb.Append(" from sessions s ");
            sb.Append(" inner join users u on u.user_id = s.user_id ");
            sb.Append(" where upper(s.user_id) = '" + user_id + "' and s.md5 = '" + session_id + "' ");
            RequesterAsync rr   = new RequesterAsync(sb.ToString(), BbQuery.BbUrl, BbQuery.BbToken, true);
            DataTable      user = rr.execute();

            if (user != null && user.Rows.Count > 0)
            {
                string name      = "";
                string firstname = "";
                string lastname  = "";
                string username  = "";

                id        = Convert.ToInt32(user.Rows[0]["id"]);
                firstname = user.Rows[0]["firstname"].ToString();
                lastname  = user.Rows[0]["lastname"].ToString();
                name      = user.Rows[0]["firstname"].ToString() + " " + user.Rows[0]["lastname"];
                username  = user.Rows[0]["username"].ToString();
                if (!firstname.Equals("") && !lastname.Equals("") &&
                    (!lastname.ToUpper().Equals("GUEST")) && (!username.ToUpper().Equals("GUEST")))
                {
                    retValue = true;
                    BbQuery.BbLoginString   = name + " logged in.";
                    BbQuery.BbLoggedInName  = name;
                    BbQuery.BbloggedIn      = true;
                    BbQuery.BbInstructor_id = id;
                    BbQuery.BbUsername      = username;
                }
            }

            return(retValue);
        }
コード例 #5
0
        private void btnGo_Click(object sender, EventArgs e)
        {
            XElement[] rows = schools.Elements("schools").ToArray();
            for (int i = 0; i < rows.Length; i++)
            {
                tbMemo.AppendText(rows[i].Element("schoolname").Value + Environment.NewLine);
                // get urls
                scheme = "http";
                port   = 80;
                if (rows[i].Element("port").Value.Equals("81"))
                {
                    port = 81;
                }
                host       = rows[i].Element("host").Value;
                pluginStem = rows[i].Element("pluginstem").Value;
                initBbUrl();
                tbMemo.AppendText(BbUrl + Environment.NewLine);
                token = getToken(checkUrl);
                tbMemo.AppendText(token + Environment.NewLine);
                if (!token.Equals("EAC"))
                {
                    RequesterAsync rr = new RequesterAsync(userSql, BbUrl, token, true);
                    DataTable      dt = rr.execute();
                    if (dt != null && dt.Rows.Count > 0 && !dt.TableName.Equals("error"))
                    {
                        string user_id = dt.Rows[0]["user_id"].ToString();
                        string passwd  = dt.Rows[0]["passwd"].ToString();
                        tbMemo.AppendText(user_id + " " + passwd + Environment.NewLine);
                        cc = new CookieContainer();
                        for (int j = 0; j < 4; j++)
                        {
                            tbMemo.AppendText(Login(user_id, passwd, j) + Environment.NewLine);
                        }
                    }
                }

                //    get username & password
                // try login & out
            }
        }
コード例 #6
0
        private bool Check(string user_id, string session_id, bool special)
        {
            bool   retValue   = false;
            string currentUrl = null;

            if (!special)
            {
                // DateTime current = DateTime.Now.Add(BbQuery.BbServerTimeSpan);
                Debug.WriteLine("At CHECK");
                Debug.WriteLine("session_id at check = " + session_id);
                user_id = user_id.ToUpper();
                StringBuilder sb = new StringBuilder();
                if (false && BbQuery.BbUrl.Contains("rccc"))
                {
                    sb.Append("select u.pk1 as id, u.firstname, u.lastname,'" + currentUrl + "' as url,u.user_id as username,s.timestamp,s.md5 ");
                }
                else
                {
                    sb.Append("select u.pk1 as id, u.firstname, u.lastname,u.user_id as username,s.timestamp,s.md5 ");
                }
                sb.Append(" from sessions s ");
                sb.Append(" inner join users u on u.user_id = s.user_id ");
                if (!(BbQuery.BbUrl.Contains("cuny") || BbQuery.BbUrl.Contains("gtc")))
                {
                    sb.Append(" where upper(s.user_id) = '" + user_id + "'");
                }
                else
                {
                    sb.Append(" where md5 = '" + session_id + "'");
                }

                sb.Append(" order by s.timestamp desc");
                RequesterAsync rr = new RequesterAsync(sb.ToString(), BbQuery.BbUrl, BbQuery.BbToken, true);
                Debug.WriteLine(sb.ToString());
                DataTable user = rr.execute();
                if (user != null && user.Rows.Count > 0 && !user.TableName.Equals("error"))
                {
                    bool    timeok = false;
                    DataRow lr     = null;
                    foreach (DataRow dr in user.Rows)
                    {
                        timeok = false;
                        DateTime lg      = Convert.ToDateTime(user.Rows[0]["timestamp"]);
                        DateTime current = DateTime.Now.Add(BbQuery.BbServerTimeSpan);
                        Debug.WriteLine("Login time: " + lg.ToLongTimeString());
                        Debug.WriteLine("Current: " + current.ToLongTimeString());
                        Debug.WriteLine("BbQuery.TimeSpan: " + BbQuery.BbServerTimeSpan.TotalSeconds.ToString());
                        Debug.WriteLine("session_id passes = " + session_id + " md5 found = " + dr["md5"].ToString());
                        TimeSpan diff = new TimeSpan(current.Ticks - lg.Ticks);
                        Debug.WriteLine("diff.TotalSeconds: " + diff.TotalSeconds.ToString());
                        double difference = 90.0F;
                        if (diff.TotalSeconds < difference || -diff.TotalSeconds > -difference)
                        {
                            timeok = true;
                            lr     = dr;
                            break;
                        }
                        else
                        {
                            if (BbQuery.BbUrl.Contains("rccc"))
                            {
                                // wb.Url = new Uri(currentUrl);
                                //inCheck = false;
                                //return retValue;
                            }
                            Cookie c = new Cookie("session_id", dr["md5"].ToString());
                            BbQuery.cc = new CookieContainer();
                            BbQuery.cc.Add(new Uri(authUrl), c);
                        }
                    }
                    //TimeSpan diff = TimeSpan.
                    if (timeok)
                    {
                        string name      = "";
                        string firstname = "";
                        string lastname  = "";
                        string username  = "";
                        id        = Convert.ToInt32(lr["id"]);
                        firstname = lr["firstname"].ToString();
                        lastname  = lr["lastname"].ToString();
                        name      = lr["firstname"].ToString() + " " + lr["lastname"];
                        username  = lr["username"].ToString();
                        if (!firstname.Equals("") && !lastname.Equals("") &&
                            (!lastname.ToUpper().Equals("GUEST")) && (!username.ToUpper().Equals("GUEST")))
                        {
                            retValue = true;
                            wb.Stop();



                            BbQuery.BbLoginString = name + " logged in.";
                            Debug.WriteLine(BbQuery.BbLoginString);
                            BbQuery.BbLoggedInName  = name;
                            BbQuery.BbloggedIn      = true;
                            BbQuery.BbInstructor_id = id;
                            BbQuery.BbUsername      = username;
                            Cookie c = null;
                            if (BbQuery.BbUrl.Contains("rccc"))
                            {
                                c = new Cookie("session_id", lr["md5"].ToString());
                            }
                            else
                            {
                                c = new Cookie("session_id", lr["md5"].ToString());
                            }
                            BbQuery.cc = new CookieContainer();
                            BbQuery.cc.Add(new Uri(authUrl), c);
                            Debug.WriteLine("LoginXP session cookie = " + BbQuery.cc.GetCookieHeader(new Uri(authUrl)));
                        }
                    }
                }
            }
            else
            {
                DateTime current = DateTime.Now.Add(BbQuery.BbServerTimeSpan);
                Debug.WriteLine("At Special  CHECK");
                // Debug.WriteLine("session_id at check = " + session_id);
                StringBuilder sb = new StringBuilder();
                sb.Append("select u.pk1 as id, u.firstname, u.lastname,u.user_id as username ");
                sb.Append(" from users u ");
                sb.Append(" where u.user_id = '" + user_id + "'");
                RequesterAsync rr = new RequesterAsync(sb.ToString(), BbQuery.BbUrl, BbQuery.BbToken, true);
                Debug.WriteLine(sb.ToString());
                DataTable user = rr.execute();
                if (user != null && user.Rows.Count > 0 && !user.TableName.Equals("error"))
                {
                    foreach (DataRow dr in user.Rows)
                    {
                        string name      = "";
                        string firstname = "";
                        string lastname  = "";
                        string username  = "";
                        id        = Convert.ToInt32(dr["id"]);
                        firstname = dr["firstname"].ToString();
                        lastname  = dr["lastname"].ToString();
                        name      = dr["firstname"].ToString() + " " + dr["lastname"];
                        username  = dr["username"].ToString();
                        if (!firstname.Equals("") && !lastname.Equals("") &&
                            (!lastname.ToUpper().Equals("GUEST")) && (!username.ToUpper().Equals("GUEST")))
                        {
                            retValue = true;

                            BbQuery.BbLoginString = name + " logged in.";
                            Debug.WriteLine(BbQuery.BbLoginString);
                            BbQuery.BbLoggedInName  = name;
                            BbQuery.BbloggedIn      = true;
                            BbQuery.BbInstructor_id = id;
                            BbQuery.BbUsername      = username;
                            Cookie c = null;
                        }
                    }
                }
            }

            return(retValue);
        }
コード例 #7
0
        private void getSession_id(string username)
        {
            Debug.WriteLine("at getSession_id with clicked = " + clicked.ToString());
            int            retValue = 0;
            string         sql      = "select s.session_id from sessions s where upper(s.user_id) = '" + username.ToUpper() + "' order by session_id desc";
            RequesterAsync rr       = new RequesterAsync(sql, BbQuery.BbUrl, BbQuery.BbToken, true);
            DataTable      sess     = rr.execute();

            if (sess != null && sess.Rows.Count > 0 && !sess.TableName.Equals("error"))
            {
                retValue = Convert.ToInt32(sess.Rows[0]["session_id"]);
            }
            if (retValue != session_id && clicked == 0)
            {
                session_id = retValue;
            }
            else
            {
                StringBuilder sb = new StringBuilder();
                sb.Append("select u.pk1 as id, u.firstname, u.lastname,u.user_id as username,s.timestamp,s.md5 ");
                sb.Append(" from sessions s ");
                sb.Append(" inner join users u on u.user_id = s.user_id ");
                sb.Append(" where session_id =" + retValue.ToString());
                rr = new RequesterAsync(sb.ToString(), BbQuery.BbUrl, BbQuery.BbToken, true);
                Debug.WriteLine(sb.ToString());
                DataTable user = rr.execute();
                if (user != null && user.Rows.Count > 0 && !user.TableName.Equals("error"))
                {
                    DataRow  dr      = user.Rows[0];
                    DateTime lg      = Convert.ToDateTime(dr["timestamp"]);
                    DateTime current = DateTime.Now.Add(BbQuery.BbServerTimeSpan);
                    Debug.WriteLine("Login time: " + lg.ToLongTimeString());
                    Debug.WriteLine("Current: " + current.ToLongTimeString());
                    Debug.WriteLine("BbQuery.TimeSpan: " + BbQuery.BbServerTimeSpan.TotalSeconds.ToString());
                    Debug.WriteLine("session_id passes = " + session_id + " md5 found = " + dr["md5"].ToString());
                    TimeSpan diff = new TimeSpan(current.Ticks - lg.Ticks);
                    Debug.WriteLine("diff.TotalSeconds: " + diff.TotalSeconds.ToString());
                    Cookie c = new Cookie("session_id", dr["md5"].ToString());
                    BbQuery.cc = new CookieContainer();
                    BbQuery.cc.Add(new Uri(authUrl), c);
                    string name      = "";
                    string firstname = "";
                    string lastname  = "";
                    id        = Convert.ToInt32(dr["id"]);
                    firstname = dr["firstname"].ToString();
                    lastname  = dr["lastname"].ToString();
                    name      = dr["firstname"].ToString() + " " + dr["lastname"];
                    username  = dr["username"].ToString();
                    wb.Stop();
                    BbQuery.BbLoginString = name + " logged in.";
                    Debug.WriteLine(BbQuery.BbLoginString);
                    BbQuery.BbLoggedInName  = name;
                    BbQuery.BbloggedIn      = true;
                    BbQuery.BbInstructor_id = id;
                    BbQuery.BbUsername      = username;
                    Debug.WriteLine("LoginXP session cookie = " + BbQuery.cc.GetCookieHeader(new Uri(authUrl)));
                    // success
                    Debug.WriteLine("Success");
                    wb.Stop();
                    btnCancel_Click(this, new EventArgs());
                }
            }
        }
コード例 #8
0
ファイル: PRUtility.cs プロジェクト: pheisen/EACDM-Utility
        public static multipleChoiceItem fromExisting(string BbUrl, string token, int qdpk1, DataTable students)
        {
            bool               doHex = false;
            DataTable          theData;
            string             theXml   = null;
            int                row      = 0;
            multipleChoiceItem retValue = null;
            multipleChoiceItem mc       = null;
            StringBuilder      sql      = new StringBuilder();

            sql.Append("select qd.data ");
            sql.Append("from qti_asi_data qd ");

            sql.Append(" where qd.pk1 = " + qdpk1.ToString());
            RequesterAsync rr = new RequesterAsync(sql.ToString(), BbUrl, token, true);

            theData = rr.execute();
            if (theData != null && !theData.TableName.Equals("error"))
            {
                string data = theData.Rows[0]["data"].ToString();
                if (!data.StartsWith("P"))
                {
                    doHex = true;
                }
                theXml = BbQuery.getStringFromData(data);
            }
            if (!String.IsNullOrEmpty(theXml))
            {
                theXml = theXml.Replace("<item ", "<multipleChoiceItem ").Replace("</item>", "</multipleChoiceItem>");
                mc     = multipleChoiceItem.Parse(theXml);
            }

            var names = mc.presentation.flow.flow.Where(t => [email protected]("RESPONSE_BLOCK"));

            foreach (var n in names)
            {
                //n.response_lid.render_choice.flow_label.
                var labels = n.response_lid.render_choice.flow_label;
                foreach (var l in labels)
                {
                    string stuName = students.Rows[row]["lastname"].ToString() + ", " + students.Rows[row]["firstname"].ToString() + " (" + students.Rows[row]["user_id"].ToString() + ")";
                    row++;
                    l.response_label.flow_mat.material.mat_extension.mat_formattedtext.TypedValue = stuName;
                    l.response_label.ident = QTIUtility.Utilities.Md5HashUtilityUTF8(stuName).ToLower();
                }
                multipleChoiceItem.presentationLocalType.flowLocalType.flowLocalType1.response_lidLocalType.render_choiceLocalType.flow_labelLocalType m = new multipleChoiceItem.presentationLocalType.flowLocalType.flowLocalType1.response_lidLocalType.render_choiceLocalType.flow_labelLocalType();
                if (row < students.Rows.Count)
                {
                    // multipleChoiceItem.presentationLocalType.flowLocalType.flowLocalType1.response_lidLocalType.render_choiceLocalType.flow_labelLocalType m = new multipleChoiceItem.presentationLocalType.flowLocalType.flowLocalType1.response_lidLocalType.render_choiceLocalType.flow_labelLocalType();
                    string stuName = students.Rows[row]["lastname"].ToString() + ", " + students.Rows[row]["firstname"].ToString() + " (" + students.Rows[row]["user_id"].ToString() + ")";
                    m.@class                           = "Block";
                    m.response_label                   = new multipleChoiceItem.presentationLocalType.flowLocalType.flowLocalType1.response_lidLocalType.render_choiceLocalType.flow_labelLocalType.response_labelLocalType();
                    m.response_label.ident             = QTIUtility.Utilities.Md5HashUtilityUTF8(stuName).ToLower();
                    m.response_label.shuffle           = "Yes";
                    m.response_label.rarea             = "Ellipse";
                    m.response_label.rrange            = "Exact";
                    m.response_label.flow_mat          = new multipleChoiceItem.presentationLocalType.flowLocalType.flowLocalType1.response_lidLocalType.render_choiceLocalType.flow_labelLocalType.response_labelLocalType.flow_matLocalType();
                    m.response_label.flow_mat.@class   = "FORMATTED_TEXT_BLOCK";
                    m.response_label.flow_mat.material = new multipleChoiceItem.presentationLocalType.flowLocalType.flowLocalType1.response_lidLocalType.render_choiceLocalType.flow_labelLocalType.response_labelLocalType.flow_matLocalType.materialLocalType();
                    m.response_label.flow_mat.material.mat_extension = new multipleChoiceItem.presentationLocalType.flowLocalType.flowLocalType1.response_lidLocalType.render_choiceLocalType.flow_labelLocalType.response_labelLocalType.flow_matLocalType.materialLocalType.mat_extensionLocalType();
                    m.response_label.flow_mat.material.mat_extension.mat_formattedtext            = new multipleChoiceItem.presentationLocalType.flowLocalType.flowLocalType1.response_lidLocalType.render_choiceLocalType.flow_labelLocalType.response_labelLocalType.flow_matLocalType.materialLocalType.mat_extensionLocalType.mat_formattedtextLocalType();
                    m.response_label.flow_mat.material.mat_extension.mat_formattedtext.TypedValue = stuName;
                    //<mat_formattedtext type="HTML">Boxer, Barbara (barb)</mat_formattedtext>
                    m.response_label.flow_mat.material.mat_extension.mat_formattedtext.type = "HTML";
                    n.response_lid.render_choice.flow_label.Add(m);
                    row++;
                }
                while (row < students.Rows.Count)
                {
                    multipleChoiceItem.presentationLocalType.flowLocalType.flowLocalType1.response_lidLocalType.render_choiceLocalType.flow_labelLocalType mcc = (multipleChoiceItem.presentationLocalType.flowLocalType.flowLocalType1.response_lidLocalType.render_choiceLocalType.flow_labelLocalType)m.Clone();
                    string stuName = students.Rows[row]["lastname"].ToString() + ", " + students.Rows[row]["firstname"].ToString() + " (" + students.Rows[row]["user_id"].ToString() + ")";
                    mcc.response_label.ident = QTIUtility.Utilities.Md5HashUtilityUTF8(stuName).ToLower();
                    n.response_lid.render_choice.flow_label.Add(mcc);
                    row++;
                }
            }
            row = 0;
            var    vcorrect = mc.resprocessing.respcondition.Where(t => t.title.Equals("correct")).FirstOrDefault().conditionvar.varequal;
            string thisName = students.Rows[row]["lastname"].ToString() + ", " + students.Rows[row]["firstname"].ToString() + " (" + students.Rows[row]["user_id"].ToString() + ")";

            vcorrect.TypedValue = QTIUtility.Utilities.Md5HashUtilityUTF8(thisName).ToLower();
            vcorrect.respident  = "response";
            //<respcondition title="correct">
            var resps = mc.resprocessing.respcondition.Where(t => t.conditionvar != null && String.IsNullOrEmpty(t.title));

            /*<respcondition title="correct">
             * <conditionvar>
             * <varequal respident="response" case="No">0e1fffe32c27424094f9e85c12c55bfb</varequal>
             * </conditionvar>
             * <setvar variablename="SCORE" action="Set">SCORE.max</setvar>
             * <displayfeedback linkrefid="correct" feedbacktype="Response"/>
             * </respcondition>*/

            /*<respcondition>
             * <conditionvar>
             * <varequal respident="55394393588c4bb5927a67b4f0846048" case="No"/>
             * </conditionvar>
             * <setvar variablename="SCORE" action="Set">100</setvar>
             * <displayfeedback linkrefid="55394393588c4bb5927a67b4f0846048" feedbacktype="Response"/>
             * </respcondition>*/
            foreach (var r in resps)
            {
                if (r.conditionvar.varequal == null)
                {
                    continue;
                }
                string stuName = students.Rows[row]["lastname"].ToString() + ", " + students.Rows[row]["firstname"].ToString() + " (" + students.Rows[row]["user_id"].ToString() + ")";
                r.conditionvar.varequal.respident = QTIUtility.Utilities.Md5HashUtilityUTF8(stuName).ToLower();
                r.displayfeedback.linkrefid       = QTIUtility.Utilities.Md5HashUtilityUTF8(stuName).ToLower();
                row++;
            }
            while (row < students.Rows.Count)
            {
                string stuName = students.Rows[row]["lastname"].ToString() + ", " + students.Rows[row]["firstname"].ToString() + " (" + students.Rows[row]["user_id"].ToString() + ")";
                multipleChoiceItem.resprocessingLocalType.respconditionLocalType res = new multipleChoiceItem.resprocessingLocalType.respconditionLocalType();
                res.conditionvar                    = new multipleChoiceItem.resprocessingLocalType.respconditionLocalType.conditionvarLocalType();
                res.conditionvar.varequal           = new multipleChoiceItem.resprocessingLocalType.respconditionLocalType.conditionvarLocalType.varequalLocalType();
                res.conditionvar.varequal.respident = QTIUtility.Utilities.Md5HashUtilityUTF8(stuName).ToLower();
                res.conditionvar.varequal.@case     = "No";
                res.setvar = new multipleChoiceItem.resprocessingLocalType.respconditionLocalType.setvarLocalType();
                res.setvar.variablename          = "SCORE";
                res.setvar.action                = "Set";
                res.setvar.TypedValue            = "0.0";
                res.displayfeedback              = new multipleChoiceItem.resprocessingLocalType.respconditionLocalType.displayfeedbackLocalType();
                res.displayfeedback.linkrefid    = QTIUtility.Utilities.Md5HashUtilityUTF8(stuName).ToLower();
                res.displayfeedback.feedbacktype = "Response";
                mc.resprocessing.respcondition.Add(res);
                row++;
            }

            row = 0;

            /*should have
             * <itemfeedback ident="correct" view="All">
             * <flow_mat class="Block">
             * <flow_mat class="FORMATTED_TEXT_BLOCK">
             * <material>
             *  <mat_extension>
             *    <mat_formattedtext type="HTML"/>
             *  </mat_extension>
             * </material>
             * </flow_mat>
             * </flow_mat>
             * </itemfeedback>
             * <itemfeedback ident="incorrect" view="All">
             * <flow_mat class="Block">
             * <flow_mat class="FORMATTED_TEXT_BLOCK">
             * <material>
             *  <mat_extension>
             *    <mat_formattedtext type="HTML"/>
             *  </mat_extension>
             * </material>
             * </flow_mat>
             * </flow_mat>
             * </itemfeedback>
             */
            var itf = mc.itemfeedback.Where(t => !t.ident.Contains("correct"));

            foreach (var itp in itf)
            {
                string stuName = students.Rows[row]["lastname"].ToString() + ", " + students.Rows[row]["firstname"].ToString() + " (" + students.Rows[row]["user_id"].ToString() + ")";
                itp.ident = QTIUtility.Utilities.Md5HashUtilityUTF8(stuName).ToLower();
                row++;
            }

            /*
             * <itemfeedback ident="0e1fffe32c27424094f9e85c12c55bfb" view="All">
             * <solution view="All" feedbackstyle="Complete">
             * <solutionmaterial>
             * <flow_mat class="Block">
             *  <flow_mat class="FORMATTED_TEXT_BLOCK">
             *    <material>
             *      <mat_extension>
             *        <mat_formattedtext type="HTML"/>
             *      </mat_extension>
             *    </material>
             *  </flow_mat>
             * </flow_mat>
             * </solutionmaterial>
             * </solution>
             * </itemfeedback>
             *
             * <itemfeedback ident="55394393588c4bb5927a67b4f0846048" view="All">
             * <solution view="All" feedbackstyle="Complete">
             * <solutionmaterial>
             * <flow_mat class="Block">
             * <flow_mat class="FORMATTED_TEXT_BLOCK">
             * <material>
             * <mat_extension>
             * <mat_formattedtext type="HTML"/>
             * </mat_extension>
             * </material>
             * </flow_mat>
             * </flow_mat>
             * </solutionmaterial>
             * </solution>
             * </itemfeedback>*/
            multipleChoiceItem.itemfeedbackLocalType it = null;
            if (row < students.Rows.Count)
            {
                it      = new multipleChoiceItem.itemfeedbackLocalType();
                it.view = "All";
                string stuName = students.Rows[row]["lastname"].ToString() + ", " + students.Rows[row]["firstname"].ToString() + " (" + students.Rows[row]["user_id"].ToString() + ")";
                it.ident                                                = QTIUtility.Utilities.Md5HashUtilityUTF8(stuName).ToLower();
                it.solution                                             = new multipleChoiceItem.itemfeedbackLocalType.solutionLocalType();
                it.solution.view                                        = "All";
                it.solution.feedbackstyle                               = "Complete";
                it.solution.solutionmaterial                            = new multipleChoiceItem.itemfeedbackLocalType.solutionLocalType.solutionmaterialLocalType();
                it.solution.solutionmaterial.flow_mat                   = new multipleChoiceItem.itemfeedbackLocalType.solutionLocalType.solutionmaterialLocalType.flow_matLocalType();
                it.solution.solutionmaterial.flow_mat.@class            = "Block";
                it.solution.solutionmaterial.flow_mat.flow_mat          = new multipleChoiceItem.itemfeedbackLocalType.solutionLocalType.solutionmaterialLocalType.flow_matLocalType.flow_matLocalType1();
                it.solution.solutionmaterial.flow_mat.flow_mat.@class   = "FORMATTED_TEXT_BLOCK";
                it.solution.solutionmaterial.flow_mat.flow_mat.material = new multipleChoiceItem.itemfeedbackLocalType.solutionLocalType.solutionmaterialLocalType.flow_matLocalType.flow_matLocalType1.materialLocalType();
                it.solution.solutionmaterial.flow_mat.flow_mat.material.mat_extension = new multipleChoiceItem.itemfeedbackLocalType.solutionLocalType.solutionmaterialLocalType.flow_matLocalType.flow_matLocalType1.materialLocalType.mat_extensionLocalType();
                it.solution.solutionmaterial.flow_mat.flow_mat.material.mat_extension.mat_formattedtext      = new multipleChoiceItem.itemfeedbackLocalType.solutionLocalType.solutionmaterialLocalType.flow_matLocalType.flow_matLocalType1.materialLocalType.mat_extensionLocalType.mat_formattedtextLocalType();
                it.solution.solutionmaterial.flow_mat.flow_mat.material.mat_extension.mat_formattedtext.type = "HTML";
                mc.itemfeedback.Add(it);
                row++;
            }
            while (row < students.Rows.Count)
            {
                multipleChoiceItem.itemfeedbackLocalType itc = (multipleChoiceItem.itemfeedbackLocalType)it.Clone();
                string stuName = students.Rows[row]["lastname"].ToString() + ", " + students.Rows[row]["firstname"].ToString() + " (" + students.Rows[row]["user_id"].ToString() + ")";
                itc.ident = QTIUtility.Utilities.Md5HashUtilityUTF8(stuName).ToLower();
                mc.itemfeedback.Add(itc);
                row++;
            }

            StringBuilder xm = new StringBuilder();
            XmlWriter     xr = XmlWriter.Create(xm);

            mc.Save(xr);
            xr.Flush();
            xr.Close();
            string ix = xm.ToString();

            ix = ix.Replace("<multipleChoiceItem ", "<item ").Replace("</multipleChoiceItem>", "</item>");
            ix = ix.Replace("<?xml version=\"1.0\" encoding=\"utf-16\"?>", "<?xml version=\"1.0\" encoding=\"UTF-8\"?>");

            //xm.Length = 0;
            //xm.Append(ix);
            string xmf = String.Empty;

            byte[] b = UTF8Encoding.UTF8.GetBytes(ix);
            if (doHex)
            {
                xmf = BitConverter.ToString(b).Replace("-", string.Empty);
            }
            else
            {
                xmf = Convert.ToBase64String(b);
            }

            sql.Length = 0;
            sql.Append("update qti_asi_data set ");
            sql.Append("data =cast('" + ix + "' AS varbinary(max))");

            sql.Append(" where pk1 = " + qdpk1.ToString());
            string theSql = sql.ToString();

            rr       = new RequesterAsync(theSql, BbUrl, token, true);
            theData  = rr.execute();
            retValue = mc;
            return(retValue);
        }