[rhmessaging-commits] rhmessaging commits: r3432 - in mgmt/trunk/cumin/python/cumin: account and 1 other directories.

rhmessaging-commits at lists.jboss.org rhmessaging-commits at lists.jboss.org
Mon Jun 8 12:06:37 EDT 2009


Author: eallen
Date: 2009-06-08 12:06:37 -0400 (Mon, 08 Jun 2009)
New Revision: 3432

Added:
   mgmt/trunk/cumin/python/cumin/account/
   mgmt/trunk/cumin/python/cumin/account/__init__.py
   mgmt/trunk/cumin/python/cumin/account/main.py
   mgmt/trunk/cumin/python/cumin/account/main.strings
   mgmt/trunk/cumin/python/cumin/account/user.py
   mgmt/trunk/cumin/python/cumin/account/user.strings
Removed:
   mgmt/trunk/cumin/python/cumin/user.py
   mgmt/trunk/cumin/python/cumin/user.strings
Modified:
   mgmt/trunk/cumin/python/cumin/__init__.py
   mgmt/trunk/cumin/python/cumin/messaging/queue.py
   mgmt/trunk/cumin/python/cumin/page.py
   mgmt/trunk/cumin/python/cumin/page.strings
   mgmt/trunk/cumin/python/cumin/widgets.strings
Log:
Added "Your Account" to upper right corner of pages.
Created new AccountPage class
Moved the Account/My Jobs tabs to new page

Modified: mgmt/trunk/cumin/python/cumin/__init__.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/__init__.py	2009-06-08 15:28:59 UTC (rev 3431)
+++ mgmt/trunk/cumin/python/cumin/__init__.py	2009-06-08 16:06:37 UTC (rev 3432)
@@ -16,7 +16,8 @@
 from demo import DemoData
 from page import MainPage
 from stat import StatChartPage, StatStackedPage, SlotMapPage
-from user import LoginPage, UserSession, UserSessionExpireThread
+from account.user import UserSession, UserSessionExpireThread
+from account import LoginPage, AccountPage
 from datetime import timedelta
 from qpid.util import URL
 
@@ -46,6 +47,8 @@
         self.add_page(self.main_page)
         self.set_default_page(self.main_page)
 
+        self.account_page = AccountPage(self, "account.html")
+        self.add_page(self.account_page)
         self.add_page(DevelPage(self, "devel.html"))
         self.add_page(ModelPage(self, "model.xml"))
         self.add_page(CallPage(self, "call.xml"))

Added: mgmt/trunk/cumin/python/cumin/account/__init__.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/account/__init__.py	                        (rev 0)
+++ mgmt/trunk/cumin/python/cumin/account/__init__.py	2009-06-08 16:06:37 UTC (rev 3432)
@@ -0,0 +1 @@
+from main import *

