Commit 934e72d2 by Mykhailo Makohin

add project galaries, qoutes, links, photos and document models

parent ee5dc167
...@@ -38,6 +38,7 @@ group :development do ...@@ -38,6 +38,7 @@ group :development do
gem 'listen', '~> 3.0.5' gem 'listen', '~> 3.0.5'
gem 'spring' gem 'spring'
gem 'spring-watcher-listen', '~> 2.0.0' gem 'spring-watcher-listen', '~> 2.0.0'
gem 'awesome_print'
end end
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby] gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
...@@ -57,6 +57,7 @@ GEM ...@@ -57,6 +57,7 @@ GEM
arel (7.1.4) arel (7.1.4)
autoprefixer-rails (9.6.1.1) autoprefixer-rails (9.6.1.1)
execjs execjs
awesome_print (1.8.0)
babel-source (5.8.35) babel-source (5.8.35)
babel-transpiler (0.7.0) babel-transpiler (0.7.0)
babel-source (>= 4.0, < 6) babel-source (>= 4.0, < 6)
...@@ -286,6 +287,7 @@ PLATFORMS ...@@ -286,6 +287,7 @@ PLATFORMS
DEPENDENCIES DEPENDENCIES
activeadmin activeadmin
awesome_print
bootstrap-sass bootstrap-sass
byebug byebug
cancancan cancancan
......
ActiveAdmin.register Project do ActiveAdmin.register Project do
menu label: 'Project' menu label: 'Project'
controller do controller do
def permitted_params
params.permit(:utf8, :_method, :authenticity_token, :locale, :commit, :id, def create
project: [:photo, :photo_preview, :photo_before, :photo_after, :type, @project = Project.new(project_params)
:status, :name, :name_eng, :individual_type_ua, :individual_type_en, if @project.save
:title_ua, :title_en, :heading_ua, :heading_en, :slug, :short_description_ua, redirect_to admin_project_path(@project)
:short_description_en, :locale, :description_ua,:description_en, :site, else
:link_to_facebook, :required_amount, :related_links_ua, :related_links_en, render :new
:footer_photo, project_galeries_attributes: [:id, :photo, :name_uk, :name_en, :_destroy]]) end
end end
end
def project_params
params.require(:project).permit(:photo, :photo_preview, :photo_before, :photo_after, :types,
:status, :individual_type_uk, :individual_type_en,
:title_uk, :title_en, :heading_uk, :heading_en, :slug, :short_description_uk,
:short_description_en, :description_uk,:description_en, :site,
:link_to_facebook, :required_amount, :related_links_uk, :related_links_en,
:footer_photo,
project_photos_attributes: [:id, :project_id, :photo, :title_uk,
:title_en, :_destroy],
project_galeries_attributes: [:id, :project_id, :photo, :name_uk,
:name_en, :_destroy],
project_qoutes_attributes: [:id, :project_id, :text_over_quote_uk, :text_over_quote_en,
:background_color_quote_text, :icon, :text_quote_uk,
:text_quote, :text_below_quote_uk, :text_below_quote, :_destroy],
project_links_attributes: [:id, :project_id, :site, :title_uk,
:title_en, :_destroy],
project_documents_attributes: [:id, :project_id, :document_uk, :document_en,
:document_name_uk, :document_name_en, :_destroy])
end
end
form do |f| form do |f|
f.inputs do f.inputs do
f.input :photo, label: "Photo" f.input :photo, label: "Photo"
f.input :photo_preview, label: "Preview for main page" f.input :photo_preview, label: "Preview for main page"
f.input :name, label: "Name" f.input :photo_before, label: "Before photo"
# f.input :location, label: "#{t "active_admin.attributes.user.location"}" f.input :photo_after, label: "After photo"
# f.input :password, label: "#{t "active_admin.attributes.user.password"}" f.input :types, label: "Type"
# f.input :password_confirmation, label: "#{t "active_admin.attributes.user.password_confirmation"}" f.input :status, label: "Status"
# f.input :role, as: :select, collection: User.roles.map { |role| [I18n.t("active_admin.user/role.#{role[0]}"), role[0]] }, f.input :individual_type_uk, label: "Individual type uk"
# label: (t "active_admin.attributes.user.role") f.input :individual_type_en, label: "Individual type en"
# f.input :avatar, label: "#{t "active_admin.attributes.user.avatar"}" f.input :title_uk, label: "Title uk"
f.input :title_en, label: "Title en"
f.input :slug, label: "Slug"
f.input :heading_uk, label: "Heading uk"
f.input :heading_en, label: "Heading en"
f.input :short_description_uk, label: "Short description uk"
f.input :short_description_en, label: "Short description en"
f.input :description_uk, label: "Description uk"
f.input :description_en, label: "Description en"
f.input :site, label: "Site"
f.input :link_to_facebook, label: "Link to Facebook"
f.input :required_amount, label: "Required amount"
f.input :related_links_uk, label: "Related links uk"
f.input :related_links_en, label: "Related links en"
f.input :footer_photo, label: "Footer photo"
f.has_many :project_galeries, heading: false, new_record: true do |project_galaries_form|
project_galaries_form.input :photo
project_galaries_form.input :name_uk
project_galaries_form.input :name_en
project_galaries_form.input :_destroy, as: :boolean
end
f.has_many :project_qoutes, heading: false, new_record: true do |project_qoutes_form|
project_qoutes_form.input :text_over_quote_uk
project_qoutes_form.input :text_over_quote_en
project_qoutes_form.input :background_color_quote_text, input_html: { class: 'colorpicker' }
project_qoutes_form.input :icon
project_qoutes_form.input :text_quote_uk
project_qoutes_form.input :text_quote
project_qoutes_form.input :text_below_quote_uk
project_qoutes_form.input :text_below_quote
project_qoutes_form.input :_destroy, as: :boolean
end
f.has_many :project_photos, heading: false, new_record: true do |project_photos_form|
project_photos_form.input :photo
project_photos_form.input :title_uk
project_photos_form.input :title_en
project_photos_form.input :_destroy, as: :boolean
end
f.has_many :project_links, heading: false, new_record: true do |project_links_form|
project_links_form.input :site
project_links_form.input :title_uk
project_links_form.input :title_en
project_links_form.input :_destroy, as: :boolean
end
f.has_many :project_documents, heading: false, new_record: true do |project_documents_form|
project_documents_form.input :document_uk
project_documents_form.input :document_en
project_documents_form.input :document_name_uk
project_documents_form.input :document_name_en
project_documents_form.input :_destroy, as: :boolean
end
end end
f.actions f.actions
end end
......
...@@ -11,13 +11,16 @@ class ProjectsController < ApplicationController ...@@ -11,13 +11,16 @@ class ProjectsController < ApplicationController
def new def new
@project = Project.new @project = Project.new
# @project.project_photos.build
end end
def create def create
@project = Project.create(project_params) @project = Project.new(project_params)
if @project.save if @project.save
redirect_to projects_path redirect_to project_path(@project)
else else
ap '----------------------'
ap @project.errors.full_messages
render :new render :new
end end
end end
...@@ -51,13 +54,14 @@ class ProjectsController < ApplicationController ...@@ -51,13 +54,14 @@ class ProjectsController < ApplicationController
Project.find(params[:id]) Project.find(params[:id])
end end
def user_params def project_params
params.require(:project).permit(:photo, :photo_preview, :photo_before, :photo_after, :type, params.require(:project).permit(:photo, :photo_preview, :photo_before, :photo_after, :type,
:status, :name, :name_eng, :individual_type_ua, :individual_type_en, :status, :name, :name_eng, :individual_type_ua, :individual_type_en,
:title_ua, :title_en, :heading_ua, :heading_en, :slug, :short_description_ua, :title_ua, :title_en, :heading_ua, :heading_en, :slug, :short_description_ua,
:short_description_en, :description_ua,:description_en, :site, :short_description_en, :description_ua,:description_en, :site,
:link_to_facebook, :required_amount, :related_links_ua, :related_links_en, :link_to_facebook, :required_amount, :related_links_ua, :related_links_en,
:footer_photo) :footer_photo,
project_photos_attributes: [ :id, :photo, :title_uk, :title_en, :_destroy] )
end end
end end
\ No newline at end of file
class Project < ApplicationRecord class Project < ApplicationRecord
has_many :project_galeries, dependent: :destroy
accepts_nested_attributes_for :project_galeries, reject_if: :all_blank, allow_destroy: true
mount_uploader :photo, AvatarUploader mount_uploader :photo, AvatarUploader
mount_uploader {:photo_preview, :photo_before}, AvatarUploader mount_uploader :photo_preview, AvatarUploader
mount_uploader :photo_before, AvatarUploader
mount_uploader :photo_after, AvatarUploader
mount_uploader :footer_photo, AvatarUploader
validates :status, :name, :short_description_ua, enum types: [:program, :project]
:description_ua, :required_amount, presence: true
enum type: [:program, :project]
enum status: [:in_progress, :implemented] enum status: [:in_progress, :implemented]
has_many :project_galeries, inverse_of: :project, dependent: :destroy
has_many :project_qoutes, inverse_of: :project, dependent: :destroy
has_many :project_photos, inverse_of: :project, dependent: :destroy
has_many :project_links, inverse_of: :project, dependent: :destroy
has_many :project_documents, inverse_of: :project, dependent: :destroy
accepts_nested_attributes_for :project_galeries, reject_if: :all_blank, allow_destroy: true
accepts_nested_attributes_for :project_qoutes, reject_if: :all_blank, allow_destroy: true
accepts_nested_attributes_for :project_photos, reject_if: :all_blank, allow_destroy: true
accepts_nested_attributes_for :project_links, reject_if: :all_blank, allow_destroy: true
accepts_nested_attributes_for :project_documents, reject_if: :all_blank, allow_destroy: true
validates :types, :status, :title_uk, :short_description_uk,
:description_uk, :required_amount, presence: true
validates_length_of :individual_type_uk, :individual_type_en, :title_uk, :title_en,
:heading_uk, :heading_en, :site, :link_to_facebook, :related_links_uk,
:related_links_en, maximum: 200
validates_length_of :short_description_uk, :short_description_en, maximum: 2000
validates_length_of :description_uk, :description_en, maximum: 5000
end end
class ProjectDocument < ApplicationRecord
mount_uploader :document_uk, AvatarUploader
mount_uploader :document_en, AvatarUploader
belongs_to :project
end
class ProjectGalery < ApplicationRecord class ProjectGalery < ApplicationRecord
belongs_to :project mount_uploader :photo, AvatarUploader
belongs_to :project
end end
class ProjectLink < ApplicationRecord
belongs_to :project
end
class ProjectPhoto < ApplicationRecord
mount_uploader :photo, AvatarUploader
belongs_to :project
end
class ProjectQoute < ApplicationRecord
mount_uploader :icon, AvatarUploader
belongs_to :project
end
class AvatarUploader < CarrierWave::Uploader::Base class AvatarUploader < CarrierWave::Uploader::Base
include CarrierWave::MiniMagick
process :resize_to_fit => [1280, 1024]
storage :file storage :file
def extension_whitelist
%w(jpg jpeg png)
end
def store_dir def store_dir
"uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}" "uploads/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
......
...@@ -3,7 +3,9 @@ require_relative 'boot' ...@@ -3,7 +3,9 @@ require_relative 'boot'
require 'rails/all' require 'rails/all'
require 'carrierwave' require 'carrierwave'
require 'carrierwave/processing/mini_magick'
require 'awesome_print'
# Require the gems listed in Gemfile, including any gems # Require the gems listed in Gemfile, including any gems
# you've limited to :test, :development, or :production. # you've limited to :test, :development, or :production.
Bundler.require(*Rails.groups) Bundler.require(*Rails.groups)
......
...@@ -5,25 +5,23 @@ class CreateProjects < ActiveRecord::Migration[5.0] ...@@ -5,25 +5,23 @@ class CreateProjects < ActiveRecord::Migration[5.0]
t.string :photo_preview t.string :photo_preview
t.string :photo_before t.string :photo_before
t.string :photo_after t.string :photo_after
t.integer :type t.integer :types
t.integer :status t.integer :status
t.string :name t.string :individual_type_uk
t.string :name_eng
t.string :individual_type_ua
t.string :individual_type_en t.string :individual_type_en
t.string :title_ua t.string :title_uk
t.string :title_en t.string :title_en
t.string :heading_ua t.string :heading_uk
t.string :heading_en t.string :heading_en
t.string :slug t.string :slug
t.text :short_description_ua t.text :short_description_uk
t.text :short_description_en t.text :short_description_en
t.text :description_ua t.text :description_uk
t.text :description_en t.text :description_en
t.string :site t.string :site
t.string :link_to_facebook t.string :link_to_facebook
t.float :required_amount t.float :required_amount
t.string :related_links_ua t.string :related_links_uk
t.string :related_links_en t.string :related_links_en
t.string :footer_photo t.string :footer_photo
t.timestamps t.timestamps
......
...@@ -4,6 +4,7 @@ class CreateProjectGaleries < ActiveRecord::Migration[5.0] ...@@ -4,6 +4,7 @@ class CreateProjectGaleries < ActiveRecord::Migration[5.0]
t.string :photo t.string :photo
t.string :name_uk t.string :name_uk
t.string :name_en t.string :name_en
t.references :project
t.timestamps t.timestamps
end end
end end
......
class CreateProjectQoutes < ActiveRecord::Migration[5.0]
def change
create_table :project_qoutes do |t|
t.text :text_over_quote_uk
t.text :text_over_quote_en
t.string :background_color_quote_text
t.string :icon
t.text :text_quote_uk
t.text :text_quote
t.text :text_below_quote_uk
t.text :text_below_quote
t.references :project
t.timestamps
end
end
end
class CreateProjectPhotos < ActiveRecord::Migration[5.0]
def change
create_table :project_photos do |t|
t.string :photo
t.string :title_uk
t.string :title_en
t.references :project
t.timestamps
end
end
end
class CreateProjectLinks < ActiveRecord::Migration[5.0]
def change
create_table :project_links do |t|
t.string :site
t.string :title_uk
t.string :title_en
t.references :project
t.timestamps
end
end
end
class CreateProjectDocuments < ActiveRecord::Migration[5.0]
def change
create_table :project_documents do |t|
t.string :document_uk
t.string :document_en
t.string :document_name_uk
t.string :document_name_en
t.references :project
t.timestamps
end
end
end
...@@ -10,7 +10,7 @@ ...@@ -10,7 +10,7 @@
# #
# It's strongly recommended that you check this file into your version control system. # It's strongly recommended that you check this file into your version control system.
ActiveRecord::Schema.define(version: 20190925121437) do ActiveRecord::Schema.define(version: 20190926130127) do
create_table "active_admin_comments", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| create_table "active_admin_comments", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "namespace" t.string "namespace"
...@@ -26,12 +26,60 @@ ActiveRecord::Schema.define(version: 20190925121437) do ...@@ -26,12 +26,60 @@ ActiveRecord::Schema.define(version: 20190925121437) do
t.index ["resource_type", "resource_id"], name: "index_active_admin_comments_on_resource_type_and_resource_id", using: :btree t.index ["resource_type", "resource_id"], name: "index_active_admin_comments_on_resource_type_and_resource_id", using: :btree
end end
create_table "project_documents", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "document_uk"
t.string "document_en"
t.string "document_name_uk"
t.string "document_name_en"
t.integer "project_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["project_id"], name: "index_project_documents_on_project_id", using: :btree
end
create_table "project_galeries", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| create_table "project_galeries", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "photo" t.string "photo"
t.string "name_uk" t.string "name_uk"
t.string "name_en" t.string "name_en"
t.integer "project_id"
t.datetime "created_at", null: false t.datetime "created_at", null: false
t.datetime "updated_at", null: false t.datetime "updated_at", null: false
t.index ["project_id"], name: "index_project_galeries_on_project_id", using: :btree
end
create_table "project_links", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "site"
t.string "title_uk"
t.string "title_en"
t.integer "project_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["project_id"], name: "index_project_links_on_project_id", using: :btree
end
create_table "project_photos", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.string "photo"
t.string "title_uk"
t.string "title_en"
t.integer "project_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["project_id"], name: "index_project_photos_on_project_id", using: :btree
end
create_table "project_qoutes", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
t.text "text_over_quote_uk", limit: 65535
t.text "text_over_quote_en", limit: 65535
t.string "background_color_quote_text"
t.string "icon"
t.text "text_quote_uk", limit: 65535
t.text "text_quote", limit: 65535
t.text "text_below_quote_uk", limit: 65535
t.text "text_below_quote", limit: 65535
t.integer "project_id"
t.datetime "created_at", null: false
t.datetime "updated_at", null: false
t.index ["project_id"], name: "index_project_qoutes_on_project_id", using: :btree
end end
create_table "projects", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t| create_table "projects", force: :cascade, options: "ENGINE=InnoDB DEFAULT CHARSET=utf8" do |t|
...@@ -39,25 +87,23 @@ ActiveRecord::Schema.define(version: 20190925121437) do ...@@ -39,25 +87,23 @@ ActiveRecord::Schema.define(version: 20190925121437) do
t.string "photo_preview" t.string "photo_preview"
t.string "photo_before" t.string "photo_before"
t.string "photo_after" t.string "photo_after"
t.integer "type" t.integer "types"
t.integer "status" t.integer "status"
t.string "name" t.string "individual_type_uk"
t.string "name_eng"
t.string "individual_type_ua"
t.string "individual_type_en" t.string "individual_type_en"
t.string "title_ua" t.string "title_uk"
t.string "title_en" t.string "title_en"
t.string "heading_ua" t.string "heading_uk"
t.string "heading_en" t.string "heading_en"
t.string "slug" t.string "slug"
t.text "short_description_ua", limit: 65535 t.text "short_description_uk", limit: 65535
t.text "short_description_en", limit: 65535 t.text "short_description_en", limit: 65535
t.text "description_ua", limit: 65535 t.text "description_uk", limit: 65535
t.text "description_en", limit: 65535 t.text "description_en", limit: 65535
t.string "site" t.string "site"
t.string "link_to_facebook" t.string "link_to_facebook"
t.float "required_amount", limit: 24 t.float "required_amount", limit: 24
t.string "related_links_ua" t.string "related_links_uk"
t.string "related_links_en" t.string "related_links_en"
t.string "footer_photo" t.string "footer_photo"
t.datetime "created_at", null: false t.datetime "created_at", null: false
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment