[cig-commits] r11850 - in cs/portal/trunk/seismo/SeismoWebPortal: . designs/plone static/icons templates/SeismoWebPortal templates/registration

leif at geodynamics.org leif at geodynamics.org
Tue Apr 22 18:57:49 PDT 2008


Author: leif
Date: 2008-04-22 18:57:48 -0700 (Tue, 22 Apr 2008)
New Revision: 11850

Added:
   cs/portal/trunk/seismo/SeismoWebPortal/static/icons/eventupload.gif
   cs/portal/trunk/seismo/SeismoWebPortal/static/icons/lightbulb.gif
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/welcome.html
Modified:
   cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/style.css
   cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/style.py
   cs/portal/trunk/seismo/SeismoWebPortal/forms.py
   cs/portal/trunk/seismo/SeismoWebPortal/gmt.py
   cs/portal/trunk/seismo/SeismoWebPortal/management.py
   cs/portal/trunk/seismo/SeismoWebPortal/models.py
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/seismogram_table.html
   cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html
   cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/login.html
   cs/portal/trunk/seismo/SeismoWebPortal/views.py
Log:
Preparations for beta release/deployment: Removed hard-coded paths to
GMT.  Added code to import user tables from legacy database.  Added
welcome page, light bulb, and "new parameter set" links w/loopback.


Modified: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/style.css
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/style.css	2008-04-22 20:58:44 UTC (rev 11849)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/style.css	2008-04-23 01:57:48 UTC (rev 11850)
@@ -361,6 +361,15 @@
     background-color: #eef;
 }
 
+table.cool .add {
+    border-top: 1px solid black;
+    background-color: #eee;
+}
+
+table.cool tr:target {
+    background-color: yellow;
+}
+
 table.cool tr.title {
     color: white;
     background-color: #88f;

Modified: cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/style.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/style.py	2008-04-22 20:58:44 UTC (rev 11849)
+++ cs/portal/trunk/seismo/SeismoWebPortal/designs/plone/style.py	2008-04-23 01:57:48 UTC (rev 11850)
@@ -33,10 +33,10 @@
 currentTime=time.time
 __CHEETAH_version__ = '2.0rc7'
 __CHEETAH_versionTuple__ = (2, 0, 0, 'candidate', 7)
-__CHEETAH_genTime__ = 1208567245.728482
-__CHEETAH_genTimestamp__ = 'Fri Apr 18 18:07:25 2008'
+__CHEETAH_genTime__ = 1208912201.098881
+__CHEETAH_genTimestamp__ = 'Tue Apr 22 17:56:41 2008'
 __CHEETAH_src__ = 'style.css'
-__CHEETAH_srcLastModified__ = 'Fri Apr 18 18:07:07 2008'
+__CHEETAH_srcLastModified__ = 'Tue Apr 22 17:56:36 2008'
 __CHEETAH_docstring__ = 'Autogenerated by CHEETAH: The Python-Powered Template Engine'
 
 if __CHEETAH_versionTuple__ < RequiredCheetahVersionTuple:
@@ -446,6 +446,15 @@
     background-color: #eef;
 }
 
