wontomedia 0.0.1

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 (193) hide show
  1. data/COPYING +661 -0
  2. data/COPYING.DOCUMENTATION +450 -0
  3. data/LICENSE +661 -0
  4. data/README.markdown +56 -0
  5. data/Rakefile +185 -0
  6. data/VERSION.yml +4 -0
  7. data/app/controllers/admin_controller.rb +144 -0
  8. data/app/controllers/application_controller.rb +29 -0
  9. data/app/controllers/connections_controller.rb +150 -0
  10. data/app/controllers/items_controller.rb +365 -0
  11. data/app/helpers/connections_helper.rb +67 -0
  12. data/app/helpers/format_helper.rb +154 -0
  13. data/app/helpers/items_helper.rb +105 -0
  14. data/app/models/category_item.rb +23 -0
  15. data/app/models/connection.rb +210 -0
  16. data/app/models/individual_item.rb +23 -0
  17. data/app/models/item.rb +86 -0
  18. data/app/models/property_item.rb +23 -0
  19. data/app/models/qualified_item.rb +23 -0
  20. data/app/views/admin/index.html.erb +74 -0
  21. data/app/views/connections/_index_outbound_links.html.erb +48 -0
  22. data/app/views/connections/_spo_select_controls.html.erb +151 -0
  23. data/app/views/connections/edit.html.erb +70 -0
  24. data/app/views/connections/index.html.erb +84 -0
  25. data/app/views/connections/new.html.erb +61 -0
  26. data/app/views/connections/show.html.erb +110 -0
  27. data/app/views/items/_active_content.html.erb +26 -0
  28. data/app/views/items/_content_examples.html.erb +55 -0
  29. data/app/views/items/_core_tasks.html.erb +23 -0
  30. data/app/views/items/_form_fields.html.erb +69 -0
  31. data/app/views/items/_list_outbound_links.html.erb +58 -0
  32. data/app/views/items/_screen_select.html.erb +24 -0
  33. data/app/views/items/_show_outbound_links.html.erb +70 -0
  34. data/app/views/items/_topic_list.html.erb +26 -0
  35. data/app/views/items/_type_select.html.erb +47 -0
  36. data/app/views/items/edit.html.erb +63 -0
  37. data/app/views/items/index.html.erb +74 -0
  38. data/app/views/items/new.html.erb +124 -0
  39. data/app/views/items/newpop.html.erb +58 -0
  40. data/app/views/items/show.html.erb +209 -0
  41. data/app/views/layouts/_amazon_ads.html.erb +55 -0
  42. data/app/views/layouts/_glossary_help_box.html.erb +43 -0
  43. data/app/views/layouts/_google_ads.html.erb +40 -0
  44. data/app/views/layouts/_language_select.html.erb +24 -0
  45. data/app/views/layouts/_login_controls.html.erb +24 -0
  46. data/app/views/layouts/_master_help.html.erb +24 -0
  47. data/app/views/layouts/_navigation_menu.html.erb +39 -0
  48. data/app/views/layouts/_search_box.html.erb +27 -0
  49. data/app/views/layouts/_status_msgs.html.erb +25 -0
  50. data/app/views/layouts/application.html.erb +67 -0
  51. data/app/views/layouts/base.html.erb +93 -0
  52. data/app/views/layouts/home.html.erb +67 -0
  53. data/app/views/layouts/popup.html.erb +23 -0
  54. data/assets/wontomedia-sample.rb +47 -0
  55. data/config/asset_packages.yml +44 -0
  56. data/config/boot.rb +110 -0
  57. data/config/cucumber.yml +65 -0
  58. data/config/database-mysql-development.yml +47 -0
  59. data/config/database-mysql.yml +26 -0
  60. data/config/environment.rb +94 -0
  61. data/config/environments/cucumber.rb +29 -0
  62. data/config/environments/development.rb +26 -0
  63. data/config/environments/production.rb +33 -0
  64. data/config/environments/test.rb +31 -0
  65. data/config/initializers/inflections.rb +19 -0
  66. data/config/initializers/mime_types.rb +14 -0
  67. data/config/initializers/new_rails_defaults.rb +26 -0
  68. data/config/locales/en.yml +14 -0
  69. data/config/routes.rb +37 -0
  70. data/db/fixtures/connections.yml +96 -0
  71. data/db/fixtures/items.yml +277 -0
  72. data/db/migrate/20090312212805_create_items.rb +31 -0
  73. data/db/migrate/20090406221320_create_connections.rb +32 -0
  74. data/db/migrate/20090411014503_add_type_for_item_subclasses.rb +29 -0
  75. data/db/migrate/20090415142152_rename_item_type.rb +31 -0
  76. data/db/migrate/20090518022918_rename_object_and_self.rb +33 -0
  77. data/db/migrate/20090529171442_add_flags_to_items.rb +27 -0
  78. data/db/migrate/20090529171508_add_flags_to_connections.rb +27 -0
  79. data/db/migrate/20090605213800_flags_columns_not_null.rb +29 -0
  80. data/db/migrate/20090605215028_flags_columns_default_zero.rb +29 -0
  81. data/db/schema.rb +30 -0
  82. data/default-custom/app/views/items/_home_extern_list.html.erb +32 -0
  83. data/default-custom/app/views/items/_home_introductory_text.html.erb +70 -0
  84. data/default-custom/app/views/items/home.html.erb +77 -0
  85. data/default-custom/public/images/logo.png +0 -0
  86. data/default-custom/public/images/logo.svg +74 -0
  87. data/default-custom/public/stylesheets/wm.css +301 -0
  88. data/doc/README.markdown +44 -0
  89. data/doc/README_FOR_APP +82 -0
  90. data/doc/customization.markdown +93 -0
  91. data/doc/scripts/rake-customize.markdown +83 -0
  92. data/lib/helpers/connection_helper.rb +41 -0
  93. data/lib/helpers/item_helper.rb +141 -0
  94. data/lib/helpers/tripple_navigation.rb +158 -0
  95. data/lib/tasks/cucumber.rake +83 -0
  96. data/lib/tasks/customize.rake +70 -0
  97. data/lib/tasks/db.rake +65 -0
  98. data/lib/tasks/javascript_testing_tasks.rake +176 -0
  99. data/public/404.html +50 -0
  100. data/public/422.html +50 -0
  101. data/public/500.html +53 -0
  102. data/public/dispatch.cgi +20 -0
  103. data/public/dispatch.fcgi +34 -0
  104. data/public/dispatch.rb +20 -0
  105. data/public/favicon.ico +0 -0
  106. data/public/images/blank_error_icon.png +0 -0
  107. data/public/images/blank_status_icon.png +0 -0
  108. data/public/images/error_error_icon.png +0 -0
  109. data/public/images/error_status_icon.png +0 -0
  110. data/public/images/good_status_icon.png +0 -0
  111. data/public/images/help_icon.png +0 -0
  112. data/public/images/twitter_icon.png +0 -0
  113. data/public/images/warn_error_icon.png +0 -0
  114. data/public/images/working_status_icon.gif +0 -0
  115. data/public/javascripts/application.js +56 -0
  116. data/public/javascripts/controls.js +963 -0
  117. data/public/javascripts/dragdrop.js +973 -0
  118. data/public/javascripts/effects.js +1128 -0
  119. data/public/javascripts/event.simulate.js +64 -0
  120. data/public/javascripts/fancybox.js +43 -0
  121. data/public/javascripts/forConnectionsForms.js +218 -0
  122. data/public/javascripts/forItemsForms.js +511 -0
  123. data/public/javascripts/itemCreatePopup.js +115 -0
  124. data/public/javascripts/itemTitleToName.js +119 -0
  125. data/public/javascripts/jquery.js +4376 -0
  126. data/public/javascripts/modalbox.js +502 -0
  127. data/public/javascripts/prototype.js +4320 -0
  128. data/public/javascripts/reconcileJQueryAndPrototype.js +19 -0
  129. data/public/robots.txt +7 -0
  130. data/public/stylesheets/blank.gif +0 -0
  131. data/public/stylesheets/fancy_close.png +0 -0
  132. data/public/stylesheets/fancy_loading.png +0 -0
  133. data/public/stylesheets/fancy_nav_left.png +0 -0
  134. data/public/stylesheets/fancy_nav_right.png +0 -0
  135. data/public/stylesheets/fancy_shadow_e.png +0 -0
  136. data/public/stylesheets/fancy_shadow_n.png +0 -0
  137. data/public/stylesheets/fancy_shadow_ne.png +0 -0
  138. data/public/stylesheets/fancy_shadow_nw.png +0 -0
  139. data/public/stylesheets/fancy_shadow_s.png +0 -0
  140. data/public/stylesheets/fancy_shadow_se.png +0 -0
  141. data/public/stylesheets/fancy_shadow_sw.png +0 -0
  142. data/public/stylesheets/fancy_shadow_w.png +0 -0
  143. data/public/stylesheets/fancy_title_left.png +0 -0
  144. data/public/stylesheets/fancy_title_main.png +0 -0
  145. data/public/stylesheets/fancy_title_over.png +0 -0
  146. data/public/stylesheets/fancy_title_right.png +0 -0
  147. data/public/stylesheets/fancybox.css +333 -0
  148. data/public/stylesheets/modalbox.css +110 -0
  149. data/public/stylesheets/scaffold.css +36 -0
  150. data/public/stylesheets/spinner.gif +0 -0
  151. data/script/about +4 -0
  152. data/script/console +3 -0
  153. data/script/cucumber +10 -0
  154. data/script/dbconsole +3 -0
  155. data/script/destroy +3 -0
  156. data/script/generate +3 -0
  157. data/script/performance/benchmarker +3 -0
  158. data/script/performance/profiler +3 -0
  159. data/script/performance/request +3 -0
  160. data/script/plugin +3 -0
  161. data/script/process/inspector +3 -0
  162. data/script/process/reaper +3 -0
  163. data/script/process/spawner +3 -0
  164. data/script/runner +3 -0
  165. data/script/server +3 -0
  166. data/vendor/plugins/asset_packager/CHANGELOG +122 -0
  167. data/vendor/plugins/asset_packager/README +178 -0
  168. data/vendor/plugins/asset_packager/Rakefile +22 -0
  169. data/vendor/plugins/asset_packager/about.yml +8 -0
  170. data/vendor/plugins/asset_packager/init.rb +2 -0
  171. data/vendor/plugins/asset_packager/install.rb +1 -0
  172. data/vendor/plugins/asset_packager/lib/jsmin.rb +205 -0
  173. data/vendor/plugins/asset_packager/lib/synthesis/asset_package.rb +212 -0
  174. data/vendor/plugins/asset_packager/lib/synthesis/asset_package_helper.rb +39 -0
  175. data/vendor/plugins/asset_packager/tasks/asset_packager_tasks.rake +23 -0
  176. data/vendor/plugins/asset_packager/test/asset_package_helper_development_test.rb +100 -0
  177. data/vendor/plugins/asset_packager/test/asset_package_helper_production_test.rb +140 -0
  178. data/vendor/plugins/asset_packager/test/asset_packager_test.rb +92 -0
  179. data/vendor/plugins/asset_packager/test/asset_packages.yml +20 -0
  180. data/vendor/plugins/asset_packager/test/assets/javascripts/application.js +2 -0
  181. data/vendor/plugins/asset_packager/test/assets/javascripts/bar.js +4 -0
  182. data/vendor/plugins/asset_packager/test/assets/javascripts/controls.js +815 -0
  183. data/vendor/plugins/asset_packager/test/assets/javascripts/dragdrop.js +913 -0
  184. data/vendor/plugins/asset_packager/test/assets/javascripts/effects.js +958 -0
  185. data/vendor/plugins/asset_packager/test/assets/javascripts/foo.js +4 -0
  186. data/vendor/plugins/asset_packager/test/assets/javascripts/prototype.js +2006 -0
  187. data/vendor/plugins/asset_packager/test/assets/stylesheets/bar.css +16 -0
  188. data/vendor/plugins/asset_packager/test/assets/stylesheets/foo.css +16 -0
  189. data/vendor/plugins/asset_packager/test/assets/stylesheets/header.css +16 -0
  190. data/vendor/plugins/asset_packager/test/assets/stylesheets/screen.css +16 -0
  191. data/vendor/plugins/asset_packager/test/assets/stylesheets/subdir/bar.css +16 -0
  192. data/vendor/plugins/asset_packager/test/assets/stylesheets/subdir/foo.css +16 -0
  193. metadata +265 -0
