iatelier 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (135) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +15 -0
  3. data/.rspec +3 -0
  4. data/.travis.yml +7 -0
  5. data/CODE_OF_CONDUCT.md +74 -0
  6. data/Gemfile +6 -0
  7. data/Gemfile.lock +119 -0
  8. data/LICENSE.txt +21 -0
  9. data/README.md +43 -0
  10. data/Rakefile +6 -0
  11. data/bin/console +14 -0
  12. data/bin/setup +8 -0
  13. data/iatelier-0.1.1.gem +0 -0
  14. data/iatelier.gemspec +43 -0
  15. data/lib/iatelier/Users/captainhusaynpinguin/Documents/ruby/iatelier/public/assets/js/analog.js +15347 -0
  16. data/lib/iatelier/Users/captainhusaynpinguin/Documents/ruby/iatelier/public/assets/js/selectize.js +12672 -0
  17. data/lib/iatelier/application.rb +317 -0
  18. data/lib/iatelier/assets/favicon.ico +0 -0
  19. data/lib/iatelier/assets/images/.gitkeep +0 -0
  20. data/lib/iatelier/assets/javascripts/iatelier-analog.js +15347 -0
  21. data/lib/iatelier/assets/javascripts/selectize.js +12672 -0
  22. data/lib/iatelier/assets/js/iatelier-analog.js +26 -0
  23. data/lib/iatelier/assets/js/selectize.js +3 -0
  24. data/lib/iatelier/assets/sass/backend.scss +4 -0
  25. data/lib/iatelier/assets/sass/blaze/blaze.colors.scss +30 -0
  26. data/lib/iatelier/assets/sass/blaze/blaze.scss +42 -0
  27. data/lib/iatelier/assets/sass/blaze/components.addresses.scss +12 -0
  28. data/lib/iatelier/assets/sass/blaze/components.alerts.scss +59 -0
  29. data/lib/iatelier/assets/sass/blaze/components.avatars.scss +36 -0
  30. data/lib/iatelier/assets/sass/blaze/components.badges.scss +60 -0
  31. data/lib/iatelier/assets/sass/blaze/components.breadcrumbs.scss +20 -0
  32. data/lib/iatelier/assets/sass/blaze/components.bubbles.scss +49 -0
  33. data/lib/iatelier/assets/sass/blaze/components.buttons.scss +77 -0
  34. data/lib/iatelier/assets/sass/blaze/components.calendars.scss +69 -0
  35. data/lib/iatelier/assets/sass/blaze/components.cards.scss +213 -0
  36. data/lib/iatelier/assets/sass/blaze/components.headings.scss +14 -0
  37. data/lib/iatelier/assets/sass/blaze/components.hints.scss +27 -0
  38. data/lib/iatelier/assets/sass/blaze/components.input-groups.scss +163 -0
  39. data/lib/iatelier/assets/sass/blaze/components.inputs.scss +144 -0
  40. data/lib/iatelier/assets/sass/blaze/components.links.scss +31 -0
  41. data/lib/iatelier/assets/sass/blaze/components.lists.scss +60 -0
  42. data/lib/iatelier/assets/sass/blaze/components.navs.scss +126 -0
  43. data/lib/iatelier/assets/sass/blaze/components.overlays.scss +26 -0
  44. data/lib/iatelier/assets/sass/blaze/components.pagination.scss +42 -0
  45. data/lib/iatelier/assets/sass/blaze/components.progress.scss +51 -0
  46. data/lib/iatelier/assets/sass/blaze/components.ranges.scss +114 -0
  47. data/lib/iatelier/assets/sass/blaze/components.tables.scss +88 -0
  48. data/lib/iatelier/assets/sass/blaze/components.tabs.scss +72 -0
  49. data/lib/iatelier/assets/sass/blaze/components.tags.scss +42 -0
  50. data/lib/iatelier/assets/sass/blaze/components.toggles.scss +74 -0
  51. data/lib/iatelier/assets/sass/blaze/components.tooltips.scss +96 -0
  52. data/lib/iatelier/assets/sass/blaze/components.trees.scss +47 -0
  53. data/lib/iatelier/assets/sass/blaze/components.typography.scss +94 -0
  54. data/lib/iatelier/assets/sass/blaze/generics.global.scss +13 -0
  55. data/lib/iatelier/assets/sass/blaze/mixins/_components.alerts.scss +6 -0
  56. data/lib/iatelier/assets/sass/blaze/mixins/_components.badges.scss +8 -0
  57. data/lib/iatelier/assets/sass/blaze/mixins/_components.buttons.scss +83 -0
  58. data/lib/iatelier/assets/sass/blaze/mixins/_components.inputs.scss +45 -0
  59. data/lib/iatelier/assets/sass/blaze/mixins/_components.links.scss +22 -0
  60. data/lib/iatelier/assets/sass/blaze/mixins/_components.lists.scss +10 -0
  61. data/lib/iatelier/assets/sass/blaze/mixins/_components.navs.scss +29 -0
  62. data/lib/iatelier/assets/sass/blaze/mixins/_components.ranges.scss +89 -0
  63. data/lib/iatelier/assets/sass/blaze/mixins/_components.tabs.scss +5 -0
  64. data/lib/iatelier/assets/sass/blaze/mixins/_components.toggles.scss +6 -0
  65. data/lib/iatelier/assets/sass/blaze/mixins/_components.typography.scss +25 -0
  66. data/lib/iatelier/assets/sass/blaze/mixins/_objects.containers.scss +10 -0
  67. data/lib/iatelier/assets/sass/blaze/mixins/_objects.grid.scss +113 -0
  68. data/lib/iatelier/assets/sass/blaze/mixins/_settings.global.scss +864 -0
  69. data/lib/iatelier/assets/sass/blaze/mixins/_tools.mediaqueries.scss +73 -0
  70. data/lib/iatelier/assets/sass/blaze/mixins/_utilities.alignment.scss +24 -0
  71. data/lib/iatelier/assets/sass/blaze/mixins/_utilities.boxing.scss +125 -0
  72. data/lib/iatelier/assets/sass/blaze/mixins/_utilities.visibility.scss +47 -0
  73. data/lib/iatelier/assets/sass/blaze/objects.containers.scss +29 -0
  74. data/lib/iatelier/assets/sass/blaze/objects.drawers.scss +80 -0
  75. data/lib/iatelier/assets/sass/blaze/objects.forms.scss +25 -0
  76. data/lib/iatelier/assets/sass/blaze/objects.grid.responsive.scss +124 -0
  77. data/lib/iatelier/assets/sass/blaze/objects.grid.scss +70 -0
  78. data/lib/iatelier/assets/sass/blaze/objects.images.scss +5 -0
  79. data/lib/iatelier/assets/sass/blaze/objects.media.scss +36 -0
  80. data/lib/iatelier/assets/sass/blaze/objects.modals.scss +58 -0
  81. data/lib/iatelier/assets/sass/blaze/objects.panels.scss +27 -0
  82. data/lib/iatelier/assets/sass/blaze/themes/blaze.example.scss +7 -0
  83. data/lib/iatelier/assets/sass/blaze/utilities.alignment.scss +22 -0
  84. data/lib/iatelier/assets/sass/blaze/utilities.boxing.scss +101 -0
  85. data/lib/iatelier/assets/sass/blaze/utilities.elevation.scss +19 -0
  86. data/lib/iatelier/assets/sass/blaze/utilities.sizes.scss +25 -0
  87. data/lib/iatelier/assets/sass/blaze/utilities.visibility.scss +45 -0
  88. data/lib/iatelier/assets/sass/iatelier.scss +30 -0
  89. data/lib/iatelier/assets/sass/selectize.scss +394 -0
  90. data/lib/iatelier/assets/sass/views/master.scss +5 -0
  91. data/lib/iatelier/assets/stylesheets/iatelier.css +534 -0
  92. data/lib/iatelier/assets/stylesheets/selectize.css +420 -0
  93. data/lib/iatelier/config/routes.rb +14 -0
  94. data/lib/iatelier/controllers/.gitkeep +0 -0
  95. data/lib/iatelier/controllers/books/create.rb +15 -0
  96. data/lib/iatelier/controllers/books/edit.rb +13 -0
  97. data/lib/iatelier/controllers/books/manage.rb +13 -0
  98. data/lib/iatelier/controllers/books/new.rb +15 -0
  99. data/lib/iatelier/controllers/books/update.rb +16 -0
  100. data/lib/iatelier/controllers/ileaf.rb +23 -0
  101. data/lib/iatelier/mix-manifest.json +6 -0
  102. data/lib/iatelier/models/.gitkeep +0 -0
  103. data/lib/iatelier/models/application_record.rb +3 -0
  104. data/lib/iatelier/models/book.rb +176 -0
  105. data/lib/iatelier/models/dimension.rb +28 -0
  106. data/lib/iatelier/models/dimensions/description.rb +4 -0
  107. data/lib/iatelier/models/dimensions/slug.rb +13 -0
  108. data/lib/iatelier/models/dimensions/subtitle.rb +4 -0
  109. data/lib/iatelier/models/dimensions/thumbnail.rb +4 -0
  110. data/lib/iatelier/models/dimensions/timestamp.rb +4 -0
  111. data/lib/iatelier/models/dimensions/title.rb +5 -0
  112. data/lib/iatelier/models/grouping.rb +28 -0
  113. data/lib/iatelier/models/keyword.rb +8 -0
  114. data/lib/iatelier/models/people.rb +11 -0
  115. data/lib/iatelier/models/transi_.php +262 -0
  116. data/lib/iatelier/package.json +35 -0
  117. data/lib/iatelier/templates/application.html.erb +65 -0
  118. data/lib/iatelier/templates/books/_engine.html.haml +31 -0
  119. data/lib/iatelier/templates/books/edit.html.haml +8 -0
  120. data/lib/iatelier/templates/books/grouping/_bundles.html.haml +0 -0
  121. data/lib/iatelier/templates/books/grouping/_keywords.html.haml +5 -0
  122. data/lib/iatelier/templates/books/grouping/_peoples.html.haml +7 -0
  123. data/lib/iatelier/templates/books/manage.html.haml +12 -0
  124. data/lib/iatelier/templates/books/new.html.haml +7 -0
  125. data/lib/iatelier/templates/books/update.html.haml +0 -0
  126. data/lib/iatelier/version.rb +3 -0
  127. data/lib/iatelier/views/application_layout.rb +7 -0
  128. data/lib/iatelier/views/books/create.rb +9 -0
  129. data/lib/iatelier/views/books/edit.rb +9 -0
  130. data/lib/iatelier/views/books/manage.rb +9 -0
  131. data/lib/iatelier/views/books/new.rb +9 -0
  132. data/lib/iatelier/views/books/update.rb +9 -0
  133. data/lib/iatelier/webpack.mix.js +19 -0
  134. data/lib/iatelier.rb +325 -0
  135. 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,4 @@