+table.cool .add {
+    border-top: 1px solid black;
+    background-color: #eee;
+}
+
+table.cool tr:target {
+    background-color: yellow;
+}
+
 table.cool tr.title {
     color: white;
     background-color: #88f;
@@ -490,15 +499,15 @@
 
 span.True:before {
     content: url(''')
-        _v = VFFSL(SL,"root",True) # '$root' on line 407, col 18
-        if _v is not None: write(_filter(_v, rawExpr='$root')) # from line 407, col 18.
+        _v = VFFSL(SL,"root",True) # '$root' on line 416, col 18
+        if _v is not None: write(_filter(_v, rawExpr='$root')) # from line 416, col 18.
         write('''/pics/icon-yes.gif) " ";
 }
 
 span.False:before {
     content: url(''')
-        _v = VFFSL(SL,"root",True) # '$root' on line 411, col 18
-        if _v is not None: write(_filter(_v, rawExpr='$root')) # from line 411, col 18.
+        _v = VFFSL(SL,"root",True) # '$root' on line 420, col 18
+        if _v is not None: write(_filter(_v, rawExpr='$root')) # from line 420, col 18.
         write('''/pics/icon-no.gif) " ";
 }
 

Modified: cs/portal/trunk/seismo/SeismoWebPortal/forms.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/forms.py	2008-04-22 20:58:44 UTC (rev 11849)
+++ cs/portal/trunk/seismo/SeismoWebPortal/forms.py	2008-04-23 01:57:48 UTC (rev 11850)
@@ -249,9 +249,9 @@
             userInfo = user.userinfo
         except UserInfo.DoesNotExist:
             userInfo = UserInfo()
+            userInfo.user = user
             userInfo.home = Folder.newFolder("Home", user)
             userInfo.trash = Folder.newFolder("Trash", user)
-            user.userinfo = userInfo
         # Save the new user.
         user.first_name      = new_data['first_name']
         user.last_name       = new_data['last_name']

Modified: cs/portal/trunk/seismo/SeismoWebPortal/gmt.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/gmt.py	2008-04-22 20:58:44 UTC (rev 11849)
+++ cs/portal/trunk/seismo/SeismoWebPortal/gmt.py	2008-04-23 01:57:48 UTC (rev 11850)
@@ -10,7 +10,8 @@
 from django.shortcuts import get_object_or_404
 
 
-gmt_bin = "/home/leif/opt/gmt/bin"
+gmt_bin = join(os.environ['WEBPORTAL_GMT_ROOT'], "bin")
+netCDF_lib = join(os.environ['WEBPORTAL_NETCDF_ROOT'], "lib")
 
 
 def psmeca(cmt, filename, args):
@@ -20,7 +21,7 @@
     owd = os.getcwd()
     workdir = mkdtemp()
     os.chdir(workdir)
-    os.putenv("LD_LIBRARY_PATH", "/home/leif/opt/netCDF/lib")
+    os.putenv("LD_LIBRARY_PATH", netCDF_lib)
 
     # Spawn 'psmeca' to draw the beachball.
     child = Popen3([join(gmt_bin, "psmeca"), '-R0/10/0/10', '-Jx1', '-G255/0/0', '-L2', '-K', '-V', '-P'] + args)
@@ -63,7 +64,7 @@
     owd = os.getcwd()
     workdir = mkdtemp()
     os.chdir(workdir)
-    os.putenv("LD_LIBRARY_PATH", "/home/leif/opt/netCDF/lib")
+    os.putenv("LD_LIBRARY_PATH", netCDF_lib)
 
     #==========================================================
     
@@ -347,7 +348,7 @@
     owd = os.getcwd()
     workdir = mkdtemp()
     os.chdir(workdir)
-    os.putenv("LD_LIBRARY_PATH", "/home/leif/opt/netCDF/lib")
+    os.putenv("LD_LIBRARY_PATH", netCDF_lib)
 
     PS_OUT = join(workdir, "map.ps")
 

Modified: cs/portal/trunk/seismo/SeismoWebPortal/management.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/management.py	2008-04-22 20:58:44 UTC (rev 11849)
+++ cs/portal/trunk/seismo/SeismoWebPortal/management.py	2008-04-23 01:57:48 UTC (rev 11850)
@@ -2,6 +2,7 @@
 from django.dispatch import dispatcher
 from django.db.models import signals
 import models
+import os
 
 
 def createSpecfem3DGlobeModels():
@@ -154,6 +155,78 @@
     return
 
 
+def importLegacyDatabase(legacyDB):
+    from pysqlite2 import dbapi2 as sqlite
+
+    print "Importing legacy database '%s'" % legacyDB
+    
+    con = sqlite.connect(legacyDB)
+    cur = con.cursor()
+
+    # Invite
+    invites = {}
+    invites[None] = None
+    cur.execute("select * from SeismoWebPortal_invite")
+    for (id, code, name, description,
+         created, modified, expires) in cur:
+        invites[id] = models.Invite.objects.create(
+            id = id,
+            code = code,
+            name = name,
+            description = description,
+            created = created,
+            modified = modified,
+            expires = expires,
+            )
+
+    # User
+    from django.contrib.auth.models import User
+    users = {}
+    cur.execute("select * from auth_user")
+    for (id, username,
+         first_name, last_name, email,
+         password,
+         is_staff, is_active, is_superuser,
+         last_login, date_joined) in cur:
+        users[id] = User.objects.create(
+            id = id,
+            username     = username,
+            first_name   = first_name,
+            last_name    = last_name,
+            email        = email,
+            password     = password,
+            is_staff     = is_staff,
+            is_active    = is_active,
+            is_superuser = is_superuser,
+            last_login   = last_login,
+            date_joined  = date_joined,
+            )
+
+    # UserInfo
+    cur.execute("select * from SeismoWebPortal_userinfo")
+    for (user_id,
+         institution,
+         address1, address2, address3, phone,
+         invite_id, approved,
+         help_visible) in cur:
+        user = users[user_id]
+        models.UserInfo.objects.create(
+            user         = user,
+            institution  = institution,
+            address1     = address1,
+            address2     = address2,
+            address3     = address3,
+            phone        = phone,
+            invite       = invites[invite_id],
+            approved     = approved,
+            help_visible = help_visible,
+            home         = models.Folder.newFolder("Home", user),
+            trash        = models.Folder.newFolder("Trash", user),
+            )
+        
+    return
+
+
 def createDefaults(app, created_models):
     
     # Specfem 3D Globe
@@ -183,6 +256,10 @@
         models.StationList in created_models):
         createStationList()
 