Added: mgmt/trunk/cumin/python/cumin/account/main.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/account/main.py	                        (rev 0)
+++ mgmt/trunk/cumin/python/cumin/account/main.py	2009-06-08 16:06:37 UTC (rev 3432)
@@ -0,0 +1,277 @@
+from wooly import *
+from wooly.widgets import *
+from wooly.resources import *
+
+from cumin.widgets import *
+from cumin.util import *
+from cumin.grid.job import JobTab
+from user import UserSession
+
+from wooly import Session
+
+strings = StringCatalog(__file__)
+
+class AccountPage(CuminPage, ModeSet):
+    def __init__(self, app, name):
+        super(AccountPage, self).__init__(app, name)
+
+        self.account = AccountContainerView(app, "account")
+        self.add_mode(self.account)
+        self.set_default_frame(self.account)
+
+    def render_title(self, session):
+        return "MRG Account"
+
+class AccountContainerView(CuminMainView):
+    def __init__(self, app, name):
+        super(AccountContainerView, self).__init__(app, name)
+
+        self.main = AccountFrame(app, "main")
+        self.add_tab(self.main)
+
+    def render_admin_href(self, session):
+        return Session(self.app.main_page).marshal()
+
+class AccountFrame(CuminFrame):
+    def __init__(self, app, name):
+        super(AccountFrame, self).__init__(app, name)
+
+        self.view = AccountView(app, "view")
+        self.add_mode(self.view)
+
+        self.change_password = ChangePasswordForm(app, "password")
+        self.add_mode(self.change_password)
+
+    def render_title(self, session):
+        return "Account"
+
+class AccountView(TabbedModeSet):
+    def __init__(self, app, name):
+        super(AccountView, self).__init__(app, name)
+
+        heading = self.Heading(app, "heading")
+        self.add_child(heading)
+
+        self.add_tab(self.AccountTab(app, "acct"))
+        self.add_tab(self.MyGridJobs(app, "jobs"))
+
+    def render_change_password_href(self, session):
+        branch = session.branch()
+        self.frame.change_password.show(branch)
+        return branch.marshal()
+
+    class Heading(CuminHeading):
+        def render_title(self, session):
+            return "Your Account"
+
+        def render_icon_href(self, session):
+            return "resource?name=action-36.png"
+
+    class AccountTab(ActionSet):
+        def render_title(self, session):
+            return "Account Settings"
+
+        def render_change_password_href(self, session):
+            branch = session.branch()
+            self.frame.change_password.show(branch)
+            return branch.marshal()
+
+    class MyGridJobs(JobTab):
+        def render_title(self, session):
+            return "Your Grid Jobs %s" % fmt_count(self.get_item_count(session))
+
+        def render_sql_where(self, session, *args):
+            if hasattr(session, "user_session"):
+                user = session.user_session.subject.name
+            else:
+                user = ""
+            elems = list()
+            elems.append("b.name like '%s%s'" % (user, "%"))
+            elems.append(self.get_phase_sql(session))
+            return "where %s" % " and ".join(elems)
+
+        def get_sql_values(self, session, *args):
+            pass
+
+        def get_visible_columns(self, session):
+            return self.get_request_visible_columns(session, ["custom_group", "scheduler"])
+
+        def render_user(self, session, *args):
+            if hasattr(session, "user_session"):
+                return session.user_session.subject.name
+
+class LoginPage(HtmlPage):
+    def __init__(self, app, name):
+        super(LoginPage, self).__init__(app, name)
+
+        self.html_class = LoginPage.__name__
+
+        self.logout = BooleanParameter(app, "logout")
+        self.add_parameter(self.logout)
+
+        self.origin = self.Origin(app, "origin")
+        self.add_parameter(self.origin)
+
+        form = LoginForm(app, "form")
+        self.add_child(form)
+
+    def do_process(self, session):
+        if self.logout.get(session):
+            #id = session.get_cookie("session")
+            session.expire_cookie("session")
+
+        super(LoginPage, self).do_process(session)
+
+    def render_title(self, session):
+        return "Log In"
+
+    class Origin(Parameter):
+        def get_default(self, session):
+            return Session(self.app.main_page).marshal()
+
+class LoginForm(FieldForm):
+    def __init__(self, app, name):
+        super(LoginForm, self).__init__(app, name)
+
+        self.__login_invalid = Attribute(app, "login_invalid")
+        self.add_attribute(self.__login_invalid)
+
+        self.__name = self.Name(app, "name")
+        self.add_field(self.__name)
+        self.__name.input.size = 20
+
+        self.__password = self.Password(app, "password")
+        self.add_field(self.__password)
+        self.__password.input.size = 20
+
+        self.__submit = self.Submit(app, "submit")
+        self.add_child(self.__submit)
+
+    def do_process(self, session):
+        if self.__submit.get(session):
+            name = self.__name.get(session)
+            password = self.__password.get(session)
+
+            errors = self.validate(session)
+
+            if not errors:
+                try:
+                    user = Subject.selectBy(name=name)[0]
+                except IndexError:
+                    self.__login_invalid.set(session, True)
+                    return
+
+                crypted = user.password
+
+                if crypted and crypt(password, crypted) == crypted:
+                    # You're in!
+
+                    usess = UserSession(self.app, user)
+                    session.set_cookie("session", usess.id)
+
+                    url = self.page.origin.get(session)
+
+                    self.page.set_redirect_url(session, url)
+                else:
+                    self.__login_invalid.set(session, True)
+
+    def render_operator_link(self, session):
+        email = self.app.config.operator_email
+
+        if email:
+            return "<a href=\"mailto:%s\">site operator</a>" % email
+        else:
+            return "site operator"
+
+    def render_login_invalid(self, session):
+        if self.__login_invalid.get(session):
+            return self.get_string("login_invalid")
+
+    class Name(StringField):
+        def render_title(self, session):
+            return "User Name"
+
+    class Password(PasswordField):
+        def render_title(self, session):
+            return "Password"
+
+    class Submit(FormButton):
+        def render_content(self, session):
+            return "Submit"
+
+class ChangePasswordForm(CuminFieldForm):
+    def __init__(self, app, name):
+        super(ChangePasswordForm, self).__init__(app, name)
+
+        self.__errors = self.Errors(app, "errors")
+        self.add_attribute(self.__errors)
+
+        self.__current = self.Current(app, "current")
+        self.add_field(self.__current)
+        self.__current.input.size = 20
+
+        self.__new0 = self.New0(app, "new0")
+        self.add_field(self.__new0)
+        self.__new0.input.size = 20
+
+        self.__new1 = self.New1(app, "new1")
+        self.add_field(self.__new1)
+        self.__new1.input.size = 20
+
+    def process_cancel(self, session):
+        branch = session.branch()
+        self.page.account.main.view.show(branch)
+        self.page.set_redirect_url(session, branch.marshal())
+
+    def process_submit(self, session):
+        curr = self.__current.get(session)
+        new0 = self.__new0.get(session)
+        new1 = self.__new1.get(session)
+
+        errors = self.validate(session)
+
+        subject = session.user_session.subject
+        crypted = subject.password
+
+        if crypt_password(curr, crypted) != crypted:
+            msg = "The current password you entered is incorrect"
+            self.__errors.get(session).append(msg)
+            errors.append(msg)
+
+        if new0 != new1:
+            msg = "The new passwords do not match"
+            self.__errors.get(session).append(msg)
+            errors.append(msg)
+
+        if not errors:
+            subject.password = crypt_password(new0)
+            subject.syncUpdate()
+
+            self.process_cancel(session)
+
+    def render_title(self, session):
+        return "Change Password"
+
+    def render_form_error(self, session):
+        errors = self.__errors.get(session)
+
+        if errors:
+            return "<ul class=\"errors\" style=\"margin:0; float:left;\"><li>" + \
+                ("</li><li>".join(errors)) + \
+                "</li></ul>"
+
+    class Current(PasswordField):
+        def render_title(self, session):
+            return "Current Password"
+
+    class New0(PasswordField):
+        def render_title(self, session):
+            return "New Password"
+
+    class New1(PasswordField):
+        def render_title(self, session):
+            return "Repeat New Password"
+
+    class Errors(Attribute):
+        def get_default(self, session):
+            return list()

