iatelier 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +15 -0
- data/.rspec +3 -0
- data/.travis.yml +7 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +6 -0
- data/Gemfile.lock +119 -0
- data/LICENSE.txt +21 -0
- data/README.md +43 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/iatelier-0.1.1.gem +0 -0
- data/iatelier.gemspec +43 -0
- data/lib/iatelier/Users/captainhusaynpinguin/Documents/ruby/iatelier/public/assets/js/analog.js +15347 -0
- data/lib/iatelier/Users/captainhusaynpinguin/Documents/ruby/iatelier/public/assets/js/selectize.js +12672 -0
- data/lib/iatelier/application.rb +317 -0
- data/lib/iatelier/assets/favicon.ico +0 -0
- data/lib/iatelier/assets/images/.gitkeep +0 -0
- data/lib/iatelier/assets/javascripts/iatelier-analog.js +15347 -0
- data/lib/iatelier/assets/javascripts/selectize.js +12672 -0
- data/lib/iatelier/assets/js/iatelier-analog.js +26 -0
- data/lib/iatelier/assets/js/selectize.js +3 -0
- data/lib/iatelier/assets/sass/backend.scss +4 -0
- data/lib/iatelier/assets/sass/blaze/blaze.colors.scss +30 -0
- data/lib/iatelier/assets/sass/blaze/blaze.scss +42 -0
- data/lib/iatelier/assets/sass/blaze/components.addresses.scss +12 -0
- data/lib/iatelier/assets/sass/blaze/components.alerts.scss +59 -0
- data/lib/iatelier/assets/sass/blaze/components.avatars.scss +36 -0
- data/lib/iatelier/assets/sass/blaze/components.badges.scss +60 -0
- data/lib/iatelier/assets/sass/blaze/components.breadcrumbs.scss +20 -0
- data/lib/iatelier/assets/sass/blaze/components.bubbles.scss +49 -0
- data/lib/iatelier/assets/sass/blaze/components.buttons.scss +77 -0
- data/lib/iatelier/assets/sass/blaze/components.calendars.scss +69 -0
- data/lib/iatelier/assets/sass/blaze/components.cards.scss +213 -0
- data/lib/iatelier/assets/sass/blaze/components.headings.scss +14 -0
- data/lib/iatelier/assets/sass/blaze/components.hints.scss +27 -0
- data/lib/iatelier/assets/sass/blaze/components.input-groups.scss +163 -0
- data/lib/iatelier/assets/sass/blaze/components.inputs.scss +144 -0
- data/lib/iatelier/assets/sass/blaze/components.links.scss +31 -0
- data/lib/iatelier/assets/sass/blaze/components.lists.scss +60 -0
- data/lib/iatelier/assets/sass/blaze/components.navs.scss +126 -0
- data/lib/iatelier/assets/sass/blaze/components.overlays.scss +26 -0
- data/lib/iatelier/assets/sass/blaze/components.pagination.scss +42 -0
- data/lib/iatelier/assets/sass/blaze/components.progress.scss +51 -0
- data/lib/iatelier/assets/sass/blaze/components.ranges.scss +114 -0
- data/lib/iatelier/assets/sass/blaze/components.tables.scss +88 -0
- data/lib/iatelier/assets/sass/blaze/components.tabs.scss +72 -0
- data/lib/iatelier/assets/sass/blaze/components.tags.scss +42 -0
- data/lib/iatelier/assets/sass/blaze/components.toggles.scss +74 -0
- data/lib/iatelier/assets/sass/blaze/components.tooltips.scss +96 -0
- data/lib/iatelier/assets/sass/blaze/components.trees.scss +47 -0
- data/lib/iatelier/assets/sass/blaze/components.typography.scss +94 -0
- data/lib/iatelier/assets/sass/blaze/generics.global.scss +13 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_components.alerts.scss +6 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_components.badges.scss +8 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_components.buttons.scss +83 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_components.inputs.scss +45 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_components.links.scss +22 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_components.lists.scss +10 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_components.navs.scss +29 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_components.ranges.scss +89 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_components.tabs.scss +5 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_components.toggles.scss +6 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_components.typography.scss +25 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_objects.containers.scss +10 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_objects.grid.scss +113 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_settings.global.scss +864 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_tools.mediaqueries.scss +73 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_utilities.alignment.scss +24 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_utilities.boxing.scss +125 -0
- data/lib/iatelier/assets/sass/blaze/mixins/_utilities.visibility.scss +47 -0
- data/lib/iatelier/assets/sass/blaze/objects.containers.scss +29 -0
- data/lib/iatelier/assets/sass/blaze/objects.drawers.scss +80 -0
- data/lib/iatelier/assets/sass/blaze/objects.forms.scss +25 -0
- data/lib/iatelier/assets/sass/blaze/objects.grid.responsive.scss +124 -0
- data/lib/iatelier/assets/sass/blaze/objects.grid.scss +70 -0
- data/lib/iatelier/assets/sass/blaze/objects.images.scss +5 -0
- data/lib/iatelier/assets/sass/blaze/objects.media.scss +36 -0
- data/lib/iatelier/assets/sass/blaze/objects.modals.scss +58 -0
- data/lib/iatelier/assets/sass/blaze/objects.panels.scss +27 -0
- data/lib/iatelier/assets/sass/blaze/themes/blaze.example.scss +7 -0
- data/lib/iatelier/assets/sass/blaze/utilities.alignment.scss +22 -0
- data/lib/iatelier/assets/sass/blaze/utilities.boxing.scss +101 -0
- data/lib/iatelier/assets/sass/blaze/utilities.elevation.scss +19 -0
- data/lib/iatelier/assets/sass/blaze/utilities.sizes.scss +25 -0
- data/lib/iatelier/assets/sass/blaze/utilities.visibility.scss +45 -0
- data/lib/iatelier/assets/sass/iatelier.scss +30 -0
- data/lib/iatelier/assets/sass/selectize.scss +394 -0
- data/lib/iatelier/assets/sass/views/master.scss +5 -0
- data/lib/iatelier/assets/stylesheets/iatelier.css +534 -0
- data/lib/iatelier/assets/stylesheets/selectize.css +420 -0
- data/lib/iatelier/config/routes.rb +14 -0
- data/lib/iatelier/controllers/.gitkeep +0 -0
- data/lib/iatelier/controllers/books/create.rb +15 -0
- data/lib/iatelier/controllers/books/edit.rb +13 -0
- data/lib/iatelier/controllers/books/manage.rb +13 -0
- data/lib/iatelier/controllers/books/new.rb +15 -0
- data/lib/iatelier/controllers/books/update.rb +16 -0
- data/lib/iatelier/controllers/ileaf.rb +23 -0
- data/lib/iatelier/mix-manifest.json +6 -0
- data/lib/iatelier/models/.gitkeep +0 -0
- data/lib/iatelier/models/application_record.rb +3 -0
- data/lib/iatelier/models/book.rb +176 -0
- data/lib/iatelier/models/dimension.rb +28 -0
- data/lib/iatelier/models/dimensions/description.rb +4 -0
- data/lib/iatelier/models/dimensions/slug.rb +13 -0
- data/lib/iatelier/models/dimensions/subtitle.rb +4 -0
- data/lib/iatelier/models/dimensions/thumbnail.rb +4 -0
- data/lib/iatelier/models/dimensions/timestamp.rb +4 -0
- data/lib/iatelier/models/dimensions/title.rb +5 -0
- data/lib/iatelier/models/grouping.rb +28 -0
- data/lib/iatelier/models/keyword.rb +8 -0
- data/lib/iatelier/models/people.rb +11 -0
- data/lib/iatelier/models/transi_.php +262 -0
- data/lib/iatelier/package.json +35 -0
- data/lib/iatelier/templates/application.html.erb +65 -0
- data/lib/iatelier/templates/books/_engine.html.haml +31 -0
- data/lib/iatelier/templates/books/edit.html.haml +8 -0
- data/lib/iatelier/templates/books/grouping/_bundles.html.haml +0 -0
- data/lib/iatelier/templates/books/grouping/_keywords.html.haml +5 -0
- data/lib/iatelier/templates/books/grouping/_peoples.html.haml +7 -0
- data/lib/iatelier/templates/books/manage.html.haml +12 -0
- data/lib/iatelier/templates/books/new.html.haml +7 -0
- data/lib/iatelier/templates/books/update.html.haml +0 -0
- data/lib/iatelier/version.rb +3 -0
- data/lib/iatelier/views/application_layout.rb +7 -0
- data/lib/iatelier/views/books/create.rb +9 -0
- data/lib/iatelier/views/books/edit.rb +9 -0
- data/lib/iatelier/views/books/manage.rb +9 -0
- data/lib/iatelier/views/books/new.rb +9 -0
- data/lib/iatelier/views/books/update.rb +9 -0
- data/lib/iatelier/webpack.mix.js +19 -0
- data/lib/iatelier.rb +325 -0
- metadata +250 -0
@@ -0,0 +1,176 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
Dir[File.dirname(__FILE__) + '/*.rb'].each {|file| require file }
|
3
|
+
Dir[File.dirname(__FILE__) + '/dimensions/*.rb'].each {|file| require file }
|
4
|
+
require 'redcarpet'
|
5
|
+
|
6
|
+
class Book < ActiveRecord::Base
|
7
|
+
self.abstract_class = true
|
8
|
+
|
9
|
+
@@dimensions = []
|
10
|
+
@@roles = []
|
11
|
+
|
12
|
+
@@content = ''
|
13
|
+
|
14
|
+
has_one :title, as: :titleable, class_name: 'Dimensions::Title'
|
15
|
+
has_one :slug, as: :slugable, class_name: 'Dimensions::Slug'
|
16
|
+
has_one :subtitle, as: :subtitleable, class_name: 'Dimensions::Subtitle'
|
17
|
+
has_one :description, as: :descriptionable, class_name: 'Dimensions::Description'
|
18
|
+
has_one :thumbnail, as: :thumbnailable, class_name: 'Dimensions::Thumbnail'
|
19
|
+
has_one :timestamp, as: :timestampable, class_name: 'Dimensions::Timestamp'
|
20
|
+
|
21
|
+
has_many :keywordables, as: :keywordable, dependent: :destroy
|
22
|
+
has_many :keywords, through: :keywordables
|
23
|
+
|
24
|
+
has_many :peopleables, as: :peopleable, dependent: :destroy
|
25
|
+
has_many :peoples, through: :peopleables
|
26
|
+
|
27
|
+
accepts_nested_attributes_for :title, :slug, :subtitle, :description, :thumbnail, :timestamp
|
28
|
+
validates_associated :slug
|
29
|
+
|
30
|
+
def dimensions
|
31
|
+
@@dimensions
|
32
|
+
end
|
33
|
+
|
34
|
+
def roles
|
35
|
+
@@roles
|
36
|
+
end
|
37
|
+
|
38
|
+
def individuals requested_role
|
39
|
+
@query = '`peopleables`.`role` = "' + requested_role.to_s + '"'
|
40
|
+
self.peoples.includes(:peopleables).where(@query)
|
41
|
+
end
|
42
|
+
|
43
|
+
def content
|
44
|
+
puts "we are here"
|
45
|
+
unless self.id.nil?
|
46
|
+
|
47
|
+
@storage_location = './storage/books/' + self.class.name.pluralize(2) + '/' + self.id.to_s + '/main.md'
|
48
|
+
puts "now wer are going here :: " + @storage_location
|
49
|
+
if File.exists? @storage_location
|
50
|
+
puts "contnet is equal " + @@content
|
51
|
+
@@content = File.open(@storage_location).read
|
52
|
+
else
|
53
|
+
@@content = nil
|
54
|
+
end
|
55
|
+
else
|
56
|
+
@@content = nil
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
def content_to_html
|
61
|
+
markdown = Redcarpet::Markdown.new(Redcarpet::Render::HTML, autolink: true, tables: true)
|
62
|
+
markdown.render(self.content)
|
63
|
+
end
|
64
|
+
|
65
|
+
def write_content text
|
66
|
+
# if File.open(@storage_location).write
|
67
|
+
# self.loc = self.id
|
68
|
+
# self.save
|
69
|
+
end
|
70
|
+
|
71
|
+
# def initialized
|
72
|
+
# super()
|
73
|
+
# puts "content of the dimension: \n"
|
74
|
+
# puts @dimensions.inspect
|
75
|
+
# @dimensions.each do |dimension|
|
76
|
+
# reference = dimension + able
|
77
|
+
# hasone dimension.to_sym as: reference.to_sym
|
78
|
+
# end
|
79
|
+
# end
|
80
|
+
|
81
|
+
def create params
|
82
|
+
@@dimensions.each do |dimension|
|
83
|
+
method_name = 'setup_' + dimension
|
84
|
+
self.public_send(method_name.to_sym, params)
|
85
|
+
end
|
86
|
+
self.save
|
87
|
+
sync_keywords params
|
88
|
+
sync_individuals params
|
89
|
+
end
|
90
|
+
|
91
|
+
def revise params
|
92
|
+
@@dimensions.each do |dimension|
|
93
|
+
if self.public_send(dimension.to_sym)
|
94
|
+
method_name = 'revise_' + dimension
|
95
|
+
else
|
96
|
+
method_name = 'setup_' + dimension
|
97
|
+
end
|
98
|
+
self.public_send(method_name.to_sym, params)
|
99
|
+
end
|
100
|
+
@@dimensions.each do |dimension|
|
101
|
+
self.public_send(dimension.to_sym).save
|
102
|
+
end
|
103
|
+
sync_keywords params
|
104
|
+
sync_individuals params
|
105
|
+
end
|
106
|
+
|
107
|
+
def sync_keywords params
|
108
|
+
@nkeys = []
|
109
|
+
@keywords = params[:keywords].split ', '
|
110
|
+
|
111
|
+
@keywords.each do |keyword|
|
112
|
+
@new_keyword = Keyword.find_or_create_by(:word => keyword)
|
113
|
+
@nkeys << @new_keyword
|
114
|
+
end
|
115
|
+
|
116
|
+
self.keywords = @nkeys
|
117
|
+
end
|
118
|
+
|
119
|
+
def sync_individuals params
|
120
|
+
@roles = params[:people]
|
121
|
+
puts "this is what we have:" + @roles.to_s
|
122
|
+
@roles.each do |role, individuals|
|
123
|
+
individuals = individuals.split ', '
|
124
|
+
@existings = self.individuals(role)
|
125
|
+
puts "here is the new output = " + @existings.to_s
|
126
|
+
@existings.each do |instance|
|
127
|
+
@delete = true
|
128
|
+
individuals.each do |individual|
|
129
|
+
if instance.identifier == individual
|
130
|
+
@delete = false
|
131
|
+
end
|
132
|
+
if @delete
|
133
|
+
instance.delete
|
134
|
+
end
|
135
|
+
end
|
136
|
+
end
|
137
|
+
individuals.each do |individual|
|
138
|
+
if People.find_by(identifier: individual)
|
139
|
+
puts "identifier exists"
|
140
|
+
if self.individuals(role).find_by(identifier: individual)
|
141
|
+
puts "this record already exists = " + self.individuals(role).where(identifier: individual).to_s
|
142
|
+
else
|
143
|
+
self.peopleables.create(role: role, people: People.find_by(identifier: individual))
|
144
|
+
end
|
145
|
+
else
|
146
|
+
puts "a whole new person entry"
|
147
|
+
person = People.create(identifier: individual)
|
148
|
+
self.peopleables.create(role: role, people: People.find_by(identifier: individual))
|
149
|
+
end
|
150
|
+
# DELETING THE DELETED ASSOCIATIONS!!!
|
151
|
+
end
|
152
|
+
end
|
153
|
+
end
|
154
|
+
|
155
|
+
def convert string
|
156
|
+
if string.kind_of? String
|
157
|
+
require 'json'
|
158
|
+
return JSON.parse(string);
|
159
|
+
end
|
160
|
+
return string;
|
161
|
+
end
|
162
|
+
|
163
|
+
def setup_title params
|
164
|
+
self.build_title({value: params[:title]})
|
165
|
+
end
|
166
|
+
def revise_title params
|
167
|
+
self.title.update_attributes({value: params[:title]})
|
168
|
+
end
|
169
|
+
|
170
|
+
def setup_slug params
|
171
|
+
self.build_slug({value: params[:slug]})
|
172
|
+
end
|
173
|
+
def revise_slug params
|
174
|
+
self.slug.update_attributes({value: params[:slug]})
|
175
|
+
end
|
176
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Dimension < ActiveRecord::Base
|
2
|
+
self.abstract_class = true
|
3
|
+
|
4
|
+
@@dimensions = []
|
5
|
+
|
6
|
+
def dimensions
|
7
|
+
@@dimensions
|
8
|
+
end
|
9
|
+
|
10
|
+
def initializeadsf
|
11
|
+
super()
|
12
|
+
puts "content of the dimension: \n"
|
13
|
+
puts @dimensions.inspect
|
14
|
+
@dimensions.each do |dimension|
|
15
|
+
reference = dimension + able
|
16
|
+
hasone dimension.to_sym as: reference.to_sym
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def setup value
|
21
|
+
self.create({value: value})
|
22
|
+
end
|
23
|
+
|
24
|
+
def revise(params)
|
25
|
+
title.update_attributes({title: params[:post][:title_attributes][:value]})
|
26
|
+
title.save
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,13 @@
|
|
1
|
+
class SlugValidator < ActiveModel::Validator
|
2
|
+
def validate(record)
|
3
|
+
if Dimensions::Slug.where(value: record.value, slugable_type: record.slugable_type).any?
|
4
|
+
record.errors.add(:slug, "is already in use, chose another one.")
|
5
|
+
end
|
6
|
+
end
|
7
|
+
end
|
8
|
+
|
9
|
+
module Dimensions
|
10
|
+
class Slug < Dimension
|
11
|
+
validates_with SlugValidator
|
12
|
+
end
|
13
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
class Grouping < ActiveRecord::Base
|
2
|
+
self.abstract_class = true
|
3
|
+
|
4
|
+
@@dimensions = []
|
5
|
+
|
6
|
+
def dimensions
|
7
|
+
@@dimensions
|
8
|
+
end
|
9
|
+
|
10
|
+
def initializeadsf
|
11
|
+
super()
|
12
|
+
puts "content of the dimension: \n"
|
13
|
+
puts @dimensions.inspect
|
14
|
+
@dimensions.each do |dimension|
|
15
|
+
reference = dimension + able
|
16
|
+
hasone dimension.to_sym as: reference.to_sym
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def setup value
|
21
|
+
self.create({value: value})
|
22
|
+
end
|
23
|
+
|
24
|
+
def revise(params)
|
25
|
+
title.update_attributes({title: params[:post][:title_attributes][:value]})
|
26
|
+
title.save
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,262 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
namespace IAtelier\Atelier\Production;
|
4
|
+
|
5
|
+
use Illuminate\Database\Eloquent\Model;
|
6
|
+
use IAtelier\Atelier\Keyword;
|
7
|
+
use IAtelier\Atelier\Role;
|
8
|
+
use IAtelier\Atelier\People;
|
9
|
+
use IAtelier\Atelier\Name;
|
10
|
+
use App;
|
11
|
+
|
12
|
+
use Illuminate\Support\Collection;
|
13
|
+
|
14
|
+
trait BookProduceGroupings {
|
15
|
+
|
16
|
+
public function storeGroupings($values)
|
17
|
+
{
|
18
|
+
foreach (static::$groupings as $grouping)
|
19
|
+
{
|
20
|
+
$method = 'store' . studly_case($grouping);
|
21
|
+
if (array_key_exists($grouping, $values))
|
22
|
+
{
|
23
|
+
$this->$method($values);
|
24
|
+
}
|
25
|
+
}
|
26
|
+
}
|
27
|
+
// Complex Store Methods
|
28
|
+
|
29
|
+
public function storeKeywords($values)
|
30
|
+
{
|
31
|
+
if ( $values['keywords'] != '' )
|
32
|
+
{
|
33
|
+
$this->syncKeywords($values['keywords']);
|
34
|
+
}
|
35
|
+
}
|
36
|
+
|
37
|
+
public function storePeople($values)
|
38
|
+
{
|
39
|
+
if ( array_key_exists('people', $values) )
|
40
|
+
{
|
41
|
+
foreach ( $values['people'] as $role => $people )
|
42
|
+
{
|
43
|
+
$people = $this->convert($people);
|
44
|
+
if ( !empty($people) )
|
45
|
+
{{}
|
46
|
+
foreach ( $people as $person )
|
47
|
+
{
|
48
|
+
if ( isset($person['id']) && is_numeric($person['id']) && People::find($person['id']) )
|
49
|
+
{
|
50
|
+
$person = People::find($person['id']);
|
51
|
+
} else {
|
52
|
+
$key = Name::where('identifier', $person['name'] )->first();
|
53
|
+
if ( !is_null($key) )
|
54
|
+
{
|
55
|
+
$person = $key->people()->first();
|
56
|
+
}
|
57
|
+
else
|
58
|
+
{
|
59
|
+
$newPerson = new People;
|
60
|
+
$newPerson->save();
|
61
|
+
$newPerson->detail()->create([ 'identifier' => $person['name'] ]);
|
62
|
+
$person = $newPerson;
|
63
|
+
}
|
64
|
+
}
|
65
|
+
$this->people()->attach($person->id, ['role' => $role]);
|
66
|
+
}
|
67
|
+
}
|
68
|
+
}
|
69
|
+
}
|
70
|
+
}
|
71
|
+
|
72
|
+
|
73
|
+
|
74
|
+
public function storeBundles($values)
|
75
|
+
{
|
76
|
+
echo( gettype($values['bundles']) );
|
77
|
+
foreach ( $values['bundles'] as $bundle )
|
78
|
+
{
|
79
|
+
$bundle = $this->convert($bundle);
|
80
|
+
$this->bundles()->attach($bundle['id']);
|
81
|
+
}
|
82
|
+
}
|
83
|
+
|
84
|
+
// generic functions
|
85
|
+
|
86
|
+
private function attachPeoples($idValues, $role)
|
87
|
+
{
|
88
|
+
if ($idValues != '') {
|
89
|
+
$idValues = explode(',',$idValues);
|
90
|
+
$idValues = collect($idValues);
|
91
|
+
|
92
|
+
$values = $idValues->filter(function ($value, $key) {
|
93
|
+
return !is_numeric($value);
|
94
|
+
});
|
95
|
+
$new_keywords_ids = newPeoples($values);
|
96
|
+
|
97
|
+
|
98
|
+
$ids = $idValues->filter(function ($value, $key) {
|
99
|
+
return is_numeric($value);
|
100
|
+
});
|
101
|
+
|
102
|
+
$all_ids = array_merge($new_keywords_ids, $ids->toArray());
|
103
|
+
foreach ( $all_ids as $id )
|
104
|
+
{
|
105
|
+
$toSync[$id]['role'] = $role;
|
106
|
+
}
|
107
|
+
$this->people()->attach($toSync);
|
108
|
+
}
|
109
|
+
}
|
110
|
+
|
111
|
+
public function syncKeywords($keywords)
|
112
|
+
{
|
113
|
+
$newsKeywords = [];
|
114
|
+
$keywords = $this->convert($keywords);
|
115
|
+
foreach ($keywords as $keyword)
|
116
|
+
{
|
117
|
+
if (isset($keyword['id']) && is_numeric($keyword['id']) && Keyword::find($keyword['id']) )
|
118
|
+
{
|
119
|
+
$keyword = Keyword::find($keyword['id']);
|
120
|
+
} else {
|
121
|
+
$newkeyword = new Keyword;
|
122
|
+
$key = $newkeyword->where('word', $keyword['word'])->first();
|
123
|
+
if ( !is_null($key) )
|
124
|
+
{
|
125
|
+
$keyword = $key;
|
126
|
+
}
|
127
|
+
else
|
128
|
+
{
|
129
|
+
$newkeyword->word = $keyword['word'];
|
130
|
+
$newkeyword->save();
|
131
|
+
$keyword = $newkeyword;
|
132
|
+
}
|
133
|
+
}
|
134
|
+
$newsKeywords[] = $keyword->id;
|
135
|
+
}
|
136
|
+
$this->keywords()->sync($newsKeywords);
|
137
|
+
|
138
|
+
}
|
139
|
+
|
140
|
+
|
141
|
+
|
142
|
+
// Store or Update Methods
|
143
|
+
public function reviseGroupings($values)
|
144
|
+
{
|
145
|
+
foreach (static::$groupings as $grouping)
|
146
|
+
{
|
147
|
+
$method = 'storeOrUpdate' . studly_case($grouping);
|
148
|
+
if (array_key_exists($grouping, $values))
|
149
|
+
{
|
150
|
+
$this->$method($values);
|
151
|
+
}
|
152
|
+
}
|
153
|
+
}
|
154
|
+
|
155
|
+
public function storeOrUpdateKeywords($values)
|
156
|
+
{
|
157
|
+
$this->syncKeywords($values['keywords']);
|
158
|
+
}
|
159
|
+
|
160
|
+
public function storeOrUpdateBundles($values)
|
161
|
+
{
|
162
|
+
$bundles = array();
|
163
|
+
foreach($values['bundles'] as $type => $bundle)
|
164
|
+
{
|
165
|
+
$bundle = $this->convert($bundle);
|
166
|
+
if (isset($bundle['id']))
|
167
|
+
{
|
168
|
+
$bundles[] = $bundle['id'];
|
169
|
+
}
|
170
|
+
}
|
171
|
+
if (count($bundles) == 1)
|
172
|
+
{
|
173
|
+
$this->bundles()->sync($bundles[0]);
|
174
|
+
}
|
175
|
+
else {
|
176
|
+
$this->bundles()->sync($bundles);
|
177
|
+
}
|
178
|
+
|
179
|
+
|
180
|
+
}
|
181
|
+
|
182
|
+
public function storeOrUpdatePeople($values)
|
183
|
+
{
|
184
|
+
$pp = $this->people()->get();
|
185
|
+
$newRelationships = [];
|
186
|
+
$existingRelationships = [];
|
187
|
+
foreach ($pp as $personsRole)
|
188
|
+
{
|
189
|
+
$existingRelationships[] = $personsRole->pivot->id;
|
190
|
+
}
|
191
|
+
|
192
|
+
$collections = $values['people'];
|
193
|
+
foreach( $collections as $role => $collection )
|
194
|
+
{
|
195
|
+
$collections[$role] = $this->convert($collection);
|
196
|
+
}
|
197
|
+
|
198
|
+
$newPeople = array();
|
199
|
+
foreach( $collections as $role => $collection )
|
200
|
+
{
|
201
|
+
foreach ( $collection as $key => $person )
|
202
|
+
{
|
203
|
+
if ( !array_key_exists('id', $person) || !is_numeric($person['id']))
|
204
|
+
{
|
205
|
+
$newPeople[] = $person['name'];
|
206
|
+
|
207
|
+
$people = new People;
|
208
|
+
$name = Name::where('identifier', $person['name'])->first();
|
209
|
+
if ( !is_null($name) )
|
210
|
+
{
|
211
|
+
$collections[$role][$key]['id'] = $name->people->id;
|
212
|
+
}
|
213
|
+
else
|
214
|
+
{
|
215
|
+
$people->save();
|
216
|
+
$people->detail()->create([ 'identifier' => $person['name']]);
|
217
|
+
$collections[$role][$key]['id'] = $people->id;
|
218
|
+
}
|
219
|
+
// $collections[$role][$key]['id'] = $id;
|
220
|
+
}
|
221
|
+
}
|
222
|
+
}
|
223
|
+
|
224
|
+
foreach( $collections as $role => $collection )
|
225
|
+
{
|
226
|
+
$collection = $this->convert($collection);
|
227
|
+
foreach ( $collection as $person )
|
228
|
+
{
|
229
|
+
$ifExisting = $this->people()->where('role',$role)->where('people_id', $person['id'])->first();
|
230
|
+
if ( $ifExisting )
|
231
|
+
{
|
232
|
+
// this relationship already exists
|
233
|
+
$newRelationships[] = $ifExisting->pivot->id;
|
234
|
+
}
|
235
|
+
else
|
236
|
+
{
|
237
|
+
$this->people()->attach($person['id'], ['role' => $role]);
|
238
|
+
$newRelationships[] = $this->people()->where('role',$role)->where('people_id', $person['id'])->first()->pivot->id;
|
239
|
+
}
|
240
|
+
}
|
241
|
+
}
|
242
|
+
foreach( $existingRelationships as $ER )
|
243
|
+
{
|
244
|
+
|
245
|
+
if(!in_array($ER, $newRelationships))
|
246
|
+
{
|
247
|
+
$relation = Role::find($ER);
|
248
|
+
$relation->delete();
|
249
|
+
}
|
250
|
+
|
251
|
+
}
|
252
|
+
}
|
253
|
+
|
254
|
+
|
255
|
+
public function convert($string) {
|
256
|
+
if (is_string($string))
|
257
|
+
{
|
258
|
+
return json_decode($string, true);
|
259
|
+
}
|
260
|
+
return $string;
|
261
|
+
}
|
262
|
+
}
|
@@ -0,0 +1,35 @@
|
|
1
|
+
{
|
2
|
+
"private": true,
|
3
|
+
"scripts": {
|
4
|
+
"dev": "NODE_ENV=development node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
5
|
+
"watch": "NODE_ENV=development node_modules/webpack/bin/webpack.js --watch --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js",
|
6
|
+
"hot": "NODE_ENV=development node_modules/webpack-dev-server/bin/webpack-dev-server.js --inline --hot --config=node_modules/laravel-mix/setup/webpack.config.js",
|
7
|
+
"production": "NODE_ENV=production node_modules/webpack/bin/webpack.js --progress --hide-modules --config=node_modules/laravel-mix/setup/webpack.config.js"
|
8
|
+
},
|
9
|
+
"devDependencies": {
|
10
|
+
"babel-cli": "*",
|
11
|
+
"babel-core": "*",
|
12
|
+
"babel-loader": "^8.0.6",
|
13
|
+
"babel-preset-env": "*",
|
14
|
+
"cross-env": "^6.0.3",
|
15
|
+
"jquery": "^3.3.1",
|
16
|
+
"laravel-mix": "4.0.0",
|
17
|
+
"lodash": "4.17.5",
|
18
|
+
"resolve-url-loader": "^2.3.2",
|
19
|
+
"sass": "^1.23.7",
|
20
|
+
"sass-loader": "^7.3.1"
|
21
|
+
},
|
22
|
+
"dependencies": {
|
23
|
+
"@piratesatelier/os-ui-oldschool": "0.0.3",
|
24
|
+
"contents": "^4.0.2",
|
25
|
+
"flatpickr": "^4.3.2",
|
26
|
+
"imagesloaded": "4.1.4",
|
27
|
+
"jquery-bridget": "^2.0.1",
|
28
|
+
"jquery-smooth-scroll": "^2.2.0",
|
29
|
+
"microplugin": "0.0.3",
|
30
|
+
"moment": "2.21.0",
|
31
|
+
"sifter": "^0.5.3",
|
32
|
+
"sticky-kit": "^1.1.3",
|
33
|
+
"underscore": "^1.8.3"
|
34
|
+
}
|
35
|
+
}
|
@@ -0,0 +1,65 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html lang="en">
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8" />
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
6
|
+
<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; media-src *">
|
7
|
+
|
8
|
+
<title></title>
|
9
|
+
|
10
|
+
<meta name="description" content="
|
11
|
+
@stack('description')
|
12
|
+
">
|
13
|
+
|
14
|
+
|
15
|
+
<script type="text/javascript" src="/assets/iatelier-analog.js"></script>
|
16
|
+
|
17
|
+
<link rel="stylesheet" href="/assets/iatelier.css">
|
18
|
+
<!-- <link rel="stylesheet" href="/lil-plp/atelier/css/selectize.css"> -->
|
19
|
+
|
20
|
+
<meta name="csrf-token" content="{{ csrf_token() }}">
|
21
|
+
</head>
|
22
|
+
|
23
|
+
<body>
|
24
|
+
|
25
|
+
<div id="os">
|
26
|
+
<div class="menu-bar">
|
27
|
+
<a href="#"><b>iAtelier</b></a>
|
28
|
+
<a href="/atelier/analog/"><b>{{ config('app.name') }}</b></a>
|
29
|
+
</div>
|
30
|
+
<div class="desk">
|
31
|
+
<div class="window">
|
32
|
+
|
33
|
+
<div class="bar">
|
34
|
+
<div class="menu">
|
35
|
+
<div class="window-title">
|
36
|
+
</div>
|
37
|
+
</div>
|
38
|
+
<div class="buttons"></div>
|
39
|
+
<div class="tabs">
|
40
|
+
<a href="">New Tab</a>
|
41
|
+
<!--
|
42
|
+
<router-link to="/outline">Outline</router-link>
|
43
|
+
<router-link to="/events">Events</router-link>
|
44
|
+
<router-link to="/bundle">Bundle</router-link>
|
45
|
+
-->
|
46
|
+
</div>
|
47
|
+
</div>
|
48
|
+
|
49
|
+
<div class="content">
|
50
|
+
<div class="sidebar">
|
51
|
+
MENU
|
52
|
+
</div>
|
53
|
+
|
54
|
+
<div class="panel">
|
55
|
+
<%= yield %>
|
56
|
+
</div>
|
57
|
+
</div>
|
58
|
+
|
59
|
+
<div class="footer">
|
60
|
+
</div>
|
61
|
+
</div>
|
62
|
+
</div>
|
63
|
+
</div>
|
64
|
+
</body>
|
65
|
+
</html>
|
@@ -0,0 +1,31 @@
|
|
1
|
+
.panel-edit
|
2
|
+
.form-box
|
3
|
+
.os-form-group
|
4
|
+
-if book.dimensions.include? 'title'
|
5
|
+
%label.label Title
|
6
|
+
%input{:class => "form-control pure-input-1", :name => "title", :type => "text", :placeholder => "Title", :value => book.title.try(:value)}
|
7
|
+
.os-form-group
|
8
|
+
-if book.dimensions.include? 'slug'
|
9
|
+
%label.label Slug
|
10
|
+
%input{:class => "form-control pure-input-1", :name => "slug", :type => "text", :placeholder => "Slug", :value => book.slug.try(:value)}
|
11
|
+
.os-form-group
|
12
|
+
-if book.dimensions.include? 'subtitle'
|
13
|
+
%label.label Subtitle
|
14
|
+
%input{:class => "form-control pure-input-1", :name => "subtitle", :type => "text", :placeholder => "Subtitle", :value => book.subtitle.try(:value)}
|
15
|
+
.os-form-group
|
16
|
+
-if book.dimensions.include? 'description'
|
17
|
+
%label.label Description
|
18
|
+
%input{:class => "form-control pure-input-1", :name => "description", :type => "text", :placeholder => "Description", :value => book.description.try(:value)}
|
19
|
+
|
20
|
+
.form-box
|
21
|
+
%label Text
|
22
|
+
%textarea{:name => "content", :class => "text-editor pure-input-1 form-control", :type => "text", :placeholder => "Content of the book ..."}
|
23
|
+
-unless book.content.nil?
|
24
|
+
= book.content
|
25
|
+
%div{:class => "grid-large panel-edit"}
|
26
|
+
.form-box
|
27
|
+
= render :partial => 'grouping/keywords'
|
28
|
+
.form-box
|
29
|
+
= render :partial => 'grouping/peoples'
|
30
|
+
.form-box
|
31
|
+
= render :partial => 'grouping/bundles'
|