+    legacyDB = os.environ.get('WEBPORTAL_LEGACY_DB')
+    if legacyDB:
+        importLegacyDatabase(legacyDB)
+
     return
 
 

Modified: cs/portal/trunk/seismo/SeismoWebPortal/models.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/models.py	2008-04-22 20:58:44 UTC (rev 11849)
+++ cs/portal/trunk/seismo/SeismoWebPortal/models.py	2008-04-23 01:57:48 UTC (rev 11850)
@@ -1002,9 +1002,7 @@
         except UserInfo.DoesNotExist:
             newHome = Folder.newFolder("Home", user)
             newTrash = Folder.newFolder("Trash", user)
-            userInfo = UserInfo(home = newHome, trash = newTrash)
-            user.userinfo = userInfo
-            user.save()
+            userInfo = UserInfo(user = user, home = newHome, trash = newTrash)
             userInfo.save()
         return userInfo
 

Added: cs/portal/trunk/seismo/SeismoWebPortal/static/icons/eventupload.gif
===================================================================
(Binary files differ)


Property changes on: cs/portal/trunk/seismo/SeismoWebPortal/static/icons/eventupload.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Added: cs/portal/trunk/seismo/SeismoWebPortal/static/icons/lightbulb.gif
===================================================================
(Binary files differ)


Property changes on: cs/portal/trunk/seismo/SeismoWebPortal/static/icons/lightbulb.gif
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html	2008-04-22 20:58:44 UTC (rev 11849)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/mineosparameters_form.html	2008-04-23 01:57:48 UTC (rev 11850)
@@ -68,6 +68,10 @@
     <div><input class=submit type="submit" name="save" value="Save" />
     </div>
 
+    {% if ws %}
+    <input type="hidden" name="ws" value="{{ws}}" />
+    {% endif %}
+
     </div> <!-- tab30ex -->
 
 </form>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/seismogram_table.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/seismogram_table.html	2008-04-22 20:58:44 UTC (rev 11849)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/seismogram_table.html	2008-04-23 01:57:48 UTC (rev 11850)
@@ -13,6 +13,11 @@
     <td align=left><a href="settings/">Edit...</a></td>
 </tr></table>
 
+{% if assist %}
+<p></p>
+<p><img src="{{root}}/icons/lightbulb.gif">To simulate this earthquake using the indicated parameters, click the "Request" button in the far right column.</p>
+{% endif %}
+
 <table border=0 cellpadding=8><tr>
 
 {% if mineos_parameter_set_list %}
@@ -41,7 +46,7 @@
 
     <tbody>
     {% for ps in mineos_parameter_set_list %}