Added: mgmt/trunk/cumin/python/cumin/account/main.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/account/main.strings	                        (rev 0)
+++ mgmt/trunk/cumin/python/cumin/account/main.strings	2009-06-08 16:06:37 UTC (rev 3432)
@@ -0,0 +1,128 @@
+[LoginPage.css]
+body.LoginPage {
+    background: #f7f7f7;
+    padding: 4em;
+}
+
+[LoginForm.css]
+form.LoginForm {
+    background: #fff;
+    width: 16em;
+    margin: 0 auto;
+    border: 1px solid #ddd;
+    -moz-border-radius: 0.5em;
+    -webkit-border-radius: 0.5em;
+    padding: 2em;
+}
+
+form.LoginForm > h1 {
+    margin: 0 0 1em 0;
+}
+
+form.LoginForm h1 img {
+    vertical-align: -60%;
+    margin: 0 0.25em 0 0;
+}
+
+form.LoginForm input {
+    width: 12em;
+}
+
+form.LoginForm input.submit {
+    width: auto;
+}
+
+form.LoginForm > div.buttons {
+    margin: 1.5em 0 0 0;
+}
+
+form.LoginForm p.login_invalid {
+    color: red;
+}
+
+[LoginForm.html]
+<form id="{id}" class="LoginForm" method="post" action="?">
+  <h1><img src="resource?name=mrg-36.png"/> MRG Management</h1>
+
+  <p>Enter your user name and password to log in.</p>
+
+  <p>If you do not have an account or have trouble logging in, contact
+  the {operator_link}.</p>
+
+  {login_invalid}
+
+  {fields}
+
+  <div class="buttons">{submit}</div>
+
+  <div>{hidden_inputs}</div>
+</form>
+
+<script type="text/javascript">
+  $("{id}").elements[0].focus();
+  
+</script>
+
+[LoginForm.login_invalid]
+<p class="login_invalid">The user name and password you entered do not
+match any account.</p>
+
+[AccountContainerView.html]
+<div id="head">
+  <div id="user">
+    Hi, {user_name}
+    <strong>&#183;</strong>
+    <a id="account" onclick="wooly.clearUpdates()" href="{admin_href}">MRG Management</a>
+    <strong>&#183;</strong>
+    <a id="logout" onclick="wooly.clearUpdates()" href="{logout_href}">Log Out</a>
+  </div>
+
+  <img id="logo" src="resource?name=rhlogo-32.png"/>
+
+</div>
+<div id="body">
+
+<div id="messages" style="display: {action_display};"><p title="close" onclick="cumin.hideActions()">x</p>{actions}</div>
+  {heartbeat}
+
+{content}</div>
+
+<div id="foot"/>
+
+[AccountView.html]
+<div class="oblock">
+  {heading}
+
+  <ul class="TabbedModeSet tabs">{tabs}</ul>
+  <div class="TabbedModeSet mode">{content}</div>
+</div>
+
+[AccountTab.html]
+<ul class="actions">
+  <a class="nav" href="{change_password_href}">Change Password</a>
+</ul>
+
+[MyGridJobs.html]
+<form id="{id}" method="post" action="?">
+<div class="rfloat">{phase}</div>
+Jobs submitted by {user}
+
+  <div class="sactions" style="clear:right;">
+    <h2>Act on Selected Jobs:</h2>
+    {hold} {release} {remove}
+  </div>
+
+  <table class="mobjects">
+    <thead>
+      <tr>
+    <th class="setnav" colspan="{column_count}">
+      <div class="rfloat">{page}</div>
+      {count}
+    </th>
+      </tr>
+      <tr>{headers}</tr>
+    </thead>
+    <tbody>{items}</tbody>
+  </table>
+  <div>{hidden_inputs}</div>
+</form>

Copied: mgmt/trunk/cumin/python/cumin/account/user.py (from rev 3426, mgmt/trunk/cumin/python/cumin/user.py)
===================================================================
--- mgmt/trunk/cumin/python/cumin/account/user.py	                        (rev 0)
+++ mgmt/trunk/cumin/python/cumin/account/user.py	2009-06-08 16:06:37 UTC (rev 3432)
@@ -0,0 +1,50 @@
+from wooly import *
+from wooly.widgets import *
+from wooly.resources import *
+from time import sleep
+from threading import Thread, Event
+from datetime import datetime, timedelta
+from crypt import crypt
+from qpid.datatypes import uuid4
+
+from cumin.widgets import *
+from cumin.util import *
+
+strings = StringCatalog(__file__)
+
+log = logging.getLogger("cumin.user")
+
+class UserSession(object):
+    def __init__(self, app, subject):
+        self.app = app
+        self.subject = subject
+        self.id = str(uuid4())
+        self.created = datetime.now()
+
+        self.app.user_sessions_by_id[self.id] = self
+
+    def delete(self):
+        del self.app.user_sessions_by_id[self.id]
+
+class UserSessionExpireThread(Thread):
+    def __init__(self, app):
+        super(UserSessionExpireThread, self).__init__()
+
+        self.app = app
+        self.setDaemon(True)
+
+    def run(self):
+        while True:
+            self.expire_sessions()
+            sleep(60)
+
+    def expire_sessions(self):
+        when = datetime.now() - timedelta(hours=2)
+        count = 0
+
+        for session in self.app.user_sessions_by_id.values():
+            if session.created < when:
+                session.delete()
+                count += 1
+
+        log.info("Expired %i user sessions", count)


Property changes on: mgmt/trunk/cumin/python/cumin/account/user.py
___________________________________________________________________
Name: svn:mergeinfo
   + 

Copied: mgmt/trunk/cumin/python/cumin/account/user.strings (from rev 3426, mgmt/trunk/cumin/python/cumin/user.strings)
===================================================================


Property changes on: mgmt/trunk/cumin/python/cumin/account/user.strings
___________________________________________________________________
Name: svn:mergeinfo
   + 

Modified: mgmt/trunk/cumin/python/cumin/messaging/queue.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/messaging/queue.py	2009-06-08 15:28:59 UTC (rev 3431)
+++ mgmt/trunk/cumin/python/cumin/messaging/queue.py	2009-06-08 16:06:37 UTC (rev 3432)
@@ -803,7 +803,7 @@
         return self.frame.get_args(session)
 
     def process_submit(self, session, binding):
-        log.info("Removing binding %s" % binding)
+        log.info("Removing binding %s", binding)
 
         self.process_cancel(session, binding)
 

