Index: test/functional/assignments_controller_test.rb
===================================================================
--- test/functional/assignments_controller_test.rb	(revision 1184)
+++ test/functional/assignments_controller_test.rb	(revision 1207)
@@ -45,10 +45,32 @@
       setup do
         post_as @admin, :new, :id => @assignment.id
       end
-      
       should_assign_to :assignment, :assignments
       should_respond_with :success
     end
+
+    context "with REPOSITORY_EXTERNAL_SUBMITS_ONLY as false" do
+      setup do
+        MarkusConfigurator.stubs(:markus_config_repository_external_submits_only?).returns(false)
+        get_as @admin, :new
+      end
+      should "set allow_web_submits accordingly" do
+        assignment = assigns(:assignment)
+        assert assignment.allow_web_submits == true
+      end      
+    end
+
+    context "with REPOSITORY_EXTERNAL_SUBMITS_ONLY as true" do
+      setup do
+        MarkusConfigurator.stubs(:markus_config_repository_external_submits_only?).returns(true)
+        get_as @admin, :new
+      end
+      should "set allow_web_submits accordingly" do
+        assignment = assigns(:assignment)
+        assert assignment.allow_web_submits == false
+      end      
+    end
+
     
   end # context: A logged in admin doing a GET
   
Index: app/models/student.rb
===================================================================
--- app/models/student.rb	(revision 1184)
+++ app/models/student.rb	(revision 1207)
@@ -103,9 +103,6 @@
       @group = Group.find(:first, :conditions => {:group_name => self.user_name})
     else
       @group = Group.new(:group_name => self.user_name)
-      # We want to have the user_name as repository name,
-      # so we have to set the repo_name before we save the group.
-      @group.repo_name = self.user_name
       @group.save
     end
     @grouping.group = @group
Index: app/models/mark.rb
===================================================================
--- app/models/mark.rb	(revision 1184)
+++ app/models/mark.rb	(revision 1207)
@@ -8,7 +8,7 @@
   belongs_to :result
   validates_presence_of :result_id, :markable_id, :markable_type
   validates_numericality_of :result_id, :only_integer => true, :greater_than => 0, :message => "result_id must be an id that is an integer greater than 0"
-  validates_numericality_of :mark, :only_integer => true, :greater_than => -1, :less_than => 5, :message => "Mark must be an integer between 0 and 4"
+  validates_numericality_of :mark, :allow_nil => true, :only_integer => true, :greater_than => -1, :less_than => 5, :message => "Mark must be an integer between 0 and 4"
   validates_numericality_of :markable_id, :only_integer => true, :greater_than => 0, :message => "Criterion must be an id that is an integer greater than 0"
   validates_uniqueness_of :markable_id, :scope => [:result_id, :markable_type]
 
Index: app/models/group.rb
===================================================================
--- app/models/group.rb	(revision 1184)
+++ app/models/group.rb	(revision 1207)
@@ -21,10 +21,7 @@
 
   # Set repository name in database after a new group is created
   def set_repo_name
-    # Set repo_name only if it has not been set, yet.
-    if self.repo_name.nil?
-      self.repo_name = get_autogenerated_group_name
-    end
+    self.repo_name = get_autogenerated_group_name
     self.save(false) # need to save!
   end
 
Index: app/controllers/assignments_controller.rb
===================================================================
--- app/controllers/assignments_controller.rb	(revision 1184)
+++ app/controllers/assignments_controller.rb	(revision 1207)
@@ -105,7 +105,7 @@
     
     if !request.post?
       # set default value if web submits are allowed
-      @assignment.allow_web_submits = markus_config_repository_external_submits_only?
+      @assignment.allow_web_submits = !MarkusConfigurator.markus_config_repository_external_submits_only?
       render :action => 'new'
       return
     end   
@@ -207,10 +207,14 @@
       if @student.has_accepted_grouping_for?(@assignment.id)
         raise "You already have a group, and cannot create another"
       end
-      if params[:workalone] && @assignment.group_min != 1
+      if params[:workalone]
+        if @assignment.group_min != 1
           raise "You cannot work alone for this assignment - the group size minimum is #{@assignment.group_min}"
