Beispiel #1
0
        /// <summary>
        /// 해당 학생의 개인정보를 강제로 갱신합니다.
        /// </summary>
        public void GetUserInfo()
        {
            if (LoginOk == false)
            {
                return;                   // 마지막 로그인을 실패했을경우
            }
            // Account table에서 해당 유저의 정보가 있는지 확인
            MysqlNode node = new MysqlNode(GachonOption.MysqlOption, "SELECT * FROM account WHERE id = ?ID");  //수정?

            node["ID"] = ID;

            using (node.ExecuteReader())
            {
                node.Read();
                StudentNumber = node.GetString("studentnumber");

                // 바로 Database에서 얻어온 tuple 정보로 학생 정보를 저장
                if ((!String.IsNullOrEmpty(StudentNumber)) && Int32.Parse(StudentNumber) != 0)
                {
                    Name       = node.GetString("name");
                    Email      = node.GetString("email");
                    Phone      = node.GetString("phone");
                    Department = node.GetString("department");
                }
                else
                {
                    // DB에 없다면 사이버캠퍼스 홈페이지에 들어가서 유저의 정보를 읽어옴
                    HtmlDocument data = WebPacket.Web_GET_Html(Encoding.UTF8, cookie, "https://cyber.gachon.ac.kr/user/user_edit.php");
                    StudentNumber = data.DocumentNode.SelectSingleNode("//div[@class='felement fstatic']").InnerText;
                    Name          = data.GetElementbyId("id_firstname").Attributes["value"].Value;
                    Email         = data.GetElementbyId("id_email").Attributes["value"].Value;
                    Phone         = data.GetElementbyId("id_phone2").Attributes["value"].Value;
                    Department    = data.DocumentNode.SelectSingleNode("//p[@class='department']").InnerText;

                    // 읽은 후 그 정보를 Databse account 테이블에 저장해줌
                    MysqlNode insert = new MysqlNode(GachonOption.MysqlOption, "UPDATE  account SET studentnumber = ?num, name = ?name, department = ?dept" +
                                                     ",phone = ?phone , email = ?email where id = ?id ");
                    insert["id"]    = ID;
                    insert["num"]   = StudentNumber;
                    insert["name"]  = Name;
                    insert["dept"]  = Department;
                    insert["phone"] = Phone;
                    insert["email"] = Email;
                    insert.ExecuteNonQuery();
                }
            }
        }
        public HtmlDocument VisitPage(string url, Encoding encoding = null)
        {
            if (encoding == null)
            {
                encoding = Encoding.UTF8;
            }
            HtmlDocument dom = WebPacket.Web_GET_Html(encoding, cookie, url);

            if (dom == null)
            {
                throw new NoConnectPageError(url);
            }
            else
            {
                return(dom);
            }
        }
        /// <summary>
        /// 로그인 세션을 강제로 실행시킵니다.
        /// 주의: 각 함수에서 로그인 세션을 유지되는지 확인후 자동으로 실행하기때문에 따로 이 함수를 실행하지 않아도 됨.
        /// </summary>
        public void Login()
        {
            // 가천대 로그인페이지 접근 시도/ (sson.kyungwon.ac.kr)에서 세션값을 가져오는 과정(GID 오류때문에 반드시 필요)
            VisitPage("https://www.gachon.ac.kr/site/login.jsp");
            string a = WebPacket.Web_POST(cookie,
                                          "https://sson.kyungwon.ac.kr/sso/pmi-sso-login-uid-password2.jsp",
                                          "https://www.gachon.ac.kr/site/login_sso.jsp",
                                          "return_url=&uid=" + ID + "&password="******"&x=41&y=20");

            // 가천대 서버에 접속하지 못한경우 로그인 실패
            if (a == null)
            {
                return;
            }
            if (a.IndexOf("location.href='https://www.gachon.ac.kr:443/site/login.jsp'") >= 0)
            {
                // 사이버 캠퍼스에 로그인을 하면서 강의 정보 불러옴.
                HtmlDocument data = WebPacket.Web_POST_Html(cookie, "https://cyber.gachon.ac.kr/login/index.php", "https://cyber.gachon.ac.kr/login.php", "username="******"&password="******"SELECT id FROM account WHERE id = ?id");
                search_id["id"] = ID;
                bool First_Login = false;
                using (search_id.ExecuteReader())
                {
                    if (!search_id.Read())
                    {
                        MysqlNode idnode = new MysqlNode(GachonOption.MysqlOption, "INSERT INTO account (id) VALUES (?id) ");
                        idnode["id"] = ID;
                        idnode.ExecuteNonQuery();
                        First_Login = true;
                    }
                }
                if (First_Login) // 첫 접속시 수강중인 강의를 새로 등록
                {
                    List <GachonClass> need_eclass_info = new List <GachonClass>();
                    foreach (HtmlNode node in data.DocumentNode.SelectNodes("//div[@class='course_box']"))
                    {
                        JObject box   = ParseSupport.CyberCampusTitle(node.SelectSingleNode(".//div[@class='course-title']/h3").InnerText);
                        string  title = (string)box["title"];
                        string  key   = (string)box["key"];
                        lock (GachonObjects.AllClass)
                        {
                            if (!GachonObjects.AllClass.ContainsKey(key))
                            {
                                GachonClass newclass = GachonClass.GetObject(title, key, true);
                                JObject     urlq     = ParseSupport.UrlQueryParser(node.SelectSingleNode(".//a[@class='course_link']").Attributes["href"].Value);
                                newclass.CombineSite(new GachonCyberCampus(urlq["id"].ToString()));
                                need_eclass_info.Add(newclass);
                            }
                            MysqlNode insertNode = new MysqlNode(GachonOption.MysqlOption,
                                                                 "INSERT into takes_course(student_id, course_no) values (?id, ?course_no)");
                            insertNode["id"]        = ID;
                            insertNode["course_no"] = key;
                            insertNode.ExecuteNonQuery();

                            CombineClass(GachonObjects.AllClass[key]);
                        }
                    }
                    HtmlDocument eclassinfo = null;
                    if (need_eclass_info.Count > 0)
                    {
                        eclassinfo = WebPacket.Web_GET_Html(Encoding.UTF8, cookie, "http://eclass.gachon.ac.kr/index.jsp");
                    }
                    // 새로운 클래스가 생겼으니 eclass 정보를 읽어서 새로 생긴 클래스와 연결한다.
                    foreach (GachonClass newclass in need_eclass_info)
                    {
                        HtmlNode node = eclassinfo.DocumentNode.SelectSingleNode("//a[@title=" + newclass.ID + newclass.Sec_ID + "]");
                        if (node != null)
                        {
                            string e_id = ParseSupport.UrlQueryParser(node.Attributes["href"].Value)["Forum_seq"].ToString();
                            newclass.CombineSite(new GachonEClass(e_id));
                        }
                    }
                }
                else // 첫 접속이 아니면 기존 강의목록을 연결한다.
                {
                    MysqlNode search_course = new MysqlNode(GachonOption.MysqlOption, "SELECT course_no FROM takes_course WHERE student_id = ?id");
                    search_course["id"] = ID;
                    using (search_course.ExecuteReader())
                    {
                        while (search_course.Read())
                        {
                            CombineClass(GachonObjects.AllClass[search_course.GetString("course_no")]);
                        }
                    }
                }
                // 카페 도메인에도 세션을 만들어줌. 없을경우 처음 카페 접속시 리다이렉션 걸림.
                VisitPage("http://cafe.gachon.ac.kr");
                LoginOk = true;
            }
            else
            {
                LoginOk = false;
            }
        }