Modified: mgmt/trunk/cumin/python/cumin/page.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/page.py	2009-06-08 15:28:59 UTC (rev 3431)
+++ mgmt/trunk/cumin/python/cumin/page.py	2009-06-08 16:06:37 UTC (rev 3432)
@@ -59,9 +59,6 @@
         self.view = HomeView(app, "view")
         self.add_mode(self.view)
 
-        self.change_password = ChangePasswordForm(app, "password")
-        self.add_mode(self.change_password)
-
         self.mservers_add = ManagementServerSetAdd(app, "mserversadd")
         self.add_mode(self.mservers_add)
 
@@ -79,8 +76,6 @@
         self.add_child(heading)
 
         self.add_tab(self.OverviewTab(app, "over"))
-        self.add_tab(self.MyGridJobs(app, "jobs"))
-        self.add_tab(self.AccountTab(app, "acct"))
         self.add_tab(ManagementServerSet(app, "servers"))
 
     def render_change_password_href(self, session):
@@ -121,36 +116,3 @@
                 if count == 0:
                     return super(HomeView.OverviewTab.ManagementServerNotice,
                                  self).do_render(session)
-
-    class AccountTab(ActionSet):
-        def render_title(self, session):
-            return "Your Account"
-
-        def render_change_password_href(self, session):
-            branch = session.branch()
-            self.frame.change_password.show(branch)
-            return branch.marshal()
-
-    class MyGridJobs(JobTab):
-        def render_title(self, session):
-            return "Your Grid Jobs %s" % fmt_count(self.get_item_count(session))
-
-        def render_sql_where(self, session, *args):
-            if hasattr(session, "user_session"):
-                user = session.user_session.subject.name
-            else:
-                user = ""
-            elems = list()
-            elems.append("b.name like '%s%s'" % (user, "%"))
-            elems.append(self.get_phase_sql(session))
-            return "where %s" % " and ".join(elems)
-
-        def get_sql_values(self, session, *args):
-            pass
-
-        def get_visible_columns(self, session):
-            return self.get_request_visible_columns(session, ["custom_group", "scheduler"])
-
-        def render_user(self, session, *args):
-            if hasattr(session, "user_session"):
-                return session.user_session.subject.name

Modified: mgmt/trunk/cumin/python/cumin/page.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/page.strings	2009-06-08 15:28:59 UTC (rev 3431)
+++ mgmt/trunk/cumin/python/cumin/page.strings	2009-06-08 16:06:37 UTC (rev 3432)
@@ -76,11 +76,6 @@
   tab above to add a new server.
 </div>
 
-[AccountTab.html]
-<ul class="actions">
-  <a class="nav" href="{change_password_href}">Change Password</a>
-</ul>
-
 [MessagingView.html]
 <div class="oblock">
   {heading}
@@ -104,28 +99,3 @@
   <ul class="TabbedModeSet tabs">{tabs}</ul>
   <div class="TabbedModeSet mode">{content}</div>
 </div>
-
-[MyGridJobs.html]
-<form id="{id}" method="post" action="?">
-<div class="rfloat">{phase}</div>
-Jobs submitted by {user}
-
-  <div class="sactions" style="clear:right;">
-    <h2>Act on Selected Jobs:</h2>
-    {hold} {release} {remove}
-  </div>
-
-  <table class="mobjects">
-    <thead>
-      <tr>
-	<th class="setnav" colspan="{column_count}">
-	  <div class="rfloat">{page}</div>
-	  {count}
-	</th>
-      </tr>
-      <tr>{headers}</tr>
-    </thead>
-    <tbody>{items}</tbody>
-  </table>
-  <div>{hidden_inputs}</div>
-</form>

