UniverseUniversity


Home Projects Jobs Clientele Contact

uu


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: UU code



Attached is trunk0305.diff file with the latest UU code.

Currently there are 3 working pages:
Registration: CspServletthemes_RegistrationView_csp
Login:        CspServletthemes_LoginView_csp
Home:         CspServletthemes_HomeView_csp
You can browse them using top header bar, you can try to register, login.
There is some error handling(stored procedures are not ready yet, I used
my own queries), some functions will be rewritten later to make them more
generic.
There are some short comments in the code. After successful
login/registration session parameters set to HttpSession, but
UUServlet::isUserLoggedIn() function is not working properly yet.
Currently I open DB connection in each Model class operation, it will be
changed later. Note that DSN string is hardcoded in User.cpp.
Index: libui/RegisterServlet.h
===================================================================
--- libui/RegisterServlet.h	(revision 0)
+++ libui/RegisterServlet.h	(revision 0)
@@ -0,0 +1,45 @@
+#ifndef REGISTERSERVLET_H
+#define REGISTERSERVLET_H
+
+#include <string>
+
+#include <servlet/ServletConfig.h>
+#include <servlet/HttpServletRequest.h>
+#include <servlet/HttpServletResponse.h>
+#include <servlet/RequestDispatcher.h>
+#include <servlet/HttpServlet.h>
+
+#include <boost/lexical_cast.hpp>
+#include "../libdm/User.h"
+#include "UUServlet.h"
+
+using boost::lexical_cast;
+using namespace std;
+using namespace servlet;
+
+
+/**
+This servlet: 
+
+  Receives registration request.
+  Accesses User model object. 
+  Stores results in request context.
+  Determines the language to render page in based on user preferences.
+  Forwards the request to the view object (HomeView.csp) if no errors.
+
+*/
+
+class RegisterServlet : public UUServlet
+{
+private:  
+  typedef User uu;
+  typedef pair<bool, string> procPair;
+
+  procPair process(HttpServletRequest& request, HttpServletResponse &response);
+public:
+  void service(HttpServletRequest& request, HttpServletResponse &response);
+
+};
+
+#endif//REGISTERSERVLET_H
+

   
Index: libui/UUServlet.cpp
===================================================================
--- libui/UUServlet.cpp	(revision 0)
+++ libui/UUServlet.cpp	(revision 0)
@@ -0,0 +1,106 @@
+#include "UUServlet.h"
+
+using namespace std;
+using namespace servlet;
+
+// Constructors/Destructors
+//  
+
+UUServlet::UUServlet ( ) { }
+
+UUServlet::~UUServlet ( ) { }
+
+
+void UUServlet::doGet(HttpServletRequest& req, HttpServletResponse& resp) {
+  string csp;
+  string cspRefer;
+    try{
+      csp = req.getAttribute<string>("csp");
+      cspRefer = req.getAttribute<string>("cspRefer");
+      cout<<"\n Inside of UUServlet................CSP = "<<csp<<"\n";
+      cout<<"\n REFERER CSP = "<<cspRefer<<"\n";
+    }catch(const exception& ex){
+        req.setAttribute<string>("error",ex.what());
+    }
+    bool isValid = isUserLoggedIn(req);
+    //isValid=false;
+    // Here I need to exclude pages like Login and Registration from validation, these pages should be accessed without logging in.
+
+    if(!isValid && cspRefer != "CspServletthemes_LoginView_csp" && cspRefer != "CspServletthemes_RegistrationView_csp") {
+      redirectToLogin(req, resp);
+    } else {
+      req.getRequestDispatcher(csp)->forward(req,resp);
+    }
+}
+
+
+//void UUServlet::doPost(HttpServletRequest& req, HttpServletResponse& resp, string& csp, attr_map) {
+//  attr_map attributes;
+//  doGet(req, resp, csp, attributes);
+//}
+
+
+/**
+ * Returns true if the request already has valid associated session, and that
+ * session contains valid User object
+ * @return bool
+ * @param  req Request to check
+ */
+bool UUServlet::isUserLoggedIn (HttpServletRequest& req ) const {
+
+  bool hasValidLogin = false;  
+  uuUser u;
+  string loginSession;
+  string loginName = "sergey";
+
+
+  HttpSession* session = req.getSession(false);
+
+  if(session) {
+    if(session->hasAttribute("login")){
+      typedef boost::shared_ptr<string> login_t;
+      login_t log;
+      log = boost::static_pointer_cast<string>(session->getAttribute("login"));
+      loginSession = *log;
+      cout<<"\nINSIDEEEEEEEEEEEEEEEEE = "<<loginSession<<"\n";
+
+  // Call u.isLoginPasswordValid() and pass login and password from session to check if session contains valid User
+  // will be implemented later   
+
+      if(loginName == loginSession){
+	hasValidLogin = true;
+      } else {
+	hasValidLogin = false;
+      }
+    } else {
+      hasValidLogin = false;
+    }
+  } else {
+    hasValidLogin = false;
+  }
+  return hasValidLogin;
+
+}
+
+
+/**
+ * Redirects browser to login page
+ * @param  resp send redirect through this response object
+ */
+void UUServlet::redirectToLogin (HttpServletRequest& req, HttpServletResponse& resp) {
+  cout<<"\n\nRedirecting to login .....\n\n\n\n";
+  req.setAttribute<string>("Message", "Please login first!");
+  req.getRequestDispatcher("CspServletthemes_LoginView_csp")->forward(req,resp);
+}
+
+
+/**
+ * @return User
+ * @param  req
+ */
+User UUServlet::getCurrentUser (HttpServletRequest& req ) {
+  uuUser curUser;
+  return curUser;
+}
+
+

   
Index: libui/LoginServlet.h
===================================================================
--- libui/LoginServlet.h	(revision 0)
+++ libui/LoginServlet.h	(revision 0)
@@ -0,0 +1,45 @@
+#ifndef LOGINSERVLET_H
+#define LOGINSERVLET_H
+
+#include <string>
+
+#include <servlet/ServletConfig.h>
+#include <servlet/HttpServletRequest.h>
+#include <servlet/HttpServletResponse.h>
+#include <servlet/RequestDispatcher.h>
+#include <servlet/HttpServlet.h>
+
+#include <boost/lexical_cast.hpp>
+#include "../libdm/User.h"
+#include "UUServlet.h"
+
+using boost::lexical_cast;
+using namespace std;
+using namespace servlet;
+
+
+/**
+This servlet: 
+
+  Receives login request.
+  Accesses User model object. 
+  Stores results in request context.
+  Determines the language to render page in based on user preferences.
+  Forwards the request to the view object (HomeView.csp) if no errors.
+
+*/
+
+class LoginServlet : public UUServlet
+{
+private:  
+  typedef User uu;
+  typedef pair<bool, string> procPair;
+
+  procPair process(HttpServletRequest& request, HttpServletResponse &response);
+public:
+  void service(HttpServletRequest& request, HttpServletResponse &response);
+
+};
+
+#endif//LOGINSERVLET_H
+

   
Index: libui/UUServlet.h
===================================================================
--- libui/UUServlet.h	(revision 0)
+++ libui/UUServlet.h	(revision 0)
@@ -0,0 +1,71 @@
+#ifndef UUSERVLET_H
+#define UUSERVLET_H
+
+#include <servlet/ServletConfig.h>
+#include <servlet/HttpServlet.h>
+#include <servlet/HttpServletRequest.h>
+#include <servlet/HttpServletResponse.h>
+#include <servlet/RequestDispatcher.h>
+
+#include "../libdm/User.h"
+
+#include <map>
+#include <string>
+
+/**
+  * class UUServlet
+  * This is base class of all UU servlets (both CSP and standard servlets). It
+  * imlements request handling functions (doGet, doPost, etc), which derived
+  * servlets should not touch,
+  * and provides basic login & ACL management.
+  */
+
+class UUServlet : public servlet::HttpServlet
+{
+public:
+
+  /**
+   * Empty Constructor
+   */
+  UUServlet ( );
+
+  /**
+   * Empty Destructor
+   */
+  virtual ~UUServlet ( );
+
+  //  typedef std::map< std::string,std::vector<std::string> > attr_map;
+  typedef User uuUser;
+
+ public:
+    void doGet(servlet::HttpServletRequest& req, servlet::HttpServletResponse& resp); 
+
+  //  void doPost(servlet::HttpServletRequest& req, servlet::HttpServletResponse& resp, std::string& csp, attr_map); 
+
+
+  /**
+   * Returns true if the request already has valid associated session, and that
+   * session contains valid User object
+   * @return bool
+   * @param  req Request to check
+   */
+  bool isUserLoggedIn (servlet::HttpServletRequest& req ) const;
+
+
+  /**
+   * Redirects browser to login page
+   * @param  resp send redirect through this response object
+   */
+  void redirectToLogin (servlet::HttpServletRequest& req, servlet::HttpServletResponse& resp);
+
+
+  /**
+   * @return User
+   * @param  req
+   */
+  User getCurrentUser (servlet::HttpServletRequest& req );
+
+
+};
+
+#endif // UUSERVLET_H

   
Index: libui/RegisterServlet.cpp
===================================================================
--- libui/RegisterServlet.cpp	(revision 0)
+++ libui/RegisterServlet.cpp	(revision 0)
@@ -0,0 +1,67 @@
+#include "RegisterServlet.h"
+
+using boost::lexical_cast;
+using namespace std;
+using namespace servlet;
+
+
+RegisterServlet::procPair RegisterServlet::process(HttpServletRequest& request, HttpServletResponse&) {
+
+  try {
+    string login =     request.getParameter("login");
+    string password =  request.getParameter("passwd");
+    string passwordc = request.getParameter("passwdc");
+    int language =     boost::lexical_cast<int>(request.getParameter("lang"));
+    string firstName = request.getParameter("name1");
+    string lastName =  request.getParameter("name2");
+    string street =    request.getParameter("street");
+    string city =      request.getParameter("city");
+    string state =     request.getParameter("state");
+    string zip =       request.getParameter("zipcode");
+    int country = 1;//      boost::lexical_cast<int>(request.getParameter("country"));
+    string email =     request.getParameter("email");
+    string phone =     request.getParameter("phone");
+    uu uuUser;
+    bool isSuccess = uuUser.setUserInfo(login, password, language, firstName, lastName, street, city, state, zip, country, email, phone);
+    string message;
+    if(isSuccess){
+      message="Welcome new customer "+firstName+" "+lastName+"!";
+    } else {
+      message = "Login name already exist";
+    }
+    return make_pair(isSuccess, message);
+  } catch (const std::exception& ex) {
+    std::cerr<<__PRETTY_FUNCTION__<<": "<<ex.what()<<std::endl;
+    return make_pair(false, "Unknown Error");
+  }
+
+}
+
+
+void RegisterServlet::service(HttpServletRequest& request, HttpServletResponse &response) {
+
+  try{
+    pair<bool, string> p = process(request, response);
+    bool isSuccess = p.first;
+    string message = p.second;
+    request.setAttribute<string>("Message",message);
+    request.setAttribute<string>("cspRefer", "CspServletthemes_RegistrationView_csp");
+    if(!isSuccess){
+      request.setAttribute<string>("csp", "CspServletthemes_RegistrationView_csp");
+    } else {
+      // Set session parameters after successfull registration
+      request.getSession(true);
+      request.getSession()->setAttribute("login", request.getParameter("login"));
+      request.getSession()->setAttribute("password", request.getParameter("passwd"));
+      request.setAttribute<string>("csp", "CspServletthemes_HomeView_csp");
+    }
+  }catch(const exception& ex) {
+    request.setAttribute<string>("error",ex.what());
+  }
+  doGet(request, response);
+
+}
+
+
+EXPORT_SERVLET(RegisterServlet);
+

   
Index: libui/Makefile.adon
===================================================================
--- libui/Makefile.adon	(revision 82)
+++ libui/Makefile.adon	(working copy)
@@ -0,0 +1,33 @@
+## libui Makefile
+
+CPP_SERVLETS:=RegisterServlet UUServlet LoginServlet
+CSP_SERVLETS:=
+
+CSP_COMPILE:=cxxsp_compile
+LOCAL_CPPFLAGS:=-I$(ADON_CURDIR)
+
+noinst_LTLIBRARIES:=libuu
+
+noinst_HEADERS:=../libdm/User.h UUServlet.h
+
+EXTRA_DIST:=Footer.csp Header.csp Sidebar.csp
+libuu_SOURCES:=../libdm/User.cpp UUServlet.cpp
+define CSP_TMPL
+$(1)_SOURCES:=$(1).cpp
+$(1)_LDFLAGS:=-lspdb3 -lsputil3 -luu
+$(1)_DEPS:=libuu
+CLEANFILES+=$(1).cpp
+EXTRA_DIST+=$(1).csp
+noinst_LTLIBRARIES+=$(1)
+endef
+define CPP_TMPL
+$(1)_SOURCES:=$(1).cpp
+$(1)_LDFLAGS:=-lspdb3 -lsputil3 -luu
+$(1)_DEPS:=libuu
+noinst_LTLIBRARIES+=$(1)
+endef
+
+$(foreach srv,$(CSP_SERVLETS),$(eval $(call CSP_TMPL,$(srv))))
+$(foreach srv,$(CPP_SERVLETS),$(eval $(call CPP_TMPL,$(srv))))
+
+ADON_SUBDIRS:=
Index: libui/LoginServlet.cpp
===================================================================
--- libui/LoginServlet.cpp	(revision 0)
+++ libui/LoginServlet.cpp	(revision 0)
@@ -0,0 +1,56 @@
+#include "LoginServlet.h"
+
+using boost::lexical_cast;
+using namespace std;
+using namespace servlet;
+
+
+LoginServlet::procPair LoginServlet::process(HttpServletRequest& request, HttpServletResponse&) {
+
+  try {
+    string login =     request.getParameter("login");
+    string password =  request.getParameter("CustPwd");
+    uu uuUser;
+    bool isSuccess = uuUser.isLoginPasswordValid(login, password);
+    string message;
+    if(isSuccess){
+      message="Welcome returning customer!";
+    } else {
+      message = "Login/password combination is invalid";
+    }
+    return make_pair(isSuccess, message);
+  } catch (const std::exception& ex) {
+    std::cerr<<__PRETTY_FUNCTION__<<": "<<ex.what()<<std::endl;
+    return make_pair(false, "Unknown Error");
+  }
+
+}
+
+
+void LoginServlet::service(HttpServletRequest& request, HttpServletResponse &response) {
+
+  try{
+    pair<bool, string> p = process(request, response);
+    bool isSuccess = p.first;
+    string message = p.second;
+    request.setAttribute<string>("Message",message);
+    request.setAttribute<string>("cspRefer", "CspServletthemes_LoginView_csp");
+    if(!isSuccess){
+      request.setAttribute<string>("csp", "CspServletthemes_LoginView_csp");
+    } else {
+      // Set session parameters after successfull login
+      request.getSession(true);
+      request.getSession()->setAttribute("login", request.getParameter("login"));
+      request.getSession()->setAttribute("password", request.getParameter("CustPwd"));
+      request.setAttribute<string>("csp", "CspServletthemes_HomeView_csp");
+    }
+  }catch(const exception& ex) {
+    request.setAttribute<string>("error",ex.what());
+  }
+  doGet(request, response);
+
+}
+
+
+EXPORT_SERVLET(LoginServlet);
+

   
Index: engine.xml
===================================================================
--- engine.xml	(revision 0)
+++ engine.xml	(revision 0)
@@ -0,0 +1,11 @@
+<?xml version="1.0"?>
+<!--<listener protocol="tcp" host="localhost" port="9004"/>-->
+<!-- <num_threads value="1"/> -->
+<listener protocol="unix" path="/tmp/cppserv.sock"/>
+<app name="">
+    <servlet name="CspServletthemes_RegistrationView_csp" dso="./debug/themes/RegistrationView.so"/>
+    <servlet name="CspServletthemes_HomeView_csp" dso="./debug/themes/HomeView.so"/>
+    <servlet name="CspServletthemes_LoginView_csp" dso="./debug/themes/LoginView.so"/>
+    <servlet name="RegisterServlet" dso="./debug/libui/RegisterServlet.so"/>
+    <servlet name="LoginServlet" dso="./debug/libui/LoginServlet.so"/>
+</app>
Index: themes/Footer.csp
===================================================================
--- themes/Footer.csp	(revision 0)
+++ themes/Footer.csp	(revision 0)
@@ -0,0 +1,22 @@
+<%!
+/**
+ * Footer CSP
+ *
+ */
+%>
+
+
+</td>
+</tr>
+</table>
+            </TD>
+        </TR>
+    </TABLE>
+
+	    </CENTER><br>
+<P ALIGN="CENTER">
+	<font face=verdana size=1><A HREF="http://www.total-knowledge.com/copyleft.shtml"; TARGET="_new">
+	Authoright  &copy; Total Knowledge: 2001-2007</A></font>
+</P>
+</BODY>
+</HTML>
\ No newline at end of file
Index: themes/LoginView.csp
===================================================================
--- themes/LoginView.csp	(revision 0)
+++ themes/LoginView.csp	(revision 0)
@@ -0,0 +1,67 @@
+<!-- Login form view CSP -->
+
+<%@ include file="Header.csp" %>
+<%@ include file="Sidebar.csp" %>
+
+
+    <FORM ACTION="LoginServlet" METHOD="GET">
+
+            <TD ALIGN="center" valign="top" BGCOLOR="#DDEEFF"  width="83%">
+
+<% if(request.hasAttribute("Message")) { %>
+<br>
+<font face=Courier size=2 color="#FF0033""><i><%= request.getAttribute<std::string>("Message") %></i></font>
+<% } %>
+
+<!-- Content -->
+
+<table width=100% cellpadding=4 cellspacing=4 border=0>
+<tr><td></td></tr>
+<TR>
+<TD ALIGN="center">
+<font face=Courier size=3 color="#003399"><b>Enter your membership data to login</B>
+</TD>
+</TR>
+<TR>
+<TD ALIGN="center" BGCOLOR="#DDEEFF">
+<table  WIDTH="100%" bordercolor="#FF9900">
+<tr><td colspan="2">&nbsp;</td></tr>      
+<TR>
+<TD ALIGN="right">
+<font face=Courier size=2>Membership name:</font>&nbsp;
+</td>
+<td>
+<INPUT TYPE=TEXT NAME="login" VALUE="" SIZE=20 MAXLENGTH=50>
+</TD>
+</TR>
+<TR>
+<TD ALIGN="right">
+<font face=Courier size=2>Password:</font>&nbsp;
+</td>
+<td>
+<INPUT TYPE=PASSWORD NAME="CustPwd" SIZE=20 MAXLENGTH=50>
+</TD>
+</TR>
+<TR>
+<TD ALIGN="center" colspan="2">
+<BR><INPUT TYPE=SUBMIT NAME="OK" VALUE="Login" SIZE=10 style="background-color:#FFFFF8; color: #003399;">
+</TD>
+</TR>
+<tr><td colspan="2">&nbsp;</td></tr>
+<TR>
+<TD ALIGN="center" colspan="2">
+<font face=verdana size=1><A HREF="#">Forgot Password?</A></font>
+</TD>
+</TR>
+</TABLE>
+</TD>
+</TR>
+
+
+
+</table>
+
+<!-- End Content -->
+
+<%@ include file="Footer.csp" %>
+
Index: themes/HomeView.csp
===================================================================
--- themes/HomeView.csp	(revision 0)
+++ themes/HomeView.csp	(revision 0)
@@ -0,0 +1,80 @@
+<!-- Home view CSP -->
+
+<%@ include file="Header.csp" %>
+<%@ include file="Sidebar.csp" %>
+
+
+            <TD ALIGN="center" valign="top" BGCOLOR="#DDEEFF"  width="83%">
+
+
+<% if(request.hasAttribute("Message")) { %>
+<br>
+<font face=Courier size=2 color="#FF0033""><i><%= request.getAttribute<std::string>("Message") %></i></font>
+<% } %>
+
+
+<table width=100% cellpadding=4 cellspacing=4 border=0>
+<tr>
+<td valign="top" height="100" width="50%">
+<center><font face=Courier size=3 color="#003399"><b>My Courses</b></font></center><br>
+<font face=Courier size=2><A HREF="CourseEdit.html">Calculus</A></font><br>
+<font face=Courier size=2><A HREF="CourseEdit.html">Derivatives</A></font><br>
+<font face=Courier size=2><A HREF="CourseEdit.html">Math</A></font><br>
+<font face=Courier size=2><A HREF="CourseEdit.html">Trigonometry</A></font><br>
+<br>
+<center><font face=verdana size=1><A HREF="RepositoryCourses.html">View All</A></font></center>
+</td>
+</tr>
+
+<tr><td colspan=2><hr color="#99CCFF"></td></tr>
+
+<tr>
+<td valign="top" height="100">
+<center><font face=Courier size=3 color="#003399"><b>Courses I study</b></font></center><br>
+<font face=Courier size=2><A HREF="CourseView1.html">Astronomy</A></font><br>
+<!-- <font face=Courier size=2><A HREF="CourseView1.html">Geology</A></font><br> -->
+<font face=Courier size=2><A HREF="CourseView.html">Theology</A></font><br>
+<br>
+<center><font face=verdana size=1><A HREF="CatalogStudent.html">Get new course</A></font></center>
+<br>
+<br>
+<font face=verdana size=1><A HREF="StudentView.html">My info(as a student)</A></font>
+
+
+</td>
+
+</tr>
+
+<tr><td colspan=2><hr color="#99CCFF"></td></tr>
+
+
+
+<tr>
+<td valign="top" height="100">
+<center><font face=Courier size=3 color="#003399"><b>Courses I teach</b></font></center><br>
+<font face=Courier size=2><A HREF="CourseViewTeach1.html">Math</A></font><br>
+<br>
+<font face=verdana size=1><A HREF="CatalogCoursesTeach.html">Teach new course</A></font>
+<br><br>
+<br>
+<center><font face=Courier size=2 color="#003399"><b>My students</b></font></center><br>
+
+<font face=Courier size=2><A HREF="StudentView.html">Student 1 (359 points)</A></font><br>
+<font face=Courier size=2><A HREF="StudentView.html">Student 2 (412 points)</A></font><br>
+<font face=Courier size=2><A HREF="StudentView.html">Student 3 (87 points)</A></font><br>
+<font face=Courier size=2><A HREF="StudentView.html">Student 4 (210 points)</A></font><br>
+
+<br>
+
+<center><font face=verdana size=1><A HREF="ProblemsList.html">Get list of problems with outstanding solutions</A></font></center>
+<br>
+</td>
+
+</tr>
+
+<tr><td colspan=2><hr color="#99CCFF"></td></tr>
+
+
+</table>
+
+<%@ include file="Footer.csp" %>
Index: themes/RegistrationView.csp
===================================================================
--- themes/RegistrationView.csp	(revision 0)
+++ themes/RegistrationView.csp	(revision 0)
@@ -0,0 +1,137 @@
+<!-- Registration form view CSP -->
+
+<%@ include file="Header.csp" %>
+<%@ include file="Sidebar.csp" %>
+
+
+    <FORM ACTION="RegisterServlet" METHOD="GET">
+
+            <TD ALIGN="center" valign="top" BGCOLOR="#DDEEFF"  width="83%">
+
+<% if(request.hasAttribute("Message")) { %>
+<br>
+<font face=Courier size=2 color="#FF0033""><i><%= request.getAttribute<std::string>("Message") %></i></font>
+<% } %>
+
+
+<!-- Content -->
+
+<table width=100% cellpadding=4 cellspacing=4 border=0>
+<tr><td COLSPAN="2"></td></tr>
+<TR>
+<TD ALIGN="center" COLSPAN="2">
+<font face=Courier size=3 color="#003399"><b>New Membership</B>
+</TD>
+</TR>
+<tr><td COLSPAN="2"></td></tr>
+<tr><td COLSPAN="2"></td></tr>
+        <TR>
+            <TD COLSPAN="2" BGCOLOR="#DDEEFF" ALIGN="center">
+                <font face=Courier size=2>*Membership name:</FONT><BR>
+                <INPUT NAME="login"  VALUE="" SIZE=40 MAXLENGTH=40>
+            </TD>
+        </TR>
+        <TR>
+            <TD BGCOLOR="#DDEEFF" ALIGN="center">
+                <font face=Courier size=2>*Password: </FONT><br>
+                <INPUT TYPE=PASSWORD NAME="passwd" SIZE=30>
+            </FONT></TD>
+            <TD BGCOLOR="#DDEEFF" ALIGN="center"><font face=Courier size=2>
+                <font face=Courier size=2>*Password confirmation: </FONT><BR>
+                <INPUT TYPE=PASSWORD NAME="passwdc" SIZE=30>
+            </TD>
+        </TR>
+<tr><td COLSPAN="2"></td></tr>
+        <TR>
+            <TD BGCOLOR="#DDEEFF" ALIGN="center"><font face=Courier size=2>
+                *First Name:<br>
+                <INPUT NAME="name1" VALUE="" SIZE=28 MAXLENGTH=30>
+            </FONT></TD>
+            <TD COLSPAN="2" BGCOLOR="#DDEEFF" ALIGN="center"><font face=Courier size=2>
+                *Last Name:<br>
+                <INPUT NAME="name2" VALUE="" SIZE=28 MAXLENGTH=30>
+            </FONT></TD>
+        </TR>
+        <TR>
+            <TD BGCOLOR="#DDEEFF" ALIGN="center" colspan=2><font face=Courier size=2>
+                *Street:<br>
+                <INPUT NAME="street" VALUE="" SIZE=62 MAXLENGTH=50>
+            </FONT></TD>
+        </TR>
+        <TR>
+            <TD COLSPAN="2" BGCOLOR="#DDEEFF" ALIGN="center">
+                <TABLE CELLPADDING=5 CELLSPACING=1 BORDER="0">
+                    <TR>
+                        <TD BGCOLOR="#DDEEFF" ALIGN="center"><font face=Courier size=2>
+                            *City:<BR>
+                            <INPUT NAME="city" VALUE="" SIZE=18 MAXLENGTH=60>
+                        </FONT></TD>
+                        <TD BGCOLOR="#DDEEFF" ALIGN="center"><font face=Courier size=2>
+                            *State:<BR>
+		    <SELECT name="state">		                            
+                      <OPTION value="" selected >Select a State</OPTION><OPTION value="AA">Armed Forces the Americas</OPTION><OPTION value="AE">Armed Forces Europe</OPTION><OPTION value="AK">Alaska</OPTION><OPTION value="AL">Alabama</OPTION><OPTION value="AP">Armed Forces Pacific</OPTION><OPTION value="AR">Arkansas</OPTION><OPTION value="AZ">Arizona</OPTION><OPTION value="CA">California</OPTION><OPTION value="CO">Colorado</OPTION><OPTION value="CT">Connecticut</OPTION><OPTION value="DC">District of Columbia</OPTION><OPTION value="DE">Delaware</OPTION><OPTION value="FL">Florida</OPTION><OPTION value="GA">Georgia</OPTION><OPTION value="GU">Guam</OPTION><OPTION value="HI">Hawaii</OPTION><OPTION value="IA">Iowa</OPTION><OPTION value="ID">Idaho</OPTION><OPTION value="IL">Illinois</OPTION><OPTION value="IN">Indiana</OPTION><OPTION value="KS">Kansas</OPTION><OPTION value="KY">Kentucky</OPTION><OPTION value="LA">Louisiana</OPTION><OPTION value="MA">Massachusettes</OPTION><OPTION value="MD">Maryland</OPTION><OPTION value="ME">Maine</OPTION><OPTION value="MI">Michigan</OPTION><OPTION value="MN">Minnesota</OPTION><OPTION value="MO">Missouri</OPTION><OPTION value="MS">Mississippi</OPTION><OPTION value="MT">Montana</OPTION><OPTION value="NC">North Carolina</OPTION><OPTION value="ND">North Dakota</OPTION><OPTION value="NE">Nebraska</OPTION><OPTION value="NH">New Hampshire</OPTION><OPTION value="NJ">New Jersey</OPTION><OPTION value="NM">New Mexico</OPTION><OPTION value="NV">Nevada</OPTION><OPTION value="NY">New York</OPTION><OPTION value="OH">Ohio</OPTION><OPTION value="OK">Oklahoma</OPTION><OPTION value="OR">Oregon</OPTION><OPTION value="PA">Pennsylvania</OPTION><OPTION value="PR">Puerto Rico</OPTION><OPTION value="RI">Rhode Island</OPTION><OPTION value="SC">South Carolina</OPTION><OPTION value="SD">South Dakota</OPTION><OPTION value="TN">Tennessee</OPTION><OPTION value="TX">Texas</OPTION><OPTION value="UT">Utah</OPTION><OPTION value="VA">Virginia</OPTION><OPTION value="VI">Virgin Islands</OPTION><OPTION value="VT">Vermont</OPTION><OPTION value="WA">Washington</OPTION><OPTION value="WI">Wisconsin</OPTION><OPTION value="WV">West Virginia</OPTION><OPTION value="WY">Wyoming</OPTION><OPTION value="MP">Micropolynesia</OPTION><OPTION value="FM">Federated States of Micronesia</OPTION>                      
+                    </SELECT>
+                        </FONT></TD>
+                        <TD BGCOLOR="#DDEEFF" ALIGN="center"><font face=Courier size=2>
+                            *Zip Code:<BR>
+                            <INPUT NAME="zipcode" VALUE="" SIZE=12 MAXLENGTH=200>
+                        </FONT></TD>
+                    </TR>
+                </TABLE>
+            </TD>
+        </TR>
+        <TR>
+            <TD BGCOLOR="#DDEEFF" ALIGN="center"><font face=Courier size=2>
+                Country:<BR>
+
+<SELECT name="country">
+                   <OPTION value="">Select a Country</OPTION><OPTION value="US" selected >United States</OPTION><OPTION value="AF">Afghanistan</OPTION><OPTION value="AL">Albania</OPTION><OPTION value="DZ">Algeria</OPTION><OPTION value="AS">American Samoa</OPTION><OPTION value="AD">Andorra</OPTION><OPTION value="AO">Angola</OPTION><OPTION value="AV">Anguila</OPTION><OPTION value="AI">Anguilla</OPTION><OPTION value="AQ">Antarctica</OPTION><OPTION value="AG">Antigua</OPTION><OPTION value="AR">Argentina</OPTION><OPTION value="AM">Armenia</OPTION><OPTION value="AW">Aruba</OPTION><OPTION value="AU">Australia</OPTION><OPTION value="AT">Austria</OPTION><OPTION value="AZ">Azerbaidjan</OPTION><OPTION value="BS">Bahamas</OPTION><OPTION value="BH">Bahrain</OPTION><OPTION value="BD">Bangladesh</OPTION><OPTION value="BB">Barbados</OPTION><OPTION value="BY">Belarus</OPTION><OPTION value="BE">Belgium</OPTION><OPTION value="BZ">Belize</OPTION><OPTION value="BJ">Benin</OPTION><OPTION value="BM">Bermuda</OPTION><OPTION value="BT">Bhutan</OPTION><OPTION value="BO">Bolivia</OPTION><OPTION value="BA">Bosnia and Herzegovina</OPTION><OPTION value="BW">Botswnan</OPTION><OPTION value="BV">Bouvet Island</OPTION><OPTION value="BR">Brazil</OPTION><OPTION value="IO">British Indian Ocean Territory</OPTION><OPTION value="BN">Brunei Darussalam</OPTION><OPTION value="BG">Bulgaria</OPTION><OPTION value="BF">Burkina Faso</OPTION><OPTION value="BI">Burundi</OPTION><OPTION value="KH">Cambodia</OPTION><OPTION value="CM">Cameroon</OPTION><OPTION value="CA">Canada</OPTION><OPTION value="CV">Cape Verde</OPTION><OPTION value="KY">Cayman Islands</OPTION><OPTION value="CF">Central African Republic</OPTION><OPTION value="TD">Chad</OPTION><OPTION value="CL">Chile</OPTION><OPTION value="CN">China</OPTION><OPTION value="CX">Christmas Island</OPTION><OPTION value="CC">Cocos</OPTION><OPTION value="CO">Columbia</OPTION><OPTION value="KM">Comoros</OPTION><OPTION value="CG">Congo</OPTION><OPTION value="CD">Congo, Domocratic Republic</OPTION><OPTION value="CK">Cook Islands</OPTION><OPTION value="CR">Costa Rica</OPTION><OPTION value="CI">Cote D'lvoire/Ivory Coast</OPTION><OPTION value="HR">Croatia</OPTION><OPTION value="CU">Cuba</OPTION><OPTION value="CY">Cyprus</OPTION><OPTION value="CZ">Czech Republic</OPTION><OPTION value="DK">Denmark</OPTION><OPTION value="DJ">Djibouti</OPTION><OPTION value="DO">Dominican Republic</OPTION><OPTION value="DM">Domonica</OPTION><OPTION value="TP">East Timor</OPTION><OPTION value="EC">Ecuador</OPTION><OPTION value="EG">Egypt</OPTION><OPTION value="SV">EL Salvador</OPTION><OPTION value="GQ">Equatorial Guinea</OPTION><OPTION value="ER">Eritrea</OPTION><OPTION value="EE">Estonia</OPTION><OPTION value="ET">Ethiopia</OPTION><OPTION value="FK">Falkland Islands (Malvinas)</OPTION><OPTION value="FO">Faroe Islands</OPTION><OPTION value="FJ">Fiji</OPTION><OPTION value="FI">Finland</OPTION><OPTION value="FR">France</OPTION><OPTION value="GF">French Guiana</OPTION><OPTION value="PF">French Polynesia</OPTION><OPTION value="TF">French Southern Territories</OPTION><OPTION value="GA">Gabon</OPTION><OPTION value="GM">Gambia</OPTION><OPTION value="GE">Georgia</OPTION><OPTION value="DE">Germany</OPTION><OPTION value="GH">Ghana</OPTION><OPTION value="GI">Gibraltar</OPTION><OPTION value="GB">Great Britian</OPTION><OPTION value="GR">Greece</OPTION><OPTION value="GL">Greenland</OPTION><OPTION value="GD">Grenada</OPTION><OPTION value="GP">Guadelopue</OPTION><OPTION value="GT">Guatemala</OPTION><OPTION value="GN">Guinea</OPTION><OPTION value="GW">Guinea-Bissau</OPTION><OPTION value="GY">Guyana</OPTION><OPTION value="HT">Haiti</OPTION><OPTION value="HM">Heard & McDonald Islands</OPTION><OPTION value="HN">Honduras</OPTION><OPTION value="HK">Hong Kong</OPTION><OPTION value="HU">Hungary</OPTION><OPTION value="IS">Iceland</OPTION><OPTION value="IN">India</OPTION><OPTION value="ID">Indonesia</OPTION><OPTION value="IR">Iran</OPTION><OPTION value="IQ">Iraq</OPTION><OPTION value="IE">Ireland</OPTION><OPTION value="IL">Israel</OPTION><OPTION value="IT">Italy</OPTION><OPTION value="JM">Jamaica</OPTION><OPTION value="JP">Japan</OPTION><OPTION value="JO">Jordan</OPTION><OPTION value="KZ">Kazakhstan</OPTION><OPTION value="KE">Kenya</OPTION><OPTION value="KI">Kiribati</OPTION><OPTION value="KW">Kuwait</OPTION><OPTION value="KG">Kyrgyzstan</OPTION><OPTION value="LA">Laos</OPTION><OPTION value="LV">Latvia</OPTION><OPTION value="LB">Lebanon</OPTION><OPTION value="LS">Lesotho</OPTION><OPTION value="LR">Liberia</OPTION><OPTION value="LY">Libya</OPTION><OPTION value="LI">Liechtenstein</OPTION><OPTION value="LT">Lithuania</OPTION><OPTION value="LU">Luxembourg</OPTION><OPTION value="MO">Macau</OPTION><OPTION value="MK">Macedonia</OPTION><OPTION value="MG">Madagascar</OPTION><OPTION value="MW">Malawi</OPTION><OPTION value="MY">Malaysia</OPTION><OPTION value="MV">Maldives</OPTION><OPTION value="ML">Mali</OPTION><OPTION value="MT">Malta</OPTION><OPTION value="MH">Marshall Islands</OPTION><OPTION value="MQ">Martinique</OPTION><OPTION value="MR">Mauritania</OPTION><OPTION value="MU">Mauritius</OPTION><OPTION value="YT">Mayotte</OPTION><OPTION value="MX">Mexico</OPTION><OPTION value="FM">Micronesia</OPTION><OPTION value="MD">Moldova</OPTION><OPTION value="MC">Monaco</OPTION><OPTION value="MN">Mongolia</OPTION><OPTION value="MS">Montserrat</OPTION><OPTION value="MA">Morocco</OPTION><OPTION value="MZ">Mozambique</OPTION><OPTION value="MM">Myanmar</OPTION><OPTION value="NA">Namibia</OPTION><OPTION value="NR">Nauru</OPTION><OPTION value="NP">Nepal</OPTION><OPTION value="NL">Netherlands</OPTION><OPTION value="AN">Netherlands Antilles</OPTION><OPTION value="NT">Neutral Zone</OPTION><OPTION value="NC">New Caledonia</OPTION><OPTION value="NZ">New Zealand</OPTION><OPTION value="NI">Nicaragua</OPTION><OPTION value="NE">Niger</OPTION><OPTION value="NG">Nigeria</OPTION><OPTION value="NU">Niue</OPTION><OPTION value="NF">Norfolk Island</OPTION><OPTION value="KP">North Korea</OPTION><OPTION value="MP">Northern Mariana Islands</OPTION><OPTION value="NO">Norway</OPTION><OPTION value="OM">Oman</OPTION><OPTION value="PK">Pakistan</OPTION><OPTION value="PW">Palau</OPTION><OPTION value="PA">Panama</OPTION><OPTION value="PG">Papua New Guinea</OPTION><OPTION value="PY">Paraguay</OPTION><OPTION value="PE">Peru</OPTION><OPTION value="PH">Philippines</OPTION><OPTION value="PN">Pitcaim</OPTION><OPTION value="PL">Poland</OPTION><OPTION value="PT">Portugal</OPTION><OPTION value="QA">Qatar</OPTION><OPTION value="RE">Reunion</OPTION><OPTION value="RO">Romania</OPTION><OPTION value="RU">Russia</OPTION><OPTION value="RW">Rwanda</OPTION><OPTION value="GS">S Georgia & S Sandwich Islands</OPTION><OPTION value="KN">Saint Kitts & Nevis</OPTION><OPTION value="LC">Saint Lucia</OPTION><OPTION value="VC">Saint Vicent & the Grenadines</OPTION><OPTION value="WS">Samoa</OPTION><OPTION value="SM">San Marino</OPTION><OPTION value="ST">Sao Tome and Principe</OPTION><OPTION value="SA">Saudi Arabia</OPTION><OPTION value="SN">Senegal</OPTION><OPTION value="SL">Serra Leone</OPTION><OPTION value="SC">Seychelles</OPTION><OPTION value="SG">Singapore</OPTION><OPTION value="SK">Slovak Republic</OPTION><OPTION value="SI">Slovenia</OPTION><OPTION value="SB">Solomon Islands</OPTION><OPTION value="SO">Somalia</OPTION><OPTION value="ZA">South Africa</OPTION><OPTION value="KR">South Korea</OPTION><OPTION value="ES">Spain</OPTION><OPTION value="LK">Sri Lanka</OPTION><OPTION value="SH">St. Helen</OPTION><OPTION value="PM">St. Pierre & Miquelon</OPTION><OPTION value="SD">Sudan</OPTION><OPTION value="SR">Suriname</OPTION><OPTION value="SJ">Svalbard & Jan Mayen Islands</OPTION><OPTION value="SZ">Swaziland</OPTION><OPTION value="SE">Sweden</OPTION><OPTION value="CH">Switzerland</OPTION><OPTION value="SY">Syria</OPTION><OPTION value="TW">Taiwan</OPTION><OPTION value="TJ">Tajikistan</OPTION><OPTION value="TZ">Tanzania</OPTION><OPTION value="TH">Thailand</OPTION><OPTION value="TG">Togo</OPTION><OPTION value="TK">Tokelau</OPTION><OPTION value="TO">Tonga</OPTION><OPTION value="TT">Trinidad and Tobago</OPTION><OPTION value="TN">Tunisia</OPTION><OPTION value="TR">Turkey</OPTION><OPTION value="TM">Turkmenistan</OPTION><OPTION value="TC">Turks and Caicos Islands</OPTION><OPTION value="TV">Tuvalu</OPTION><OPTION value="UG">Uganda</OPTION><OPTION value="UA">Ukraine</OPTION><OPTION value="AE">United Arab Emirates</OPTION><OPTION value="UK">United Kingdom</OPTION><OPTION value="UY">Uruguay</OPTION><OPTION value="UM">US Minor Outlying Islands</OPTION><OPTION value="UZ">Uzbekistan</OPTION><OPTION value="VU">Vanuatu</OPTION><OPTION value="VA">Vatican City State</OPTION><OPTION value="VE">Venezuela</OPTION><OPTION value="VN">Vietnam</OPTION><OPTION value="VG">Virgin Islands (British)</OPTION><OPTION value="WF">Wallis and Futuna Islands</OPTION><OPTION value="EH">Western Sahara</OPTION><OPTION value="YE">Yemen</OPTION><OPTION value="YU">Yugoslavia</OPTION><OPTION value="ZR">Zaire</OPTION><OPTION value="ZM">Zambia</OPTION><OPTION value="ZW">Zimbabwe</OPTION>
+                   </SELECT>
+            </FONT></TD>
+            <TD BGCOLOR="#DDEEFF" ALIGN="center"><font face=Courier size=2>
+                *Phone:<BR>
+                <INPUT NAME="phone" VALUE="" SIZE=28 MAXLENGTH=40>
+            </FONT></TD>
+        </TR>
+        <TR VALIGN="bottom">
+            <TD BGCOLOR="#DDEEFF" ALIGN="center"><font face=Courier size=2>
+                Language:<BR>
+		<select name="lang">
+			<option value="1" selected>English</option>
+			<option value="2">Spanish</option>
+			<option value="3">Russian</option>
+			<option value="4">French</option>
+		</select>
+            </FONT></TD>
+            <TD BGCOLOR="#DDEEFF" ALIGN="center"><font face=Courier size=2>
+                E-mail:<BR>
+                <INPUT NAME="email" VALUE="" SIZE=28 MAXLENGTH=200>
+            </FONT></TD>
+        </TR>
+
+        <TR>
+            <TD BGCOLOR="#DDEEFF" ALIGN="right">
+                <BR>
+                <INPUT TYPE=RESET VALUE=" Reset " style="background-color:#FFFFF8; color: #003399;"><BR></TD><TD BGCOLOR="#DDEEFF" ALIGN="left"><BR>
+                <INPUT TYPE=SUBMIT VALUE=" Register " style="background-color:#FFFFF8; color: #003399;"><BR>
+            </TD>
+        </TR>
+</form>
+        <TR>
+            <TD BGCOLOR="#DDEEFF" COLSPAN="2" ALIGN="center">
+                <font face=verdana size=1>
+                * indicates a required field.<BR></FONT>
+            </FONT></TD>
+        </TR>
+        <TR>
+            <TD COLSPAN="2" align="center">
+<font face=Courier size=2><A HREF="Agreement.html">Agreement</A></font>
+            </TD>
+        </TR>
+
+
+</table>
+
+<!-- End Content -->
+
+<%@ include file="Footer.csp" %>
Index: themes/Header.csp
===================================================================
--- themes/Header.csp	(revision 0)
+++ themes/Header.csp	(revision 0)
@@ -0,0 +1,54 @@
+<%!
+/**
+ * Header CSP
+ *
+ */
+%>
+
+
+
+<HTML>
+<HEAD>
+<link href="../style/styles.css" rel="stylesheet" media="screen">
+<TITLE>TEST</TITLE>
+</HEAD>
+
+<BODY BGCOLOR="#FFFFF8" link="#003399" vlink="#003399">
+<CENTER><br>
+
+<!-- Header -->
+
+<TABLE width="770" border=0>
+<TR>
+<TD BGCOLOR="#3388FF" align="center">
+<table width="100%" border=1 cellpadding=1 cellspacing=0 class="st">
+
+<tr>
+<td align="center" width="16%" height="25">
+<FONT SIZE=2 face=verdana><a href="CspServletthemes_HomeView_csp" class="headerLink"><B>HOME<B></a></FONT>
+</td>
+<td align="center" width="20%">
+<FONT SIZE=2 face=verdana><a href="CspServletthemes_RegistrationView_csp" class="headerLinkOn"><B>REGISTRATION<B></a></FONT>
+</td>
+<td align="center" width="16%">
+<FONT SIZE=2 face=verdana><a href="CspServletthemes_LoginView_csp" class="headerLink"><B>LOGOUT<B></a></FONT>
+</td>
+<td align="center" width="16%">
+<FONT SIZE=2 face=verdana><a href="Intro.html" class="headerLink"><B>ABOUT US<B></a></FONT>
+</td>
+
+<td align="center" width="16%">
+<FONT SIZE=2 face=verdana><a href="Policies.html" class="headerLink"><B>POLICIES<B></a></FONT>
+</td>
+<td align="center" width="16%">
+<FONT SIZE=2 face=verdana><a href="Help.html" class="headerLink"><B>HELP<B></a></FONT>
+</td>
+</tr>
+</table>
+
+</TD>
+</TR>
+
+<!-- End Header -->
+
+
Index: themes/Makefile.adon
===================================================================
--- themes/Makefile.adon	(revision 82)
+++ themes/Makefile.adon	(working copy)
@@ -1 +1,39 @@
+## themes Makefile
+
+CPP_SERVLETS:=
+CSP_SERVLETS:= \
+	HomeView \
+	LoginView \
+	RegistrationView \
+
+CSP_COMPILE:=cxxsp_compile
+LOCAL_CPPFLAGS:=-I$(ADON_CURDIR)
+
+noinst_LTLIBRARIES:=
+noinst_HEADERS:=
+
+EXTRA_DIST:=Footer.csp Header.csp Sidebar.csp
+define CSP_TMPL
+$(1)_SOURCES:=$(1).cpp
+$(1)_LDFLAGS:=-lspdb3 -lsputil3 -luu
+$(1)_DEPS:=libuu
+CLEANFILES+=$(1).cpp
+EXTRA_DIST+=$(1).csp
+noinst_LTLIBRARIES+=$(1)
+endef
+define CPP_TMPL
+$(1)_SOURCES:=$(1).cpp
+$(1)_LDFLAGS:=-lspdb3 -lsputil3 -luu
+$(1)_DEPS:=libuu
+noinst_LTLIBRARIES+=$(1)
+endef
+
+$(foreach srv,$(CSP_SERVLETS),$(eval $(call CSP_TMPL,$(srv))))
+$(foreach srv,$(CPP_SERVLETS),$(eval $(call CPP_TMPL,$(srv))))
+
+
+%.cpp: %.csp
+	@echo "Parsing $< into $@"
+	$(Q)$(CSP_COMPILE) $< $@
+
 ADON_SUBDIRS:=default
