Conflicts:
	config/locales/zh.yml
dev_repository_hjq
alan 10 years ago
commit 22ac578ede

@ -8,10 +8,11 @@ module Mobile
optional :school_id, type: Integer, desc: '传入学校id,返回该学校课程列表'
requires :per_page_count, type: Integer, desc: '每页总数'
requires :page, type: Integer, desc: '当前页码'
optional :token, type: String
end
get do
cs = CoursesService.new
courses = cs.course_list(params)
courses = cs.course_list(params,current_user.nil? ? User.find(2):current_user)
present :data, courses, with: Mobile::Entities::Course
present :status, 0
end
@ -130,10 +131,11 @@ module Mobile
desc "搜索课程"
params do
requires :name, type: String, desc: "课程名"
optional :token, type: String
end
get 'search' do
cs = CoursesService.new
courses = cs.search_course(params)
courses = cs.search_course(params,current_user.nil? ? User.find(2):current_user)
present :data, courses, with: Mobile::Entities::Course
present :status, 0
end
@ -165,13 +167,15 @@ module Mobile
desc "返回单个课程"
params do
requires :id, type: Integer
optional :token, type: String
end
route_param :id do
get do
cs = CoursesService.new
course = cs.show_course(params,(current_user.nil? ? User.find(2):current_user))
#course = Course.find(params[:id])
{status: 0, data: course}
present :data, course, with: Mobile::Entities::Course
present :status, 0
end
end

@ -82,6 +82,7 @@ module Mobile
desc "用户搜索"
params do
requires :name, type: String, desc: '用户名关键字'
requires :search_by, type: String,desc: '搜索依据0 昵称1 用户名2 邮箱'
end
get 'search/search_user' do
us = UsersService.new

@ -1,6 +1,7 @@
module Mobile
module Entities
class Course < Grape::Entity
include Redmine::I18n
def self.course_expose(field)
expose field do |f,opt|
c = nil
@ -9,9 +10,11 @@ module Mobile
else
c = f[:course]
end
if field == :img_url
if f.is_a?(Hash) && f.key?(field)
f[field] if f.is_a?(Hash) && f.key?(field)
#f.img_url if f.respond_to?(:img_url)
elsif field == :created_at || field == :updated_at
(format_time(c[field]) if (c.is_a?(Hash) && c.key?(field))) || (format_time(c.send(field)) if c.respond_to?(field))
else
(c[field] if (c.is_a?(Hash) && c.key?(field))) || (c.send(field) if c.respond_to?(field))
end
@ -53,6 +56,8 @@ module Mobile
expose :my_homework,using: Mobile::Entities::HomeworkAttach do |f, opt|
f[:my_homework] if f.is_a?(Hash) && f.key?(:my_homework)
end
course_expose :current_user_is_member
course_expose :current_user_is_teacher
end
end
end

@ -6,12 +6,11 @@ module Mobile
c[field] if (c.is_a?(Hash) && c.key?(field))
end
end
course_dynamic_expose :type
course_dynamic_expose :count
course_dynamic_expose :course_name
course_dynamic_expose :need_anonymous_comments_count
course_dynamic_expose :student_commit_number
course_dynamic_expose :news_count
course_dynamic_expose :message_count
course_dynamic_expose :course_id
course_dynamic_expose :course_img_url
end
end
end

@ -18,8 +18,14 @@ module Mobile
homework_expose :id
#课程名称
homework_expose :course_name
#课程老师
homework_expose :course_teacher
#作业发布者
expose :author,using: Mobile::Entities::User do |f, opt|
f[:author]
end
#作业发布者真名
homework_expose :author_real_name
#作业次数
homework_expose :homework_times
#作业名称

@ -6,7 +6,11 @@ module Mobile
def self.homework_jours_expose(field)
expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field)
f[field]
if field == :created_at
format_time(f[field])
else
f[field]
end
elsif f.is_a?(::SeemsRateableRates)
end

