app/views/courses/show.html.erb
<% if can? :teach, @course %>
<%= javascript_tag do %>
window.courseTemplateId = "<%=j @course.course_template.id %>";
<% end %>
<%= javascript_include_tag 'course-refresh' %>
<% end %>
<div class="row">
<div class="col-md-12">
<% if can? :edit, @course %>
<%= link_to 'Edit details', edit_setup_organization_course_course_details_path(@organization, @course), class: "btn btn-primary pull-right" %>
<% end %>
<h1><%= @course.title %></h1>
<div class="card">
<div class="card-body">
<% unless @course.description.blank? %>
<p class="card-text"><%= @course.description %></p>
<% end %>
</div>
</div>
<br>
<% unless @course.initial_refresh_ready? %>
<p class='course-initial-refresh-warning'><strong>
Course is being updated and it is not fully functional yet! Please wait.</strong>
<br>This operation usually takes about 15 minutes but it can take up to an hour.
</p>
<% end %>
<div class="course-options-card">
<% unless @course.material_url.blank? %>
<%= link_to @course.material_url, target: '_blank', class: 'btn btn-primary' do %>
<%= fa_icon 'book', text: 'Course material' %>
<% end %>
<% end %>
<% if @course.has_external_scoreboard_url? %>
<% if can? :view_external_scoreboard_url, @course %>
<%= link_to @course.parsed_external_scoreboard_url(@organization, @course, current_user), target: '_blank', class: 'btn btn-primary' do %>
<%= fa_icon 'list', text: 'Points list' %>
<% end %>
<% end %>
<% else %>
<% if can? :see_points, @course %>
<%= link_to organization_course_points_path(@organization, @course), class: 'btn btn-primary' do %>
<%= fa_icon 'list', text: 'Points list' %>
<% end %>
<% end %>
<% end %>
</div>
<br >
<% if @course.disabled? %>
<div class="card text-danger border-danger mb-3">
<div class="card-body">
<h3 class="card-title"><%= fa_icon 'warning', text: 'This course is disabled' %></h3>
<p class="card-text">
It is not possible to start this course while it is disabled and the course is hidden from the course list.
However, old results should still be visible.
</p>
<%= link_to 'Enable course', enable_organization_course_path(@organization, @course), method: :post, class: "btn btn-danger" if can? :teach, @course %>
</div>
</div>
<% end %>
<% if can? :teach, @course %>
<% if @course.hide_submission_results? %>
<div class="card text-danger border-danger mb-3">
<div class="card-body">
<h3 class="card-title"><%= fa_icon 'warning', text: 'Exam mode enabled' %></h3>
<p class="card-text">
This course is marked as an exam.
<ul>
<li>Submission results will not be visible to users.</li>
<li>Model solutions are not accessible.</li>
<li>Points are hidden.</li>
</ul>
</p>
<%= link_to 'Disable exam mode', toggle_submission_result_visibility_organization_course_path(@organization, @course), method: :post, class: "btn btn-danger" if can? :teach, @course %>
</div>
</div>
<% end %>
<% if @course.hidden? %>
<div class="card text-danger border-danger mb-3">
<div class="card-body">
<h3 class="card-title"><%= fa_icon 'warning', text: 'Course is hidden' %></h3>
<p class="card-text">
This is rarely a good idea. Consider disabling it instead.
</p>
<%= link_to 'Make course visible', toggle_hidden_organization_course_path(@organization, @course), method: :post, class: "btn btn-danger" if can? :teach, @course %>
</div>
</div>
<% end %>
<% end %>
<% if can? :teach, @course %>
<div class="teacher-panel">
<h4><%= fa_icon 'graduation-cap', text: 'Teacher functions' %></h4>
<%= render :partial => 'courses/refresh_progress_report', :locals => { :refresh_initialized => @refresh_initialized } %>
<% if @refresh_report %>
<%= render :partial => 'courses/refresh_report', :locals => { :report => @refresh_report } %>
<% end %>
<ul>
<% # User mails %>
<% if can?(:list_user_emails, @course) || can?(:send_mail_to_participants, @course) %>
<li>
<% if can?(:list_user_emails, @course) %>
<%= link_to 'View student emails', organization_emails_path, class: 'btn btn-sm btn-link' %>
<% end %>
<% if can? :send_mail_to_participants, @course %>
<%= link_to 'Send message to every participant', new_organization_course_course_notifications_path(@organization, @course), class: 'btn btn-link btn-sm' %>
<% end %>
</li>
<% end %>
<% # Feedback questions %>
<li>
<%= link_to 'View feedback', organization_course_feedback_answers_path(@organization, @course), class: 'btn btn-sm btn-link' %>
<%= link_to 'Manage feedback questions', organization_course_feedback_questions_path(@organization, @course), class: 'btn btn-sm btn-link' %>
</li>
<% if @course.code_review_requests_enabled? && can?(:view_code_reviews, @course) %>
<li><%= link_to 'View code reviews', organization_course_reviews_path(@organization, @course), class: 'btn btn-sm btn-link' %></li>
<%
reviews_required = @course.reviews_required.count
reviews_requested = @course.reviews_requested.count
%>
<% if reviews_required > 0 %>
<li class="review-required">
<%= link_to pluralize(reviews_required, "code review") + " required", organization_course_reviews_path(@organization, @course) %>
</li>
<% end %>
<% if reviews_requested > 0 %>
<li class="review-requested">
<%= link_to pluralize(reviews_requested, "code review") + " requested", organization_course_reviews_path(@organization, @course) %>
</li>
<% end %>
<% end %>
<li>
<% if @course.code_review_requests_enabled? %>
<%= link_to 'Disable code review requests', toggle_code_review_requests_organization_course_path(@organization, @course), method: :post, class: "btn btn-warning btn-sm" %>
<% else %>
<%= link_to 'Enable code review requests', toggle_code_review_requests_organization_course_path(@organization, @course), method: :post, class: "btn btn-warning btn-sm" %>
<% end %>
</li>
<% # Course timing, deadlines, unlocks %>
<% if can? :manage_deadlines, @course %>
<li>
<%= link_to 'Manage basic timing', setup_organization_course_course_timing_path(@organization, @course), class: "btn tvn-default btn-link btn-sm" %>
<%= link_to 'Advanced deadlines management', manage_deadlines_organization_course_path(@organization, @course), class: "btn btn-link btn-sm" %>
<%= link_to 'Advanced unlock conditions management', manage_unlocks_organization_course_path, class: "btn btn-link btn-sm" %>
</li>
<% end %>
<li>
<% if can? :edit, @course %>
<%= link_to 'Edit course details', edit_setup_organization_course_course_details_path(@organization, @course), class: "btn btn-link btn-sm" %>
<% end %>
<% if can? :manage_exercises, @course %>
<%= link_to 'Manage exercises', manage_exercises_organization_course_path, class: "btn btn-link btn-sm" %>
<% end %>
<% if can? :modify_assistants, @course %>
<%= link_to 'Manage assistants', setup_organization_course_course_assistants_path(@organization, @course), class: "btn btn-link btn-sm" %>
<% end %>
</li>
<li>
<% if can? :toggle_submission_result_visibility, @course %>
<% if @course.hide_submission_results? %>
<%= link_to 'Disable exam mode', toggle_submission_result_visibility_organization_course_path(@organization, @course), method: :post, class: "btn btn-primary btn-sm" %>
<% else %>
<%= link_to 'Enable exam mode', toggle_submission_result_visibility_organization_course_path(@organization, @course), method: :post, class: "btn btn-warning btn-sm" %>
<% end %>
<% end %>
<% if can? :refresh, @course %>
<%= link_to 'Refresh', refresh_organization_course_path(@organization, @course), id: 'refresh-btn', class: "btn btn-warning btn-sm #{@refresh_initialized ? ' disabled' : nil}", data: { disable_with: "Refreshing..." } %>
<% end %>
<% if @course.disabled? %>
<%=
link_to 'Enable Course', enable_organization_course_path(@organization, @course), method: :post,
class: "btn btn-info btn-sm" %>
<% else %>
<%=
link_to 'Disable Course', disable_organization_course_path(@organization, @course), method: :post,
class: "btn btn-danger btn-sm", data: { confirm: "Are you sure you want to disable the course?" } %>
<% end %>
</li>
<% unlockables = @course.unlockable_exercises_for(current_user) %>
<% unless unlockables.empty? %>
<p>
You can <%= link_to "unlock #{pluralize(unlockables.count, 'new exercise')}", organization_course_unlock_path(@organization, @course) %>.
</p>
<% end %>
<% # General info %>
<% if @course.refreshed_at %>
<li>
Last refreshed at <%= @course.refreshed_at.strftime("%d.%m.%Y %H:%M:%S") %>
<% if @course.course_template.course_template_refreshes.any? %>
by <%= @course.course_template.course_template_refreshes.last.user.login %>
<%= link_to 'Show last report', organization_course_path(@organization, @course, generate_report: @course.course_template.course_template_refreshes.last.id), class: "btn btn-link" %>
<% end %>
</li>
<% end %>
<% if @course.disabled? %>
<li>The course is currently <strong>disabled</strong>.</li>
<% end %>
<% if @course.hidden? %>
<li>The course is currently <strong>hidden</strong>.</li>
<% end %>
<% if @course.hide_after != nil %>
<li>Course hidden after: <%= @course.hide_after %></li>
<% end %>
<% if @course.hidden_if_registered_after != nil %>
<li>Course hidden from user accounts created after: <%= @course.hidden_if_registered_after %></li>
<% end %>
<li>
Number of submissions (from <span title="administrators and specially marked test user accounts are excluded">actual users</span>): <%= @total_submissions %>
(stats <%= link_to 'over time', organization_course_stat_path(@organization, @course, 'submissions') %>,
<%= link_to 'by hour', organization_course_stat_path(@organization, @course, 'submission_times') %>)
</li>
<% if @course.moocfi_id? %>
<li>MOOC.fi id: <%= @course.moocfi_id %></li>
<% else %>
<li>Points will not be synchronized to MOOC.fi until MOOC.fi id is set.</li>
<% end %>
</ul>
</div>
<% end # :teach, @course %>
<% if current_user.administrator? %>
<div class="admin-panel">
<h4><%= fa_icon 'exclamation-circle', text: 'Admin functions' %></h4>
<ul>
<% if current_user.administrator? %>
<li>Source type: <%= @course.source_backend.upcase %> </li>
<li>Source URL: <span class="source-url"><%= @course.source_url %></span></li>
<% if @course.source_backend == 'git' %>
<% github_url = github_repo_url_to_project_page_url(@course.source_url) %>
<% if github_url %>
<li>Github URL: <%= link_to github_url, github_url %></li>
<% end %>
<li>Git branch: <%= @course.git_branch %></li>
<% gitrev = @course.git_revision %>
<% if gitrev %>
<li>Git revision: <%= gitrev %></li>
<% end %>
<% end %>
<% unless @course.custom? %>
<li>Created from template: <%= link_to @course.course_template.name, course_templates_path %></li>
<% end %>
<% end %>
</ul>
</div>
<% end %>
<h2>All exercises</h2>
<div>
<%=
render partial: 'exercises/list', locals: {
course: @course,
exercises: @exercises,
completion_status: @exercise_completion_status,
unlocks: @unlocks
}
%>
</div>
<% if @submissions %>
<h2>Latest submissions</h2>
<section>
<% if @total_submissions > @submissions.count %>
<p>
Only showing <%= @submissions.count %> of <%= @total_submissions %>
<%= link_to "(show all)", organization_course_submissions_path(@organization, @course) %>.
</p>
<% end %>
<div>
<%= show_submission_list(@submissions) %>
</div>
</section>
<% end %>
</div>
</div>