UI support for editing course details
authorgfawcett <gfawcett@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Sun, 8 Mar 2009 01:49:33 +0000 (01:49 +0000)
committergfawcett <gfawcett@6d9bc8c9-1ec2-4278-b937-99fde70a366f>
Sun, 8 Mar 2009 01:49:33 +0000 (01:49 +0000)
git-svn-id: svn://svn.open-ils.org/ILS-Contrib/servres/trunk@145 6d9bc8c9-1ec2-4278-b937-99fde70a366f

conifer/genshi_namespace.py
conifer/static/main.css
conifer/syrup/urls.py
conifer/syrup/views.py
conifer/templates/add_new_course.xhtml
conifer/templates/components/course.xhtml
conifer/templates/course_detail.xhtml

index e0bcf87..1022c05 100644 (file)
@@ -17,3 +17,12 @@ def call_or_value(obj, dflt=None):
         return obj() or dflt
     else:
         return obj or dflt
+
+
+def instructs(user, course):
+    try:
+        mbr = models.Member.objects.get(user=user, course=course)
+        return mbr.role in ('INSTR', 'PROXY')
+    except:
+        return False
+    
index 61497f3..0699b7f 100644 (file)
@@ -192,6 +192,8 @@ p.todo, div.todo { background-color: #fdd; padding: 6; margin: 12; border-left:
 
 #coursebanner h1 { padding: 0; font-size: 110%; }
 
+#edit_course_link { float: right; margin: 4 0 0 0; font-size: 95%; }
+
 .breadcrumbs { margin: 8 8 8 0; }
 
 .errorlist { float: right; }
@@ -205,4 +207,5 @@ p.todo, div.todo { background-color: #fdd; padding: 6; margin: 12; border-left:
     text-align: left; 
     font-size: 90%;
     font-weight: normal; 
-}
\ No newline at end of file
+}
+
index fee1c3d..cc11b73 100644 (file)
@@ -21,6 +21,7 @@ urlpatterns = patterns('conifer.syrup.views',
     (r'^instructor/(?P<instructor_id>.*)/$', 'instructor_detail'),
     (r'^department/(?P<department_id>.*)/$', 'department_detail'),
     (r'^course/(?P<course_id>\d+)/search/$', 'course_search'),
+    (r'^course/(?P<course_id>\d+)/edit/$', 'edit_course'),
     (ITEM_PREFIX + r'$', 'item_detail'),
     (ITEM_PREFIX + r'dl/(?P<filename>.*)$', 'item_download'),
     (ITEM_PREFIX + r'meta$', 'item_metadata'),
index 1c3a658..8dc951e 100644 (file)
@@ -171,20 +171,32 @@ if COURSE_CODE_LIST:
     
 @login_required
 def add_new_course(request):
+    return add_or_edit_course(request)
+
+@login_required
+def edit_course(request, course_id):
+    instance = models.Course.objects.get(pk=course_id)
+    return add_or_edit_course(request, instance=instance)
+    
+def add_or_edit_course(request, instance=None):
+    if instance is None:
+        instance = models.Course()
     example = models.course_codes.course_code_example
     if request.method != 'POST':
-        form = NewCourseForm(instance=models.Course())
+        form = NewCourseForm(instance=instance)
         return g.render('add_new_course.xhtml', **locals())
     else:
-        form = NewCourseForm(request.POST, instance=models.Course())
+        form = NewCourseForm(request.POST, instance=instance)
         if not form.is_valid():
             return g.render('add_new_course.xhtml', **locals())
         else:
             form.save()
             course = form.instance
             assert course.id
-            mbr = course.member_set.create(user=request.user, role='INSTR')
-            mbr.save()
+            user_in_course = models.Member.objects.filter(user=request.user,course=course)
+            if not user_in_course: # for edits, might already be!
+                mbr = course.member_set.create(user=request.user, role='INSTR')
+                mbr.save()
                                      
             # fixme, need to ask about PASWD and STUDT settings before redirect.
             return HttpResponseRedirect('../') # back to My Courses
index 3f39a6c..bf6bf7d 100644 (file)
@@ -1,5 +1,8 @@
 <?python
-title = _('Add a new course site')
+if instance.id:
+    title = _('Edit course details')
+else:
+    title = _('Add a new course site')
 ?>
 <html xmlns="http://www.w3.org/1999/xhtml"
       xmlns:xi="http://www.w3.org/2001/XInclude"
index 8361c81..c0a7ef2 100644 (file)
@@ -16,11 +16,12 @@ searchtext = _('search this course...')
     </form>
   </div>
   
-  <div py:def="course_banner(course)"
-       id="coursebanner">
-    <div class="deptident">${course.department}</div>
-    ${course_search(course)}
-    <h1><a href="${course.course_url()}">${course.code}: ${course.title}</a></h1>
+  <div py:def="course_banner(course)" py:strip="True">
+    <div id="coursebanner">
+      <div class="deptident">${course.department}</div>
+      ${course_search(course)}
+      <h1><a href="${course.course_url()}">${course.code}: ${course.title}</a></h1>
+    </div>
   </div>
   
   <!-- !show_tree: display a tree of items in a hierarchical style. -->
index ee40bec..07c24a0 100644 (file)
@@ -14,6 +14,9 @@ is_editor = course.can_edit(request.user)
   </head>
   <body>
     ${course_banner(course)}
+    <div py:if="instructs(request.user, course)" id="edit_course_link">
+      <a href="${course.course_url()}edit/">Edit course details</a>
+    </div>
     <p py:if="not item_tree">
       There are no items associated with this course yet.
     </p>