refinerycms-jobs 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +29 -0
- data/Gemfile +5 -0
- data/Rakefile +20 -0
- data/app/controllers/refinery/jobs/admin/jobs_controller.rb +44 -0
- data/app/controllers/refinery/jobs/admin/settings_controller.rb +64 -0
- data/app/controllers/refinery/jobs/job_applications_controller.rb +67 -0
- data/app/controllers/refinery/jobs/jobs_controller.rb +17 -0
- data/app/helpers/refinery/jobs/controller_helper.rb +18 -0
- data/app/helpers/refinery/jobs/jobs_helper.rb +7 -0
- data/app/mailers/refinery/jobs/job_mailer.rb +40 -0
- data/app/models/refinery/jobs/job.rb +59 -0
- data/app/models/refinery/jobs/job_application.rb +32 -0
- data/app/models/refinery/jobs/setting.rb +65 -0
- data/app/views/refinery/jobs/admin/job_applications/_job.html.erb +13 -0
- data/app/views/refinery/jobs/admin/job_applications/_sortable_list.html.erb +2 -0
- data/app/views/refinery/jobs/admin/jobs/_actions.html.erb +25 -0
- data/app/views/refinery/jobs/admin/jobs/_form.html.erb +93 -0
- data/app/views/refinery/jobs/admin/jobs/_job.html.erb +39 -0
- data/app/views/refinery/jobs/admin/jobs/_job_application.html.erb +20 -0
- data/app/views/refinery/jobs/admin/jobs/_jobs.html.erb +2 -0
- data/app/views/refinery/jobs/admin/jobs/_records.html.erb +16 -0
- data/app/views/refinery/jobs/admin/jobs/_sortable_list.html.erb +5 -0
- data/app/views/refinery/jobs/admin/jobs/edit.html.erb +1 -0
- data/app/views/refinery/jobs/admin/jobs/index.html.erb +7 -0
- data/app/views/refinery/jobs/admin/jobs/job_applications.html.erb +34 -0
- data/app/views/refinery/jobs/admin/jobs/new.html.erb +1 -0
- data/app/views/refinery/jobs/job_applications/_form.html.erb +33 -0
- data/app/views/refinery/jobs/job_applications/new.html.erb +5 -0
- data/app/views/refinery/jobs/job_applications/show.html.erb +11 -0
- data/app/views/refinery/jobs/job_mailer/confirmation.text.erb +1 -0
- data/app/views/refinery/jobs/job_mailer/notification.text.erb +20 -0
- data/app/views/refinery/jobs/jobs/index.html.erb +21 -0
- data/app/views/refinery/jobs/jobs/show.html.erb +67 -0
- data/config/locales/en.yml +99 -0
- data/config/locales/fr.yml +100 -0
- data/config/routes.rb +22 -0
- data/db/migrate/20130508210800_create_jobs.rb +31 -0
- data/db/migrate/20140929182859_add_slug_to_jobs.rb +6 -0
- data/db/migrate/20140929185232_add_draft_and_published_at_to_jobs.rb +6 -0
- data/db/migrate/20140930184502_create_job_translations.rb +15 -0
- data/db/migrate/20141001192020_add_fields_to_jobs.rb +32 -0
- data/db/seeds.rb +26 -0
- data/lib/generators/refinery/jobs/jobs_generator.rb +25 -0
- data/lib/generators/refinery/jobs/templates/config/initializers/refinery/jobs.rb.erb +7 -0
- data/lib/refinery/jobs/configuration.rb +11 -0
- data/lib/refinery/jobs/dragonfly.rb +57 -0
- data/lib/refinery/jobs/engine.rb +30 -0
- data/lib/refinery/jobs/validators/file_size_validator.rb +19 -0
- data/lib/refinery/jobs/validators.rb +7 -0
- data/lib/refinery/jobs.rb +25 -0
- data/lib/refinerycms-jobs.rb +1 -0
- data/readme.md +68 -0
- data/refinerycms-jobs.gemspec +24 -0
- metadata +154 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 7bf6508cb6a3b48338b0b91fd97f3a156a90b447
|
4
|
+
data.tar.gz: 461a6ca77a920595754d42125dcd2dd247992bf6
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: dcac81632f3861b19b9c5fe7aae613a79c7623ee753acd6950de9e7d9f7a7dc5896094ac67f38f6c391ec1dc054ab04468967748bb1376f0196841879924b8a5
|
7
|
+
data.tar.gz: d69996dcb5eb87b3015ce1b20637b13399859584e0211c479d937a26b0ce7d055bf7bcecd98763f3d3e425cf1ca3f838c0ac659e5a27c25012c9580d8c79596a
|
data/.gitignore
ADDED
@@ -0,0 +1,29 @@
|
|
1
|
+
public/system/*
|
2
|
+
public/themes/*
|
3
|
+
log/*.log
|
4
|
+
tmp/**/*
|
5
|
+
.DS_Store
|
6
|
+
doc/api
|
7
|
+
doc/app
|
8
|
+
doc/*
|
9
|
+
config/database.yml
|
10
|
+
config/amazon_s3.yml
|
11
|
+
config/rackspace_cloudfiles.yml
|
12
|
+
public/images/system/*
|
13
|
+
nbproject
|
14
|
+
index/**/*
|
15
|
+
db/*.sqlite3
|
16
|
+
*.tmproj
|
17
|
+
*.autobackupbyrefinery.*
|
18
|
+
refinerycms*.gem
|
19
|
+
public/javascripts/cache
|
20
|
+
public/stylesheets/cache
|
21
|
+
config/database.yml.example
|
22
|
+
.yardoc/
|
23
|
+
refinerycms.gemspec
|
24
|
+
.bundle
|
25
|
+
vendor/cache
|
26
|
+
*.lock
|
27
|
+
callsite_hash.*
|
28
|
+
**/*/slim_scrooge/ext/Makefile
|
29
|
+
public/javascripts/messages.js
|
data/Gemfile
ADDED
data/Rakefile
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/env rake
|
2
|
+
begin
|
3
|
+
require 'bundler/setup'
|
4
|
+
rescue LoadError
|
5
|
+
puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
|
6
|
+
end
|
7
|
+
|
8
|
+
ENGINE_PATH = File.dirname(__FILE__)
|
9
|
+
APP_RAKEFILE = File.expand_path("../spec/dummy/Rakefile", __FILE__)
|
10
|
+
|
11
|
+
if File.exists?(APP_RAKEFILE)
|
12
|
+
load 'rails/tasks/engine.rake'
|
13
|
+
end
|
14
|
+
|
15
|
+
require "refinerycms-testing"
|
16
|
+
Refinery::Testing::Railtie.load_tasks
|
17
|
+
Refinery::Testing::Railtie.load_dummy_tasks(ENGINE_PATH)
|
18
|
+
|
19
|
+
load File.expand_path('../tasks/testing.rake', __FILE__)
|
20
|
+
load File.expand_path('../tasks/rspec.rake', __FILE__)
|
@@ -0,0 +1,44 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Jobs
|
3
|
+
module Admin
|
4
|
+
class JobsController < ::Refinery::AdminController
|
5
|
+
crudify :'refinery/jobs/job',
|
6
|
+
:order => 'published_at DESC',
|
7
|
+
:include => [:translations]
|
8
|
+
|
9
|
+
def job_applications
|
10
|
+
find_job
|
11
|
+
@job_applications = @job.job_applications.paginate :page => params[:page]
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def job_params
|
16
|
+
params.require(:job).permit(
|
17
|
+
:title,
|
18
|
+
:description,
|
19
|
+
:employment_terms,
|
20
|
+
:hours,
|
21
|
+
:position,
|
22
|
+
:draft,
|
23
|
+
:published_at,
|
24
|
+
:fill,
|
25
|
+
:ref,
|
26
|
+
:education,
|
27
|
+
:experience,
|
28
|
+
:skills,
|
29
|
+
:languages,
|
30
|
+
:salary,
|
31
|
+
:length,
|
32
|
+
:employment_date,
|
33
|
+
:contact
|
34
|
+
)
|
35
|
+
end
|
36
|
+
|
37
|
+
protected
|
38
|
+
def find_job
|
39
|
+
@job = Refinery::Jobs::Job.find_by_slug_or_id(params[:id])
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Jobs
|
3
|
+
module Admin
|
4
|
+
class SettingsController < Refinery::AdminController
|
5
|
+
|
6
|
+
before_filter :find_setting, :only => [:edit, :update]
|
7
|
+
after_filter :save_subject_for_confirmation,
|
8
|
+
:save_message_for_confirmation, :save_notification_recipients, :only => :update
|
9
|
+
|
10
|
+
def edit
|
11
|
+
end
|
12
|
+
|
13
|
+
def update
|
14
|
+
flash[:notice] = t('refinery.crudify.updated', :what => @setting.name.gsub("job_", "").titleize)
|
15
|
+
|
16
|
+
unless request.xhr? or from_dialog?
|
17
|
+
redirect_back_or_default(refinery.jobs_admin_jobs_path)
|
18
|
+
else
|
19
|
+
render text: "<script type='text/javascript'>parent.window.location = '#{refinery.jobs_admin_jobs_path}';</script>"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
protected
|
24
|
+
|
25
|
+
def find_setting
|
26
|
+
setting = params[:id].gsub("job_", "")
|
27
|
+
|
28
|
+
if Refinery::Jobs::Setting.respond_to?(setting)
|
29
|
+
Refinery::Jobs::Setting.send(setting)
|
30
|
+
end
|
31
|
+
|
32
|
+
@setting = Refinery::Setting.friendly.find(params[:id])
|
33
|
+
end
|
34
|
+
|
35
|
+
def save_notification_recipients
|
36
|
+
if setting_params.include?('value')
|
37
|
+
Refinery::Jobs::Setting.notification_recipients = setting_params[:value]
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def save_subject_for_confirmation
|
42
|
+
if setting_params.include?('subject')
|
43
|
+
Refinery::Jobs::Setting.confirmation_subject = setting_params[:subject]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
def save_message_for_confirmation
|
48
|
+
if setting_params.include?('message')
|
49
|
+
Refinery::Jobs::Setting.confirmation_message = setting_params[:message]
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
private
|
54
|
+
|
55
|
+
def setting_params
|
56
|
+
params.require(:setting).permit(:value,
|
57
|
+
subject: Refinery::I18n.frontend_locales,
|
58
|
+
message: Refinery::I18n.frontend_locales)
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Jobs
|
3
|
+
class JobApplicationsController < ::ApplicationController
|
4
|
+
include ControllerHelper
|
5
|
+
|
6
|
+
before_filter :find_page
|
7
|
+
before_filter :find_job, :only => [:new]
|
8
|
+
|
9
|
+
def new
|
10
|
+
@job_application = Refinery::Jobs::JobApplication.new
|
11
|
+
|
12
|
+
present(@page)
|
13
|
+
end
|
14
|
+
|
15
|
+
def create
|
16
|
+
@job_application = Refinery::Jobs::JobApplication.new(job_application_params)
|
17
|
+
@job_id_integer = Refinery::Jobs::Job.find_by_slug_or_id(params[:job_id])
|
18
|
+
|
19
|
+
if !@job_id_integer.nil?
|
20
|
+
@job_application.job_id = @job_id_integer.id
|
21
|
+
@job = @job_application.job
|
22
|
+
|
23
|
+
if @job_application.save
|
24
|
+
if @job_application.ham? || Refinery::Jobs.send_notifications_for_job_applications_marked_as_spam
|
25
|
+
begin
|
26
|
+
JobMailer.notification(@job_application, request).deliver
|
27
|
+
rescue
|
28
|
+
logger.warn "There was an error delivering on job application notification.\n#{$!}\n"
|
29
|
+
end
|
30
|
+
|
31
|
+
if Refinery::Jobs::Setting.send_confirmation?
|
32
|
+
begin
|
33
|
+
JobMailer.confirmation(@job_application, request).deliver
|
34
|
+
rescue
|
35
|
+
logger.warn "There was an error delivering on job application confirmation:\n#{$!}\n"
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
redirect_to refinery.jobs_job_job_application_url(@job, @job_application)
|
41
|
+
else
|
42
|
+
render :action => 'new'
|
43
|
+
end
|
44
|
+
else
|
45
|
+
error_404
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def show
|
50
|
+
@job_application = Refinery::Jobs::JobApplication.find(params[:id])
|
51
|
+
@job = @job_application.job
|
52
|
+
|
53
|
+
present(@page)
|
54
|
+
|
55
|
+
respond_to do |format|
|
56
|
+
format.html { render :action => 'show' }
|
57
|
+
format.xml { render :xml => @future_student }
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
def job_application_params
|
63
|
+
params.require(:job_application).permit!
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Jobs
|
3
|
+
class JobsController < ::ApplicationController
|
4
|
+
include ControllerHelper
|
5
|
+
|
6
|
+
helper :'refinery/jobs/jobs'
|
7
|
+
before_filter :find_page
|
8
|
+
before_filter :find_all_jobs, :only => [:index]
|
9
|
+
before_filter :find_job, :only => [:show]
|
10
|
+
|
11
|
+
def show
|
12
|
+
find_job
|
13
|
+
@job_application = Refinery::Jobs::JobApplication.new
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Jobs
|
3
|
+
module ControllerHelper
|
4
|
+
protected
|
5
|
+
def find_all_jobs
|
6
|
+
@jobs = Refinery::Jobs::Job.published.friendly.order("position ASC").page(params[:page])
|
7
|
+
end
|
8
|
+
|
9
|
+
def find_job
|
10
|
+
@job = Refinery::Jobs::Job.published.friendly.find(params[:id])
|
11
|
+
end
|
12
|
+
|
13
|
+
def find_page
|
14
|
+
@page = Refinery::Page.friendly.find_by(:link_url => '/jobs')
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Jobs
|
3
|
+
class JobMailer < ActionMailer::Base
|
4
|
+
|
5
|
+
def confirmation(job_application, request)
|
6
|
+
@job_application, @request = job_application, request
|
7
|
+
mail :subject => Refinery::Jobs::Setting.confirmation_subject(Globalize.locale),
|
8
|
+
:to => job_application.email,
|
9
|
+
:from => from_info,
|
10
|
+
:reply_to => Refinery::Jobs::Setting.notification_recipients.split(',').first
|
11
|
+
end
|
12
|
+
|
13
|
+
def notification(job_application, request)
|
14
|
+
@job_application, @request = job_application, request
|
15
|
+
@host = [request.protocol, request.host_with_port].join
|
16
|
+
mail :subject => Refinery::Jobs::Setting.notification_subject,
|
17
|
+
:to => Refinery::Jobs::Setting.notification_recipients,
|
18
|
+
:from => from_info,
|
19
|
+
:reply_to => job_application.email
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def from_info
|
25
|
+
"\"#{from_name}\" <#{from_mail}>"
|
26
|
+
end
|
27
|
+
|
28
|
+
def from_name
|
29
|
+
::I18n.t('from_name',
|
30
|
+
:scope => 'refinery.jobs.config',
|
31
|
+
:site_name => Refinery::Core.site_name,
|
32
|
+
:name => @job_application.name)
|
33
|
+
end
|
34
|
+
|
35
|
+
def from_mail
|
36
|
+
"#{Refinery::Jobs.from_name}@#{@request.domain}"
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
module Refinery
|
2
|
+
module Jobs
|
3
|
+
class Job < ActiveRecord::Base
|
4
|
+
extend FriendlyId
|
5
|
+
self.table_name = 'refinery_jobs'
|
6
|
+
|
7
|
+
translates :title, :description, :slug, :education, :experience, :skills, :languages, :salary, :length, :contact
|
8
|
+
|
9
|
+
friendly_id :friendly_id_source, :use => [:slugged, :globalize]
|
10
|
+
|
11
|
+
acts_as_indexed :fields => [:title, :description, :employment_terms, :hours]
|
12
|
+
|
13
|
+
has_many :job_applications, :dependent => :destroy, :foreign_key => :job_id
|
14
|
+
|
15
|
+
validates_presence_of :title, :description
|
16
|
+
validates_uniqueness_of :title
|
17
|
+
|
18
|
+
scope :published, -> { where :draft => false }
|
19
|
+
|
20
|
+
def self.latest(number = 5)
|
21
|
+
limit(number).order('created_at DESC')
|
22
|
+
end
|
23
|
+
|
24
|
+
# If title changes tell friendly_id to regenerate slug when
|
25
|
+
# saving record
|
26
|
+
def should_generate_new_friendly_id?
|
27
|
+
title_changed?
|
28
|
+
end
|
29
|
+
|
30
|
+
def friendly_id_source
|
31
|
+
title
|
32
|
+
end
|
33
|
+
|
34
|
+
class << self
|
35
|
+
# Wrap up the logic of finding the pages based on the translations table.
|
36
|
+
def with_globalize(conditions = {})
|
37
|
+
conditions = {:locale => ::Globalize.locale}.merge(conditions)
|
38
|
+
globalized_conditions = {}
|
39
|
+
conditions.keys.each do |key|
|
40
|
+
if (translated_attribute_names.map(&:to_s) | %w(locale)).include?(key.to_s)
|
41
|
+
globalized_conditions["#{self.translation_class.table_name}.#{key}"] = conditions.delete(key)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
# A join implies readonly which we don't really want.
|
45
|
+
where(conditions).joins(:translations).where(globalized_conditions)
|
46
|
+
.readonly(false)
|
47
|
+
end
|
48
|
+
|
49
|
+
def find_by_slug_or_id(slug_or_id)
|
50
|
+
if slug_or_id.friendly_id?
|
51
|
+
find_by_slug(slug_or_id)
|
52
|
+
else
|
53
|
+
find(slug_or_id)
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
require 'dragonfly'
|
2
|
+
require 'refinery/core/base_model'
|
3
|
+
require 'filters_spam'
|
4
|
+
|
5
|
+
module Refinery
|
6
|
+
module Jobs
|
7
|
+
class JobApplication < Refinery::Core::BaseModel
|
8
|
+
self.table_name = 'refinery_job_applications'
|
9
|
+
|
10
|
+
dragonfly_accessor :resume, :app => :refinery_jobs
|
11
|
+
|
12
|
+
belongs_to :job, :class_name => "Refinery::Jobs::Job", :foreign_key => "job_id"
|
13
|
+
|
14
|
+
filters_spam message_field: :cover_letter,
|
15
|
+
email_field: :email,
|
16
|
+
author_field: :name,
|
17
|
+
other_fields: [:phone],
|
18
|
+
extra_spam_words: %w()
|
19
|
+
|
20
|
+
validates_presence_of :name, :phone, :email, :cover_letter
|
21
|
+
validates :email, format: {
|
22
|
+
with: /\A([^@\s]+)@((?:[-a-z0-9]+\.)+[a-z]{2,})\z/i
|
23
|
+
}, length: { maximum: 255 }
|
24
|
+
validates :resume, :presence => true
|
25
|
+
validates_with Refinery::Jobs::Validators::FileSizeValidator
|
26
|
+
|
27
|
+
def self.latest(number = 5)
|
28
|
+
limit(number).order('created_at DESC')
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,65 @@
|
|
1
|
+
require 'refinery/setting'
|
2
|
+
|
3
|
+
module Refinery
|
4
|
+
module Jobs
|
5
|
+
class Setting < ::Refinery::Setting
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def confirmation_body
|
9
|
+
find_or_set(:job_application_confirmation_body,
|
10
|
+
"Thank you for your job application %name%,\n\nThis email is a receipt to confirm we have received your job application and we'll be in touch shortly.\n\nThanks."
|
11
|
+
)
|
12
|
+
end
|
13
|
+
|
14
|
+
def confirmation_subject(locale='en')
|
15
|
+
find_or_set(:"job_application_confirmation_subject_#{locale}",
|
16
|
+
"Thank you for your job application",
|
17
|
+
scoping: "jobs"
|
18
|
+
)
|
19
|
+
end
|
20
|
+
|
21
|
+
def confirmation_subject=(locales_subjects)
|
22
|
+
locales_subjects.each do |locale, subject|
|
23
|
+
set(:"job_application_confirmation_subject_#{locale}", {
|
24
|
+
value: subject,
|
25
|
+
scoping: "jobs"
|
26
|
+
})
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def confirmation_message(locale='en')
|
31
|
+
find_or_set(:"job_application_confirmation_message_#{locale}", confirmation_body, scoping: "jobs")
|
32
|
+
end
|
33
|
+
|
34
|
+
def confirmation_message=(locales_messages)
|
35
|
+
locales_messages.each do |locale, message|
|
36
|
+
set(:"job_application_confirmation_message_#{locale}", {
|
37
|
+
value: message,
|
38
|
+
scoping: "jobs"
|
39
|
+
})
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
def notification_recipients
|
44
|
+
recipients = ((Role[:refinery].users.first.email rescue nil) if defined?(Role)).to_s
|
45
|
+
find_or_set(:job_application_notification_recipients, recipients, scoping: "jobs")
|
46
|
+
end
|
47
|
+
|
48
|
+
def notification_recipients=(recipients)
|
49
|
+
set(:job_application_notification_recipients, {
|
50
|
+
value: recipients,
|
51
|
+
scoping: "jobs"
|
52
|
+
})
|
53
|
+
end
|
54
|
+
|
55
|
+
def notification_subject
|
56
|
+
find_or_set(:job_application_notification_subject, "New job application from your website", scoping: "jobs")
|
57
|
+
end
|
58
|
+
|
59
|
+
def send_confirmation?
|
60
|
+
find_or_set(:job_application_send_confirmation, true, scoping: "jobs")
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(job_application) -%>">
|
2
|
+
<span class='title'>
|
3
|
+
<span class='actions'>
|
4
|
+
<%= link_to refinery_icon_tag("application_go.png"), job_application_url(job_application),
|
5
|
+
:title => 'View this job<br/><em>Opens in a new window</em>',
|
6
|
+
:target => "_blank" %>
|
7
|
+
<%= link_to refinery_icon_tag("delete.png"), admin_job_application_path(job),
|
8
|
+
:class => "cancel confirm-delete",
|
9
|
+
:title => 'Remove this job forever' %>
|
10
|
+
</span>
|
11
|
+
<%=h job.title %> <span class="preview"> </span>
|
12
|
+
</span>
|
13
|
+
</li>
|
@@ -0,0 +1,25 @@
|
|
1
|
+
<ul>
|
2
|
+
<% if ::Refinery::Jobs::Admin::JobsController.searchable? %>
|
3
|
+
<li>
|
4
|
+
<%= render '/refinery/admin/search', :url => refinery.jobs_admin_jobs_path %>
|
5
|
+
</li>
|
6
|
+
<% end %>
|
7
|
+
<li>
|
8
|
+
<%= link_to t('.create_new'), refinery.new_jobs_admin_job_path,
|
9
|
+
:class => "add_icon" %>
|
10
|
+
</li>
|
11
|
+
<% if !searching? && ::Refinery::Jobs::Admin::JobsController.sortable? && ::Refinery::Jobs::Job.many? %>
|
12
|
+
<li>
|
13
|
+
<%= link_to t('.reorder', :what => "Jobs"),
|
14
|
+
refinery.jobs_admin_jobs_path,
|
15
|
+
:id => "reorder_action",
|
16
|
+
:class => "reorder_icon" %>
|
17
|
+
|
18
|
+
<%= link_to t('.reorder_done', :what => "Jobs"),
|
19
|
+
refinery.jobs_admin_jobs_path,
|
20
|
+
:id => "reorder_action_done",
|
21
|
+
:style => "display: none;",
|
22
|
+
:class => "reorder_icon" %>
|
23
|
+
</li>
|
24
|
+
<% end %>
|
25
|
+
</ul>
|
@@ -0,0 +1,93 @@
|
|
1
|
+
<%= form_for [refinery, :jobs, :admin, @job] do |f| -%>
|
2
|
+
<%= render "/refinery/admin/error_messages",
|
3
|
+
:object => f.object,
|
4
|
+
:include_object_name => true %>
|
5
|
+
|
6
|
+
<%= render '/refinery/admin/locale_picker',
|
7
|
+
:current_locale => Globalize.locale %>
|
8
|
+
|
9
|
+
<div class='field'>
|
10
|
+
<%= f.label :title -%>
|
11
|
+
<%= f.text_field :title, :class => 'larger widest' -%>
|
12
|
+
</div>
|
13
|
+
|
14
|
+
<div class='field'>
|
15
|
+
<%= f.label :fill -%>
|
16
|
+
<%= f.number_field :fill, :class => "larger" -%>
|
17
|
+
</div>
|
18
|
+
|
19
|
+
<div class='field'>
|
20
|
+
<%= f.label :ref -%>
|
21
|
+
<%= f.text_field :ref, :class => "larger" -%>
|
22
|
+
</div>
|
23
|
+
|
24
|
+
<div class='field'>
|
25
|
+
<%= f.label :description -%>
|
26
|
+
<%= f.text_area :description, :rows => 20, :class => 'wymeditor widest' -%>
|
27
|
+
</div>
|
28
|
+
|
29
|
+
<div class='field'>
|
30
|
+
<%= f.label :education -%>
|
31
|
+
<%= f.text_field :education, :class => "larger widest" -%>
|
32
|
+
</div>
|
33
|
+
|
34
|
+
<div class='field'>
|
35
|
+
<%= f.label :experience -%>
|
36
|
+
<%= f.text_field :experience, :class => "larger widest" -%>
|
37
|
+
</div>
|
38
|
+
|
39
|
+
<div class='field'>
|
40
|
+
<%= f.label :skills -%>
|
41
|
+
<%= f.text_field :skills, :class => "larger widest" -%>
|
42
|
+
</div>
|
43
|
+
|
44
|
+
<div class='field'>
|
45
|
+
<%= f.label :languages -%>
|
46
|
+
<%= f.text_field :languages, :class => "larger widest" -%>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
<div class='field'>
|
50
|
+
<%= f.label :salary -%>
|
51
|
+
<%= f.text_field :salary, :class => "larger" -%>
|
52
|
+
</div>
|
53
|
+
|
54
|
+
<div class='field'>
|
55
|
+
<%= f.label :hours -%>
|
56
|
+
<%= f.text_field :hours, :class => "larger" -%>
|
57
|
+
</div>
|
58
|
+
|
59
|
+
<div class='field'>
|
60
|
+
<%= f.label :employment_terms -%>
|
61
|
+
<%= f.text_field :employment_terms, :class => "larger widest" -%>
|
62
|
+
</div>
|
63
|
+
|
64
|
+
<div class='field'>
|
65
|
+
<%= f.label :length -%>
|
66
|
+
<%= f.text_field :length, :class => "larger" -%>
|
67
|
+
</div>
|
68
|
+
|
69
|
+
<div class='field'>
|
70
|
+
<%= f.label :employment_date -%>
|
71
|
+
<%= f.date_field :employment_date, :class => "larger" -%>
|
72
|
+
</div>
|
73
|
+
|
74
|
+
<div class='field'>
|
75
|
+
<%= f.label :contact -%>
|
76
|
+
<%= f.text_field :contact, :class => "larger widest" -%>
|
77
|
+
</div>
|
78
|
+
|
79
|
+
<div class='field'>
|
80
|
+
<%= f.label :published_at -%>
|
81
|
+
<%= f.datetime_select :published_at %>
|
82
|
+
</div>
|
83
|
+
|
84
|
+
<div id="field">
|
85
|
+
<%= f.label :draft%>
|
86
|
+
<%= f.check_box :draft %>
|
87
|
+
</div>
|
88
|
+
|
89
|
+
<%= render "/refinery/admin/form_actions",
|
90
|
+
:f => f,
|
91
|
+
:continue_editing => true,
|
92
|
+
:delete_title => t('delete', :scope => 'refinery.blog.admin.jobs.job') %>
|
93
|
+
<% end %>
|
@@ -0,0 +1,39 @@
|
|
1
|
+
<li class='clearfix record <%= cycle("on", "on-hover") %>' id="<%= dom_id(job) -%>">
|
2
|
+
<span class='title'>
|
3
|
+
<%= job.title.presence || job.translations.detect {|t| t.title.present?}.title %>
|
4
|
+
<span class="preview">
|
5
|
+
<% job.translations.each do |translation| %>
|
6
|
+
<% if translation.title.present? %>
|
7
|
+
<%= link_to refinery_icon_tag("flags/#{translation.locale}.png", :size => '16x11'),
|
8
|
+
refinery.edit_jobs_admin_job_path(job, :switch_locale => translation.locale),
|
9
|
+
:class => 'locale' %>
|
10
|
+
<% end %>
|
11
|
+
<% end %>
|
12
|
+
|
13
|
+
<% if job.draft? %>
|
14
|
+
<span class="label notice"><%= t('refinery.jobs.admin.jobs.job.draft') %></span>
|
15
|
+
<% else %>
|
16
|
+
<%= job.published_at.strftime('%b %d, %Y') %>
|
17
|
+
<% end %>
|
18
|
+
</span>
|
19
|
+
</span>
|
20
|
+
|
21
|
+
<span class='actions'>
|
22
|
+
<% if !job.job_applications.blank? %>
|
23
|
+
<%= link_to refinery_icon_tag("folder_open.png"), refinery.job_applications_jobs_admin_job_path(job),
|
24
|
+
:title => t('.view_applications_for_this_job') %>
|
25
|
+
<% end %>
|
26
|
+
<%= link_to refinery_icon_tag("application_go.png"), refinery.jobs_job_url(job),
|
27
|
+
:title => t('.view_live_html'),
|
28
|
+
:target => "_blank" %>
|
29
|
+
<%= link_to refinery_icon_tag("application_edit.png"), refinery.edit_jobs_admin_job_path(job),
|
30
|
+
:title => t('.edit') %>
|
31
|
+
<%= link_to refinery_icon_tag("delete.png"), refinery.jobs_admin_job_path(job),
|
32
|
+
:class => "cancel confirm-delete",
|
33
|
+
:title => t('.delete'),
|
34
|
+
:method => :delete,
|
35
|
+
:data => {
|
36
|
+
:confirm => t('message', :scope => 'refinery.admin.delete', :title => job.title)
|
37
|
+
} %>
|
38
|
+
</span>
|
39
|
+
</li>
|