@ -1,6 +1,7 @@
module Mobile
module Entities
class News < Grape::Entity
include Redmine::I18n
def self.news_expose(field)
expose field do |f,opt|
if f.is_a?(Hash) && f.key?(field)
@ -9,13 +10,18 @@ module Mobile
n = f[:news]
comments = f[:comments]
if n.is_a?(::News)
n.send(field) if n.respond_to?(field)
if field == :created_on
format_time(n.send(field)) if n.respond_to?(field)
else
n.send(field) if n.respond_to?(field)
end
end
end
end
end
news_expose :id
#新闻标题
news_expose :title

@ -99,7 +99,8 @@ class CoursesController < ApplicationController
#更新课程信息
def update
cs = CoursesService.new
@course = cs.edit_course params,@course,User.current
c = cs.edit_course params,@course,User.current
@course = c[:course]
if @course.errors.full_messages.count <= 0
respond_to do |format|
format.html {
@ -956,10 +957,34 @@ class CoursesController < ApplicationController
else
render_403
end
end
#根据已有课程复制课程
#param id:已有课程ID
def copy_course
if @course
@new_course = Course.new @course.attributes
@new_course.tea_id = User.current.id
@new_course.created_at = DateTime.now
@new_course.updated_at = DateTime.now
@new_course.endup_time = nil
if @new_course.save
r = Role.givable.find_by_id(Setting.new_project_user_role_id.to_i) || Role.givable.first
m = Member.new(:user => User.current, :roles => [r])
m.project_id = -1
course = CourseInfos.new(:user_id => User.current.id, :course_id => @new_course.id)
#user_grades = UserGrade.create(:user_id => User.current.id, :course_id => @course.id)
if @new_course.is_public == 1
course_status = CourseStatus.create(:course_id => @new_course.id, :watchers_count => 0, :changesets_count => 0, :grade => 0, :course_type => 1)
end
@new_course.members << m
@new_course.course_infos << course
redirect_to settings_course_url @new_course
end
else
render_404
end
end
private

@ -140,8 +140,6 @@ module HomeworkAttachHelper
#######################################################
def get_student_not_batch_homework_list bid,user
HomeworkAttach.find_by_sql("SELECT * FROM(SELECT homework_attaches.*,
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 1) AS t_score,
(SELECT AVG(stars) FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND is_teacher_score = 0) AS s_score,
(SELECT stars FROM seems_rateable_rates WHERE rateable_type = 'HomeworkAttach' AND rateable_id = homework_attaches.id AND rater_id = #{user.id} AND is_teacher_score = 0) AS m_score
FROM homework_attaches
INNER JOIN homework_evaluations ON homework_evaluations.homework_attach_id = homework_attaches.id

@ -314,28 +314,28 @@ module WelcomeHelper
str = '&nbsp;'.html_safe
case event.event_type
when 'news'
str << content_tag("span", l(:field_user_active_published)) <<
str << content_tag("span", l('user.active.published')) <<
content_tag("span", find_all_event_type(event)) <<
':&nbsp;'.html_safe <<
link_to(strip_tags(event.event_description).gsub(/&nbsp;/,''), event.event_url, {:title => event.event_description})
when 'issue', 'message' , 'bid' , 'wiki-page' , 'document'
str << content_tag("span", l(:field_user_active_published)) <<
str << content_tag("span", l('user.active.published')) <<
content_tag("span", find_all_event_type(event)) <<
':&nbsp;'.html_safe <<
link_to(event.event_title, event.event_url, {:title => event.event_title})
when 'reply' ,'Reply', 'Memo'
str << content_tag("span", l(:field_user_active_published)) <<
str << content_tag("span", l('user.active.published')) <<
content_tag("span", find_all_event_type(event)) <<
':&nbsp;'.html_safe <<
link_to(strip_tags(event.event_description).gsub(/&nbsp;/,''), event.event_url, {:title => event.event_description})
when 'attachment'
str << content_tag('span', l(:field_user_active_uploaded)) <<
str << content_tag('span', l('user.active.uploaded')) <<
content_tag('span', find_all_event_type(event)) <<
':&nbsp;'.html_safe <<
link_to(event.event_title, event.event_url, {:title => event.event_title}) <<
link_to(('&nbsp;['.html_safe+l(:label_downloads_list).to_s << ']'), project_files_path(event.container.project), :class => "attachments_list_color")
else
str << content_tag("span", l(:field_user_active_updated)) <<
str << content_tag("span", l('user.active.updated')) <<
content_tag("span", find_all_event_type(event)) <<
':&nbsp;'.html_safe << link_to(event.event_title, event.event_url, {:title => event.event_title})
end

@ -3,11 +3,11 @@ class CoursesService
include CoursesHelper
include HomeworkAttachHelper
include ApiHelper
#TODO:尚未整合权限系统
#参数school_id为0或不传时返回所有课程否则返回对应学校的课程
#参数per_page_count分页功能每页显示的课程数
#参数page分页功能当前页码
def course_list params
def course_list params,current_user
@school_id = params[:school_id]
per_page_option = params[:per_page_count] || 10
page_no = params[:page] || 1
@ -25,13 +25,13 @@ class CoursesService
@courses = @courses.offset(@course_pages.offset).limit(@course_pages.per_page)
course_list = []
@courses.each do |course|
course_list << {:course => course,:img_url => url_to_avatar(course)}
course_list << {:course => course,:img_url => url_to_avatar(course),:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
end
course_list
end
#搜索课程
def search_course params
def search_course params,current_user
courses_all = Course.all_course
name = params[:name]
if name.blank?
@ -44,6 +44,11 @@ class CoursesService
@courses_all = @courses;
end
@courses_all
course_list = []
@courses_all.each do |course|
course_list << {:course => course,:img_url => url_to_avatar(course),:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
end
course_list
end
#获取头像
@ -117,7 +122,7 @@ class CoursesService
scope = @course ? @course.news.course_visible(current_user) : News.course_visible(current_user)
news = []
scope.each do |n|
news << {:title => n.title,:author_name => n.author.name,:author_id => n.author.id, :description => n.description,:created_on => format_time(n.created_on),:comments_count => n.comments_count}
news << {:id => n.id,:title => n.title,:author_name => n.author.name,:author_id => n.author.id, :description => n.description,:created_on => format_time(n.created_on),:comments_count => n.comments_count}
end
news
end
@ -158,7 +163,7 @@ class CoursesService
unless (course.is_public == 1 || currnet_user.member_of_course?(@course)|| currnet_user.admin?)
raise '403'
end
course
{:course => course,:img_url => url_to_avatar(course),:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
end
#创建课程
@ -206,7 +211,7 @@ class CoursesService
@course.members << m
@course.course_infos << course
end
@course
{:course => @course,:img_url => url_to_avatar(@course),:current_user_is_member => current_user.member_of_course?(@course),:current_user_is_teacher => is_course_teacher(current_user,@course)}
end
#验证编辑课程的权限
@ -243,7 +248,7 @@ class CoursesService
course_status = CourseStatus.create(:course_id => course.id, :grade => 0)
end
end
course
{:course => course,:img_url => url_to_avatar(course),:current_user_is_member => current_user.member_of_course?(course),:current_user_is_teacher => is_course_teacher(current_user,course)}
end
#退出课程
@ -340,12 +345,18 @@ class CoursesService
end
news_count = course.news.count
message_count = course.journals_for_messages.count
{:course_name => course.name,:need_anonymous_comments_count=>need_anonymous_comments_count,:student_commit_number=>student_commit_number,:news_count=> news_count,:message_count=>message_count}
result = []
result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 1,:count => message_count}
result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 2,:count => need_anonymous_comments_count}
result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 3,:count => student_commit_number}
result << {:course_name => course.name,:course_id => course.id,:course_img_url => url_to_avatar(course),:type => 4,:count => news_count}
#{:course_name => course.name,:need_anonymous_comments_count=>need_anonymous_comments_count,:student_commit_number=>student_commit_number,:news_count=> news_count,:message_count=>message_count}
result
end
private
def show_homework_info course,bid,current_user,is_course_teacher
author = bid.author.lastname + bid.author.firstname
author_real_name = bid.author.lastname + bid.author.firstname
many_times = course.homeworks.index(bid) + 1
name = bid.name
homework_count = bid.homeworks.count #已提交的作业数量
@ -358,7 +369,7 @@ class CoursesService
end
#end
open_anonymous_evaluation = bid.open_anonymous_evaluation
{:course_name => course.name,:id => bid.id, :course_teacher => author, :homework_times => many_times, :homework_name => name, :homework_count => homework_count,:student_questions_count => student_questions_count,
{:course_name => course.name,:id => bid.id, :author => bid.author,:author_real_name => author_real_name, :homework_times => many_times, :homework_name => name, :homework_count => homework_count,:student_questions_count => student_questions_count,
:description => description, :homework_state => state,:open_anonymous_evaluation => open_anonymous_evaluation,:homework_for_anonymous_comments => homework_for_anonymous_comments}
end

@ -6,6 +6,7 @@ class HomeworkService
include WordsHelper
include ApiHelper
include HomeworkAttachHelper
include CoursesHelper
# 作业详情(老师才显示启动匿评,学生不显示
# many_times 第几次(作业)
@ -25,7 +26,7 @@ class HomeworkService
state = @bid.comment_status
#end
open_anonymous_evaluation = @bid.open_anonymous_evaluation
{:course_name => course.name,:id => @bid.id, :course_teacher => author, :homework_times => many_times, :homework_name => name, :homework_count => homework_count,:student_questions_count => student_questions_count,
{:course_name => course.name,:id => @bid.id, :author => @bid.author,:author_real_name =>author, :homework_times => many_times, :homework_name => name, :homework_count => homework_count,:student_questions_count => student_questions_count,
:description => description, :homework_state => state,:open_anonymous_evaluation => open_anonymous_evaluation}
end
@ -276,7 +277,7 @@ class HomeworkService
hw = bid.homeworks.where("user_id = #{current_user.id}")
my_homeworks << hw[0] unless (hw.nil? || hw[0].nil?)
end
course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:my_homework => my_homeworks}
course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:my_homework => my_homeworks,:current_user_is_member => current_user.member_of_course?(mp.course),:current_user_is_teacher => is_course_teacher(current_user,mp.course)}
end
course_list
end

@ -158,7 +158,7 @@ class UsersService
membership.sort! {|older, newer| newer.created_on <=> older.created_on }
course_list = []
membership.each do |mp|
course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course)}
course_list << {:course => mp.course,:img_url => url_to_avatar(mp.course),:current_user_is_member => current_user.member_of_course?(mp.course),:current_user_is_teacher => is_course_teacher(current_user,mp.course)}
end
course_list
end

