iatelier 0.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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'