Deleted: mgmt/trunk/cumin/python/cumin/user.py
===================================================================
--- mgmt/trunk/cumin/python/cumin/user.py	2009-06-08 15:28:59 UTC (rev 3431)
+++ mgmt/trunk/cumin/python/cumin/user.py	2009-06-08 16:06:37 UTC (rev 3432)
@@ -1,229 +0,0 @@
-from wooly import *
-from wooly.widgets import *
-from wooly.resources import *
-from time import sleep
-from threading import Thread, Event
-from random import randint
-from datetime import datetime, timedelta
-from crypt import crypt
-from qpid.datatypes import uuid4
-
-from widgets import *
-from util import *
-
-from wooly import Session
-
-strings = StringCatalog(__file__)
-
-log = logging.getLogger("cumin.user")
-
-class UserSession(object):
-    def __init__(self, app, subject):
-        self.app = app
-        self.subject = subject
-        self.id = str(uuid4())
-        self.created = datetime.now()
-
-        self.app.user_sessions_by_id[self.id] = self
-
-    def delete(self):
-        del self.app.user_sessions_by_id[self.id]
-
-class UserSessionExpireThread(Thread):
-    def __init__(self, app):
-        super(UserSessionExpireThread, self).__init__()
-
-        self.app = app
-        self.setDaemon(True)
-
-    def run(self):
-        while True:
-            self.expire_sessions()
-            sleep(60)
-
-    def expire_sessions(self):
-        when = datetime.now() - timedelta(hours=2)
-        count = 0
-
-        for session in self.app.user_sessions_by_id.values():
-            if session.created < when:
-                session.delete()
-                count += 1
-
-        log.debug("Expired %i user sessions", count)
-
-class LoginPage(HtmlPage):
-    def __init__(self, app, name):
-        super(LoginPage, self).__init__(app, name)
-
-        self.html_class = LoginPage.__name__
-
-        self.logout = BooleanParameter(app, "logout")
-        self.add_parameter(self.logout)
-
-        self.origin = self.Origin(app, "origin")
-        self.add_parameter(self.origin)
-
-        form = LoginForm(app, "form")
-        self.add_child(form)
-
-    def do_process(self, session):
-        if self.logout.get(session):
-            #id = session.get_cookie("session")
-            session.expire_cookie("session")
-
-        super(LoginPage, self).do_process(session)
-
-    def render_title(self, session):
-        return "Log In"
-
-    class Origin(Parameter):
-        def get_default(self, session):
-            return Session(self.app.main_page).marshal()
-
-class LoginForm(FieldForm):
-    def __init__(self, app, name):
-        super(LoginForm, self).__init__(app, name)
-
-        self.__login_invalid = Attribute(app, "login_invalid")
-        self.add_attribute(self.__login_invalid)
-
-        self.__name = self.Name(app, "name")
-        self.add_field(self.__name)
-        self.__name.input.size = 20
-
-        self.__password = self.Password(app, "password")
-        self.add_field(self.__password)
-        self.__password.input.size = 20
-
-        self.__submit = self.Submit(app, "submit")
-        self.add_child(self.__submit)
-
-    def do_process(self, session):
-        if self.__submit.get(session):
-            name = self.__name.get(session)
-            password = self.__password.get(session)
-
-            errors = self.validate(session)
-
-            if not errors:
-                try:
-                    user = Subject.selectBy(name=name)[0]
-                except IndexError:
-                    self.__login_invalid.set(session, True)
-                    return
-
-                crypted = user.password
-
-                if crypted and crypt(password, crypted) == crypted:
-                    # You're in!
-
-                    usess = UserSession(self.app, user)
-                    session.set_cookie("session", usess.id)
-
-                    url = self.page.origin.get(session)
-
-                    self.page.set_redirect_url(session, url)
-                else:
-                    self.__login_invalid.set(session, True)
-
-    def render_operator_link(self, session):
-        email = self.app.config.operator_email
-
-        if email:
-            return "<a href=\"mailto:%s\">site operator</a>" % email
-        else:
-            return "site operator"
-
-    def render_login_invalid(self, session):
-        if self.__login_invalid.get(session):
-            return self.get_string("login_invalid")
-
-    class Name(StringField):
-        def render_title(self, session):
-            return "User Name"
-
-    class Password(PasswordField):
-        def render_title(self, session):
-            return "Password"
-
-    class Submit(FormButton):
-        def render_content(self, session):
-            return "Submit"
-
-class ChangePasswordForm(CuminFieldForm):
-    def __init__(self, app, name):
-        super(ChangePasswordForm, self).__init__(app, name)
-
-        self.__errors = self.Errors(app, "errors")
-        self.add_attribute(self.__errors)
-
-        self.__current = self.Current(app, "current")
-        self.add_field(self.__current)
-        self.__current.input.size = 20
-
-        self.__new0 = self.New0(app, "new0")
-        self.add_field(self.__new0)
-        self.__new0.input.size = 20
-
-        self.__new1 = self.New1(app, "new1")
-        self.add_field(self.__new1)
-        self.__new1.input.size = 20
-
-    def process_cancel(self, session):
-        branch = session.branch()
-        self.page.main.home.view.show(branch)
-        self.page.set_redirect_url(session, branch.marshal())
-
-    def process_submit(self, session):
-        curr = self.__current.get(session)
-        new0 = self.__new0.get(session)
-        new1 = self.__new1.get(session)
-
-        errors = self.validate(session)
-
-        subject = session.user_session.subject
-        crypted = subject.password
-
-        if crypt_password(curr, crypted) != crypted:
-            msg = "The current password you entered is incorrect"
-            self.__errors.get(session).append(msg)
-            errors.append(msg)
-
-        if new0 != new1:
-            msg = "The new passwords do not match"
-            self.__errors.get(session).append(msg)
-            errors.append(msg)
-
-        if not errors:
-            subject.password = crypt_password(new0)
-            subject.syncUpdate()
-
-            self.process_cancel(session)
-
-    def render_title(self, session):
-        return "Change Password"
-
-    def render_form_error(self, session):
-        errors = self.__errors.get(session)
-
-        if errors:
-            return "<ul class=\"errors\" style=\"margin:0; float:left;\"><li>" + \
-                ("</li><li>".join(errors)) + \
-                "</li></ul>"
-
-    class Current(PasswordField):
-        def render_title(self, session):
-            return "Current Password"
-
-    class New0(PasswordField):
-        def render_title(self, session):
-            return "New Password"
-
-    class New1(PasswordField):
-        def render_title(self, session):
-            return "Repeat New Password"
-
-    class Errors(Attribute):
-        def get_default(self, session):
-            return list()