Index: themes/Sidebar.csp
===================================================================
--- themes/Sidebar.csp	(revision 0)
+++ themes/Sidebar.csp	(revision 0)
@@ -0,0 +1,95 @@
+<%!
+/**
+ * Sidebar CSP
+ *
+ */
+%>
+
+
+<!-- Side Bar -->
+
+        <TR>
+            <TD ALIGN="center" BGCOLOR="#DDEEFF">
+<table  width="770" border=0 cellpadding=4 cellspacing=0>        
+<TR>
+            <TD ALIGN="left" valign="top" BGCOLOR="#99CCFF" width="17%">
+<table width=100% cellpadding=4 cellspacing=4 border=0>
+<tr><form action="SearchResults.html" name="search">
+<td>
+<font face=verdana size=2 color="#003399"><b>Search</b></font><br>
+<font face=verdana size=2><input type="text" name="search" value="" size="4"></font>&nbsp;<font face=verdana size=2><input type="submit" name="go" value="go" style="background-color:#DDEEFF; color: #003399;"></font></td>
+
+</tr>
+<tr>
+<td>
+<font face=verdana size=1><A HREF="AdvancedSearch.html" class="navbarLink">Advanced Search</A></font><br>
+</td></form>
+</tr>
+
+
+<tr><td><hr color="#003399"></td></tr>
+<tr>
+<td>
+<font face=verdana size=2><A HREF="Repository.html" class="navbarLink"><b>My UMOs</b></A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryCourses.html" class="navbarLink">Courses</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryTopics.html" class="navbarLink">Topics</A></font><br>
+
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryProblems.html" class="navbarLink">Problems</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryExplanations.html" class="navbarLink">Explanations</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryTests.html" class="navbarLink">Tests</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryDialogs.html" class="navbarLink">Dialogs</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryTexts.html" class="navbarLink">Texts</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="CustomEdit.html" class="navbarLink">Advertising</A></font><br><br>
+<font face=verdana size=2><A HREF="#" class="navbarLink"><b>Create New</b></A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="CourseCreate.html" class="navbarLink">Course</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="TopicCreate.html" class="navbarLink">Topic</A></font><br>
+
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="ProblemCreate.html" class="navbarLink">Problem</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="ExplanationCreate.html" class="navbarLink">Explanation</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="TestCreate.html" class="navbarLink">Test</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="DialogCreate.html" class="navbarLink">Dialog</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="TextCreate.html" class="navbarLink">Text</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="CustomCreate.html" class="navbarLink">Custom UMO</A></font><br></td>
+</tr>
+
+
+<tr><td><hr color="#003399"></td></tr>
+<tr>
+
+<td>
+<font face=verdana size=2><A HREF="RepositoryAll.html" class="navbarLink"><b>All UMOs</b></A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryCourses.html" class="navbarLink">Courses</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryTopics.html" class="navbarLink">Topics</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryProblems.html" class="navbarLink">Problems</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryExplanations.html" class="navbarLink">Explanations</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryTests.html" class="navbarLink">Tests</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryDialogs.html" class="navbarLink">Dialogs</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="RepositoryTexts.html" class="navbarLink">Texts</A></font><br>
+
+<br>
+
+<font face=verdana size=2><A HREF="SearchResults.html" class="navbarLink"><b>Catalog</b></A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="CatalogCourses.html" class="navbarLink">Courses</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="CatalogTopics.html" class="navbarLink">Topics</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="CatalogProblems.html" class="navbarLink">Problems</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="CatalogExplanations.html" class="navbarLink">Explanations</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="CatalogTests.html" class="navbarLink">Tests</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="CatalogDialogs.html" class="navbarLink">Dialogs</A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="CatalogTexts.html" class="navbarLink">Texts</A></font><br>
+
+
+</td>
+</tr>
+
+<tr><td><hr color="#003399"></td></tr>
+<tr>
+<td><font face=verdana size=2><A HREF="Basket.html" class="navbarLink"><b>My Basket</b></A></font><br>
+<font face=verdana size=1 color="#003399">&#149&nbsp;<A HREF="Basket.html" class="navbarLink">3 UMOs</a></font><br><br>
+</td>
+</tr>
+</table>
+            </TD>
+
+<!-- End Side Bar -->
+
+
Index: libdm/User.cpp
===================================================================
--- libdm/User.cpp	(revision 0)
+++ libdm/User.cpp	(revision 0)
@@ -0,0 +1,121 @@
+#include "User.h"
+
+User::User() {}
+User::~User() {}
+
+/**
+ * Performs registration.
+ * @return bool
+ */
+
+
+/**
+ * Performs authentication.
+ * @return bool
+ */
+bool User::isLoginPasswordValid ( std::string login, std::string password ) {
+
+  CODBCDatabase db("DSN=PostgreSQL;UID=sergey;PWD=;DATABASE=uudb");
+  bool isValid = false;
+  int id;
+  string fname;
+  string lname;
+  try {
+    cout<<"\nOpenning database... \n";
+    db.open();
+    CQuery qrySelect(&db,"select pl_id, pl_first_name, pl_last_name from person_list where pl_login='"+login+"' and pl_password='"+password+"'");
+    qrySelect.open();
+    CField& idField = qrySelect[0];
+    CField& fnameField = qrySelect["pl_first_name"];
+    CField& lnameField = qrySelect["pl_last_name"];
+
+    while ( ! qrySelect.eof() ) {
+      isValid = true;
+      id = idField.asInteger();
+      fname = fnameField.asString();
+      lname = lnameField.asString();      
+      qrySelect.fetch();
+    }
+    qrySelect.close();
+    cout<<"\nClosing database... \n";
+    db.close();
+  }
+  catch (exception& e) {
+    cout<<"\nError: " <<e.what();
+    return false;
+  }
+  return isValid;
+
+}
+
+
+/**
+ * Sets all user data during a registration process. Calls stored procedure "person_create" to insert user data into "person_list" table. If insert is successful, returns true. Otherwise returns false.
+ */
+bool User::setUserInfo ( std::string login, std::string password, int language, std::string firstName, std::string lastName, std::string street, std::string city, std::string state, std::string zip, int country, std::string email, std::string phone ) {
+  //Call stored procedure "person_create" here.
+
+  CODBCDatabase db("DSN=PostgreSQL;UID=sergey;PWD=;DATABASE=uudb");
+
+  try {
+    cout<<"\nOpenning database... \n";
+    db.open();
+    CQuery qryInsert(&db,"insert into person_list (pl_preferred_language, pl_first_name, pl_last_name, pl_street_address, pl_city, pl_state, pl_zip, pl_country, pl_email, pl_phone, pl_login, pl_password)  values("+lexical_cast<string>(language)+", '"+firstName+"', '"+lastName+"', '"+street+"', '"+city+"', '"+state+"', '"+zip+"', "+lexical_cast<string>(country)+", '"+email+"', '"+phone+"', '"+login+"', '"+password+"')");
+    qryInsert.exec();
+    cout<<"\nClosing database... \n";
+    db.close();
+  }
+  catch (exception& e) {
+    cout<<"\nError: " <<e.what();
+    return false;
+  }
+  return true;
+
+}
+
+
+/**
+ * Updates user data. Will be used in My Account section where user can update his/her personal info. Calls stored procedure "person_update" to update user data in "person_list" table. If update is successful, returns true. Otherwise returns false.
+ */
+//bool User::updateUserInfo ( std:string userId, std::string login, std::string password, std::string language, std::string firstName, std::string lastName, std::string street, std::string city, std::string zip, std::string country, std::string email, std::string phone ) {
+  //Call stored procedure "person_update" here.
+//}
+
+
+/**
+ * Retrieves user data. Will be used whenever user's personal info needed. Calls stored procedure "person_select" to select user data from "person_list" table. Returns map containing "person_list" field names as a keys and field entries as a values.
+ */
+//std::map<std::string,std::string> User::getUserInfo (string login, string password) {
+  //Call stored procedure "person_select" here.
+
+  /**
+  CODBCDatabase db("DSN=PostgreSQL;UID=sergey;PWD=;DATABASE=uudb");
+
+  try {
+    cout<<"\nOpenning database... \n";
+    db.open();
+    CQuery qrySelect(&db,"select pl_id, pl_first_name, pl_last_name from person_list where pl_login='"+login+"' and pl_password='"+password+"'");
+    map<string, string> personData_map;
+    qrySelect.open();
+
+    CField& idField = qrySelect[0];
+    CField& fnameField = qrySelect["pl_first_name"];
+    CField& lnameField = qrySelect["pl_last_name"];
+
+    while ( ! qrySelect.eof() ) {
+      personData_map.insert
+      qrySelect.fetch();
+    }
+    qrySelect.close();
+    cout<<"\nClosing database... \n";
+    db.close();
+  }
+  catch (exception& e) {
+    cout<<"\nError: " <<e.what();
+    return false;
+  }
+  return true;
+  */
+
+//}
+

   
Index: libdm/User.h
===================================================================
--- libdm/User.h	(revision 0)
+++ libdm/User.h	(revision 0)
@@ -0,0 +1,60 @@
+#ifndef USER_H
+#define USER_H
+
+#include <string>
+#include <boost/lexical_cast.hpp>
+#include <map>
+
+#include <sptk3/CODBCDatabase.h>
+#include <sptk3/CException.h>
+#include <sptk3/CQuery.h>
+
+using namespace std;
+using namespace sptk;
+using namespace boost;
+
+/**
+This class:
+
+  Accesses and alters person_list table in DB.
+
+*/
+
+
+class User
+{
+public:
+      User();
+      virtual ~User();
+
+      std::string fname; 
+      std::string login;
+      std::string password;
+
+  /**
+   * Performs user authentication
+   */
+  bool isLoginPasswordValid ( std::string login, std::string password);
+
+
+  /**
+   * Sets all user data during a registration process. Calls stored procedure "person_create" to insert user data into "person_list" table. If insert is successful, returns true. Otherwise returns false.
+   */
+  virtual bool setUserInfo ( std::string login, std::string password, int language, std::string firstName, std::string lastName, std::string street, std::string city, std::string state, std::string zip, int country, std::string email, std::string phone );
+
+
+  /**
+   * Updates user data. Will be used in My Account section where user can update his/her personal info. Calls stored procedure "person_update" to update user data in "person_list" table. If update is successful, returns true. Otherwise returns false.
+   */
+  //virtual bool updateUserInfo ( std::string userId, std::string login, std::string password, std::string language, std::string firstName, std::string lastName, std::string street, std::string city, std::string zip, std::string country, std::string email, std::string phone );
+
+
+  /**
+   * Retrieves user data. Will be used whenever user's personal info needed. Calls stored procedure "person_select" to select user data from "person_list" table. Returns map containing "person_list" field names as a keys and field entries as a values.
+   */
+  //virtual std::map<std::string,std::string> getUserInfo (std::string userId);
+
+
+};
+
+#endif // USER_H

   
Index: libdm/Makefile.adon
===================================================================
--- libdm/Makefile.adon	(revision 82)
+++ libdm/Makefile.adon	(working copy)
@@ -0,0 +1,2 @@
+## libdm Makefile
+
Index: env-tests/env-test-custom.mk
===================================================================
--- env-tests/env-test-custom.mk	(revision 82)
+++ env-tests/env-test-custom.mk	(working copy)
@@ -0,0 +1,15 @@
+#####################################################
+ifneq ($(strip $(shell $(CXX) -v 2>&1| grep '^gcc')),)
+$(eval $(call cxx_flag_kirpich,-W))
+$(eval $(call cxx_flag_kirpich,-Wall))
+$(eval $(call cxx_flag_kirpich,-Wextra))
+#$(eval $(call cxx_flag_kirpich,-Wold-style-cast))
+#$(eval $(call cxx_flag_kirpich,-Woverloaded-virtual))
+$(eval $(call cxx_flag_kirpich,-Wredundant-decls))
+#$(eval $(call cxx_flag_kirpich,-pedantic))
+$(eval $(call sptk_kirpich))
+$(eval $(call sptk_namespace_kirpich))
+$(eval $(call sptk_odbc_kirpich))
+$(eval $(call sptk_sqlite_kirpich))
+endif
+#####################################################
Index: Makefile.adon
===================================================================
--- Makefile.adon	(revision 82)
+++ Makefile.adon	(working copy)
@@ -1 +1,6 @@
+## trunk Makefile
+
 ADON_SUBDIRS:=libdm libui themes admin
+EXTRA_DIST := README engine.xml
+export CPPSERV_TEST_HOST ?= sergey
+export CPPSERV_TEST_URLBASE ?= http://localhost/~sergey/csp

Authoright © Total Knowledge: 2001-2008