@@ -0,0 +1,56 @@
1
+ WontoMedia "README" file
2
+ Copyright (C) 2010 - Glen E. Ivey
3
+ (see the end of this file for copyright/licensing information)
4
+
5
+
6
+ ## This is WontoMedia ##
7
+
8
+ WontoMedia is a Ruby-on-Rails web app for community creation of an
9
+ information classification scheme. WontoMedia is free software
10
+ (licensed under the AGPL v3), and is being developed by a dispersed
11
+ volunteer team using agile methods.
12
+
13
+ This README will be expanded as the project matures. Until that time,
14
+ you can find additional, general information in the following places:
15
+
16
+ http://wontomedia.rubyforge.org/
17
+ http://rubyforge.org/projects/wontomedia/
18
+ http://wiki.wontology.org/Main_Page
19
+
20
+ In particular, simple installation instuctions are on the last page
21
+ above, with more details at:
22
+
23
+ http://wiki.wontology.org/InstallFromScratch
24
+ http://wiki.wontology.org/SettingUpYourDevelopmentEnvironment
25
+
26
+ Once you've got WontoMedia, you can find some design and workflow
27
+ documentation in the WontoMedia source directory under the `doc`
28
+ directory. If you run the `rake doc:app` command, RDoc documentation
29
+ will be extracted and can be viewed in a browser starting from
30
+ `doc/app/index.html`.
31
+
32
+ And if you have any questions or feedback about the projet, there are
33
+ our:
34
+
35
+ forum http://rubyforge.org/forum/?group_id=7903
36
+ email list wontomedia-development at rubyforge dot org
37
+ http://rubyforge.org/mail/?group_id=7903
38
+ bug tracker http://rubyforge.org/tracker/?group_id=7903
39
+
40
+
41
+ Finally, you can also find us at:
42
+
43
+ http://github.com/gleneivey/wontomedia/tree/master
44
+ http://www.pivotaltracker.com/projects/9280/stories
45
+ http://twitter.com/wontomedia
46
+
47
+ ----------------------------------------------------------------
48
+
49
+ Permission is granted to copy, distribute and/or modify this
50
+ document under the terms of the GNU Free Documentation License,
51
+ Version 1.3, published by the Free Software Foundation; with no
52
+ Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts.
53
+
54
+ You should have received a copy of the GNU Free Documentation
55
+ License along with document in the file COPYING.DOCUMENTATION. If
56
+ not, see <http://www.gnu.org/licenses/>.
@@ -0,0 +1,185 @@
1
+ # WontoMedia - a wontology web application
2
+ # Copyright (C) 2010 - Glen E. Ivey
3
+ # www.wontology.com
4
+ #
5
+ # This program is free software: you can redistribute it and/or modify
6
+ # it under the terms of the GNU Affero General Public License version
7
+ # 3 as published by the Free Software Foundation.
8
+ #
9
+ # This program is distributed in the hope that it will be useful,
10
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
11
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
12
+ # GNU Affero General Public License for more details.
13
+ #
14
+ # You should have received a copy of the GNU Affero General Public License
15
+ # along with this program in the file COPYING and/or LICENSE. If not,
16
+ # see <http://www.gnu.org/licenses/>.
17
+
18
+
19
+ require(File.join(File.dirname(__FILE__), 'config', 'boot'))
20
+
21
+ require 'rake'
22
+ require 'rake/testtask'
23
+ require 'rake/rdoctask'
24
+ require 'tasks/rails'
25
+
26
+ if ENV["RAILS_ENV"].nil?
27
+ ENV["RAILS_ENV"] = RAILS_ENV = "test"
28
+ end
29
+
30
+
31
+
32
+ ############################################################
33
+ # block to use Jeweler to generate our gemspec, gem, etc.
34
+ begin
35
+ require 'jeweler'
36
+ Jeweler::Tasks.new do |s|
37
+ s.name = "wontomedia"
38
+ s.rubyforge_project = "wontomedia"
39
+ s.summary = "WontoMedia is a Ruby-on-Rails web app for community creation of an information classification scheme"
40
+ s.description = <<-ENDOSTRING
41
+ WontoMedia is a Ruby-on-Rails web app for community creation of
42
+ an information classification scheme. WontoMedia is free
43
+ software (licensed under the AGPL v3), and is being developed by
44
+ a dispersed volunteer team using agile methods.
45
+ ENDOSTRING
46
+
47
+ s.email = "gleneivey@wontology.org"
48
+ s.homepage = "http://wontomedia.rubyforge.org"
49
+ s.authors = ["Glen E. Ivey"]
50
+
51
+ s.has_rdoc = true
52
+ s.extra_rdoc_files = ["README"]
53
+
54
+ s.files = FileList["[A-Z]*", "assets/wontomedia-sample.rb",
55
+ "vendor/plugins/asset_packager/**/*", "doc/*", "doc/scripts/*",
56
+ "{app,config,bin,db,default-custom,generators,lib,public,script}/**/*"].
57
+ exclude("database.yml", "wontomedia.rb",
58
+ "**/*_packaged.js", "**/*_packaged.css"
59
+ ) do |maybe_exclude|
60
+ File.symlink?( maybe_exclude )
61
+ end
62
+ s.test_files = []
63
+ # Note: 1) Explicitly add any other non-testing packages under 'vendor'
64
+ # 2) Exclude all of our symbolic links
65
+ # 3)
66
+ # .autotest cucumber.yml .gitignore
67
+ # the testing directories
68
+ # deploy doc features policy test
69
+ # and the working/transitory directories
70
+ # log pkg tmp
71
+ # aren't included because developers are expected to pull from Git
72
+
73
+ s.add_dependency 'rails', '~>2.2'
74
+ end
75
+
76
+ task :build => :gemspec # don't build a gem from a stale spec
77
+ Jeweler::RubyforgeTasks.new do |rubyforge|
78
+ rubyforge.doc_task = "doc:app"
79
+ end
80
+ Jeweler::GemcutterTasks.new
81
+ rescue LoadError
82
+ puts "WARNING: Missing development dependency. 'Jeweler' and/or 'rubyforge' not available. Install them with:\n 'sudo gem install rubyforge'\n 'sudo gem install technicalpickles-jeweler -s http://gems.github.com'"
83
+ end
84
+
85
+
86
+ # documented rake_task.clear method missing?
87
+ class Rake::Task
88
+ def clear!
89
+ @actions.clear
90
+ @prerequisites.clear
91
+ end
92
+ end
93
+
94
+
95
+ ############################################################
96
+ # update default rake tasks for our test directory structure
97
+
98
+ namespace :test do
99
+ # make test:units mean what it normally means
100
+ Rake::Task[:units].clear!
101
+ Rake::TestTask.new(:units => "db:test:prepare") do |t|
102
+ t.libs << "test"
103
+ t.pattern = 'test/unit/app/models/**/*_test.rb'
104
+ t.verbose = true
105
+ end
106
+ Rake::Task['test:units'].comment =
107
+ "Run the model tests in test/unit/app/models"
108
+ end
109
+
110
+
111
+ ############################################################
112
+ # new rake tasks for our unit-like tests
113
+
114
+ namespace :test do
115
+ Rake::TestTask.new(:views => "db:test:prepare") do |t|
116
+ t.libs << "test"
117
+ t.pattern = 'test/unit/app/views/**/*_test.rb'
118
+ t.verbose = true
119
+ end
120
+ Rake::Task['test:views'].comment =
121
+ "Run the view unit tests (test/unit/app/views/**/*_test.rb)"
122
+
123
+ Rake::TestTask.new(:helpers => "db:test:prepare") do |t|
124
+ t.libs << "test"
125
+ t.pattern = 'test/unit/app/helpers/**/*_test.rb'
126
+ t.verbose = true
127
+ end
128
+ Rake::Task['test:helpers'].comment =
129
+ "Run the view-helper unit tests (test/unit/app/helpers/**/*_test.rb)"
130
+
131
+ Rake::TestTask.new(:dbunits => "db:test:prepare") do |t|
132
+ t.libs << "test"
133
+ t.pattern = 'test/unit/db/**/*_test.rb'
134
+ t.verbose = true
135
+ end
136
+ Rake::Task['test:dbunits'].comment =
137
+ "Run the database unit tests (test/unit/db/**/*_test.rb)"
138
+
139
+ # Note: migration tests using migration_test_helper disrupts
140
+ # loaded fixtures, so can't run in same Ruby process as other unit
141
+ # tests, which breaking into separate rake task accomplishes
142
+ Rake::TestTask.new(:dbmigrations => "db:test:prepare") do |t|
143
+ t.libs << "test"
144
+ t.pattern = 'test/db_migrations_test.rb'
145
+ t.verbose = true
146
+ end
147
+ Rake::Task['test:dbmigrations'].comment =
148
+ "Run the database migration unit test (test/db_migrations_test.rb)"
149
+
150
+ task :db => [ "test:dbunits", "test:dbmigrations" ]
151
+ Rake::Task['test:db'].comment =
152
+ "Run database tests (test:dbunits, test:dbmigrations)"
153
+
154
+
155
+ ############################################################
156
+ # now some new "umbrella" test tasks
157
+
158
+ desc "Execute all development tests in test/unit."
159
+ Rake::TestTask.new(:dev => "db:test:prepare") do |t|
160
+ t.libs << "test"
161
+ t.pattern = 'test/unit/**/*_test.rb'
162
+ t.verbose = true
163
+ end
164
+
165
+ desc "Execute all project-policy audit tests."
166
+ task :policies do
167
+ ruby File.join( "policy", "ckFilesUtils", "buildLinksIgnoreFile.rb" )
168
+ ruby File.join( "policy", "ckFilesUtils", "ckForTabs.rb" )
169
+ ruby File.join( "policy", "ckFilesUtils", "ckCopyrightNotices.rb" )
170
+ ruby File.join( "policy", "ckFilesUtils", "ckCustomizationFilesPresent.rb" )
171
+ end
172
+
173
+ desc "Execute all the tests for Ruby code."
174
+ task :ruby => [ "test:dev", "test:dbmigrations", "test:functionals",
175
+ "test:integration", "build", "cucumber:static_ok"]
176
+ end # namespace :test
177
+
178
+
179
+
180
+ # redefine Rail's basic test task so that we get a reasonable execution order
181
+ Rake::Task[:test].clear!
182
+ desc 'Run all unit, functional, integration, and policy checks'
183
+ task :test => [ "test:policies", "asset:packager:build_all", "test:dev",
184
+ "test:dbmigrations", "test:functionals", "test:javascripts",
185
+ "test:integration", "build", "cucumber:ok" ]
@@ -0,0 +1,4 @@
1
+ ---
2
+ :major: 0
3
+ :minor: 0
4
+ :patch: 1
@@ -0,0 +1,144 @@
1
+ #--
2
+ # WontoMedia - a wontology web application
3
+ # Copyright (C) 2010 - Glen E. Ivey
4
+ # www.wontology.com
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License version
8
+ # 3 as published by the Free Software Foundation.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Affero General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Affero General Public License
16
+ # along with this program in the file COPYING and/or LICENSE. If not,
17
+ # see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+
21
+ require 'yaml'
22
+
23
+ # There is no model matching this controller. It is intended to
24
+ # provide access to and processing of pages used to administer a
25
+ # WontoMedia installation.
26
+ class AdminController < ApplicationController
27
+
28
+ # GET /admin/
29
+ #
30
+ # This action renders the primary administration page. This page
31
+ # includes links to <tt>/items.yaml</tt> and
32
+ # <tt>/connections.n3</tt> so that an administrator can download the
33
+ # complete content of a wontology for backup. It also includes form
34
+ # controls for uploading <tt>.yaml</tt> files of Item records and
35
+ # <tt>.n3</tt> files of Connection records to be added to the
36
+ # installation's database.
37
+ def index
38
+ @this_is_non_information_page = true
39
+ end
40
+
41
+ # POST /admin/item_up
42
+ #
43
+ # This is a form processing action supporting a file-upload control
44
+ # for <tt>.yaml</tt> files of Items.
45
+ def item_up
46
+ @this_is_non_information_page = true
47
+ count = 0
48
+ flash[:error] ||= ""
49
+ YAML::load(params[:item_upload][:itemfile]).each do |item|
50
+
51
+ if item.is_a? Item
52
+ # need to create a new item object so that it saves to db as "new"
53
+ item_hash = ItemHelper.item_to_hash(item)
54
+ name = item.name
55
+ elsif item.is_a? YAML::Object
56
+ # this is magic dependent on the internals of the YAML::Object class
57
+ item_hash = item.instance_eval { @ivars }['attributes']
58
+ name = item_hash['name'] || item_hash[:name]
59
+ else
60
+ flash[:error] <<
61
+ "YAML parser generated an object of type '#{item.class}'.\n"
62
+ redirect_to :action => 'index'
63
+ return
64
+ end
65
+
66
+ n = ItemHelper.new_typed_item(
67
+ item_hash['sti_type'] || item_hash[:sti_type] )
68
+ if n.nil?
69
+ err_str = "No/bad sti_type for item '#{name}', " +
70
+ "tried to create '#{item_hash.inspect}'.\n"
71
+ logger.error(err_str)
72
+ flash[:error] << err_str
73
+ else
74
+ # even if ID present, don't copy; let db assign a new value
75
+ n.name = name
76
+ n.title = item_hash['title'] || item_hash[:title]
77
+ n.description = item_hash['description'] || item_hash[:description]
78
+ n.flags = item_hash['flags'] || item_hash[:flags]
79
+ if n.flags.nil?
80
+ n.flags = 0
81
+ end
82
+
83
+ if n.save
84
+ count += 1
85
+ else
86
+ err_str = "Could not save item named 'n.name': #{n.errors.inspect}\n"
87
+ logger.error(err_str)
88
+ flash[:error] << err_str
89
+ end
90
+ end
91
+ end
92
+
93
+ flash[:notice] = "Created #{count} new items."
94
+ redirect_to :action => 'index'
95
+ end
96
+
97
+ # POST /admin/connection_up
98
+ #
99
+ # This is a form processing action supporting a file-upload control
100
+ # for <tt>.n3</tt> files of Connections. <b>Note</b> that
101
+ # WontoMedia currently uses a <em>trivial, fragile</em> N3 processor
102
+ # that is unlikely to process N3 files other than those that
103
+ # WontoMedia produces.
104
+ def connection_up
105
+ @this_is_non_information_page = true
106
+ count = unparsed = 0
107
+ flash[:error] =""
108
+
109
+ params[:connection_upload][:connectionfile].readlines.each do |n3line|
110
+ # this is a really, *really* bad N3 parser. Almost certainly won't
111
+ # handly any but the most trivial input (like what we export :-)
112
+ if n3line =~ /<#([^>]+)>[^<]+<#([^>]+)>[^<]+<#([^>]+)>[^.]+\./
113
+ e = Connection.new(
114
+ :subject => Item.find_by_name($1),
115
+ :predicate => Item.find_by_name($2),
116
+ :obj => Item.find_by_name($3),
117
+ :flags => 0
118
+ )
119
+ if e.nil?
120
+ err_stry = "Couldn't create connection for #{$1} #{$2} #{$3}.\n"
121
+ logger.error(err_str)
122
+ flash[:error] << err_str
123
+ else
124
+ if e.save
125
+ count += 1
126
+ else
127
+ err_stry = "Couldn't save connection for #{$1} #{$2} #{$3}.\n"
128
+ logger.error(err_str)
129
+ flash[:error] << err_str
130
+ end
131
+ end
132
+ else
133
+ unparsed += 1
134
+ end
135
+ end
136
+
137
+ flash[:notice] = "Created #{count} new connections."
138
+ if unparsed > 0
139
+ flash[:notice] <<
140
+ "(Discarded #{unparsed} non-connection lines from input file)"
141
+ end
142
+ redirect_to :action => 'index'
143
+ end
144
+ end
@@ -0,0 +1,29 @@
1
+ #--
2
+ # WontoMedia - a wontology web application
3
+ # Copyright (C) 2010 - Glen E. Ivey
4
+ # www.wontology.com
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License version
8
+ # 3 as published by the Free Software Foundation.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Affero General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Affero General Public License
16
+ # along with this program in the file COPYING and/or LICENSE. If not,
17
+ # see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+
21
+ # This is the Rails-standard ApplicationController class, which
22
+ # inherits from <tt>ActionController::Base</tt> and is the base class
23
+ # for all of WontoMedia's controller classes. See the source for
24
+ # WontoMedia's global controller configuration.
25
+ class ApplicationController < ActionController::Base
26
+ helper :all # include all helpers, all the time
27
+ protect_from_forgery
28
+ filter_parameter_logging :password
29
+ end
@@ -0,0 +1,150 @@
1
+ #--
2
+ # WontoMedia - a wontology web application
3
+ # Copyright (C) 2010 - Glen E. Ivey
4
+ # www.wontology.com
5
+ #
6
+ # This program is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License version
8
+ # 3 as published by the Free Software Foundation.
9
+ #
10
+ # This program is distributed in the hope that it will be useful,
11
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
12
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13
+ # GNU Affero General Public License for more details.
14
+ #
15
+ # You should have received a copy of the GNU Affero General Public License
16
+ # along with this program in the file COPYING and/or LICENSE. If not,
17
+ # see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+
21
+ require Rails.root.join( 'lib', 'helpers', 'connection_helper')
22
+
23
+ # See also the matching model Connection
24
+ class ConnectionsController < ApplicationController
25
+ Mime::Type.register "application/x-n3", :n3
26
+
27
+
28
+ # GET /connections
29
+ #
30
+ # Note that +index+ is capable of rendering in multiple
31
+ # formats. <tt>/connections</tt> and <tt>/connections.html</tt>
32
+ # yield a human-readable page in HTML markup.
33
+ # <tt>/connections.n3</tt> renders all Connections in the database
34
+ # as N3-format text, with no additional prose or links intended for
35
+ # users. For more information on N3 (Notation3) see
36
+ # http://en.wikipedia.org/wiki/Notation3. Note that, in order to
37
+ # support this, this controller registers the MIME type
38
+ # <tt>application/x-n3</tt> with Rails, and associates it with the
39
+ # <tt>.n3</tt> file extension.
40
+ def index
41
+ @connections = Connection.all.reverse
42
+ respond_to do |wants|
43
+ wants.html
44
+ wants.n3 do
45
+ con = @connections.reject { |connection|
46
+ (connection.flags & Connection::DATA_IS_UNALTERABLE) != 0 }
47
+ render :text => ConnectionHelper.connection_array_to_n3(con)
48
+ end
49
+ end
50
+ end
51
+
52
+ # GET /connections/new
53
+ def new
54
+ @this_is_non_information_page = true
55
+ @connection = Connection.new
56
+ populate_for_new_update
57
+ end
58
+
59
+ # POST /connections
60
+ def create
61
+ @connection = Connection.new(params[:connection])
62
+ @connection.flags = 0
63
+
64
+ if @connection.save
65
+ flash[:notice] = 'Connection was successfully created.'
66
+ redirect_to(@connection)
67
+ else
68
+ populate_for_new_update
69
+ @this_is_non_information_page = true
70
+ render :action => "new"
71
+ end
72
+ end
73
+
74
+ # GET /connections/1
75
+ def show
76
+ # set @connection for view to use for link building
77
+ begin
78
+ @connection = Connection.find(params[:id])
79
+ rescue
80
+ render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
81
+ return
82
+ end
83
+
84
+ # populate these here because I didn't want view causing db queries
85
+ @subject = @connection.subject
86
+ @predicate = @connection.predicate
87
+ @obj = @connection.obj
88
+ @connection_desc = @connection.connection_desc
89
+ end
90
+
91
+ # GET /connections/1/edit
92
+ def edit
93
+ begin
94
+ @this_is_non_information_page = true
95
+ @connection = Connection.find(params[:id])
96
+ rescue
97
+ render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
98
+ return
99
+ end
100
+
101
+ populate_for_new_update
102
+ end
103
+
104
+ # PUT /connections/1
105
+ def update
106
+ begin
107
+ @connection = Connection.find(params[:id])
108
+ rescue
109
+ render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
110
+ return
111
+ end
112
+
113
+ if (@connection.flags & Connection::DATA_IS_UNALTERABLE) != 0
114
+ flash[:error] = 'This Connection cannot be altered.'
115
+ redirect_to connection_path(@connection)
116
+ elsif !@connection.update_attributes(params[:connection])
117
+ populate_for_new_update
118
+ @this_is_non_information_page = true
119
+ render :action => "edit"
120
+ else
121
+ flash[:notice] = 'Connection was successfully updated.'
122
+ redirect_to connection_path(@connection)
123
+ end
124
+ end
125
+
126
+ # DELETE /connections/1
127
+ def destroy
128
+ begin
129
+ @connection = Connection.find(params[:id])
130
+ rescue
131
+ render :file => "#{RAILS_ROOT}/public/404.html", :status => 404
132
+ return
133
+ end
134
+
135
+ if (@connection.flags & Connection::DATA_IS_UNALTERABLE) != 0
136
+ flash[:error] = 'This Connection cannot be altered.'
137
+ redirect_to connection_path(@connection)
138
+ else
139
+ @connection.destroy
140
+ redirect_to connections_url
141
+ end
142
+ end
143
+
144
+ private
145
+
146
+ def populate_for_new_update
147
+ @items = ItemHelper.not_qualified
148
+ @verbs = PropertyItem.all
149
+ end
150
+ end