Deleted: mgmt/trunk/cumin/python/cumin/user.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/user.strings	2009-06-08 15:28:59 UTC (rev 3431)
+++ mgmt/trunk/cumin/python/cumin/user.strings	2009-06-08 16:06:37 UTC (rev 3432)
@@ -1,68 +0,0 @@
-[LoginPage.css]
-body.LoginPage {
-    background: #f7f7f7;
-    padding: 4em;
-}
-
-[LoginForm.css]
-form.LoginForm {
-    background: #fff;
-    width: 16em;
-    margin: 0 auto;
-    border: 1px solid #ddd;
-    -moz-border-radius: 0.5em;
-    -webkit-border-radius: 0.5em;
-    padding: 2em;
-}
-
-form.LoginForm > h1 {
-    margin: 0 0 1em 0;
-}
-
-form.LoginForm h1 img {
-    vertical-align: -60%;
-    margin: 0 0.25em 0 0;
-}
-
-form.LoginForm input {
-    width: 12em;
-}
-
-form.LoginForm input.submit {
-    width: auto;
-}
-
-form.LoginForm > div.buttons {
-    margin: 1.5em 0 0 0;
-}
-
-form.LoginForm p.login_invalid {
-    color: red;
-}
-
-[LoginForm.html]
-<form id="{id}" class="LoginForm" method="post" action="?">
-  <h1><img src="resource?name=mrg-36.png"/> MRG Management</h1>
-
-  <p>Enter your user name and password to log in.</p>
-
-  <p>If you do not have an account or have trouble logging in, contact
-  the {operator_link}.</p>
-
-  {login_invalid}
-
-  {fields}
-
-  <div class="buttons">{submit}</div>
-
-  <div>{hidden_inputs}</div>
-</form>
-
-<script type="text/javascript">
-  $("{id}").elements[0].focus();
-  
-</script>
-
-[LoginForm.login_invalid]
-<p class="login_invalid">The user name and password you entered do not
-match any account.</p>

Modified: mgmt/trunk/cumin/python/cumin/widgets.strings
===================================================================
--- mgmt/trunk/cumin/python/cumin/widgets.strings	2009-06-08 15:28:59 UTC (rev 3431)
+++ mgmt/trunk/cumin/python/cumin/widgets.strings	2009-06-08 16:06:37 UTC (rev 3432)
@@ -163,6 +163,8 @@
   <div id="user">
     Hi, {user_name}
     <strong>&#183;</strong>
+    <a id="account" onclick="wooly.clearUpdates()" href="{account_href}">Your Account</a>
+    <strong>&#183;</strong>
     <a id="logout" onclick="wooly.clearUpdates()" href="{logout_href}">Log Out</a>
   </div>
 




More information about the rhmessaging-commits mailing list