@ -68,7 +68,7 @@
</tr>
<tr>
<td>
<%=link_to "主页", home_path %> >
<%=link_to l(:field_homepage), home_path %> >
<span>
<%=link_to @user.name, user_path %>
</span>
@ -343,7 +343,7 @@
<% if @user.user_extensions.identity == 2 %>
<%= render_menu :user_enterprise_menu %>
<% else %>
<%= render_menu :user_menu,@user %>
<%= render_menu :user_menu, @user %>
<% end %>
</div>

@ -151,9 +151,9 @@
<!-- modified by fq -->
<% if !User.current.user_extensions.nil? && !User.current.user_extensions.student_id.nil? %>
<%= text_field_tag :no, User.current.user_extensions.student_id, :placeholder => "请输入学号" %>
<%= text_field_tag :no, User.current.user_extensions.student_id, :placeholder => l(:label_account_identity_studentID) %>
<% else %>
<%= text_field_tag :no, nil, :placeholder => "请输入学号" %></span>
<%= text_field_tag :no, nil, :placeholder => l(:label_account_identity_studentID) %></span>
<% end %>
<!-- end -->
@ -217,18 +217,18 @@
<label for="occupation_name"><%= l(:field_occupation) %></label>
<span class="required">&nbsp;</span>
<% if User.current.user_extensions.nil? %>
<input id="province" name="province" style="display: none" type="text" value="请单击选择省份及学校" readonly>
<input id="province" name="province" style="display: none" type="text" value=<%= l(:field_occupation_click) %> readonly>
<input id="occupation" name="occupation" style="display: none" type="text" value="" />
<input id="occupation_name" type="text" style="display: none" readonly/>
<% else %>
<% if User.current.user_extensions.identity == 3 || User.current.user_extensions.identity == 2 %>
<input id="province" name="province" style="display: none" type="text" value="请单击选择省份及学校" readonly>
<input id="province" name="province" style="display: none" type="text" value=<%= l(:field_occupation_click) %> readonly>
<input id="occupation" name="occupation" style="display: none" type="text" value="<%= @user.user_extensions.occupation %>" />
<input id="occupation_name" type="text" style="display: none" readonly/>
<% elsif User.current.user_extensions.school.nil? %>
<input id="province" name="province" style="display: none" type="text" value="请单击选择省份及学校" readonly>
<input id="province" name="province" style="display: none" type="text" value=<%= l(:field_occupation_click) %> readonly>
<input id="occupation" name="occupation" style="display: none" type="text" />
<input id="occupation_name" type="text" style="display: none" readonly/>
<% else %>