1
+ module Dimensions
2
+ class Description < ApplicationRecord
3
+ end
4
+ 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,4 @@
1
+ module Dimensions
2
+ class Subtitle < ApplicationRecord
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Dimensions
2
+ class Thumbnail < ApplicationRecord
3
+ end
4
+ end
@@ -0,0 +1,4 @@
1
+ module Dimensions
2
+ class Timestamp < ApplicationRecord
3
+ end
4
+ end
@@ -0,0 +1,5 @@
1
+ module Dimensions
2
+ class Title < ApplicationRecord
3
+ belongs_to :titleable, polymorphic: true
4
+ end
5
+ 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,8 @@
1
+ class Keywordable < ApplicationRecord
2
+ belongs_to :keyword
3
+ belongs_to :keywordable, polymorphic: true
4
+ end
5
+
6
+ class Keyword < ApplicationRecord
7
+ has_many :keywordables
8
+ end
@@ -0,0 +1,11 @@
1
+ require 'appliction_record'
2
+
3
+ class Peopleable < ApplicationRecord
4
+ belongs_to :people
5
+ belongs_to :peopleable, polymorphic: true
6
+ end
7
+
8
+ class People < ApplicationRecord
9
+ has_many :peopleables
10
+ self.table_name = "peoples"
11
+ 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'