-    <tr class="{% cycle odd,even %}">
+    <tr class="{% cycle odd,even %}" id="ps{{ps.id}}">
         <td>{{ ps.model }}</td>
         <td>{{ ps.catalog }}</td>
         <td><img src="{{ root }}/pics/icon-{% if ps.radial %}yes{% else %}no{% endif %}.gif" alt="{{ ps.radial }}"></td>
@@ -54,6 +59,7 @@
         <td>{{ ps.outputStatus }}</td>
     </tr>
     {% endfor %}
+    <tr class=add><td colspan=10><a href="{{root}}/config/mineos/parameters/new/?ws={{workspace.fsNode.id}}">New Mineos parameter set...</a></td></tr>
     </tbody>
 </table></td>
 {% endif %}
@@ -85,7 +91,7 @@
 
     <tbody>
     {% for ps in specfem3dglobe_parameter_set_list %}
-    <tr class="{% cycle odd,even %}">
+    <tr class="{% cycle odd,even %}" id="ps{{ps.id}}">
         <td>{{ ps.model.get_type_display }}</td>
         <td><img src="{{ root }}/pics/icon-{% if ps.model.oceans %}yes{% else %}no{% endif %}.gif" alt="{{ ps.model.oceans }}"></td>
         <td><img src="{{ root }}/pics/icon-{% if ps.model.gravity %}yes{% else %}no{% endif %}.gif" alt="{{ ps.model.gravity }}"></td>
@@ -98,6 +104,7 @@
         <td>{{ ps.outputStatus }}</td>
     </tr>
     {% endfor %}
+    <tr class=add><td colspan=10><a href="{{root}}/config/specfem3dglobe/parameters/new/?ws={{workspace.fsNode.id}}">New Specfem 3D Globe parameter set...</a></td></tr>
     </tbody>
 </table>
 </td>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html	2008-04-22 20:58:44 UTC (rev 11849)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/specfem3dglobeparameters_form.html	2008-04-23 01:57:48 UTC (rev 11850)
@@ -32,6 +32,10 @@
     <div><input class=submit type="submit" name="save" value="Save" />
     </div>
 
+    {% if ws %}
+    <input type="hidden" name="ws" value="{{ws}}" />
+    {% endif %}
+
     </div> <!-- tab30ex -->
 
 </form>

Added: cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/welcome.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/welcome.html	                        (rev 0)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/SeismoWebPortal/welcome.html	2008-04-23 01:57:48 UTC (rev 11850)
@@ -0,0 +1,21 @@
+
+<h2>Welcome</h2>
+
+<p>Welcome to the CIG Seismology Web Portal.</p>
+
+<table width="100%" cellspacing=40>
+    <tr>
+        <td>
+            <a href="{{root}}/events/"><img src="{{root}}/icons/eventfinder.gif" float=left>
+                                       <span style="font-size: x-large;">Search for an event</span></a><br>
+            in the the Global CMT Catalog
+        </td>
+
+        <td>
+            <a href="{{root}}/config/events/upload/"><img src="{{root}}/icons/eventupload.gif" float=left>
+                                       <span style="font-size: x-large;">Upload an event file</span></a><br>
+            in CMTSOLUTION format
+        </td>
+
+    </tr>
+</table>

Modified: cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/login.html
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/login.html	2008-04-22 20:58:44 UTC (rev 11849)
+++ cs/portal/trunk/seismo/SeismoWebPortal/templates/registration/login.html	2008-04-23 01:57:48 UTC (rev 11850)
@@ -34,8 +34,6 @@
 
     {% if next %}
     <input type="hidden" name="next" value="{{ next }}" />
-    {% else %}
-    <input type="hidden" name="next" value="{{root}}/" />
     {% endif %}
 
     </div> <!-- tab30ex -->

Modified: cs/portal/trunk/seismo/SeismoWebPortal/views.py
===================================================================
--- cs/portal/trunk/seismo/SeismoWebPortal/views.py	2008-04-22 20:58:44 UTC (rev 11849)
+++ cs/portal/trunk/seismo/SeismoWebPortal/views.py	2008-04-23 01:57:48 UTC (rev 11850)
@@ -128,6 +128,7 @@
         "trash": trashFolder,
         "config": configFactory,
         "events": event_search,
+        "welcome": welcome,
         "profile": profile,
         "logout": logout,
         "help": help,