+        end
+        @student.create_group_for_working_alone_student(@assignment.id)
+      else
+        @student.create_autogenerated_name_group(@assignment.id)
       end
-      @student.create_autogenerated_name_group(@assignment.id)
       m_logger.log(I18n.t("markus_logger.student_created_group", :user_name => @student.user_name), MarkusLogger::INFO)
     rescue RuntimeError => e
       flash[:fail_notice] = e.message
@@ -303,12 +307,12 @@
         m_logger.log(I18n.t("markus_logger.student_invited_student", :inviter => @student.user_name, :invitee => @invited.user_name))
       rescue Exception => e
         flash[:fail_notice].push(e.message)
-	invitee = nil
-	if !@invited.nil?
-	  invitee = @invited.user_name
-	else
-	  invitee = user_name
-	end
+        invitee = nil
+        if !@invited.nil?
+          invitee = @invited.user_name
+        else
+          invitee = user_name
+        end
         m_logger.log(I18n.t('markus_logger.student_invitation_failure',
                             { :inviter => @student.user_name, :invitee => invitee,
                               :error => e.message }), MarkusLogger::ERROR)
Index: app/controllers/results_controller.rb
===================================================================
--- app/controllers/results_controller.rb	(revision 1184)
+++ app/controllers/results_controller.rb	(revision 1207)
@@ -184,26 +184,25 @@
   
   def update_mark
     result_mark = Mark.find(params[:mark_id])
-    mark_value = params[:mark]
-    result_mark.mark = mark_value
+    result_mark.mark = params[:mark]
     submission = result_mark.result.submission  # get submission for logging
     group = submission.grouping.group           # get group for logging
     assignment = submission.grouping.assignment # get assignment for logging
     m_logger = MarkusLogger.instance
     if !result_mark.save
-      m_logger.log(I18n.t('markus_logger.user_update_mark_submission_fail',
-                    { :user_name => current_user.user_name, 
-                      :submission_id => submission.id, :group_name => group.group_name,
-                      :assignment => assignment.short_identifier}), MarkusLogger::INFO)
-      render :partial => 'shared/handle_error', :locals => {:error => I18n.t('mark.error.save') + result_mark.errors}
+        m_logger.log(I18n.t('markus_logger.user_update_mark_submission_fail',
+                      { :user_name => current_user.user_name, 
+                        :submission_id => submission.id, :group_name => group.group_name,
+                        :assignment => assignment.short_identifier}), MarkusLogger::ERROR)
+        render :partial => 'shared/handle_error', :locals => {:error => I18n.t('mark.error.save') + result_mark.errors}
     else
-      m_logger.log(I18n.t('markus_logger.user_update_mark_submission',
-                    { :user_name => current_user.user_name, 
-                      :submission_id => submission.id, :group_name => group.group_name,
-                      :assignment => assignment.short_identifier}), MarkusLogger::ERROR)
-      render :partial => 'results/marker/update_mark',
-             :locals => { :result_mark => result_mark, :mark_value => mark_value}
-    end
+        m_logger.log(I18n.t('markus_logger.user_update_mark_submission',
+                      { :user_name => current_user.user_name, 
+                        :submission_id => submission.id, :group_name => group.group_name,
+                        :assignment => assignment.short_identifier}), MarkusLogger::INFO)
+        render :partial => 'results/marker/update_mark',
+               :locals => { :result_mark => result_mark, :mark_value => result_mark.mark}
+     end
   end
   
   def view_marks
@@ -320,5 +319,7 @@
     end
     return repo.download_as_string(revision.files_at_path(file.path)[file.filename])
   end
-  
+
+
+
 end
Index: app/MARKUS_VERSION
===================================================================
--- app/MARKUS_VERSION	(revision 1184)
+++ app/MARKUS_VERSION	(revision 1207)
@@ -1 +1 @@
-VERSION=0.6,PATCH_LEVEL=1
+VERSION=0.6,PATCH_LEVEL=2
Index: app/views/results/marker/_update_mark.rjs
===================================================================
--- app/views/results/marker/_update_mark.rjs	(revision 1184)
+++ app/views/results/marker/_update_mark.rjs	(revision 1207)
@@ -1,6 +1,6 @@
 page.call 'select_mark', result_mark.id, mark_value