@ -1,7 +1,7 @@
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>快速进入项目通道</title>
<title><%= l('project.join.title')%></title>
<style>
#popbox{ font-size:12px; font-family:"微软雅黑","宋体"; line-height:1.9; background:#fff; font-style:normal;}
#popbox div,html,img,ul,li,p,body,h1,h2,h3,h4,p,a,table,tr,td,fieldset,input,span{ margin:0; padding:0;}
@ -47,8 +47,8 @@
<div id="popbox">
<div class="C" >
<div class="C_top">
<h2>快速进入项目通道</h2>
<p>只要持有项目的ID就可快速申请加入所在项目。项目页面搜索不到的私有项目只能从此通道进入哦</p>
<h2><%= l('project.join.title')%></h2>
<p><%= l('project.join.description')%></p>
</div>
<div class="C_form">
<%= form_tag({:controller => 'applied_project',
@ -58,13 +58,13 @@
:id => 'new-watcher-form') do %>
<ul>
<li style="padding-top: 15px;">
<span class="tips">项&nbsp;目&nbsp;ID</span>
<span class="tips"><%= l('project.join.id.label')%></span>
<input type="hidden" name="project_join" value="1">
<input type="hidden" name="user_id" value="<%= User.current.id%>">
<input class=" width190" name="project_id" id="project_id" type="text" value="" >
<input type="text" style="display: none"/>
</li>
<li class="mB5">项目ID是所在项目网址中显示的序号</li>
<li class="mB5"><%= l('project.join.id.tips')%></li>
<li>
<a href="#" class="btn" style="margin-left: 50px;" onclick="submit_form(this);">
<%= l(:label_apply_project) %>

@ -15,12 +15,12 @@
</span>
</div>
<strong><%= l(:field_description) %></strong>:&nbsp;&nbsp;<%= file.description %>
<div class="c9 gray-color"> 所属分类:<%=result_come_from file%> </div>
<div class="c9 gray-color"> <%= l('attachment.category')%><%=result_come_from file%> </div>
<span class="gray blue-color">
下载:<%= file.downloads%>|
大小:<%= number_to_human_size(file.filesize) %>|
共享者:<a class="gray" ><%= link_to file.author, user_path(file.author), target: "_blank" unless file.author.blank? %></a>|
上传时间:<%= format_time(file.created_on) %>
<%= l('attachment.download_num')%><%= file.downloads%>|
<%= l('attachment.size')%><%= number_to_human_size(file.filesize) %>|
<%= l('attachment.sharer')%><a class="gray" ><%= link_to file.author, user_path(file.author), target: "_blank" unless file.author.blank? %></a>|
<%= l('attachment.upload_time')%><%= format_time(file.created_on) %>
</span>
<div style="display: none"></div>
</td>

@ -3,7 +3,7 @@
<hr />
<% contests_results.each do |contest| %>
<p class="font_description2">
<strong><%= l(:label_tags_contest) %>:<%= link_to "#{contest.name}",
<strong><%= l(:label_tags_contest_name) %>:<%= link_to "#{contest.name}",
:controller => "contests",:action => "show_contest",:id => contest.id %></strong>
<br />
<strong><%= l(:label_tags_contest_description) %>:</strong><%= textilizable contest.description %>

@ -3,7 +3,7 @@
<hr />
<% courses_results.each do |course| %>
<p class="font_description2">
<strong><%= l(:label_course) %>:<%= link_to "#{course.name}",course_path(course) %></strong>
<strong><%= l(:label_tags_course_name) %>:<%= link_to "#{course.name}",course_path(course) %></strong>
<br />
<strong><%= l(:label_new_course_description) %>:</strong><%= textilizable course.description %>
<%= course.updated_at %>

@ -1,4 +1,4 @@
<%= link_to '+ 添加标签', 'javascript:void(0);',
<%= link_to l(:label_add_tag), 'javascript:void(0);',
:class => "yellowBtn f_l",
:onclick=>"$('#add_tag_#{obj.id}').slideToggle();" if User.current.logged? %> <!-- $('#put-tag-form-#{obj.class}-#{obj.id}').toggle(); readmore(this); -->

@ -23,7 +23,7 @@
<%= l(:label_user_plural) %>(<%= @users_tags_num %>) |
<%= l(:label_tags_call)%>(<%= @bids_tags_num %>) |
<%= l(:field_filename)%>(<%= @attachments_tags_num %>) |
开源项目(<%= @open_source_projects_num %>) |
<%= l(:label_tags_opensource)%>(<%= @open_source_projects_num %>) |
<%= l(:label_tags_contest)%>(<%= @contests_tags_num %>) |
</div>
<div id="show_results">

@ -1,5 +1,5 @@
<% content_for :content do %>
<h3 style="color: red;">总标签数:<%= @tags.size %>个</h3>
<h3 style="color: red;"><%= l(:label_tags_count) %><%= @tags.size %>个</h3>
<hr />
<% i = 0 %>
<div id="show_all_tags">

@ -16,8 +16,8 @@
<div class="menu">
<%= link_to "#{l(:label_course_new)}", new_course_path, class: 'icon icon-add' if @user == User.current %>
<ul>
<li mode='doing' class="on">进行中</li>
<li mode='end'>已完结</li>
<li mode='doing' class="on"><%= l('user.courses.doing')%></li>
<li mode='end'><%= l('user.courses.done')%></li>
</ul>
</div>

@ -2,7 +2,7 @@
<div class="menu-div">
<div class="menu">
<span style="color: #000; font-weight: bold;">
<%= "#{@user.name}的动态" %>
<%= l(:label_user_activity, :value => @user.name) %>
</span>
<ul><%#链接绑定在页面最下方的jQuery%>
<li mode='all' class="<%= "on" if @state.eql?(0) %>">

@ -1,8 +1,8 @@
<%
select_option = []
(select_option << [l(:label_select_project), 'projects']) if project_type == Project::ProjectType_project
(select_option << [l(:label_select_course), 'courses']) if project_type == Project::ProjectType_course
select_option << [l(:label_select_user), 'users']
(select_option << [l('welcome.search.select.project'), 'projects']) if project_type == Project::ProjectType_project
(select_option << [l('welcome.search.select.course'), 'courses']) if project_type == Project::ProjectType_course
select_option << [l('welcome.search.select.user'), 'users']
#select_option << ['教师', 'users_teacher'],
#select_option << ['学生', 'users_student']
%>
@ -49,7 +49,7 @@ form #search_type{
<%= form_tag({controller: :welcome, action: :search }, method: :get) do %>
<div class="project-search" style="float: right">
<div class='search_widget'>
<%= text_field_tag :q, nil, :placeholder => l(:label_search_information), :size => 27, style: "float:left" %>
<%= text_field_tag :q, nil, :placeholder => l('welcome.search.information'), :size => 27, style: "float:left" %>
<%= select_tag(:search_type, options_for_select(select_option), :style => "float:right" ) %>
</div>
<%#= hidden_field_tag 'project_type', project_type %>

Some files were not shown because too many files have changed in this diff Show More

Loading…
Cancel
Save