@@ -174,11 +175,19 @@
     openFileBrowser(request, desktop)
     openEventFinder(request, desktop)
     openEventViewers(request, desktop)
+    if not desktop.eventViewers:
+        openGreeter(request, desktop)
     if request.user.is_staff:
         openAdminApp(request, desktop)
     return
 
 
+def openGreeter(request, desktop):
+    welcome = gui.AppWindow(config.root + "/welcome/", "Welcome", Memento('welcome', request.session))
+    desktop.insertWindow(welcome)
+    desktop.welcome = welcome
+
+
 def openFileBrowser(request, desktop):
     navtree = gui.Directory("desktop", "Desktop", [
         gui.Directory("home", "Home", []),
@@ -285,6 +294,18 @@
     return gui.StaticContent(html.getvalue())
 
 
+def welcome(request, path, desktop):
+    if path: raise Http404
+    if not hasattr(desktop, 'welcome'):
+        openGreeter(request, desktop)
+    appWindow = desktop.welcome
+    desktop.selectWindow(appWindow)
+    child = gui.ChildWindow(config.root + "/welcome/", "View")
+    child.content = gui.StaticContent(loader.render_to_string('SeismoWebPortal/welcome.html', { 'root': config.root }))
+    desktop.activeWindow.selectWindow(child)
+    return desktop
+
+
 def readme(request, path, desktop):
     if path: raise Http404
     child = gui.ChildWindow(config.root + "/readme/", "View")
@@ -329,7 +350,13 @@
         url = config.root + "/config/%s/new/" % url
         window = gui.ChildWindow(url, "New")
         window.buttons.append(helpButton(request))
-        return create(request, desktop, window, ModelClass)
+        kwds = {}
+        ws = request.REQUEST.get('ws', None)
+        if ws:
+            ws = intOr404(ws)
+            kwds = dict(post_save_redirect = "%s/%d/#ps%%(id)d" % (config.root, ws),
+                        extra_context = {'ws': ws})
+        return create(request, desktop, window, ModelClass, **kwds)
 
     raise Http404
 
@@ -453,7 +480,7 @@
                   gui.MenuItem(url + "specfem3dglobe/meshes/new/1/", "Specfem 3D Globe 1-chunk Regional Mesh"),
                   gui.MenuItem(url + "specfem3dglobe/meshes/new/2/", "Specfem 3D Globe 2-chunk Regional Mesh"),
                   gui.MenuItem(url + "specfem3dglobe/meshes/new/3/", "Specfem 3D Globe 3-chunk Regional Mesh"),
-                  gui.MenuItem(url + "specfem3dglobe/meshes/new/6/", "Specfem 3D Globe Global Mesh"),
+                  #gui.MenuItem(url + "specfem3dglobe/meshes/new/6/", "Specfem 3D Globe Global Mesh"),
                   gui.MenuItem(url + "specfem3dglobe/parameters/new/", "Specfem 3D Globe Parameter Set"),
                   gui.MenuItem(url + "mineos/modes/new/", "Mineos Mode Catalog"),
                   gui.MenuItem(url + "mineos/parameters/new/", "Mineos Parameter Set"),
@@ -478,12 +505,18 @@
     if name == "new":
         window = gui.ChildWindow(config.root + "/config/specfem3dglobe/parameters/new/", "New")
         window.buttons.append(helpButton(request))
+        post_save_redirect = config.root + '/home/'
+        ws = request.REQUEST.get('ws', None)
+        if ws:
+            ws = intOr404(ws)
+            post_save_redirect = "%s/%d/#ps%%(id)d" % (config.root, ws)
         return create_object(request,
                              desktop,
                              window,
                              Specfem3DGlobeParameters,
-                             post_save_redirect = config.root + '/home/',
+                             post_save_redirect = post_save_redirect,
                              follow = { 'fsNode': False },
+                             extra_context = {'ws': ws},
                              )
     raise Http404
     
@@ -595,9 +628,6 @@
     if request.POST:
         errors = manipulator.get_validation_errors(request.POST)
         if not errors:
-            # Light security check -- make sure redirect_to isn't garbage.
-            if not redirect_to or '://' in redirect_to or ' ' in redirect_to:
-                redirect_to = '/accounts/profile/'
             from django.contrib.auth import login
             user = manipulator.get_user()
             loginUser(request, user)
@@ -605,6 +635,9 @@
             user.save()
             request.session.delete_test_cookie()
             help_login_hook(request, user)
+            # Light security check -- make sure redirect_to isn't garbage.
+            if not redirect_to or '://' in redirect_to or ' ' in redirect_to:
+                redirect_to = postLoginURL(user)
             return HttpResponseRedirect(redirect_to)
     else:
         errors = {}
@@ -661,6 +694,12 @@
     desktop.activeWindow.selectWindow(reset)
     return desktop
 
+def postLoginURL(user):
+    q = EventWorkspace.objects.filter(fsNode__owner = user, fsNode__inTrash = False)
+    if q.count() == 0:
+        return "%s/welcome/" % config.root
+    return "%s/home/" % config.root
+
 def event_txt(request):
 
     parameters = Specfem3DGlobeParameters.objectFromSnapshot(request.parameters)
@@ -855,18 +894,14 @@
 def notify_user_of_successful_run(run):
     from django.core.mail import send_mail
 
-    if True: # NYI
-        return
+    user = run.request.requestor
 
-    sim = run.simulation
-    user = sim.user
-
-    subject = 'The simulation "%s" has finished running.' % sim.name
-    message = ['The simulation "%s" has finished running.' % sim.name,
+    subject = 'Your simulation has finished running.'
+    message = ['Your simulation has finished running.',
                "",
-               "To download the output, visit the following web page:",
+               "To download the output, visit the portal:",
                "",
-               "https://crust.geodynamics.org%s/simulations/%d/" % (config.root, sim.id),
+               "https://crust.geodynamics.org%s/" % config.root,
                "",
                "Sincerely,",
                "The CIG Seismology Web Portal",
@@ -981,7 +1016,7 @@
                 help_login_hook(request, user)
                 notify_managers_of_new_user(request, user)
                 user.message_set.create(message="Welcome to the CIG Seismology Web Portal!")
-                return HttpResponseRedirect(config.root + '/')
+                return HttpResponseRedirect(config.root + "/welcome/")
     else:
         # Populate new_data with a 'flattened' version of the current data.
         new_data = manipulator.flatten_data()
@@ -1226,24 +1261,28 @@
 # ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
 
-def create(request, desktop, window, ModelClass):
+def create(request, desktop, window, ModelClass, **kwds):
+    post_save_redirect = kwds.pop('post_save_redirect', config.root + '/home/')
     return create_object(request,
                          desktop,
                          window,
                          ModelClass,
-                         post_save_redirect = config.root + '/home/',
+                         post_save_redirect = post_save_redirect,
                          follow = { 'fsNode': False },
+                         **kwds
                          )
 
 
-def update(request, desktop, window, object_id, ModelClass):
+def update(request, desktop, window, object_id, ModelClass, **kwds):
+    post_save_redirect = kwds.pop('post_save_redirect', config.root + '/home/')
     return update_object(request,
                          desktop,
                          window,
                          ModelClass,
                          object_id,
-                         post_save_redirect = config.root + '/home/',
+                         post_save_redirect = post_save_redirect,
                          follow = { 'fsNode': False },
+                         **kwds
                          )
 
 
@@ -1416,6 +1455,8 @@
                                           record_length__gte = workspace.record_length):
         requests[request.code].append(request)
 
+    assist = True
+
     # Pair each parameter set with matching requests, if any.
     for ParameterClass in parameterClasses:
         for ps in parameterSetList[ParameterClass]:
@@ -1425,9 +1466,11 @@
             for request in requests[ParameterClass.code]:
                 if request.parameters == parameters:
                     ps.outputStatus = runOutputStatus(request.run)
+                    assist = False
 
     t = loader.get_template('SeismoWebPortal/seismogram_table.html')
     c = Context({'root': config.root,
+                 'assist': assist,
                  'workspace': workspace,
                  'mineos_parameter_set_list': parameterSetList.get(MineosParameters),
                  'specfem3dglobe_parameter_set_list': parameterSetList.get(Specfem3DGlobeParameters),



More information about the cig-commits mailing list