-page.replace_html "rubric_criterion_title_#{result_mark.id.to_s}_mark", "<b> #{result_mark.mark}:  #{result_mark.markable["level_" + result_mark.mark.to_s + "_name"]}</b> #{result_mark.markable["level_" + result_mark.mark.to_s + "_description"]}"
+page.replace_html "rubric_criterion_title_#{result_mark.id.to_s}_mark", "<b> #{result_mark.mark}#{result_mark.mark and ':'}  #{result_mark.markable["level_" + result_mark.mark.to_s + "_name"]}</b> #{result_mark.markable["level_" + result_mark.mark.to_s + "_description"]}"
 page.replace_html "mark_#{result_mark.id.to_s}_summary_mark", result_mark.mark
-page.replace_html "mark_#{result_mark.id.to_s}_summary_mark_after_weight", (result_mark.mark * result_mark.markable.get_weight)
+page.replace_html "mark_#{result_mark.id.to_s}_summary_mark_after_weight", (result_mark.get_mark)
 page.replace_html "current_subtotal_div", result_mark.result.get_subtotal
-page.call "update_total_mark", result_mark.result.total_mark
+page.call "update_total_mark", result_mark.result.total_mark
\ No newline at end of file
Index: app/views/results/marker/_marker_rubric_criterion_li.html.erb
===================================================================
--- app/views/results/marker/_marker_rubric_criterion_li.html.erb	(revision 1184)
+++ app/views/results/marker/_marker_rubric_criterion_li.html.erb	(revision 1207)
@@ -5,29 +5,29 @@
 <li class="<%= cycle('rubric_criterion_holder_A', 'rubric_criterion_holder_B') %>" id="<%= "rubric_criterion_#{rubric_criterion.id}" %>">
 
   <div class="criterion_title" id="<%= "rubric_criterion_title_#{rubric_criterion.id}"%>" onclick="<%="focus_rubric_criterion(#{rubric_criterion.id})"%>">
-
 <div id="<%="rubric_criterion_title_#{rubric_criterion.id}_expand"%>"
-class="float_left rubric_criterion_expand expanded">- &nbsp;
+class="float_left rubric_criterion_expand expanded" >- &nbsp;
 </div>
-
+<div id="mark_<%=mark.id%>_nil" class="rubric_reset" onclick="<%=remote_function :url => {:action => 'update_mark', :mark_id=>mark.id, :mark=>nil} %>">
+<%=image_tag "icons/pencil_delete.png", :title => "reset mark"%>
+</div>
   <%= render :partial => 'results/common/rubric_criterion', :locals => {:rubric_criterion => rubric_criterion, :mark => mark} %>
 
   <div id="<%="rubric_criterion_inputs_#{rubric_criterion.id}"%>" class="rubric_criterion_level_container" >
 
-    <div class="float_left">
+    <div class="float_left cursor_hand">
         <table id="mark_<%=mark.id%>_table">
-        <% num_levels = 0
-        selected = "rubric_criterion_level"
-          while (num_levels < RubricCriterion::RUBRIC_LEVELS) 
-            level_name = rubric_criterion["level_" + num_levels.to_s + "_name"]
-            level_desc = rubric_criterion["level_" + num_levels.to_s + "_description"]
-            if (num_levels == mark.mark)
+	  <%
+        (0...RubricCriterion::RUBRIC_LEVELS).each do |num_levels|
+			if (num_levels == mark.mark)
               td_class = "rubric_criterion_level_selected"
             else
               td_class = "rubric_criterion_level"
             end
-        -%>
-          <% if level_desc && !level_desc.empty? -%>
+            level_name = rubric_criterion["level_" + num_levels.to_s + "_name"]
+            level_desc = rubric_criterion["level_" + num_levels.to_s + "_description"]
+
+            if level_desc && !level_desc.empty? -%>
             <tr>
                <td id="mark_<%=mark.id%>_<%=num_levels%>" class="<%=td_class%>"
 			     onclick="<%=remote_function :url => {:action => 'update_mark', :mark_id=>mark.id, :mark=>num_levels} %>">
@@ -35,8 +35,7 @@
                </td>
             </tr>
          <% end -%>
-        <% num_levels = num_levels + 1
-          end -%>
+        <% end -%>
           </table>
     </div>
 
Index: NAMED_REVISIONS
===================================================================
--- NAMED_REVISIONS	(revision 1184)
+++ NAMED_REVISIONS	(revision 1207)
@@ -1,4 +1,5 @@
 --- MarkUs 0.6 ---
+Version 0.6.2 corresponds to Subversion revision 1207 in branches/release_0.6
 Version 0.6.1 corresponds to Subversion revision 1183 in branches/release_0.6
 Version 0.6.0 corresponds to Subversion revision 1156 in branches/release_0.6
 
Index: Changelog
===================================================================
--- Changelog	(revision 1184)
+++ Changelog	(revision 1207)
@@ -1,3 +1,9 @@
+Changes for MarkUs 0.6.2:
+* For now, students who work alone do not have their repositories named after them
+* "Allow Web Submits?" in Assignment Properties page defaults to REPOSITORY_EXTERNAL_SUBMITS_ONLY setting now
+* Annotation Category dropdowns no longer close prematurely on mouseover-ing a tooltip
+* Added "Reset Mark" capability to grader view
+
 Changes for MarkUs 0.6.1:
 
 * Fixed trace on detailed CSV download for assignments (g9jerboa)
Index: public/javascripts/DropDownMenu/DropDownMenu.js
===================================================================
--- public/javascripts/DropDownMenu/DropDownMenu.js	(revision 1184)
+++ public/javascripts/DropDownMenu/DropDownMenu.js	(revision 1207)
@@ -21,7 +21,7 @@
     $(this.trigger_node).observe('mouseout', function(event) {
       var menu_node = me.getMenuNode();
       var mouse_entered = me.getRelatedTarget(event);
-      if(mouse_entered == null || !mouse_entered.descendantOf(menu_node)) {
+      if(mouse_entered !== null && !mouse_entered.descendantOf(menu_node) && mouse_entered.tagName != "HTML") {
         me.hide();
       }
     });
Index: public/javascripts/Grader/marking.js
===================================================================
--- public/javascripts/Grader/marking.js	(revision 1184)
+++ public/javascripts/Grader/marking.js	(revision 1207)
@@ -24,11 +24,12 @@
   if (typeof(original_mark) != "undefined") {
     original_mark.removeClassName('rubric_criterion_level_selected');
   }
-  $('mark_' + mark_id + '_' + mark).addClassName('rubric_criterion_level_selected');
+  if (mark != null){
+    $('mark_' + mark_id + '_' + mark).addClassName('rubric_criterion_level_selected');
+  }
 }
 
 function update_total_mark(total_mark) {
   $('current_mark_div').update(total_mark);
   $('current_total_mark_div').update(total_mark);
 }
-
Index: public/stylesheets/grader.css
===================================================================
--- public/stylesheets/grader.css	(revision 1184)
+++ public/stylesheets/grader.css	(revision 1207)
@@ -338,7 +338,13 @@
     font-size:10px;
     background:none;
 }
-
+.rubric_reset {
+	color:black;
+    font-size:10px;
+    background:none;
+	float:right;
+	cursor: pointer;
+}
 .rubric_criterion_level_selected {
     font-size:10px;
     background-color:#FFFFCC;
Index: public/stylesheets/main.css
===================================================================
--- public/stylesheets/main.css	(revision 1184)
+++ public/stylesheets/main.css	(revision 1207)
@@ -767,7 +767,10 @@
 .float_right {
    float: right;
 }
-
+.cursor_hand {
+	float: left;
+	cursor: pointer;
+}
 .bonus_deduction {
   padding: 5px;
   background-color: #B7D3EC; 

