diff --git a/Gemfile b/Gemfile index 774f439eeff73d26ffa0c1244a2690f367f0368e..43a380a159c7075835da3bd72b1430ea344b9545 100644 --- a/Gemfile +++ b/Gemfile @@ -81,6 +81,7 @@ gem 'rubycritic', require: false # docs gem 'rdoc' +gem 'stackprof' group :development, :test do # profiler @@ -100,6 +101,11 @@ group :development, :test do gem 'spring' gem 'sqlite3' + + #JavaScript runtime + gem 'execjs' + gem 'therubyracer' + end group :test do diff --git a/Gemfile.lock b/Gemfile.lock new file mode 100644 index 0000000000000000000000000000000000000000..cea3c858ee916e8157c41c1f6daa194ad48e8ca2 --- /dev/null +++ b/Gemfile.lock @@ -0,0 +1,351 @@ +GEM + remote: https://rubygems.org/ + specs: + abstract_type (0.0.7) + actionmailer (4.2.0) + actionpack (= 4.2.0) + actionview (= 4.2.0) + activejob (= 4.2.0) + mail (~> 2.5, >= 2.5.4) + rails-dom-testing (~> 1.0, >= 1.0.5) + actionpack (4.2.0) + actionview (= 4.2.0) + activesupport (= 4.2.0) + rack (~> 1.6.0) + rack-test (~> 0.6.2) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.1) + actionview (4.2.0) + activesupport (= 4.2.0) + builder (~> 3.1) + erubis (~> 2.7.0) + rails-dom-testing (~> 1.0, >= 1.0.5) + rails-html-sanitizer (~> 1.0, >= 1.0.1) + activejob (4.2.0) + activesupport (= 4.2.0) + globalid (>= 0.3.0) + activemodel (4.2.0) + activesupport (= 4.2.0) + builder (~> 3.1) + activerecord (4.2.0) + activemodel (= 4.2.0) + activesupport (= 4.2.0) + arel (~> 6.0) + activesupport (4.2.0) + i18n (~> 0.7) + json (~> 1.7, >= 1.7.7) + minitest (~> 5.1) + thread_safe (~> 0.3, >= 0.3.4) + tzinfo (~> 1.1) + adamantium (0.2.0) + ice_nine (~> 0.11.0) + memoizable (~> 0.4.0) + arel (6.0.3) + ast (2.1.0) + autoprefixer-rails (6.0.3) + execjs + json + axiom-types (0.1.1) + descendants_tracker (~> 0.0.4) + ice_nine (~> 0.11.0) + thread_safe (~> 0.3, >= 0.3.1) + bcrypt (3.1.10) + better_errors (2.1.1) + coderay (>= 1.0.0) + erubis (>= 2.6.6) + rack (>= 0.9.0) + binding_of_caller (0.7.2) + debug_inspector (>= 0.0.1) + bootstrap-sass (3.3.5.1) + autoprefixer-rails (>= 5.0.0.1) + sass (>= 3.3.0) + builder (3.2.2) + bullet (4.14.7) + activesupport (>= 3.0.0) + uniform_notifier (~> 1.9.0) + byebug (6.0.2) + chart-js-rails (0.0.9) + railties (> 3.1) + chronic (0.10.2) + climate_control (0.0.3) + activesupport (>= 3.0) + cocaine (0.5.7) + climate_control (>= 0.0.3, < 1.0) + coderay (1.1.0) + coercible (1.0.0) + descendants_tracker (~> 0.0.1) + coffee-rails (4.1.0) + coffee-script (>= 2.2.0) + railties (>= 4.0.0, < 5.0) + coffee-script (2.4.1) + coffee-script-source + execjs + coffee-script-source (1.9.1.1) + concord (0.1.5) + adamantium (~> 0.2.0) + equalizer (~> 0.0.9) + curb (0.8.8) + debug_inspector (0.0.2) + descendants_tracker (0.0.4) + thread_safe (~> 0.3, >= 0.3.1) + devise (3.5.1) + bcrypt (~> 3.0) + orm_adapter (~> 0.1) + railties (>= 3.2.6, < 5) + responders + thread_safe (~> 0.1) + warden (~> 1.2.3) + devise_token_auth (0.1.34) + devise (= 3.5.1) + rails (~> 4.2) + diff-lcs (1.2.5) + domain_name (0.5.24) + unf (>= 0.0.5, < 1.0.0) + dspace_rest_client (1.1.2) + curb (~> 0.8.6) + rest-client (>= 1.7, < 2) + equalizer (0.0.11) + erubis (2.7.0) + execjs (2.6.0) + fast_stack (0.1.0) + rake + rake-compiler + flamegraph (0.1.0) + fast_stack + flay (2.4.0) + ruby_parser (~> 3.0) + sexp_processor (~> 4.0) + flog (4.2.1) + ruby_parser (~> 3.1, > 3.1.0) + sexp_processor (~> 4.4) + globalid (0.3.6) + activesupport (>= 4.1.0) + gruff (0.6.0) + rmagick (>= 2.13.4) + http-cookie (1.0.2) + domain_name (~> 0.5) + i18n (0.7.0) + ice_nine (0.11.1) + jbuilder (2.3.1) + activesupport (>= 3.0.0, < 5) + multi_json (~> 1.2) + jquery-rails (4.0.5) + rails-dom-testing (~> 1.0) + railties (>= 4.2.0) + thor (>= 0.14, < 2.0) + jquery-turbolinks (2.1.0) + railties (>= 3.1.0) + turbolinks + json (1.8.3) + libv8 (3.16.14.11) + locastyle (0.0.1) + loofah (2.0.3) + nokogiri (>= 1.5.9) + mail (2.6.3) + mime-types (>= 1.16, < 3) + memoizable (0.4.2) + thread_safe (~> 0.3, >= 0.3.1) + mime-types (2.6.2) + mimemagic (0.3.0) + mina (0.3.7) + open4 (~> 1.3.4) + rake + mini_portile (0.6.2) + minitest (5.8.1) + multi_json (1.11.2) + netrc (0.10.3) + nokogiri (1.6.6.2) + mini_portile (~> 0.6.0) + open4 (1.3.4) + orientdb4r (0.5.1) + rest-client (~> 1.7) + orm_adapter (0.5.0) + paperclip (4.3.1) + activemodel (>= 3.2.0) + activesupport (>= 3.2.0) + cocaine (~> 0.5.5) + mime-types + mimemagic (= 0.3.0) + parser (2.2.2.6) + ast (>= 1.1, < 3.0) + pg (0.18.3) + procto (0.0.2) + puma (2.14.0) + rack (1.6.4) + rack-cors (0.4.0) + rack-mini-profiler (0.9.7) + rack (>= 1.1.3) + rack-test (0.6.3) + rack (>= 1.0) + rails (4.2.0) + actionmailer (= 4.2.0) + actionpack (= 4.2.0) + actionview (= 4.2.0) + activejob (= 4.2.0) + activemodel (= 4.2.0) + activerecord (= 4.2.0) + activesupport (= 4.2.0) + bundler (>= 1.3.0, < 2.0) + railties (= 4.2.0) + sprockets-rails + rails-deprecated_sanitizer (1.0.3) + activesupport (>= 4.2.0.alpha) + rails-dom-testing (1.0.7) + activesupport (>= 4.2.0.beta, < 5.0) + nokogiri (~> 1.6.0) + rails-deprecated_sanitizer (>= 1.0.1) + rails-html-sanitizer (1.0.2) + loofah (~> 2.0) + railties (4.2.0) + actionpack (= 4.2.0) + activesupport (= 4.2.0) + rake (>= 0.8.7) + thor (>= 0.18.1, < 2.0) + rainbow (2.0.0) + rake (10.4.2) + rake-compiler (0.9.5) + rake + rdoc (4.2.0) + reek (1.6.5) + parser (~> 2.2.0.pre.7) + rainbow (>= 1.99, < 3.0) + unparser (~> 0.2.2) + ref (2.0.0) + responders (2.1.0) + railties (>= 4.2.0, < 5) + rest-client (1.8.0) + http-cookie (>= 1.0.2, < 2.0) + mime-types (>= 1.16, < 3.0) + netrc (~> 0.7) + rmagick (2.15.4) + rsolr (1.0.12) + builder (>= 2.1.2) + ruby_parser (3.7.1) + sexp_processor (~> 4.1) + rubycritic (1.4.0) + flay (= 2.4.0) + flog (= 4.2.1) + parser (>= 2.2.0, < 3.0) + reek (= 1.6.5) + virtus (~> 1.0) + sass (3.4.18) + sass-rails (5.0.4) + railties (>= 4.0.0, < 5.0) + sass (~> 3.1) + sprockets (>= 2.8, < 4.0) + sprockets-rails (>= 2.0, < 4.0) + tilt (>= 1.1, < 3) + sdoc (0.4.1) + json (~> 1.7, >= 1.7.7) + rdoc (~> 4.0) + select2-rails (4.0.0) + thor (~> 0.14) + sexp_processor (4.6.0) + shoulda (3.5.0) + shoulda-context (~> 1.0, >= 1.0.1) + shoulda-matchers (>= 1.4.1, < 3.0) + shoulda-callback-matchers (1.1.3) + activesupport (>= 3) + shoulda-context (1.2.1) + shoulda-matchers (2.8.0) + activesupport (>= 3.0.0) + spring (1.4.0) + sprockets (3.3.5) + rack (> 1, < 3) + sprockets-rails (2.3.3) + actionpack (>= 3.0) + activesupport (>= 3.0) + sprockets (>= 2.8, < 4.0) + sqlite3 (1.3.10) + stackprof (0.2.7) + therubyracer (0.12.2) + libv8 (~> 3.16.14.0) + ref + thor (0.19.1) + thread_safe (0.3.5) + tilt (2.0.1) + turbolinks (2.5.3) + coffee-rails + tzinfo (1.2.2) + thread_safe (~> 0.1) + uglifier (2.7.2) + execjs (>= 0.3.0) + json (>= 1.8.0) + unf (0.1.4) + unf_ext + unf_ext (0.0.7.1) + uniform_notifier (1.9.0) + unparser (0.2.4) + abstract_type (~> 0.0.7) + adamantium (~> 0.2.0) + concord (~> 0.1.5) + diff-lcs (~> 1.2.5) + equalizer (~> 0.0.9) + parser (~> 2.2.2) + procto (~> 0.0.2) + virtus (1.0.5) + axiom-types (~> 0.1) + coercible (~> 1.0) + descendants_tracker (~> 0.0, >= 0.0.3) + equalizer (~> 0.0, >= 0.0.9) + warden (1.2.3) + rack (>= 1.0) + web-console (2.2.1) + activemodel (>= 4.0) + binding_of_caller (>= 0.7.2) + railties (>= 4.0) + sprockets-rails (>= 2.0, < 4.0) + whenever (0.9.4) + chronic (>= 0.6.3) + will_paginate (3.0.7) + +PLATFORMS + ruby + +DEPENDENCIES + bcrypt (~> 3.1.7) + better_errors + bootstrap-sass + bullet + byebug + chart-js-rails + coffee-rails (~> 4.1.0) + devise + devise_token_auth + dspace_rest_client (~> 1.1.0) + execjs + flamegraph + gruff + jbuilder (~> 2.0) + jquery-rails + jquery-turbolinks + locastyle + mina + orientdb4r + paperclip + pg + puma + rack-cors + rack-mini-profiler + rails (= 4.2.0) + rdoc + rmagick + rsolr (~> 1.0.12) + rubycritic + sass-rails (~> 5.0) + sdoc (~> 0.4.0) + select2-rails + shoulda + shoulda-callback-matchers (~> 1.1.1) + spring + sqlite3 + stackprof + therubyracer + turbolinks + uglifier (>= 1.3.0) + web-console (~> 2.0) + whenever + will_paginate (~> 3.0.5) + +BUNDLED WITH + 1.10.6 diff --git a/app/assets/images/logo.png b/app/assets/images/logo.png index 31c417df12a32253c11bc8ef25e09d7339d90b89..fd66544072ba7863cd8b9d691fea4c81b162b347 100644 Binary files a/app/assets/images/logo.png and b/app/assets/images/logo.png differ diff --git a/app/assets/images/user-anon.png b/app/assets/images/user-anon.png new file mode 100644 index 0000000000000000000000000000000000000000..d2ab8da5945a930140730c855609d1e32ee7103f Binary files /dev/null and b/app/assets/images/user-anon.png differ diff --git a/app/assets/javascripts/application.js b/app/assets/javascripts/application.js index c1e8f708f3e00a670b82b076568ffd37d1350b43..608172a8ce87f463e76c3ad98f01d9fb013897e7 100644 --- a/app/assets/javascripts/application.js +++ b/app/assets/javascripts/application.js @@ -16,137 +16,4 @@ //= require jquery.turbolinks //= require bootstrap-sprockets //= require select2 -//= require_tree ./application - -/* -$('h2').each(function(index,value) { - $(this).css('fontSize', (parseFloat($(this).css('fontSize')) + (size_c - 15)) + 'px'); -}); -$('h3').each(function(index,value) { - $(this).css('fontSize', (parseFloat($(this).css('fontSize')) + (size_c - 15)) + 'px'); -}); -$('h4').each(function(index,value) { - $(this).css('fontSize', (parseFloat($(this).css('fontSize')) + (size_c - 15)) + 'px'); -}); -$('h5').each(function(index,value) { - $(this).css('fontSize', (parseFloat($(this).css('fontSize')) + (size_c - 15)) + 'px'); -}); -$('h6').each(function(index,value) { - $(this).css('fontSize', (parseFloat($(this).css('fontSize')) + (size_c - 15)) + 'px'); -}); -*/ - -$(document).ready(function(){ - size_c = readCookie('fontSize'); - if (size_c != null) { - document.body.style.fontSize = size_c + 'px'; - $('.dropdown-menu').css('fontSize', document.body.style.fontSize); - $('h1,h2,h3,h4,h5,h6').each(function(index,value) { - $(this).css('fontSize', (parseFloat($(this).css('fontSize')) + (size_c - 15)) + 'px'); - }); - } - Contrast(); -}); - - -//source: http://www.linhadecodigo.com.br/artigo/1615/acessibilidade-aumentando-e-diminuindo-tamanho-de-letra-em-seu-site.aspx -function createCookie(name,value,days) { - if (days) { - var date = new Date(); - date.setTime(date.getTime()+(days*24*60*60*1000)); - var expires = "; expires="+date.toGMTString(); - } else var expires = ""; - document.cookie = name+"="+value+expires+"; path=/"; -} - -function readCookie(name) { - var nameEQ = name + "="; - var ca = document.cookie.split(";"); - for(var i=0;i < ca.length;i++) - { - var c = ca[i]; - while (c.charAt(0)==" ") c = c.substring(1,c.length); - if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); - } - return null; -} - -function resizeText(increment) { - if (document.body.style.fontSize == "") { - document.body.style.fontSize = "15px"; - } - size = parseFloat(document.body.style.fontSize) - if (increment > 0) { - if (size < 25) { - document.body.style.fontSize = parseFloat(document.body.style.fontSize) + increment + "px"; - $('.dropdown-menu').css('fontSize', document.body.style.fontSize); - $('h1 ,h2 ,h3, h4, h5 ,h6').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - } - } else if(increment < 0){ - if (size > 10) { - document.body.style.fontSize = parseFloat(document.body.style.fontSize) + increment + "px"; - $('.dropdown-menu').css('fontSize', document.body.style.fontSize); - $('h1 ,h2 ,h3, h4, h5 ,h6').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - } - } - else{ - size = parseFloat(document.body.style.fontSize); - document.body.style.fontSize = '15px'; - $('.dropdown-menu').css('fontSize', document.body.style.fontSize); - $('h1 ,h2 ,h3, h4, h5 ,h6').each(function(index,value) { - $(this).css('fontSize', parseFloat($(this).css('fontSize')) + increment + 'px'); - }); - } - createCookie('fontSize', parseFloat(document.body.style.fontSize), 365); -} - -function changeContrast() { - if (readCookie('contrast') == null || readCookie('contrast') == "false") { - createCookie('contrast',"true",0); - } else { - createCookie('contrast',"false",0); - } - Contrast(); -} - -function Contrast() { - contrast_c = readCookie('contrast'); - if (contrast_c == null || contrast_c != "true"){ - $('body').addClass('contraste'); - $('.barra-brasil').addClass('contraste'); - $('.search-bar').addClass('contraste'); - $('.search-bar').css('border-top','2px solid white'); - $('#menu-bar').addClass('menu-bar-contrast'); - $('.object-vertical .panel').addClass('contraste'); - $('.navbar').addClass('contraste'); - $('.well').addClass('contraste'); - }else { - $('body').removeClass('contraste'); - $('.barra-brasil').removeClass('contraste'); - $('.search-bar').removeClass('contraste'); - $('.search-bar').css('border-top','none'); - $('#menu-bar').removeClass('menu-bar-contrast'); - $('.object-vertical .panel').removeClass('contraste'); - $('.navbar').removeClass('contraste'); - $('.well').removeClass('contraste'); - } -} - - -$.fn.select2.amd.require( - ["select2/core", "select2/utils", "select2/compat/matcher"], - function (Select2, Utils, oldMatcher) { - - var $basicMultiple = $(".js-example-basic-multiple"); - var $limitMultiple = $(".js-example-basic-multiple-limit"); - - $basicMultiple.select2(); - $basicMultiple.select2({ width: '80%' }); - $limitMultiple.select2({ - maximumSelectionLength: 2 - }); -}); +//= require_tree ./application \ No newline at end of file diff --git a/app/assets/javascripts/application/accessibility.js b/app/assets/javascripts/application/accessibility.js new file mode 100644 index 0000000000000000000000000000000000000000..7e240dc34bbaee04b3fa5bc7d973370b38682fd9 --- /dev/null +++ b/app/assets/javascripts/application/accessibility.js @@ -0,0 +1,107 @@ +//// font size +var fontSize = function() { + var elements = ['h1', 'h2', 'h3', 'h4', 'h5', 'h6', '.btn'], + elements_length = elements.length, + elements_size = {}; + + // get elements size with jquery after document ready + $(document).ready(function() { + for (var i = 0; i < elements_length; i++) { + elements_size[elements[i]] = $(elements[i]).css('fontSize'); + } + }); + + // init + size_c = readCookie('fontSize'); + if (size_c != null) { + $(document).ready(function() { + reloadFontSize(size_c); + }); + } + + function reloadFontSize(size) { + var i = 0; + size = (parseFloat(size) / 10) + 1; + + // change body font size + $('body').css('fontSize', (size * 100) + '%', 'important'); + + // change custom elements + for (i; i < elements_length; i++) { + $(elements[i]).css('fontSize', (parseFloat(elements_size[elements[i]]) * size) + "px", 'important'); + } + } + + return { + resizeText: function(increment) { + var size = parseFloat(readCookie('fontSize')); + increment = parseFloat(increment); + + if (increment === 0) size = 0; + else if (((size > -6) && (increment < 0)) || ((size < 7) && (increment > 0))) { + size = size + increment; + }; + reloadFontSize(size); + + createCookie('fontSize', size, 365); + } + }; +} + +//// contrast +var contrast = function() { + var contrast_elements = 'body, .barra-brasil, .search-bar, .learning-object-vertical .panel, .navbar, .well'; + + // init + $(document).ready(function() { + run(); + }); + + function run() { + var contrast_c = readCookie('contrast'); + + if (contrast_c == null || contrast_c != "true") { + $(contrast_elements).removeClass('contraste'); + $('.search-bar').css('border-top','none'); + $('#menu-bar').removeClass('menu-bar-contrast'); + } + else { + $(contrast_elements).addClass('contraste'); + $('.search-bar').css('border-top','2px solid white'); + $('#menu-bar').addClass('menu-bar-contrast'); + } + } + + return { + change: function() { + (readCookie('contrast') == "true") ? createCookie('contrast',"false",0) : createCookie('contrast',"true",0); + run(); + } + }; +} + +//// cookies +//source: http://www.linhadecodigo.com.br/artigo/1615/acessibilidade-aumentando-e-diminuindo-tamanho-de-letra-em-seu-site.aspx +function createCookie(name,value,days) { + if (days) { + var date = new Date(); + date.setTime(date.getTime()+(days*24*60*60*1000)); + var expires = "; expires="+date.toGMTString(); + } else var expires = ""; + document.cookie = name+"="+value+expires+"; path=/"; +} + +function readCookie(name) { + var nameEQ = name + "="; + var ca = document.cookie.split(";"); + for (var i=0;i < ca.length;i++) { + var c = ca[i]; + while (c.charAt(0)==" ") c = c.substring(1,c.length); + if (c.indexOf(nameEQ) == 0) return c.substring(nameEQ.length,c.length); + } + return null; +} + +// define global variables +var fontSize = fontSize(); +var contrast = contrast(); diff --git a/app/assets/javascripts/application/collections.coffee b/app/assets/javascripts/application/collections.coffee new file mode 100644 index 0000000000000000000000000000000000000000..04a4d2015eb8de7fe0a63e9d371fd15ea5396170 --- /dev/null +++ b/app/assets/javascripts/application/collections.coffee @@ -0,0 +1,8 @@ +$ -> + $('#create_collection_popover').popover + html: true + content: -> + $('#create_collection_popover_content').html() + title: -> + $('#create_collection_popover_title').html() + return \ No newline at end of file diff --git a/app/assets/javascripts/application/columns.js b/app/assets/javascripts/application/columns.js new file mode 100644 index 0000000000000000000000000000000000000000..9a24c897df0bacefd95b1242da0fa49b05f05403 --- /dev/null +++ b/app/assets/javascripts/application/columns.js @@ -0,0 +1,24 @@ +$(document).ready(function() { + $(".learning-object-columns").each(function() { + var html = '', + i = 1; + + $("> div", this).each(function () { + if (i == 2) { + html = '<div class="col-md-6"><div class="row"><div class="col-md-3"> </div><div class="col-md-6">'; + // TODO: find a way to not remove wrapper div + html += $(this).clone().wrap('<div>').parent().html(); + html += '</div><div class="col-md-3"> </div></div></div>'; + $(this).replaceWith(html); + + i = 0; + } + else { + $(this).wrap('<div class="col-md-3"></div>'); + + i += 1; + } + }); + }); + +}); diff --git a/app/assets/javascripts/application/learning_objects.coffee b/app/assets/javascripts/application/learning_objects.coffee new file mode 100644 index 0000000000000000000000000000000000000000..019c35f9309439fc6df4d3bf79c67e228b5ef287 --- /dev/null +++ b/app/assets/javascripts/application/learning_objects.coffee @@ -0,0 +1,8 @@ +$ -> + $('.add_to_collection').popover + html: true + content: -> + $('#collections_list_popover').html() + title: -> + $('#collections_list_popover_title').html() + return \ No newline at end of file diff --git a/app/assets/javascripts/learning_objects.coffee b/app/assets/javascripts/management/carousel.coffee similarity index 100% rename from app/assets/javascripts/learning_objects.coffee rename to app/assets/javascripts/management/carousel.coffee diff --git a/app/assets/stylesheets/application.scss b/app/assets/stylesheets/application.scss index babe0365aaa55b45d99000c632fee2509e7eb987..6d2ae1d0fa2864242860ed5675f5c2b57178b638 100644 --- a/app/assets/stylesheets/application.scss +++ b/app/assets/stylesheets/application.scss @@ -18,6 +18,8 @@ @import "select2"; @import "select2-bootstrap"; +$header-blue: #1676bc; + //// HTML/BODY html, body { @@ -25,7 +27,7 @@ body { padding:0; height:100%; - font-size: 15px; + font-size: 100%; font-family: 'Roboto', "Helvetica Neue", Helvetica, Arial, sans-serif; } @@ -50,9 +52,6 @@ a, a:focus, a:hover { //// HEADER header { border: 0; - border-bottom: 1px; - border-style: solid; - border-color: #cececd; margin-bottom: 16px; a, a:focus, a:hover { @@ -84,15 +83,27 @@ header { margin: 0px; // logo - .logo-text { + .logo-container { + text-align: left; + } + .logo { margin-top: 10px; padding: 0px; - font-size: 24px; + // font-size: 24px; font-weight: bold; + text-align: center; + float: left; + width: 165px; + h3 { + margin-top: 10px; + } a { color: #FFF; } } + .logo-image { + width: 100px; + } // accessibility .search-accessibility { margin-top: 25px; @@ -142,17 +153,15 @@ header { // user info .status-text { margin-top: 20px; - font-size: 20px; + // font-size: 20px; text-align: right; - .circular-image { - width: 60px; - height: 60px; - border-radius: 50%; + h2, h4 { + margin-top: 5px; } .media-heading { - font-size: 32px; + // font-size: 32px; a { color: #FFF; } @@ -173,20 +182,32 @@ header { .nav { height: 50px; + h3 { + margin-top: 13px; + } + .nav-button { - min-width: 140px; + min-width: 130px; height: 100%; - font-size: 20px; + padding-left: 15px; + padding-right: 10px; + // font-size: 20px; + color: #343D3E; font-weight: 500 !important; - a { color: #000; } + a { + @extend h3; + padding: 0; + color: #343D3E; + } } .nav-button-first { - a { padding-left: 0px !important; } + padding-left: 0 !important; } .divider { width: 2px; + margin-left: 3px; height: 100%; background-color: #FFF; } @@ -225,11 +246,6 @@ footer { } } -//// partial OBJECT -.object-horizontal { - -} - .starRating:not(old){ display : inline-block; width : 7.5em; diff --git a/app/assets/stylesheets/application/learning_objects.scss b/app/assets/stylesheets/application/learning_objects.scss new file mode 100644 index 0000000000000000000000000000000000000000..30ec3e3144c4bc92c36fa7eb5e72463eda369283 --- /dev/null +++ b/app/assets/stylesheets/application/learning_objects.scss @@ -0,0 +1,13 @@ +.learning-object-horizontal, .learning-object-vertical { + margin-bottom: 20px; + + .panel-body { + padding: 0 !important; + margin-top: 3px; + } + .media-heading { + overflow: hidden; + white-space: nowrap; + text-overflow: ellipsis; + } +} diff --git a/app/assets/stylesheets/application/search.scss b/app/assets/stylesheets/application/search.scss index be47bcd134453e5e11bfbb6bfb18b572944bc5ae..1e0bc46ea2011f1067d4676045b61a33b8fb2652 100644 --- a/app/assets/stylesheets/application/search.scss +++ b/app/assets/stylesheets/application/search.scss @@ -1,5 +1,10 @@ .search-sidebar { margin-top: 40px; + + .dropdown-element { + width: 95%; + margin-left: 3%; + } } .select2-container { diff --git a/app/assets/stylesheets/application/users.scss b/app/assets/stylesheets/application/users.scss new file mode 100644 index 0000000000000000000000000000000000000000..334ce327e22cfb358fe6cdb6a6b8a2306f84ae9a --- /dev/null +++ b/app/assets/stylesheets/application/users.scss @@ -0,0 +1,25 @@ +$header-blue: #1676bc; + +.user-image { + width: 60px; + height: 60px; + border-radius: 50%; +} + +.user-header { + background-color: #e7e7e8; + width: 100%; + min-height: 100px; + padding: 15px; + + .right-column { + text-align: right; + + .btn { + background-color: $header-blue; + color: white; + border: 0px; + min-width: 150px; + } + } +} diff --git a/app/assets/stylesheets/application/welcome.scss b/app/assets/stylesheets/application/welcome.scss index 293aecd53359ddd05db69e7f4d3dd9978247120a..57c821daaf2a5ba7402e7a832c67c36bb5fecb4d 100644 --- a/app/assets/stylesheets/application/welcome.scss +++ b/app/assets/stylesheets/application/welcome.scss @@ -15,7 +15,6 @@ $carousel_size: 400px; .carousel { height: $carousel_size; - margin-bottom: 60px; h1{ background-color: rgba(37, 68, 32, 0.75); } @@ -27,6 +26,9 @@ $carousel_size: 400px; .carousel h1 { background-color: rgba(0, 0, 0, 0.75); } +.carousel ol { + background-color: rgba(0, 0, 0, 0.10); +} .carousel-caption { z-index: 10; @@ -41,7 +43,8 @@ $carousel_size: 400px; top: 0; left: 0; min-width: 100%; - height: $carousel_size; + height: 400px !important; + } .carousel-indicators li { diff --git a/app/assets/stylesheets/learning_objects.scss b/app/assets/stylesheets/learning_objects.scss deleted file mode 100644 index b9ba81d3d355ebd38241b2355d66235b122d16c5..0000000000000000000000000000000000000000 --- a/app/assets/stylesheets/learning_objects.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the LearningObjects controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/edges.scss b/app/assets/stylesheets/management/carousel.scss similarity index 60% rename from app/assets/stylesheets/edges.scss rename to app/assets/stylesheets/management/carousel.scss index 248e4c0d098e1ffcb97d204565abaa8013256443..89da7e1046eebfd411c84d8414cc3ac48ec4ea90 100644 --- a/app/assets/stylesheets/edges.scss +++ b/app/assets/stylesheets/management/carousel.scss @@ -1,3 +1,3 @@ -// Place all the styles related to the Edges controller here. +// Place all the styles related to the management/carousel controller here. // They will automatically be included in application.css. // You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/registrations.scss b/app/assets/stylesheets/registrations.scss deleted file mode 100644 index f6e17a22d8ea83e854c44006511714d6fc63a863..0000000000000000000000000000000000000000 --- a/app/assets/stylesheets/registrations.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the registrations controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/university.scss b/app/assets/stylesheets/university.scss deleted file mode 100644 index b37e7ce20f0e77f10ef56f66461a2226c2646e4e..0000000000000000000000000000000000000000 --- a/app/assets/stylesheets/university.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the university controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/assets/stylesheets/users.scss b/app/assets/stylesheets/users.scss deleted file mode 100644 index 1efc835ccd15adaf355c0501d7237d13529771e1..0000000000000000000000000000000000000000 --- a/app/assets/stylesheets/users.scss +++ /dev/null @@ -1,3 +0,0 @@ -// Place all the styles related to the users controller here. -// They will automatically be included in application.css. -// You can use Sass (SCSS) here: http://sass-lang.com/ diff --git a/app/controllers/application_controller.rb b/app/controllers/application_controller.rb index 374155aaae133f416c4eb513e34151f23766d8bd..99459ecff26a0f9df6456eeebbcee08eb1dd7dd3 100644 --- a/app/controllers/application_controller.rb +++ b/app/controllers/application_controller.rb @@ -1,13 +1,11 @@ class ApplicationController < ActionController::Base + include RepositoriesProxy + # Prevent CSRF attacks by raising an exception. # For APIs, you may want to use :null_session instead. protect_from_forgery with: :null_session before_action :configure_permitted_parameters, if: :devise_controller? - def repository - Portalmec::Application.repository - end - protected def configure_permitted_parameters diff --git a/app/controllers/collections_controller.rb b/app/controllers/collections_controller.rb index 07c7929d91326fbd323d5aeb9ec35a30222256c4..877924667c44c85880435b2737eb59399b4fbcb9 100644 --- a/app/controllers/collections_controller.rb +++ b/app/controllers/collections_controller.rb @@ -1,5 +1,5 @@ class CollectionsController < ApplicationController - before_action :set_collection, only: [:show, :edit, :update, :destroy, :like] + before_action :set_collection, only: [:show, :update, :destroy, :like] # GET /collections # GET /collections.json @@ -12,13 +12,9 @@ class CollectionsController < ApplicationController def show end - # GET /collections/new - def new - @collection = Collection.new - end - - # GET /collections/1/edit - def edit + # POST /collections/1/like + def like + collection_repository.like @collection end # POST /collections @@ -60,16 +56,12 @@ class CollectionsController < ApplicationController private def set_collection - @collection = collection_repository.find("##{params[:id]}") - end - - def collection_repository - repository.for(:collection) + @collection = collection_repository.find params[:id] end # Never trust parameters from the scary internet, only allow the white list through. def collection_params - params[:collection_object] + params.require(:collection).permit(:name, :privacy, learning_objects: []) end end diff --git a/app/controllers/institutions_controller.rb b/app/controllers/institutions_controller.rb index 96c21aa17d468af0acb632a45c2cbc9eb9de3bfc..b668a26a983e732e35f363de431f1c24eda430b4 100644 --- a/app/controllers/institutions_controller.rb +++ b/app/controllers/institutions_controller.rb @@ -57,18 +57,12 @@ class InstitutionsController < ApplicationController end end - - private def set_institution @institution = institution_repository.find("##{params[:id]}") end - def institution_repository - repository.for(:institution) - end - # Never trust parameters from the scary internet, only allow the white list through. def institution_params params[:institution_object] diff --git a/app/controllers/learning_objects_controller.rb b/app/controllers/learning_objects_controller.rb index 59111b75a5f4d98da8b305c10c8607954d60341e..a1e384b0a65f098238a181b9098d1f9fc85fcc84 100644 --- a/app/controllers/learning_objects_controller.rb +++ b/app/controllers/learning_objects_controller.rb @@ -67,13 +67,9 @@ class LearningObjectsController < ApplicationController private - def learning_object_repository - repository.for(:learning_object) - end - # Use callbacks to share common setup or constraints between actions. def set_learning_object - @learning_object = learning_object_repository.get_by_dspace_id params[:id] + @learning_object = learning_object_repository.find params[:id] end # Never trust parameters from the scary internet, only allow the white list through. diff --git a/app/controllers/management/carousels_controller.rb b/app/controllers/management/carousels_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..b39f2c5bb0e2d4a120d6c6111dba53d9ff836c4b --- /dev/null +++ b/app/controllers/management/carousels_controller.rb @@ -0,0 +1,55 @@ +class Management::CarouselsController < ManagementController + before_action :set_carousel, only: [:edit, :update, :destroy] + + def index + @carousels = carousel_repository.all + end + + def new + @carousel = Carousel.new + end + + def create + @carousel = Carousel.new(carousel_params) + + respond_to do |format| + if carousel_repository.save @carousel + format.html { redirect_to management_carousels_path } + else + format.html { render :new } + end + end + end + + def edit + end + + def update + respond_to do |format| + if carousel_repository.update(@carousel, carousel_params) + format.html { redirect_to management_carousels_path } + else + format.html { render :edit } + end + end + end + + def destroy + @carousel.image = nil + carousel_repository.destroy @carousel + respond_to do |format| + format.html { redirect_to management_carousels_path } + end + end + + private + + def set_carousel + @carousel = carousel_repository.find params[:id] + end + + def carousel_params + params.require(:carousel).permit(:title, :url, :image) + end + +end diff --git a/app/controllers/management/highlights_controller.rb b/app/controllers/management/highlights_controller.rb deleted file mode 100644 index 2c91db6b179c71322b42d85ffff779913da35d78..0000000000000000000000000000000000000000 --- a/app/controllers/management/highlights_controller.rb +++ /dev/null @@ -1,40 +0,0 @@ -class Management::HighlightsController < ManagementController - - def index - @highlights = highlight_repository.find_all - end - - def show - end - - def new - end - - def delete - @highlights = highlight_repository.find_all - end - - def create - - highlight_repository.insert_data(params[:name],params[:url]) - redirect_to management_highlights_index_path - - end - - def destroy - - params[:id].each do |id| - highlight_repository.destroy_data(id) - end - redirect_to management_highlights_index_path - - end - - private - - def highlight_repository - repository.for :highlight - end - - -end diff --git a/app/controllers/management/users_controller.rb b/app/controllers/management/users_controller.rb index 4c6de9d93bc5e37daaf181fa63076625b43d02ae..610ab321929077af82d6e00563a06ed98e6f6d50 100644 --- a/app/controllers/management/users_controller.rb +++ b/app/controllers/management/users_controller.rb @@ -26,7 +26,7 @@ class Management::UsersController < ManagementController @user = User.new(user_params) respond_to do |format| - if @user.save + if user_repository.save @user format.html { redirect_to management_user_path(@user), notice: "User created!" } format.json { render :show, status: :created, location: @user } else @@ -69,10 +69,6 @@ class Management::UsersController < ManagementController params.require(:user).permit(:name, :email, :password, :password_confirmation, roles: []) end - def user_repository - repository.for(:user) - end - def set_roles @roles = Role.all end diff --git a/app/controllers/management_controller.rb b/app/controllers/management_controller.rb index 6db75c2c7f0cc891b5a3da1010a0ae330923a3de..ef890daa346304084f5f8b2fea71edf2ad7aa555 100644 --- a/app/controllers/management_controller.rb +++ b/app/controllers/management_controller.rb @@ -1,3 +1,5 @@ class ManagementController < ApplicationController + before_action :authenticate_user! + layout 'management' end diff --git a/app/controllers/subjects_controller.rb b/app/controllers/subjects_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..7d900a69851a286d944a48c8c39abae5c5b3f1db --- /dev/null +++ b/app/controllers/subjects_controller.rb @@ -0,0 +1,22 @@ +class SubjectsController < ApplicationController + + # GET /subjects + # GET /subjects.json + def index + @subjects = subject_repository.all + end + + # GET /subjects/1 + # GET /subjects/1.json + def show + @subject = subject_repository.find("##{params[:id]}") + end + + private + + # Never trust parameters from the scary internet, only allow the white list through. + def subject_params + params[:subject_object] + end + +end diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..cda7f8ed990b71a14c0076ffaa4560a8e631ccc0 --- /dev/null +++ b/app/controllers/users_controller.rb @@ -0,0 +1,7 @@ +class UsersController < ApplicationController + + def show + @objects = learning_object_repository.all + end + +end diff --git a/app/controllers/welcome_controller.rb b/app/controllers/welcome_controller.rb new file mode 100644 index 0000000000000000000000000000000000000000..fe3ed8bfe169d3978c056b92761cc29e7478fbf7 --- /dev/null +++ b/app/controllers/welcome_controller.rb @@ -0,0 +1,25 @@ +class WelcomeController < ApplicationController + + def index + @Carousel = Array.new + @General = Array.new + mainPage = main_page_repository.all.first + + @Carousel = carousel_repository.all + + @General = mainPage["highlights"].collect do |id| + learning_object_repository.find(id) + end + + @Subjects = subject_repository.all + @Subjects.delete_if{|s| not s.highlights.present?} + @Subjects = @Subjects.take(8) + end + + def faq + end + + def contact + end + +end diff --git a/app/helpers/collections_helper.rb b/app/helpers/collections_helper.rb new file mode 100644 index 0000000000000000000000000000000000000000..4dfbadf4fbe3f941a742f21b7854f8b76e3970a8 --- /dev/null +++ b/app/helpers/collections_helper.rb @@ -0,0 +1,9 @@ +module CollectionsHelper + + ## + # x objetos educacionais + def collection_length(collection) + "#{collection.learning_objects.count} objetos educacionais nessa coleção" + end + +end \ No newline at end of file diff --git a/app/helpers/learning_objects_helper.rb b/app/helpers/learning_objects_helper.rb index cdcd84a35a5d2aa360b6b2e889588a909fa5f8f7..37aa17b22027af30ad9df0ae7f94bd93b604e9c3 100644 --- a/app/helpers/learning_objects_helper.rb +++ b/app/helpers/learning_objects_helper.rb @@ -1,2 +1,22 @@ module LearningObjectsHelper + + def show_categories(categories = []) + categories.to_s + end + + def render_learning_object(orientation, learning_object) + case (orientation) + when "vertical" + render "learning_objects/learning_object_vertical", learning_object: learning_object + when "horizontal" + render "learning_objects/learning_object_horizontal", learning_object: learning_object + else + render "learning_objects/learning_object_horizontal", learning_object: learning_object + end + end + + def collections_list(learning_object) + collections = @collections.diff(learning_object_collections(learning_object)) + end + end diff --git a/app/helpers/management/carousel_helper.rb b/app/helpers/management/carousel_helper.rb new file mode 100644 index 0000000000000000000000000000000000000000..d764ece79ca86f013cdc68b230deefd2789f3c99 --- /dev/null +++ b/app/helpers/management/carousel_helper.rb @@ -0,0 +1,2 @@ +module Management::CarouselHelper +end diff --git a/app/models/attribute.rb b/app/models/attribute.rb new file mode 100644 index 0000000000000000000000000000000000000000..af0710be3bf389b3fec994e82629afaccbc4e199 --- /dev/null +++ b/app/models/attribute.rb @@ -0,0 +1,6 @@ +class Attribute + include ActiveModel::Model + + attr_accessor :id, :key, :value + +end \ No newline at end of file diff --git a/app/models/carousel.rb b/app/models/carousel.rb new file mode 100644 index 0000000000000000000000000000000000000000..e8a81d995ee3d9d870b2e3915ac5032f5cc35ab6 --- /dev/null +++ b/app/models/carousel.rb @@ -0,0 +1,7 @@ +class Carousel < ActiveRecord::Base + has_attached_file :image, styles: { + larger: "600x600>", + thumbnail: "100x100>" + }, default_url: "/images/:style/missing.png" + validates_attachment_content_type :image, content_type: /\Aimage\/.*\Z/ +end diff --git a/app/models/learning_object.rb b/app/models/learning_object.rb index 2f15a28276173e1cf93b69974e1ebe261f5b671c..b28f497a28be4e68517e93f9ae4d0448bbcbbdd8 100644 --- a/app/models/learning_object.rb +++ b/app/models/learning_object.rb @@ -1,10 +1,11 @@ class LearningObject include ActiveModel::Model attr_accessor :id, :id_dspace, :rid, :name, :description, - :thumbnail, :date_creation, :last_modified, - :type, :bitstreams, :metadata, :likes, :views, :downloads + :thumbnail, :created_at, :last_modified, + :type, :bitstreams, :metadata, :likes, :views, + :downloads, :subjects, :attributes - validates_presence_of :name, :date_creation, :type, :likes, :views, :downloads + validates_presence_of :name, :created_at, :type, :likes, :views, :downloads validates_numericality_of :likes, greater_than_or_equal_to: 0 validates_numericality_of :views, greater_than_or_equal_to: 0 validates_numericality_of :downloads, greater_than_or_equal_to: 0 @@ -17,11 +18,24 @@ class LearningObject @subjects ||= learning_object_repository.get_subjects(self) end + def attributes + @attributes ||= learning_object_repository.get_attributes(self) + end + + def categories + get_metadata_value_of 'dc.subject.category' + end + def get_metadata_value_of key - values = @metadata.select { |v| v["key"] == key } - unless values.empty? - return values.first["value"] + get_metadata_values_of(key).first + end + + def get_metadata_values_of key + values = [] + @metadata.each do |m| + values << m["value"] if m["key"] == key end + values end def get_bitstream_retrievelink_of name @@ -45,7 +59,7 @@ class LearningObject likes: 0, views: 0, downloads: 0, - date_creation: DateTime.new + created_at: DateTime.new } end diff --git a/app/models/search.rb b/app/models/search.rb new file mode 100644 index 0000000000000000000000000000000000000000..a92037f954023ff18fd5bf39199c38cab5189de7 --- /dev/null +++ b/app/models/search.rb @@ -0,0 +1,21 @@ +class Search + include ActiveModel::Model + attr_accessor :results_per_page, :sort, :query, :results + + validates_presence_of :query, :results_per_page, :sort + validates_numericality_of :results_per_page, greater_than: 0 + + def initialize(params={}) + super(params.merge(defaults)) + end + + private + + def defaults + { + sort: 'relevance', + results_per_page: 10 + } + end + +end \ No newline at end of file diff --git a/app/models/subject.rb b/app/models/subject.rb index 58e25fa4d60b98f24147ccee7839f0dee1e01bc7..4aa1d1c169fd5cc3836a341159864376e60bd7e6 100644 --- a/app/models/subject.rb +++ b/app/models/subject.rb @@ -1,5 +1,12 @@ class Subject include ActiveModel::Model + attr_accessor :id, :created_at, :description, :highlights, :name - attr_accessor :id, :dateCreation, :description, :highlights, :name + def highlights + @highlights ||= subject_repository.get_highlights(self) + end + + def subject_repository + Portalmec::Application.repository.for :subject + end end \ No newline at end of file diff --git a/app/models/user.rb b/app/models/user.rb index 28100ca583e944ea07f031fab91efee58583551d..855ae8b7a7b1e7cf7d08afadd72d8c6edc555d5f 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -26,6 +26,6 @@ class User < ActiveRecord::Base after_create SyncUserRepositoryService.new after_destroy SyncUserRepositoryService.new - has_attached_file :avatar, styles: { medium: "300x300>", thumb: "60x60>" }, default_url: ActionController::Base.helpers.asset_path('missing.svg') + has_attached_file :avatar, styles: { medium: "300x300>", thumb: "60x60>" }, default_url: ActionController::Base.helpers.asset_path('user-anon.png') validates_attachment_content_type :avatar, content_type: /\Aimage\/.*\Z/ end diff --git a/app/models/web_link.rb b/app/models/web_link.rb deleted file mode 100644 index ee1edc1eb3bb5c4369e1448629534530a3af286b..0000000000000000000000000000000000000000 --- a/app/models/web_link.rb +++ /dev/null @@ -1,4 +0,0 @@ -class WebLink - include ActiveModel::Model - attr_accessor :id, :dateCreation, :description, :name, :thumbnail, :url -end \ No newline at end of file diff --git a/app/repositories/active_record/carousel_repository.rb b/app/repositories/active_record/carousel_repository.rb index bfec616aa00ec56993f360f1f7cc03b22d12133c..cb77877a8cde65fb8e7aacbefae0ef33a29e0a27 100644 --- a/app/repositories/active_record/carousel_repository.rb +++ b/app/repositories/active_record/carousel_repository.rb @@ -1,14 +1,22 @@ -module ActiveRecord - class CarouselRepository +## +# This carousel repository delegates all behavior to ActiveRecord +class ActiveRecord::CarouselRepository - def find_all - end + def save(carousel) + carousel.save + end - def find_by_id - end + def save!(carousel) + carousel.save! + end - def insert_data(name, url) - end + def method_missing(method_name, *arguments, &block) + Carousel.send(method_name, *arguments, &block) + end + + def respond_to?(method_name, include_private = false) + Carousel.respond_to?(method_name) || super end + end diff --git a/app/repositories/active_record/learning_object_repository.rb b/app/repositories/active_record/learning_object_repository.rb deleted file mode 100644 index 66a3d4ea20afc0bacc80dbe47589defee4f0b22d..0000000000000000000000000000000000000000 --- a/app/repositories/active_record/learning_object_repository.rb +++ /dev/null @@ -1,14 +0,0 @@ -module ActiveRecord - class LearningObjectRepository - - def find_all - end - - def find_by_id - end - - def insert_data(name, url) - end - - end -end diff --git a/app/repositories/active_record/main_page_repository.rb b/app/repositories/active_record/main_page_repository.rb deleted file mode 100644 index 656aab684c7eaa33e845387038aee21882f2615f..0000000000000000000000000000000000000000 --- a/app/repositories/active_record/main_page_repository.rb +++ /dev/null @@ -1,14 +0,0 @@ -module ActiveRecord - class MainPageRepository - - def find_all - end - - def find_by_id - end - - def insert_data(name, url) - end - - end -end diff --git a/app/repositories/active_record/subject_repository.rb b/app/repositories/active_record/subject_repository.rb deleted file mode 100644 index dcccbb258a48790ca63d82e9de706190b23480f3..0000000000000000000000000000000000000000 --- a/app/repositories/active_record/subject_repository.rb +++ /dev/null @@ -1,14 +0,0 @@ -module ActiveRecord - class SubjectRepository - - def find_all - end - - def find_by_id - end - - def insert_data(name, url) - end - - end -end diff --git a/app/repositories/active_record/weblink_repository.rb b/app/repositories/active_record/weblink_repository.rb deleted file mode 100644 index a717c04fd8f450ca3d0e531ee82075d8614bde0e..0000000000000000000000000000000000000000 --- a/app/repositories/active_record/weblink_repository.rb +++ /dev/null @@ -1,14 +0,0 @@ -module ActiveRecord - class WeblinkRepository - - def find_all - end - - def find_by_id - end - - def insert_data(name, url) - end - - end -end diff --git a/app/repositories/orient_db/attribute_repository.rb b/app/repositories/orient_db/attribute_repository.rb new file mode 100644 index 0000000000000000000000000000000000000000..4c5373180e4f1aac39f80384dd3c8f78288ff5ba --- /dev/null +++ b/app/repositories/orient_db/attribute_repository.rb @@ -0,0 +1,30 @@ +module OrientDb + class AttributeRepository < Base + + def find_by_key_and_value(key, value) + result = connection.query sprintf("SELECT FROM %s WHERE key = '%s' AND value = '%s'", odb_class, key, value) + build_objects(result) + end + + def build_object(args={}) + subject = nil + unless args.nil? + subject = Attribute.new(:id => args["@rid"]) + args.each do |var, val| + var_name = "@"+var + if subject.respond_to?(var) + subject.instance_variable_set(var_name, val) + end + end + end + subject + end + + private + + def odb_class + "Attribute" + end + + end +end \ No newline at end of file diff --git a/app/repositories/orient_db/base.rb b/app/repositories/orient_db/base.rb index 53599f9125b196ed8d4d04a645719a3419ad04c8..a2affd8b1c539330639d69ba580f6e4166b09c43 100644 --- a/app/repositories/orient_db/base.rb +++ b/app/repositories/orient_db/base.rb @@ -1,12 +1,67 @@ class OrientDb::Base + include OrientDb::Methods::GenericMethods def initialize(orientdb_connection) @connection = orientdb_connection end - def connection @connection end + def find(id) + result = get_by_rid(id) + build_object result + end + + # Example: + # list = repository.for(:learning_objects).all + # list.each do |learning_object| + # learning_object.inspect <LearningObject model> + # end + def all + objects_hash = connection.query "SELECT FROM #{odb_class}", :limit => -1 + objects = build_objects(objects_hash) || [] + end + + def all_from_offset_to_limit(offset, limit) + objects_hash = connection.query "SELECT FROM #{odb_class} SKIP #{offset}", :limit => limit + objects = build_objects(objects_hash) || [] + end + + def create(object) + hash = build_hash(object) + result = connection.create_document(hash) + object.id = result["@rid"] + object + end + + def build_objects(hash=[]) + objects = [] + hash.each do |h| + objects << build_object(h) + end + objects + end + + def build_hash(object) + hash = {} + hash["@class"] = odb_class + object.instance_variables.each do |var| + var_name = var.to_s.gsub(/\A@/, "") + hash[var_name] = object.instance_variable_get(var) + end + hash + end + + def build_object(args={}) + raise NoMethodError, "You must implement this method" + end + + private + + def odb_class + raise NoMethodError, "You must implement this method" + end + end diff --git a/app/repositories/orient_db/carousel_repository.rb b/app/repositories/orient_db/carousel_repository.rb deleted file mode 100644 index a8a2d8c0a0c529dba2d7a43e4d02a0adfe9f5dd5..0000000000000000000000000000000000000000 --- a/app/repositories/orient_db/carousel_repository.rb +++ /dev/null @@ -1,24 +0,0 @@ -module OrientDb - class CarouselRepository < Base - - def find_all - connection.query "SELECT FROM Carousel" - end - - def find_by_id(id) - connection.query "SELECT FROM Carousel where @rid = '#{id}'" - end - - def insert_data (name,url) - connection.command "INSERT INTO Carousel (name,URL) VALUES ('#{name}','#{url}')" - end - - - def destroy_data(id) - return @connection.command "DELETE VERTEX Carousel where @rid = '#{id}'" - rescue - return nil - end - - end -end diff --git a/app/repositories/orient_db/collection_repository.rb b/app/repositories/orient_db/collection_repository.rb index a597b2ca3db07e288434284982510cccedbef7a6..80e6b177add29920a2b038400e8267d5baee9449 100644 --- a/app/repositories/orient_db/collection_repository.rb +++ b/app/repositories/orient_db/collection_repository.rb @@ -2,18 +2,6 @@ module OrientDb class CollectionRepository < Base include OrientDb::Methods::EdgeMethods - def all - hash = connection.query "SELECT FROM Collection" - collections = build_collections(hash) - end - - # Usage: - # collection = repository.for(:collections).find '#14:14' - def find(id) - result = connection.query "SELECT FROM #{id}" - build_collection result.first - end - # Usage: # repository.for(:collections).destroy collection # @@ -21,22 +9,17 @@ module OrientDb connection.command sprintf("DELETE VERTEX %s", collection.id) end - private - - def build_collection(args={}) + def build_object(args={}) Collection.new( :id => args["@rid"], :name => args["name"] ) end - def build_collections(hash=[]) - collections = [] - hash.each do |h| - collections << build_collection(h) - end + private - collections + def odb_class + "Collection" end end diff --git a/app/repositories/orient_db/highlight_repository.rb b/app/repositories/orient_db/highlight_repository.rb deleted file mode 100644 index 046f724c400c0c75f1314c937999432d4cbb6936..0000000000000000000000000000000000000000 --- a/app/repositories/orient_db/highlight_repository.rb +++ /dev/null @@ -1,18 +0,0 @@ -module OrientDb - class HighlightRepository < Base - - def find_all - connection.query "Select highlights FROM MainPage" - end - - def insert_data (name, url) - connection.command "INSERT INTO Highlight (name,URL) VALUES ('#{name}','#{url}')" - end - - - def destroy_data(id) - @connection.command "DELETE VERTEX Highlight where @rid = '#{id}'" - end - - end -end diff --git a/app/repositories/orient_db/institution_repository.rb b/app/repositories/orient_db/institution_repository.rb index 6bc0e470f058a2ff7d0dce33ec002053c7472200..028e13b96f04e1747c3e2825ad6e2638be70bb41 100644 --- a/app/repositories/orient_db/institution_repository.rb +++ b/app/repositories/orient_db/institution_repository.rb @@ -2,24 +2,6 @@ module OrientDb class InstitutionRepository < Base include OrientDb::Methods::EdgeMethods - # Example: - # list = repository.for(:institutions).all - # list.each do |institution| - # institution_object.inspect <LearningObject model> - # end - def all - hash = connection.query "SELECT FROM Institution" - institutions = build_institutions(hash) - end - - # Usage: - # institution = repository.for(:institutions).get_by_dspace_id 123 - # - def find(id) - result = connection.query "SELECT FROM #{id}" - build_institution result.first - end - def create(name, url) connection.command sprintf("INSERT INTO Institution (name) VALUES ('%s')", name) end @@ -31,21 +13,17 @@ module OrientDb connection.command sprintf("DELETE VERTEX %s", institution.id) end - private - - def build_institution(args={}) + def build_object(args={}) return Institution.new( :id => args["@rid"], :title => args["title"], ) end - def build_institutions(hash=[]) - institutions = [] - hash.each do |h| - institutions << build_institution(h) - end - return institutions + private + + def odb_class + "Institution" end end diff --git a/app/repositories/orient_db/learning_object_repository.rb b/app/repositories/orient_db/learning_object_repository.rb index 6a0e0c8721e6c45cdf511fccccadffb9c002ca0e..2114a7a2340796759bf22fd40b26aacf40043f5b 100644 --- a/app/repositories/orient_db/learning_object_repository.rb +++ b/app/repositories/orient_db/learning_object_repository.rb @@ -65,12 +65,6 @@ module OrientDb connection.command sprintf("DELETE VERTEX LearningObject where @rid = '%s'", learning_object.id) end - def update_property(learning_object,property,value) - if accepted_properties.include? property - connection.command "UPDATE LearningObject SET #{property}='#{value}' WHERE @rid = #{learning_object.id}" - end - end - def search(qry) # TO CREATE "index:learningobject_search" ON OrientDB, USE THE COMMAND: # CREATE INDEX learningobject_search diff --git a/app/repositories/orient_db/main_page_repository.rb b/app/repositories/orient_db/main_page_repository.rb index 3b27e083e1bd9a4aa921ededa4827a67321d2a79..ab8e0b6cb28dae44779c4df32eab1ffc03ab45c1 100644 --- a/app/repositories/orient_db/main_page_repository.rb +++ b/app/repositories/orient_db/main_page_repository.rb @@ -1,11 +1,11 @@ module OrientDb class MainPageRepository < Base - def find_all + def all connection.query "SELECT FROM MainPage" end - def find_by_id(id) + def find(id) connection.query "SELECT FROM MainPage where @rid = '#{id}'" end @@ -20,9 +20,15 @@ module OrientDb return nil end - def update(id,operation,atributte,new) - puts "update #{id} #{operation} #{atributte} = #{new}" - connection.command "update #{id} #{operation} #{atributte} = #{new}" + #def update(id,operation,atributte,new) + # puts "update #{id} #{operation} #{atributte} = #{new}" + # connection.command "update #{id} #{operation} #{atributte} = #{new}" + #end + + private + + def odb_class + "MainPage" end end diff --git a/app/repositories/orient_db/subject_repository.rb b/app/repositories/orient_db/subject_repository.rb index b7889fc55699145ad441d9729a9e7ebde0d12b8b..b90fa2b919efcb4a884cb3ea1a2c9744decef128 100644 --- a/app/repositories/orient_db/subject_repository.rb +++ b/app/repositories/orient_db/subject_repository.rb @@ -1,27 +1,57 @@ module OrientDb class SubjectRepository < Base + include OrientDb::Methods::EdgeMethods + include RepositoriesProxy - def find_all - connection.query "SELECT FROM Subject", limit: -1 + def find_by_name(name) + result = select_by_property(odb_class, "name", name) + build_object(result.first) end - def find_by_id(id) - connection.query "SELECT FROM Subject where @rid = '#{id}'" + def destroy(id) + connection.command "DELETE VERTEX Subject where @rid = '#{id}'" end - def destroy_data(id) - return @connection.command "DELETE VERTEX Subject where @rid = '#{id}'" - rescue - return nil + #def update(id, operation, atributte, new_value) + # puts "update #{id} #{operation} #{atributte} = #{new_value}" + # connection.command "update #{id} #{operation} #{atributte} = #{new_value}" + #end + + def get_learning_objects(subject) + result = get_edges_end("IsAbout", "in", subject.id) + learning_object_repository.build_objects(result) + end + + def get_highlights(subject) + result = connection.query "SELECT expand(highlights) FROM #{subject.id}" + learning_object_repository.build_objects(result) end - def get_objects(id) - connection.query "select expand(in('IsAbout')) from #{id}" + def build_hash + hash = super + hash.delete("learning_objects") + hash end - def update(id,operation,atributte,new) - puts "update #{id} #{operation} #{atributte} = #{new}" - return @connection.command "update #{id} #{operation} #{atributte} = #{new}" + def build_object(args={}) + subject = nil + unless args.nil? + subject = Subject.new(:id => args["@rid"]) + args.each do |var, val| + var_name = "@"+var + if subject.respond_to?(var) && var != 'highlights' + subject.instance_variable_set(var_name, val) + end + end + end + subject end + + private + + def odb_class + "Subject" + end + end end diff --git a/app/repositories/orient_db/user_repository.rb b/app/repositories/orient_db/user_repository.rb index 28d930e8fe63de55ae83da66a0adc94188e25555..8068a3f257520146b9ee68607ad1773452c4dca3 100644 --- a/app/repositories/orient_db/user_repository.rb +++ b/app/repositories/orient_db/user_repository.rb @@ -24,5 +24,11 @@ module OrientDb (result.count > 0) end + private + + def odb_class + "User" + end + end end diff --git a/app/repositories/orient_db/weblink_repository.rb b/app/repositories/orient_db/weblink_repository.rb deleted file mode 100644 index 4141dc96de6761ccfe87e0d0e7da4d40c3691ff7..0000000000000000000000000000000000000000 --- a/app/repositories/orient_db/weblink_repository.rb +++ /dev/null @@ -1,24 +0,0 @@ -module OrientDb - class WeblinkRepository < Base - - def find_all - connection.query "SELECT FROM WebLink" - end - - def find_by_id(id) - connection.query "SELECT FROM WebLink where @rid = '#{id}'" - end - - def insert_data (name,url) - connection.command "INSERT INTO WebLink (name,URL) VALUES ('#{name}','#{url}')" - end - - - def destroy_data(id) - return @connection.command "DELETE VERTEX WebLink where @rid = '#{id}'" - rescue - return nil - end - - end -end diff --git a/app/repositories/repositories_proxy.rb b/app/repositories/repositories_proxy.rb new file mode 100644 index 0000000000000000000000000000000000000000..3fdfe2cbe2e1cc077a3a16fc271f99194a17d1bf --- /dev/null +++ b/app/repositories/repositories_proxy.rb @@ -0,0 +1,43 @@ +# This proxy will keep postgres and orientdb syncronized +# When some client call UserRepositoryProxy, it will delegate the missing methods for ActiveRecord User model +module RepositoriesProxy + + def learning_object_repository + application_repository.for(:learning_object) + end + + def attribute_repository + application_repository.for(:attribute) + end + + def subject_repository + application_repository.for(:subject) + end + + def collection_repository + application_repository.for(:collection) + end + + def institution_repository + application_repository.for(:institution) + end + + def carousel_repository + application_repository.for(:carousel) + end + + def main_page_repository + application_repository.for(:mainPage) + end + + def user_repository + application_repository.for(:user) + end + + private + + def application_repository + Portalmec::Application.repository + end + +end diff --git a/app/repositories/user_repository_proxy.rb b/app/repositories/user_repository_proxy.rb index 94e18c596c39b2349b66304edb9fae371caa0bd8..27643d6e0d5d88182d8f86ba33e35e009557f805 100644 --- a/app/repositories/user_repository_proxy.rb +++ b/app/repositories/user_repository_proxy.rb @@ -24,6 +24,14 @@ class UserRepositoryProxy orientdb_user_repository.destroy_graph_node user end + def save(user) + user.save + end + + def save!(user) + user.save! + end + def method_missing(method_name, *arguments, &block) User.send(method_name, *arguments, &block) end diff --git a/app/views/collections/_collection.html.erb b/app/views/collections/_collection.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..0688d28bd7fde662a155ec4953731a16b17c2685 --- /dev/null +++ b/app/views/collections/_collection.html.erb @@ -0,0 +1,5 @@ +<div class="row collections"> + <h2><%= collection.title %></h2> + + <p><%= collection_length collection %></p> +</div> \ No newline at end of file diff --git a/app/views/collections/_create.html.erb b/app/views/collections/_create.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..cf67f6c19e68f176968fd05e7e54c15804fdd47b --- /dev/null +++ b/app/views/collections/_create.html.erb @@ -0,0 +1,9 @@ +<a href="#" id="create_collection_popover">Criar coleção</a> + +<div id="create_collection_popover_content" style="display: none"> + <%= render 'collections/form' %> +</div> + +<div id="create_collection_popover_title" style="display: none"> + Criar coleção +</div> \ No newline at end of file diff --git a/app/views/collections/_form.html.erb b/app/views/collections/_form.html.erb index 91c6545768704012706b4c7578b3534c7c2a7ef6..7330b0254f3ba93c7b437ec76db29a8ae8689ffb 100644 --- a/app/views/collections/_form.html.erb +++ b/app/views/collections/_form.html.erb @@ -1,17 +1,14 @@ -<%= form_for(@collection) do |f| %> - <% if @collection.errors.any? %> - <div id="error_explanation"> - <h2><%= pluralize(@collection.errors.count, "error") %> prohibited this learning_object from being saved:</h2> +<%= form_for @collection do |f| %> - <ul> - <% @collection.errors.full_messages.each do |message| %> - <li><%= message %></li> - <% end %> - </ul> - </div> - <% end %> + <%= f.label :title %> + <%= f.text_field :title, required: true, style: 'width: 250px;' %> + + <%= f.label :privacy %> + <select name="collection[privacy]"> + <option value="public">Público</option> + <option value="followers">Meus seguidores</option> + <option value="only_me">Somente eu</option> + </select> - <div class="actions"> <%= f.submit %> - </div> -<% end %> +<% end %> \ No newline at end of file diff --git a/app/views/collections/edit.html.erb b/app/views/collections/edit.html.erb deleted file mode 100644 index 6146cc3a11722b79aac7b51e2467f85d2e406c13..0000000000000000000000000000000000000000 --- a/app/views/collections/edit.html.erb +++ /dev/null @@ -1,6 +0,0 @@ -<h1>Editing Institution</h1> - -<%= render 'form' %> - -<%= link_to 'Show', @institution %> | -<%= link_to 'Back', institutions_path %> diff --git a/app/views/collections/index.html.erb b/app/views/collections/index.html.erb index 68aebfd77d68d1e74c4b6af2e9ea566d8babac6a..17a6fc78e9ac25830ddafd57c38714d7c5ad5f93 100644 --- a/app/views/collections/index.html.erb +++ b/app/views/collections/index.html.erb @@ -1,229 +1,245 @@ <h1>Coleções de Recursos</h1> -<div class="row recommend-collections"> - <h2>Recomendamos para você</h2> - - <!-- item --> - <div class="col-sm-4"> - <div class="row"> - <h4><b>Compreensão oral</b></h4> - <div class="object-vertical"> - <div class="panel"> - <div> - <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> - </div> - <div class="panel-body"> - <h4 class="media-heading">Los derechos del animal (1)</h4> - <span class="glyphicon glyphicon-eye-open">200 </span> - <span class="glyphicon glyphicon-star">4,5 </span> - <span>Por <a>Usuário </a></span> - </div> +<% if @collections.count == 0 %> + <div class="row no-collections"> + <p>Nenhuma coleção foi criada, seja o primeiro!</p> + </div> +<% else %> + + <div class="row recommend-collections"> + <h2>Recomendamos para você</h2> + + <!-- item --> + <div class="col-sm-4"> + <div class="row"> + <h4><b>Compreensão oral</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + <p> + <a href="#">Ver Mais</a> + </p> </div> </div> - <p> - <a href="#">Ver Mais</a> - </p> - </div> - </div> - <!-- /item --> - - - <div class="col-sm-4"> - <div class="row"> - <h4><b>Educação Básica</b></h4> - <div class="object-vertical"> - <div class="panel"> - <div> - <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> - </div> - <div class="panel-body"> - <h4 class="media-heading">Los derechos del animal (1)</h4> - <span class="glyphicon glyphicon-eye-open">200 </span> - <span class="glyphicon glyphicon-star">4,5 </span> - <span>Por <a>Usuário </a></span> - </div> + <!-- /item --> + + + <div class="col-sm-4"> + <div class="row"> + <h4><b>Educação Básica</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + + <p> + <a href="#">Ver Mais</a> + </p> </div> </div> - <p> - <a href="#">Ver Mais</a> - </p> - </div> - </div> + <div class="col-sm-4"> + <div class="row"> + <h4><b>Ensino Médio</b></h4> - <div class="col-sm-4"> - <div class="row"> - <h4><b>Ensino Médio</b></h4> - <div class="object-vertical"> - <div class="panel"> - <div> - <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> </div> - <div class="panel-body"> - <h4 class="media-heading">Los derechos del animal (1)</h4> - <span class="glyphicon glyphicon-eye-open">200 </span> - <span class="glyphicon glyphicon-star">4,5 </span> - <span>Por <a>Usuário </a></span> - </div> - </div> - </div> - <p> - <a href="#">Ver Mais</a> - </p> - </div> - </div> -</div> - -<div class="row newest-collections"> - <h2>Últimas coleções</h2> - - <!-- item --> - <div class="col-sm-4"> - <div class="row"> - <h4><b>Compreensão oral</b></h4> - <div class="object-vertical"> - <div class="panel"> - <div> - <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> - </div> - <div class="panel-body"> - <h4 class="media-heading">Los derechos del animal (1)</h4> - <span class="glyphicon glyphicon-eye-open">200 </span> - <span class="glyphicon glyphicon-star">4,5 </span> - <span>Por <a>Usuário </a></span> - </div> + <p> + <a href="#">Ver Mais</a> + </p> </div> </div> - <p> - <a href="#">Ver Mais</a> - </p> </div> - </div> - <!-- /item --> - - <div class="col-sm-4"> - <div class="row"> - <h4><b>Educação Básica</b></h4> - <div class="object-vertical"> - <div class="panel"> - <div> - <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> - </div> - <div class="panel-body"> - <h4 class="media-heading">Los derechos del animal (1)</h4> - <span class="glyphicon glyphicon-eye-open">200 </span> - <span class="glyphicon glyphicon-star">4,5 </span> - <span>Por <a>Usuário </a></span> - </div> + <div class="row newest-collections"> + <h2>Últimas coleções</h2> + + <!-- item --> + <div class="col-sm-4"> + <div class="row"> + <h4><b>Compreensão oral</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + <!-- /item --> + + + <div class="col-sm-4"> + <div class="row"> + <h4><b>Educação Básica</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + + <p> + <a href="#">Ver Mais</a> + </p> </div> </div> - <p> - <a href="#">Ver Mais</a> - </p> - </div> - </div> + <div class="col-sm-4"> + <div class="row"> + <h4><b>Ensino Médio</b></h4> - <div class="col-sm-4"> - <div class="row"> - <h4><b>Ensino Médio</b></h4> - <div class="object-vertical"> - <div class="panel"> - <div> - <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> </div> - <div class="panel-body"> - <h4 class="media-heading">Los derechos del animal (1)</h4> - <span class="glyphicon glyphicon-eye-open">200 </span> - <span class="glyphicon glyphicon-star">4,5 </span> - <span>Por <a>Usuário </a></span> - </div> - </div> - </div> - <p> - <a href="#">Ver Mais</a> - </p> - </div> - </div> -</div> - -<div class="row newest-collections"> - <h2>Últimas coleções</h2> - - <!-- item --> - <div class="col-sm-4"> - <div class="row"> - <h4><b>Compreensão oral</b></h4> - <div class="object-vertical"> - <div class="panel"> - <div> - <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> - </div> - <div class="panel-body"> - <h4 class="media-heading">Los derechos del animal (1)</h4> - <span class="glyphicon glyphicon-eye-open">200 </span> - <span class="glyphicon glyphicon-star">4,5 </span> - <span>Por <a>Usuário </a></span> - </div> + <p> + <a href="#">Ver Mais</a> + </p> </div> </div> - <p> - <a href="#">Ver Mais</a> - </p> </div> - </div> - <!-- /item --> - - <div class="col-sm-4"> - <div class="row"> - <h4><b>Educação Básica</b></h4> - <div class="object-vertical"> - <div class="panel"> - <div> - <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> - </div> - <div class="panel-body"> - <h4 class="media-heading">Los derechos del animal (1)</h4> - <span class="glyphicon glyphicon-eye-open">200 </span> - <span class="glyphicon glyphicon-star">4,5 </span> - <span>Por <a>Usuário </a></span> - </div> + <div class="row newest-collections"> + <h2>Últimas coleções</h2> + + <!-- item --> + <div class="col-sm-4"> + <div class="row"> + <h4><b>Compreensão oral</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + <p> + <a href="#">Ver Mais</a> + </p> + </div> + </div> + <!-- /item --> + + + <div class="col-sm-4"> + <div class="row"> + <h4><b>Educação Básica</b></h4> + + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> + </div> + + <p> + <a href="#">Ver Mais</a> + </p> </div> </div> - <p> - <a href="#">Ver Mais</a> - </p> - </div> - </div> + <div class="col-sm-4"> + <div class="row"> + <h4><b>Ensino Médio</b></h4> - <div class="col-sm-4"> - <div class="row"> - <h4><b>Ensino Médio</b></h4> - <div class="object-vertical"> - <div class="panel"> - <div> - <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> - </div> - <div class="panel-body"> - <h4 class="media-heading">Los derechos del animal (1)</h4> - <span class="glyphicon glyphicon-eye-open">200 </span> - <span class="glyphicon glyphicon-star">4,5 </span> - <span>Por <a>Usuário </a></span> + <div class="object-vertical"> + <div class="panel"> + <div> + <img src="http://dummyimage.com/250x150/363336/fff" alt="dummy image" class="img-responsive"> + </div> + <div class="panel-body"> + <h4 class="media-heading">Los derechos del animal (1)</h4> + <span class="glyphicon glyphicon-eye-open">200 </span> + <span class="glyphicon glyphicon-star">4,5 </span> + <span>Por <a>Usuário </a></span> + </div> + </div> </div> + + <p> + <a href="#">Ver Mais</a> + </p> </div> </div> - - <p> - <a href="#">Ver Mais</a> - </p> </div> - </div> -</div> \ No newline at end of file +<% end %> \ No newline at end of file diff --git a/app/views/collections/new.html.erb b/app/views/collections/new.html.erb deleted file mode 100644 index 75bb5679fb942a774c05f839b972258a94ad2610..0000000000000000000000000000000000000000 --- a/app/views/collections/new.html.erb +++ /dev/null @@ -1,5 +0,0 @@ -<h1>New Institution</h1> - -<%= render 'form' %> - -<%= link_to 'Back', institutions_path %> diff --git a/app/views/learning_objects/_add_to_collection_btn.html.erb b/app/views/learning_objects/_add_to_collection_btn.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..1a51fc019d59cc3dbf46e704bf3a2c3bcbda3feb --- /dev/null +++ b/app/views/learning_objects/_add_to_collection_btn.html.erb @@ -0,0 +1,13 @@ +<a href="#" id="add_to_collection">Adicionar as coleções</a> + +<div id="collections_list_popover" style="display: none"> + <ul> + <% collections.each do |c| %> + <li><%= c.name %></li> + <% end %> + </ul> +</div> + +<div id="collections_list_popover_title" style="display: none"> + Adicione esse objeto a uma coleção +</div> \ No newline at end of file diff --git a/app/views/learning_objects/_learning_object.erb b/app/views/learning_objects/_learning_object.erb new file mode 100644 index 0000000000000000000000000000000000000000..db67c9c3b6b5b6f3e7e351ae921e2b7dbb388565 --- /dev/null +++ b/app/views/learning_objects/_learning_object.erb @@ -0,0 +1 @@ +<%= render_learning_object orientation, learning_object %> diff --git a/app/views/learning_objects/_learning_object_horizontal.erb b/app/views/learning_objects/_learning_object_horizontal.erb new file mode 100644 index 0000000000000000000000000000000000000000..20c78f620a324ae5f3b77b6d2de6539df7fd76ff --- /dev/null +++ b/app/views/learning_objects/_learning_object_horizontal.erb @@ -0,0 +1,28 @@ +<div class="learning-object-horizontal"> + <div class="media"> + <div class="media-left media-middle"> + <a href="#"> + <img src="http://dummyimage.com/250x150/363336/fff" alt='dummy image'> + </a> + </div> + <div class="media-body"> + <a href="<%= learning_object_path(id: learning_object.id) %>"> + <% if learning_object.name.nil? %> + <h4 class="media-heading">Sem TÃtulo</h4> + <% else %> + <h4 class="media-heading"><%= learning_object.name %></h4> + <% end %> + </a> + + <span>Por <a>Usuário </a></span><br/> + <span class="glyphicon glyphicon-eye-open"><%= learning_object.views %> </span> + <span class="glyphicon glyphicon-star"><%= learning_object.likes %> </span><br> + <% unless learning_object.description.nil? %> + <%= learning_object.description %> + <br/> + <% end %> + <br/> + Em<b> <%= show_categories learning_object.categories %></b> + </div> + </div> +</div> diff --git a/app/views/shared/application/_object_vertical.html.erb b/app/views/learning_objects/_learning_object_vertical.erb similarity index 50% rename from app/views/shared/application/_object_vertical.html.erb rename to app/views/learning_objects/_learning_object_vertical.erb index 8a4b66c025827a3d651e3e28869f32d58b3341b7..ff0bc2740338a08f42eda2dc7754a8732f515cbe 100644 --- a/app/views/shared/application/_object_vertical.html.erb +++ b/app/views/learning_objects/_learning_object_vertical.erb @@ -1,16 +1,16 @@ -<div class="object-vertical"> +<div class="learning-object-vertical"> <div class="panel"> <div> <img src="http://dummyimage.com/250x150/363336/fff" alt='dummy image' class="img-responsive"> </div> <div class="panel-body"> - <% if object.name.nil? %> + <% if learning_object.name.nil? %> <h4 class="media-heading">Sem TÃtulo</h4> <% else %> - <h4 class="media-heading"><%= object.name %></h4> + <h4 class="media-heading"><%= learning_object.name %></h4> <% end %> - <span class="glyphicon glyphicon-eye-open">200 </span> - <span class="glyphicon glyphicon-star">4,5 </span> + <span class="glyphicon glyphicon-eye-open"><%= learning_object.views %> </span> + <span class="glyphicon glyphicon-star"><%= learning_object.likes %> </span> <span>Por <a>Usuário </a></span> </div> </div> diff --git a/app/views/management/carousels/_form.html.erb b/app/views/management/carousels/_form.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..9c4fa033325ca034ee30381bc9fdc017379a6001 --- /dev/null +++ b/app/views/management/carousels/_form.html.erb @@ -0,0 +1,41 @@ +<%= form_for([:management, @carousel], html: {class: 'ls-form row'}) do |f| %> + + <% if @carousel.errors.any? %> + <div class="ls-alert-danger"> + <h2><%= pluralize(@carousel.errors.count, "erro") %> <%= "happened".pluralize(@carousel.errors.count) %>:</h2> + <ul> + <% @carousel.errors.full_messages.each do |message| %> + <li><%= message %></li> + <% end %> + </ul> + </div> + <% end %> + + <fieldset> + <label class="ls-label col-md-3"> + <b class="ls-label-text">TÃtulo</b> + + <p>Digite o titulo deste destaque</p> + <%= f.text_field :title, {required: true} %> + </label> + <label class="ls-label col-md-5"> + <b class="ls-label-text">URL</b> + + <p>Digite a URL que o usuário será redirecionado</p> + <%= f.url_field :url, {required: true} %> + </label> + + <label class="ls-label col-md-5"> + <b class="ls-label-text">Imagem</b> + + <p>Escolha uma imagem para o destaque</p> + <%= f.file_field :image %> + </label> + </fieldset> + + <div class="ls-actions-btn"> + <button class="ls-btn">Salvar</button> + <%= link_to "Cancelar", management_carousels_path,class: "ls-btn-danger"%> + </div> + +<% end %> diff --git a/app/views/management/carousels/edit.html.erb b/app/views/management/carousels/edit.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..e4195ad934da723acd597466b952f9b07b96a7b7 --- /dev/null +++ b/app/views/management/carousels/edit.html.erb @@ -0,0 +1,8 @@ +<h1 class="ls-title-intro ls-ico-users">Carousels</h1> + +<ol class="ls-breadcrumb"> + <li><%= link_to 'Carousels', management_carousels_path %></li> + <li>Administrar</li> +</ol> + +<%= render 'form' %> diff --git a/app/views/management/carousels/index.html.erb b/app/views/management/carousels/index.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..7f36d3e0d777f652869e7cd9a40696d1f7ff0a99 --- /dev/null +++ b/app/views/management/carousels/index.html.erb @@ -0,0 +1,45 @@ +<h1 class="ls-title-intro ls-ico-users">Carousels</h1> + +<a href="<%= new_management_carousel_path %>" class="ls-btn-primary" aria-expanded="false" role="combobox">Cadastrar + novo</a> +<table class="ls-table"> + <thead> + <tr> + <th> + Imagem + </th> + <th>TÃtulo</th> + <th> + URL + </th> + <th> + </th> + <th></th> + </tr> + </thead> + <tbody> + + <% @carousels.each do |c| %> + <tr> + <td> + <%= image_tag c.image.url(:thumbnail) %> + </td> + + <td> + <%= c.title %> + </td> + <td> + <%= c.url %> + </td> + + <td class="ls-txt-right ls-regroup"> + <%= link_to 'Modificar', edit_management_carousel_path(c) %> + </td> + <td> + <%= link_to 'Excluir', management_carousel_path(c), {method: :delete, data: {confirm: 'Tem certeza que deseja excluir?'}, title: 'Apagar usuário', class: 'ls-color-danger', role: 'option'} %> + </td> + </tr> + <% end %> + + </tbody> +</table> diff --git a/app/views/management/carousels/new.html.erb b/app/views/management/carousels/new.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..5cac49569c1a8729509a601370ed1d1bc9bfc4f7 --- /dev/null +++ b/app/views/management/carousels/new.html.erb @@ -0,0 +1,8 @@ +<h1 class="ls-title-intro ls-ico-users">Usuários</h1> + +<ol class="ls-breadcrumb"> + <li><a href="#">Usuários</a></li> + <li>Novo usuário</li> +</ol> + +<%= render 'form' %> \ No newline at end of file diff --git a/app/views/management/highlights/_form_delete.html.erb b/app/views/management/highlights/_form_delete.html.erb deleted file mode 100644 index 58312ed0bc411e780c6fc336fcdda0084da9717f..0000000000000000000000000000000000000000 --- a/app/views/management/highlights/_form_delete.html.erb +++ /dev/null @@ -1,33 +0,0 @@ - -<body> - -<div> - <class="ls-info-header"> - <class="ls-title-2"><h3>Remover destaque</h3><br> - - - - <%= form_tag(:action => "destroy", :method => "get") do %> - <fieldset> -<!-- Exemplo com Radio button --> - <div class="ls-label col-md-5"> - <p>Escolha os destaques a remover:</p> - <% @highlights.each do |highlight| %> - <label class="ls-label-text"> - <input type="checkbox" name="id[]" value= <%= highlight['@rid'] %>> - <%= highlight['name'] %> - </label> - <%end%> - </div> - </fieldset> - - - <div class="ls-actions-btn"> - <%= submit_tag "Salvar", class: "ls-btn" %> - <%= link_to "Cancelar", management_highlights_index_path, class: "ls-btn-danger" %> - </div> - <%end%> -</div> - - -</body> diff --git a/app/views/management/highlights/_form_new.html.erb b/app/views/management/highlights/_form_new.html.erb deleted file mode 100644 index ad4e8e5092da2ff313ebd84d61f3854f5e521879..0000000000000000000000000000000000000000 --- a/app/views/management/highlights/_form_new.html.erb +++ /dev/null @@ -1,43 +0,0 @@ -<body> - <div> - <!-- - <class="ls-info-header"> - <class="ls-title-2"><h3>Adicionar destaque</h3><br> - - <form action="" class="ls-form row"> - <fieldset> - <label class="ls-label col-md-3"> - <b class="ls-label-text">TÃtulo</b> - <p>Digite o tÃtulo do destaque</p> - <input type="text" name="name" placeholder="TÃtulo" required > - </label> - <label class="ls-label col-md-4"> - <b class="ls-label-text">URL</b> - <p>Cole a url do destaque no portal</p> - <input type="url" name="url" placeholder="URL do destaque no portal" required > - </label> - - </fieldset> - </form> ---> - - - - <%= form_tag( :action => "create", method: "post") do %> - <%= label_tag :name, "TÃtulo do destaque" %><br><br> - <%= text_field_tag :name,'', placeholder: "tÃtulo " %> - <br><br><br> - - <%= label_tag :url, "URL da coleção no portal" %><br><br> - <%= text_field_tag :url, '', placeholder: "url" %> - <%= submit_tag "Salvar", class: "ls-btn" %> - - <% end %> - - -<div class="ls-actions-btn"> - - <%= link_to "Cancelar", management_highlights_index_path, class: "ls-btn-danger" %> - -</div> -</body> diff --git a/app/views/management/highlights/delete.html.erb b/app/views/management/highlights/delete.html.erb deleted file mode 100644 index d1a58f61228d1a95c4808227b39ce450e7f9f6cc..0000000000000000000000000000000000000000 --- a/app/views/management/highlights/delete.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -<ol class="ls-breadcrumb"> - <li><%= link_to "InÃcio", management_root_path %></li> - <li><%= link_to "Destaques", management_highlights_index_path %></li> - <li> Remover </li> -</ol> -<br> - -<%= render 'form_delete' %> diff --git a/app/views/management/highlights/index.html.erb b/app/views/management/highlights/index.html.erb deleted file mode 100644 index 36865eb4f5d4c001462b1fc26df0c992d3d85ac0..0000000000000000000000000000000000000000 --- a/app/views/management/highlights/index.html.erb +++ /dev/null @@ -1,45 +0,0 @@ - - - -<ol class="ls-breadcrumb"> - <li><%= link_to "InÃcio", management_root_path %></li> - <li> Destaques </li> -</ol> -<br> - -<div> - <header class="ls-info-header"> - <h2 class="ls-title-3">Destaques</h2> - <p class="ls-float-right ls-float-none-xs ls-small-info"> <strong><%= Date.today.to_s %></strong></p> - </header> - -</div> - - - - - <div class="ls-list-title "> - <b>Destaques atuais no carrosel:</b> - </div> - <div class="ls-list-description"> - <ul> - <% if @highlights.present? %> - <% @highlights.each do |highlight| %> - <br> - <li> <%= highlight['name'] %></li> - <% end %> - <% else %> - <li> - Não existe nenhuma destaque ainda. - </li> - <%end%> - </ul> - </div> - - - -<br><br><br> -<%= link_to "Adicionar destaques", management_highlights_new_path, class: "ls-btn ls-btn-lg" %> - - -<%= link_to "Remover destaques", management_highlights_delete_path, class: "ls-btn ls-btn-lg" %> diff --git a/app/views/management/highlights/new.html.erb b/app/views/management/highlights/new.html.erb deleted file mode 100644 index 9356f7932651a572f51416b85b2d8b48e9978c02..0000000000000000000000000000000000000000 --- a/app/views/management/highlights/new.html.erb +++ /dev/null @@ -1,8 +0,0 @@ -<ol class="ls-breadcrumb"> - <li><%= link_to "InÃcio", management_root_path %></li> - <li><%= link_to "Destaques", management_highlights_index_path %></li> - <li> Novo </li> -</ol> -<br> - -<%= render 'form_new' %> diff --git a/app/views/search/index.html.erb b/app/views/search/index.html.erb index 30d1d8d357007af118e561ce7455aefa588c9db4..46f39ee39908c84a87445daf64decea7d72434ff 100644 --- a/app/views/search/index.html.erb +++ b/app/views/search/index.html.erb @@ -1,24 +1,24 @@ <script type="text/javascript"> - $(document).ready(function() { - $(".select-tag-container").select2(); + $(document).ready(function () { + $(".select-tag-container").select2(); - var runDropdown = function(element) { - if ($(element).next().is(':hidden')) { - $('> .caret', element).addClass('caret-up'); - $(element).next().slideDown(); - } - else { - $('> .caret', element).removeClass('caret-up'); - $(element).next().slideUp(); - } - }; + var runDropdown = function (element) { + if ($(element).next().is(':hidden')) { + $('> .caret', element).addClass('caret-up'); + $(element).next().slideDown(); + } + else { + $('> .caret', element).removeClass('caret-up'); + $(element).next().slideUp(); + } + }; - runDropdown($('#nestedAccordion .dropdown')); + runDropdown($('#nestedAccordion .dropdown')); - $('#nestedAccordion .dropdown').click(function () { - runDropdown(this); + $('#nestedAccordion .dropdown').click(function () { + runDropdown(this); + }); }); - }); </script> <div class="row"> @@ -35,9 +35,11 @@ </div> --> <div id="nestedAccordion"> - <h3 class="dropdown">Matérias<span class="caret caret-align-right" /></h3> - <div class='aberto'> - <h4 class="dropdown">Matemática<span class="caret caret-align-right" /></h4> + <h3 class="dropdown open">Matérias<span class="caret caret-align-right"/></h3> + + <div class="dropdown-element"> + <h4 class="dropdown">Matemática<span class="caret caret-align-right"/></h4> + <div> <select class="select-tag-container" multiple="multiple"> <option value="">Todos</option> @@ -51,7 +53,8 @@ </optgroup> </select> </div> - <h4 class="dropdown">Biologia<span class="caret caret-align-right" /></h4> + <h4 class="dropdown">Biologia<span class="caret caret-align-right"/></h4> + <div> <select class="select-tag-container" multiple="multiple"> <option value="">Todos</option> @@ -64,7 +67,8 @@ </optgroup> </select> </div> - <h4 class="dropdown">História<span class="caret caret-align-right" /></h4> + <h4 class="dropdown">História<span class="caret caret-align-right"/></h4> + <div> <select class="select-tag-container" multiple="multiple"> <option value="">Todos</option> @@ -77,7 +81,8 @@ </optgroup> </select> </div> - <h4 class="dropdown">LÃngua Portuguesa<span class="caret caret-align-right" /></h4> + <h4 class="dropdown">LÃngua Portuguesa<span class="caret caret-align-right"/></h4> + <div> <select class="select-tag-container" multiple="multiple"> <option value="">Todos</option> @@ -90,7 +95,8 @@ </optgroup> </select> </div> - <h4 class="dropdown">Geografia<span class="caret caret-align-right" /></h4> + <h4 class="dropdown">Geografia<span class="caret caret-align-right"/></h4> + <div> <select class="select-tag-container" multiple="multiple"> <option value="">Todos</option> @@ -103,7 +109,8 @@ </optgroup> </select> </div> - <h4 class="dropdown">Ciências<span class="caret caret-align-right" /></h4> + <h4 class="dropdown">Ciências<span class="caret caret-align-right"/></h4> + <div> <select class="select-tag-container" multiple="multiple"> <option value="">Todos</option> @@ -116,7 +123,8 @@ </optgroup> </select> </div> - <h4 class="dropdown">Educação FÃsica<span class="caret caret-align-right" /></h4> + <h4 class="dropdown">Educação FÃsica<span class="caret caret-align-right"/></h4> + <div> <select class="select-tag-container" multiple="multiple"> <option value="">Todos</option> @@ -129,7 +137,8 @@ </optgroup> </select> </div> - <h4 class="dropdown">Inglês<span class="caret caret-align-right" /></h4> + <h4 class="dropdown">Inglês<span class="caret caret-align-right"/></h4> + <div> <select class="select-tag-container" multiple="multiple"> <option value="">Todos</option> @@ -142,12 +151,13 @@ </optgroup> </select> </div> - </div><!--fim materias --> - <h3 class="dropdown">Conteúdo<span class="caret caret-align-right" /></h3><!--Tipo 1--> - <div class='aberto'> + </div> + <!--fim materias --> + <h3 class="dropdown open">Conteúdo<span class="caret caret-align-right"/></h3><!--Tipo 1--> + <div class="dropdown-element"> <table class="tipo1" style="width:100%"> <tr> - <td><p>MÃdia</p> </td> + <td><p>MÃdia</p></td> <td></td> </tr> <tr> @@ -251,8 +261,9 @@ <input type="checkbox">Planos de Aula </div> </div> --> - <h3 class="dropdown">Ano escolar<span class="caret caret-align-right" /></h3> - <div> + <h3 class="dropdown">Ano escolar<span class="caret caret-align-right"/></h3> + + <div class="dropdown-element"> <table style="width:100%"> <tr> <td><input type="checkbox">1º</td> @@ -272,20 +283,23 @@ </tr> </table> </div> - <h3 class="dropdown">Ano de Publicação<span class="caret caret-align-right" /></h3> - <div> + <h3 class="dropdown">Ano de Publicação<span class="caret caret-align-right"/></h3> + + <div class="dropdown-element"> <input type="radio" name="ano" value="single" checked>Ano:<br/> <input type="text" name="ano1" size="8"> <br/> <input type="radio" name="ano" value="range">Intervalo:<br/> <input type="text" name="ano2" size="8"> - <input type="text" name="ano2" size="8"> </div> - </div><!-- fim div id="nestedAccordion"--> + </div> + <!-- fim div id="nestedAccordion"--> <div id="nestedAccordion"> - <h3 class="dropdown">Pesquisa Avançada<span class="caret caret-align-right" /></h3> + <h3 class="dropdown">Pesquisa Avançada<span class="caret caret-align-right"/></h3> + <form method="get"> - <div> + <div class="dropdown-element"> <table style="width:100%"> <tr> <td>Todas estas palavras:</td> @@ -305,51 +319,55 @@ </tr> <tr> <td></td> - <td align="right"><br><button type="submit" class="btn btn-default">Pesquisar</button></td> + <td align="right"><br> + <button type="submit" class="btn btn-default">Pesquisar</button> + </td> </tr> </table> </div> </form> </div> - </div><!--/span col sm-4--> + </div> + <!--/span col sm-4--> <!-- search results --> <div class="col-sm-8"> <% unless @results.empty? %> - <h4>Objetos encontrados: <%= @numFound %></h4> - <nav class="navbar navbar-default"> - <div class="container-fluid" > - Mostrando resultados <%= @start+1 %>-<%= if (@start+@npagnac) > @numFound then @numFound else (@npagnac+@start) end %> de <%= @numFound %> - <form method="get"> - <input type="hidden" name="qry" value="<%=params["qry"]%>"> + <div> + Mostrando resultados <%= @start+1 %>-<%= if (@start+@npagnac) > @numFound then + @numFound + else + (@npagnac+@start) + end %> de <%= @numFound %> + <form method="get"> + <input type="hidden" name="qry" value="<%= params["qry"] %>"> - <select name="paginacao" onchange='this.form.submit()'> - <option value="<%=@npagnac%>">Resultados por Página</option> - <option value="10">10</option> - <option value="25">25</option> - <option value="50">50</option> - </select> + <select name="paginacao" onchange='this.form.submit()'> + <option value="<%= @npagnac %>">Resultados por Página</option> + <option value="10">10</option> + <option value="25">25</option> + <option value="50">50</option> + </select> + + <select name="sort" onchange='this.form.submit()'> + <option value=<%= @ordena %>>Ordenar por</option> + <option value="author">Autores</option> + <option value="publicationasc">Mais novos</option> + <option value="publicationdesc">Mais velhos</option> + <option value="relevance">Relevância</option> + <option value="type">Tipo</option> + <option value="title">TÃtulo</option> + </select> + </form> + <br/> + </div> + <br/> - <select name="sort" onchange='this.form.submit()'> - <option value=<%=@ordena%>>Ordenar por</option> - <option value="author">Autores</option> - <option value="publicationasc">Mais novos</option> - <option value="publicationdesc">Mais velhos</option> - <option value="relevance">Relevância</option> - <option value="type">Tipo</option> - <option value="title">TÃtulo</option> - </select> - </form> - </div> - </nav> - <br /> <div class="container-fluid"> - <%= will_paginate @results %> - <% @results.each do |o| %> - <%= render partial: "shared/application/object_tag", locals: {obj: o} %> - <% end %> + <%= render @results, orientation: "horizontal" %> <%= will_paginate @results %> </div> <% end %> - </div><!-- col-sm-8 --> + </div> + <!-- col-sm-8 --> </div><!-- /container --> diff --git a/app/views/shared/application/_header.html.erb b/app/views/shared/application/_header.html.erb index 81a44137b95d79115859210d4afa93c880e1f3f3..0936cdd336eb45b8b6955f85b302eb5ca5798356 100644 --- a/app/views/shared/application/_header.html.erb +++ b/app/views/shared/application/_header.html.erb @@ -2,10 +2,14 @@ <div class="barra-brasil"> <div class="container"> <div id="barra-brasil"> - <ul id="menu-barra-temp" style="list-style:none;"> - <li style="display:inline; float:left;padding-right:10px; margin-right:10px; border-right:1px solid #EDEDED"><a href="http://brasil.gov.br" style="font-family:sans,sans-serif; text-decoration:none; color:white;">Portal do Governo Brasileiro</a></li> - <li><a style="font-family:sans,sans-serif; text-decoration:none; color:white;" href="http://epwg.governoeletronico.gov.br/barra/atualize.html">Atualize sua Barra de Governo</a></li> - </ul> + <ul id="menu-barra-temp" style="list-style:none;"> + <li style="display:inline; float:left;padding-right:10px; margin-right:10px; border-right:1px solid #EDEDED"> + <a href="http://brasil.gov.br" style="font-family:sans,sans-serif; text-decoration:none; color:white;">Portal + do Governo Brasileiro</a></li> + <li> + <a style="font-family:sans,sans-serif; text-decoration:none; color:white;" href="http://epwg.governoeletronico.gov.br/barra/atualize.html">Atualize + sua Barra de Governo</a></li> + </ul> </div> </div> </div> @@ -13,23 +17,28 @@ <div class="search-bar"> <div class="container"> <div class="row"> - <div class="col-md-3 logo-text"> - <%= link_to root_path do %> - CONTEÚDO<br>EDUCACIONAL - <% end %> + <div class="col-md-3 logo-container"> + <div class="logo"> + <%= link_to root_path do %> + <%= image_tag image_path("logo.png"), class: "logo-image" %><br/> + + <h3>CONTEÚDO EDUCACIONAL</h3> + <% end %> + </div> </div> <div class="col-md-6"> <div class="search-accessibility"> - <%= image_tag 'fonte_mais.png', onclick: 'resizeText(1)' %> - <%= image_tag 'fonte_inicial.png', onclick: 'resizeText(0)' %> - <%= image_tag 'fonte_menos.png', onclick: 'resizeText(-1)' %> - <%= image_tag 'contraste.png', onclick: 'changeContrast()' %> + <%= image_tag 'fonte_mais.png', onclick: 'fontSize.resizeText(1)' %> + <%= image_tag 'fonte_inicial.png', onclick: 'fontSize.resizeText(0)' %> + <%= image_tag 'fonte_menos.png', onclick: 'fontSize.resizeText(-1)' %> + <%= image_tag 'contraste.png', onclick: 'contrast.change()' %> </div> <div class="search-input"> <form action="/search" method="get"> <div class="input-group" id="search"> <input type="text" placeholder="buscar" class="form-control" name="qry"> + <div class="input-group-btn"> <button class="btn btn-default" type="submit"><i class="glyphicon glyphicon-search"></i></button> </div> @@ -41,24 +50,24 @@ <div class="col-md-3 status-text"> <% if user_signed_in? %> - <div class="media"> - <div class="media-body"> - <h4 class="media-heading"><%= link_to current_user.name.split(" ").first, edit_user_registration_path %></h4> - <%= link_to 'sair', destroy_user_session_path, method: 'delete', class: "quit-link" %> - </div> - <div class="media-right"> - <a href="#"> - <img class="circular-image" src="<%= current_user.avatar.url(:thumb) %>" alt="Foto do usuário"/> - </a> + <div class="media"> + <div class="media-body"> + <h2 class="media-heading"><%= link_to current_user.name.split(" ").first, edit_user_registration_path %></h2> + <h4><%= link_to 'sair', destroy_user_session_path, method: 'delete', class: "quit-link" %></h4> + </div> + <div class="media-right"> + <a href="#"> + <img class="user-image" src="<%= current_user.avatar.url(:thumb) %>" alt="Foto do usuário"/> + </a> + </div> </div> - </div> <% else %> - <div class="media"> - <div class="media-body"> - <h4 class="media-heading"><%= link_to 'entre', new_user_session_path %></h4> - ou <%= link_to 'cadastre-se', new_user_registration_path, class: "register-link" %> + <div class="media"> + <div class="media-body"> + <h2 class="media-heading"><%= link_to 'entre', new_user_session_path %></h2> + <h4>ou <%= link_to 'cadastre-se', new_user_registration_path, class: "register-link" %></h4> + </div> </div> - </div> <% end %> </div> </div> @@ -69,10 +78,11 @@ <div class="container"> <div class="row"> <ul class="nav navbar-nav"> - <li class="nav-button nav-button-first"><%= link_to 'Assuntos' %></li> + <li class="nav-button nav-button-first"><h3><%= link_to 'Assuntos' %></h3></li> <li role="separator" class="divider"></li> <li class="dropdown nav-button"> - <a class="dropdown-toggle" data-toggle="dropdown" href="javascript:void(0);">NÃveis de Ensino <span class="caret" /></a> + <a class="dropdown-toggle" data-toggle="dropdown" href="javascript:void(0);">NÃveis de + Ensino <span class="caret"/></a> <ul class="dropdown-menu"> <li> <div class="row" style="width: 400px;"> @@ -101,10 +111,44 @@ </ul> </li> <li role="separator" class="divider"></li> - <li class="nav-button"><%= link_to 'FAQ', faq_path %></li> + <li class="nav-button"><h3><%= link_to 'FAQ', faq_path %></h3></li> <li role="separator" class="divider"></li> - <li class="nav-button"><%= link_to 'Contato', contact_path %></li> + <li class="nav-button"><h3><%= link_to 'Contato', contact_path %></h3></li> <li role="separator" class="divider"></li> + <li class="dropdown nav-button"> + <a class="dropdown-toggle" data-toggle="dropdown" href="javascript:void(0);">Links + úteis <span class="caret"/></a> + <ul class="dropdown-menu"> + <li> + <div class="row" style="width: 400px;"> + <ul class="list-unstyled col-md-6 col-md-offset-1"> + <li><b>Portais nacionais e internacionais</b></li> + <li role="separator" class="divider"></li> + <li><a href="">Portais Educacionais</a></li> + <li><a href="">Museus</a></li> + <li><a href="">Bibliotecas</a></li> + <li><a href="">Revistas</a></li> + <li><a href="">Projetos Inovadores</a></li> + <li><a href="">Jornais</a></li> + <li><a href="">Projeto de escolas</a></li> + <li><a href="">Um computador por aluno</a></li> + <li><a href="">Geoprocessamento</a></li> + <li><a href="">Prêmio Professores do Brasil</a></li> + <li><a href="">Capacitação ProInfo Integrado</a></li> + </ul> + <ul class="list-unstyled col-md-5"> + <li><b>Visite também</b></li> + <li role="separator" class="divider"></li> + <li><a href="">DomÃnio Público</a></li> + <li><a href="">E-ProInfo</a></li> + <li><a href="">Objetos Educacionais</a></li> + <li><a href="">Plataforma Freire</a></li> + <li><a href="">TV Escola</a></li> + </ul> + </div> + </li> + </ul> + </li> </ul> </div> </div> diff --git a/app/views/shared/application/_object_horizontal.html.erb b/app/views/shared/application/_object_horizontal.html.erb deleted file mode 100644 index c1793e23a0fce3830b385ad18f4f37c2ccdc2d05..0000000000000000000000000000000000000000 --- a/app/views/shared/application/_object_horizontal.html.erb +++ /dev/null @@ -1,25 +0,0 @@ -<div class="object-horizontal"> - <div class="media"> - <div class="media-left media-middle"> - <a href="#"> - <img src="http://dummyimage.com/250x150/363336/fff" alt='dummy image'> - </a> - </div> - <div class="media-body"> - <% if object.name.nil? %> - <h4 class="media-heading">Sem TÃtulo</h4> - <% else %> - <h4 class="media-heading"><%= object.name %></h4> - <% end %> - <span>Por <a>Usuário </a></span><br/> - <span class="glyphicon glyphicon-eye-open"><%= object.views %> </span> - <span class="glyphicon glyphicon-star"><%= object.likes %> </span><br> - <% unless object.description.nil? %> - <%= object.description %> - <br/> - <% end %> - <br/> - Em<b> Biologia</b>, <b>Biologia Marinha</b> - </div> - </div> -</div> diff --git a/app/views/shared/application/_object_single.html.erb b/app/views/shared/application/_object_single.html.erb deleted file mode 100644 index 27de179726caf4aa86256bd361cadf7f76e49fc9..0000000000000000000000000000000000000000 --- a/app/views/shared/application/_object_single.html.erb +++ /dev/null @@ -1,49 +0,0 @@ -<!--<%=debug obj%>--> - -<div class="row"> - <div class="col-sm-3"> - <a href="app/assets/images/logo.png" class="thumbnail"> - <p><% unless obj["title"].nil? %> - <p><%= obj["title"][0] %></p> - <% end %> - </p> - <!-- <%= link_to image_tag("logo.png", :class => "img-responsive"), :class => "thumbnail" %><img src="app/assets/images/logo.png" alt="" width="284" height="213">--> - <%= image_tag("logo.png") %> - </a> - </div> - <div class="col-sm-9"> - <div class="col-sm-12"> - <% unless obj["dc.description"].nil? %> - <%= obj["dc.description"][0] %> - <% end %> - </div> - <div class="col-sm-12"> - <div align="right"><%= link_to "Ver mais...", learning_object_path(obj["search.resourceid"]), :class => "btn btn-primary" %></div> - <br/> - <table class="table "> - <tr> - <td class="stars">Avaliações:</td><td>Postado por:</td><td class="visualis">Visualizações:</td> - </tr> - <tr> - <td> - <span class="starRating"> - <input id="rating5" type="radio" name="rating" value="5" disabled> - <label for="rating5">5</label> - <input id="rating4" type="radio" name="rating" value="4" checked disabled> - <label for="rating4">4</label> - <input id="rating3" type="radio" name="rating" value="3" disabled> - <label for="rating3">3</label> - <input id="rating2" type="radio" name="rating" value="2" disabled> - <label for="rating2">2</label> - <input id="rating1" type="radio" name="rating" value="1" disabled> - <label for="rating1">1</label> - </span> - () - </td> - <td><%= link_to obj["author"][0] %> Há ... anos</td> - <td>333</td> - </tr> - </table> - </div> - </div> - </div> diff --git a/app/views/shared/application/_object_tag.html.erb b/app/views/shared/application/_object_tag.html.erb deleted file mode 100644 index c117569976df7ec75f87225f39877e2f6252d65c..0000000000000000000000000000000000000000 --- a/app/views/shared/application/_object_tag.html.erb +++ /dev/null @@ -1,44 +0,0 @@ -<!--<%=debug obj%>--> - -<div class="row"> - <div class="col-sm-3"> - <a href="app/assets/images/logo.png" class="thumbnail"> - <p><%= obj.name %></p> - <!-- <%= link_to image_tag("logo.png", :class => "img-responsive"), :class => "thumbnail" %><img src="app/assets/images/logo.png" alt="" width="284" height="213">--> - <%= image_tag("logo.png") %> - </a> - </div> - <div class="col-sm-9"> - <div class="col-sm-12"> - <%= obj.description %> - </div> - <div class="col-sm-12"> - <div align="right"><%= link_to "Ver mais...", learning_object_path(obj.id_dspace), :class => "btn btn-primary" %></div> - <br/> - <table class="table "> - <tr> - <td class="stars">Avaliações:</td><td>Postado por:</td><td class="visualis">Visualizações:</td> - </tr> - <tr> - <td> - <span class="starRating"> - <input id="rating5" type="radio" name="rating" value="5" disabled> - <label for="rating5">5</label> - <input id="rating4" type="radio" name="rating" value="4" checked disabled> - <label for="rating4">4</label> - <input id="rating3" type="radio" name="rating" value="3" disabled> - <label for="rating3">3</label> - <input id="rating2" type="radio" name="rating" value="2" disabled> - <label for="rating2">2</label> - <input id="rating1" type="radio" name="rating" value="1" disabled> - <label for="rating1">1</label> - </span> - () - </td> - <td><%= link_to "<<Autor>>" %> Há ... anos</td> - <td><%= obj.views %></td> - </tr> - </table> - </div> - </div> - </div> diff --git a/app/views/shared/management/_nav_menu.html.erb b/app/views/shared/management/_nav_menu.html.erb index 3b8b8e725bf19176df73c3708fbb023960be7485..d0d4771c0081723c44365d60045adc66b0270470 100644 --- a/app/views/shared/management/_nav_menu.html.erb +++ b/app/views/shared/management/_nav_menu.html.erb @@ -1,17 +1,17 @@ <nav class="ls-menu"> <ul> <li><%= link_to "InÃcio", management_root_path, class: 'ls-ico-home' %></li> - <li><%= link_to "Objetos em destaque", management_highlights_path, class: 'ls-ico-star' %> + <li><%= link_to "Objetos em destaque", management_carousels_path, class: 'ls-ico-star' %> <li> <li class="ls-submenu"> <a href="#" class="ls-ico-stats">EstatÃsticas</a> <ul role="menu"> - <li><%= link_to "Geral", management_index_statistics_path, class: 'ls-submenu-item' %></li> - <li><%= link_to "Usuários", management_users_statistics_path, class: 'ls-submenu-item' %></li> - <li><%= link_to "Coleções", management_collections_statistics_path, class: 'ls-submenu-item' %></li> - <li><%= link_to "Downloads", management_downloads_statistics_path, class: 'ls-submenu-item' %></li> - <li><%= link_to "Acessos", management_accesses_statistics_path, class: 'ls-submenu-item' %></li> + <li><%= link_to "Geral", management_statistics_path, class: 'ls-submenu-item' %></li> + <li><%= link_to "Usuários", users_management_statistics_path, class: 'ls-submenu-item' %></li> + <li><%= link_to "Coleções", collections_management_statistics_path, class: 'ls-submenu-item' %></li> + <li><%= link_to "Downloads", downloads_management_statistics_path, class: 'ls-submenu-item' %></li> + <li><%= link_to "Acessos", accesses_management_statistics_path, class: 'ls-submenu-item' %></li> </ul> </li> <li class="ls-submenu"> @@ -25,4 +25,4 @@ <li><%= link_to "Denúncias", '#', class: 'ls-ico-bullhorn' %> <li> </ul> -</nav> \ No newline at end of file +</nav> diff --git a/app/views/shared/management/_user_account.html.erb b/app/views/shared/management/_user_account.html.erb index 6fc0661f8492d67f5b0d11b9e67ec1664982416e..1dcf6fd40effd41a70b48bebd0b2afec2705aa59 100644 --- a/app/views/shared/management/_user_account.html.erb +++ b/app/views/shared/management/_user_account.html.erb @@ -1,7 +1,6 @@ <div data-ls-module="dropdown" class="ls-dropdown ls-user-account"> <a href="#" class="ls-ico-user"> - Carlos Marques - <small>(lstyle)</small> + <%= current_user.name || current_user.email %> </a> <nav class="ls-dropdown-nav ls-user-menu"> <ul> diff --git a/app/views/subjects/index.html.erb b/app/views/subjects/index.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..5d16dbd2375c44be23f42257dde4a1820dd12fc4 --- /dev/null +++ b/app/views/subjects/index.html.erb @@ -0,0 +1,8 @@ +<p id="notice"><%= notice %></p> + +<h1>Listing Subject</h1> + + +<%for subject in @subjects%> + <%= render 'shared/application/object_vertical', object: subject %> +<%end%> diff --git a/app/views/subjects/show.html.erb b/app/views/subjects/show.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..d3c806d7f6dada08241f3860aaeedf6d3fa844d8 --- /dev/null +++ b/app/views/subjects/show.html.erb @@ -0,0 +1 @@ +<h1><%= @subject.name %></h1> diff --git a/app/views/users/show.html.erb b/app/views/users/show.html.erb new file mode 100644 index 0000000000000000000000000000000000000000..e915c351cd710310db12b2195ba69ee0ef6ba67a --- /dev/null +++ b/app/views/users/show.html.erb @@ -0,0 +1,85 @@ +<div class="row"> + <div class="user-header"> + <div class="col-md-6"> + <div class="media"> + <div class="media-left"> + <a href="#"> + <img class="user-image" src="<%= image_path("user-anon.png") %>" alt="Foto do usuário"> + </a> + </div> + <div class="media-body"> + <h4 class="media-heading">Usuário</h4> + <span>nome da instituição</span> + + <p> + x items + </p> + </div> + </div> + </div> + <div class="col-md-6 right-column"> + <button type="button" class="btn btn-default">Seguir</button> + </div> + </div> + + <div class="user-files"> + <div class="row"> + <div class="col-md-6"> + <div class="media"> + <div class="media-body"> + <h4 class="media-heading">Arquivos do usuário</h4> + + <p> + x items + </p> + </div> + </div> + </div> + <div class="col-md-6 right-column"> + </div> + </div> + + <div class="row learning-object-columns"> + <%= render @objects[0], orientation: "vertical" %> + <%= render @objects[1], orientation: "vertical" %> + <%= render @objects[2], orientation: "vertical" %> + <%= render @objects[0], orientation: "vertical" %> + <%= render @objects[1], orientation: "vertical" %> + <%= render @objects[2], orientation: "vertical" %> + </div> + </div> +</div> + + +<div class="row"> + <div class="user-collections"> + <div class="row"> + <div class="col-md-6"> + <div class="media"> + <div class="media-body"> + <h4 class="media-heading">Coleções</h4> + + <p> + x items + </p> + </div> + </div> + </div> + <div class="col-md-6 right-column"> + </div> + </div> + + <div class="row learning-object-columns"> + <%= render @objects[0], orientation: "vertical" %> + <%= render @objects[1], orientation: "vertical" %> + <%= render @objects[2], orientation: "vertical" %> + <%= render @objects[0], orientation: "vertical" %> + <%= render @objects[1], orientation: "vertical" %> + <%= render @objects[2], orientation: "vertical" %> + </div> + </div> +</div> + +<div class="row"> + <%= render 'collections/create' %> +</div> diff --git a/app/views/welcome/index.html.erb b/app/views/welcome/index.html.erb index 7275f6c893bc8910c135648718c276c2d379aeef..61f5baf9c874a36a4b2bfd853eef62a6269791ce 100644 --- a/app/views/welcome/index.html.erb +++ b/app/views/welcome/index.html.erb @@ -23,12 +23,11 @@ <% highlight_class="item" %> <% end %> <div class="<%= highlight_class %>"> - <%= image_tag 'mecshow_logo.jpg'%> + <%= image_tag highlight.image.url(:larger) %> <div class="container"> <div class="carousel-caption"> - <h1><%= highlight['title'] %></h1> - <p id="carrousel-new-description"><%= highlight['description'] %> </p> - <p><a class="btn btn-lg btn-primary" href=<%= highlight['URL'] %> role="button">Mais informações</a></p> + <h1><%= highlight.title %></h1> + <p><a class="btn btn-lg btn-primary" href=<%= highlight.url %> role="button">Mais informações</a></p> </div> </div> </div> @@ -49,9 +48,7 @@ <% if @General.present? %> <ul class="list-unstyled"> <h2>Destaques</h2> - <% @General.each do |object| %> - <%= render 'shared/application/object_horizontal', object: object %> - <% end %> + <%= render @General, orientation: 'horizontal' %> <% end %> </ul> </div> @@ -69,8 +66,8 @@ <% @Subjects.each do |subject|%> <div class="col-sm-4"> <div class="row"> - <h4><b><%= subject["name"] %></b></h4> - <%= render 'shared/application/object_vertical', object: subject["first_highlight"] %> + <h4><b><%= subject.name %></b></h4> + <%= render subject.highlights.first, orientation: 'vertical'%> <p> <a href="#">Ver Mais</a> </p> @@ -80,4 +77,4 @@ </div> <% end %> </div> -</div> +</div> \ No newline at end of file diff --git a/config/initializers/repositories/dspace.rb b/config/initializers/repositories/dspace.rb index f2a71dbd217f0bff4b7c836afa4107a2859cbd94..48a75aab0f7308207fba630d98dd22130408b31c 100644 --- a/config/initializers/repositories/dspace.rb +++ b/config/initializers/repositories/dspace.rb @@ -15,4 +15,4 @@ else config = dspace_configs.fetch(Rails.env) set_dspace_config config['host'], config['port'], config['rest_webapp_name'], config['solr_webapp_name'] -end +end \ No newline at end of file diff --git a/config/initializers/repositories/repositories.rb b/config/initializers/repositories/repositories.rb index caebcb6b5995c78904a92585f573b3f540cd2990..f6666e218bec5ea09b18d95b0217612a57577a43 100644 --- a/config/initializers/repositories/repositories.rb +++ b/config/initializers/repositories/repositories.rb @@ -22,27 +22,31 @@ end Repository::Environments.create :development do |repository| repository.register :learning_object, OrientDb::LearningObjectRepository.new(OrientDb::Client.instance) repository.register :mainPage, OrientDb::MainPageRepository.new(OrientDb::Client.instance) - repository.register :webLink, OrientDb::WeblinkRepository.new(OrientDb::Client.instance) repository.register :user, UserRepositoryProxy.new(OrientDb::UserRepository.new(OrientDb::Client.instance)) repository.register :subject, OrientDb::SubjectRepository.new(OrientDb::Client.instance) repository.register :institution, OrientDb::InstitutionRepository.new(OrientDb::Client.instance) + repository.register :subject, OrientDb::SubjectRepository.new(OrientDb::Client.instance) + repository.register :attribute, OrientDb::AttributeRepository.new(OrientDb::Client.instance) repository.register :collection, OrientDb::CollectionRepository.new(OrientDb::Client.instance) + repository.register :carousel, ActiveRecord::CarouselRepository.new end Repository::Environments.create :test do |repository| + repository.register :carousel, ActiveRecord::CarouselRepository.new repository.register :learning_object, OrientDb::LearningObjectRepository.new(OrientDb::Client.instance) repository.register :mainPage, OrientDb::MainPageRepository.new(OrientDb::Client.instance) - repository.register :webLink, OrientDb::WeblinkRepository.new(OrientDb::Client.instance) repository.register :user, UserRepositoryProxy.new(OrientDb::UserRepository.new(OrientDb::Client.instance)) repository.register :subject, OrientDb::SubjectRepository.new(OrientDb::Client.instance) + repository.register :attribute, OrientDb::AttributeRepository.new(OrientDb::Client.instance) repository.register :collection, OrientDb::CollectionRepository.new(OrientDb::Client.instance) end Repository::Environments.create :production do |repository| + repository.register :carousel, ActiveRecord::CarouselRepository.new repository.register :learning_object, OrientDb::LearningObjectRepository.new(OrientDb::Client.instance) repository.register :mainPage, OrientDb::MainPageRepository.new(OrientDb::Client.instance) - repository.register :webLink, OrientDb::WeblinkRepository.new(OrientDb::Client.instance) repository.register :user, UserRepositoryProxy.new(OrientDb::UserRepository.new(OrientDb::Client.instance)) repository.register :subject, OrientDb::SubjectRepository.new(OrientDb::Client.instance) + repository.register :attribute, OrientDb::AttributeRepository.new(OrientDb::Client.instance) repository.register :collection, OrientDb::CollectionRepository.new(OrientDb::Client.instance) end diff --git a/config/orientdb.yml b/config/orientdb.yml index 33d7dae7cccd737915522aaa7ff9abc3ac34f4fb..07945002eacbdb755ce3058bf6ff217959fc76e8 100644 --- a/config/orientdb.yml +++ b/config/orientdb.yml @@ -1,6 +1,6 @@ development: &development host: localhost - database: portalmec + database: PortalMEC username: admin password: admin port: 2480 diff --git a/config/routes.rb b/config/routes.rb index 057436b6ad50525c71d94e5f42c893e2f3c8d7f3..551b85fd6560ef73fd4c25f2ded7c77e1263b807 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,27 +10,35 @@ Rails.application.routes.draw do namespace :management do root 'welcome#index' - # statistics - get 'statistics/', to: 'statistics#index', as: 'index_statistics' - get 'statistics/users/' => 'statistics#users', as: 'users_statistics' - get 'statistics/collections' => 'statistics#collections', as: 'collections_statistics' - get 'statistics/accesses' => 'statistics#accesses', as: 'accesses_statistics' - get 'statistics/downloads' => 'statistics#downloads', as: 'downloads_statistics' + resources :statistics do + collection do + get :users + get :collections + get :accesses + get :downloads + end + end resources :users resources :highlights + resources :carousels mount Sidekiq::Web, at: '/sidekiq' end root 'welcome#index' - resources :learning_objects - post '/learning_objects/:id/like' => 'learning_objects#like', as: 'like_learning_object' + resources :learning_objects do + member do + post :like + end + end resources :institutions resources :collections + resources :subjects, only: [:index, :show] + get 'users/:id', to: 'users#show', as: 'users_show' get '/faq' => 'welcome#faq' get '/contact' => 'welcome#contact', as: 'contact' diff --git a/db/migrate/20150922141008_create_carousels.rb b/db/migrate/20150922141008_create_carousels.rb new file mode 100644 index 0000000000000000000000000000000000000000..4e0e3bfa95e6d95a57b3691e5af9d560a6007063 --- /dev/null +++ b/db/migrate/20150922141008_create_carousels.rb @@ -0,0 +1,10 @@ +class CreateCarousels < ActiveRecord::Migration + def change + create_table :carousels do |t| + t.string :title + t.text :url + + t.timestamps null: false + end + end +end diff --git a/db/migrate/20150922141009_add_image_column_to_carousels.rb b/db/migrate/20150922141009_add_image_column_to_carousels.rb new file mode 100644 index 0000000000000000000000000000000000000000..704b097e49bb25c7fee7edba4d2369b8b59d9fcd --- /dev/null +++ b/db/migrate/20150922141009_add_image_column_to_carousels.rb @@ -0,0 +1,9 @@ +class AddImageColumnToCarousels < ActiveRecord::Migration + def up + add_attachment :carousels, :image + end + + def down + remove_attachment :carousels, :image + end +end diff --git a/lib/orient_db/methods/edge_methods.rb b/lib/orient_db/methods/edge_methods.rb index 0784e472dcadd44dd8f858ef478248aed7319e7c..0e5c8c448fe1059c3b09917ae569dd2c3d340731 100644 --- a/lib/orient_db/methods/edge_methods.rb +++ b/lib/orient_db/methods/edge_methods.rb @@ -13,6 +13,15 @@ module OrientDb connection.command "CREATE EDGE #{edge_class} FROM #{from_id} TO #{to_id}" end + def get_edges_end(edge_class, type, vertex_id) + connection.query sprintf("SELECT expand(%s('%s')) FROM %s", type, edge_class, vertex_id) + end + + def edge_exists?(edge_class, from_id, to_id) + edge = connection.query sprintf("SELECT outE('%s') FROM %s WHERE out('%s') CONTAINS %s", edge_class, from_id, edge_class, to_id) + !edge.empty? + end + end end end diff --git a/lib/orient_db/methods/generic_methods.rb b/lib/orient_db/methods/generic_methods.rb new file mode 100644 index 0000000000000000000000000000000000000000..fe39c0f59a86e6f4bd672ef4186c2dfc632feee6 --- /dev/null +++ b/lib/orient_db/methods/generic_methods.rb @@ -0,0 +1,15 @@ +module OrientDb + module Methods + module GenericMethods + + def get_by_rid(rid) + connection.get_document(rid) + end + + def select_by_property(from, prop_name, prop_value) + connection.query sprintf("SELECT FROM %s WHERE %s = '%s'", from, prop_name, prop_value) + end + + end + end +end \ No newline at end of file diff --git a/lib/search_engine/orientdb_lucene.rb b/lib/search_engine/orientdb_lucene.rb index 565a04963787ea9c8628e0aed87a490dd1256f42..672c05ee70050f873aa2742e6c7a6d0538cbe405 100644 --- a/lib/search_engine/orientdb_lucene.rb +++ b/lib/search_engine/orientdb_lucene.rb @@ -5,11 +5,5 @@ module SearchEngine learning_object_repository.search(qry) end - private - - def learning_object_repository - repository.for(:learning_object) - end - end end diff --git a/lib/tasks/mainPage.rake b/lib/tasks/mainPage.rake index 3f2ca563b1a1ba69ad6b3a6dfd63da927295759e..28340ebb86146c1bd67f767e7020207ff13a4607 100644 --- a/lib/tasks/mainPage.rake +++ b/lib/tasks/mainPage.rake @@ -4,15 +4,13 @@ namespace :mainPage do repository = Portalmec::Application.repository puts 'Generate the main page subject highlights' general_highlights = Array.new - subjects = repository.for(:subject).find_all + subjects = repository.for(:subject).all subjects.each do |subject| # select all the learning objects about that subject - objects = repository.for(:subject).get_objects(subject['@rid']) + objects = subject.learning_objects # transform the objects to RankingItem objects = objects.collect do |object| - downloads = 0 - object = repository.for(:learning_object).find(object['@rid']) - Ranking::Item.new(object.id,object.views.first["COUNT"],downloads,object.likes.first["COUNT"]) + Ranking::Item.new(object.id,object.views,object.downloads,object.likes) end # rank them rater = Ranking::Rater.new(Ranking::Strategies::BasicRater.new(0,1,100)) @@ -21,14 +19,14 @@ namespace :mainPage do (general_highlights << objects.take(5)).flatten! # add the object to the subject highlight - puts subject['name'] - repository.for(:subject).update(subject['@rid'],'set','highlights','[]') + puts subject.name + repository.for(:subject).update(subject.id,'set','highlights','[]') objects.each do |object| - repository.for(:subject).update(subject['@rid'],'add','highlights',object.name) + repository.for(:subject).update(subject.id,'add','highlights',object.name) end end puts 'Generating the main page highlights' - mainPage = repository.for(:mainPage).find_all.first + mainPage = repository.for(:mainPage).all.first rid = mainPage['@rid'] repository.for(:mainPage).update(rid,'set','highlights','[]') general_highlights.each do |general_highlight| diff --git a/lib/tasks/orientdb.rake b/lib/tasks/orientdb.rake index 504aa1f120363f4c7d471ca017e70808a053ad6f..3960b089c79d4eb241ba65c0995d26ddbc2e123c 100644 --- a/lib/tasks/orientdb.rake +++ b/lib/tasks/orientdb.rake @@ -8,4 +8,78 @@ namespace :orientdb do migrations.run end + task create_learning_object_relations: :environment do + desc "Create LearningObject relations based on its metadata" + + lo_repo = Portalmec::Application.repository.for(:learning_object) + subject_repo = Portalmec::Application.repository.for(:subject) + attr_repo = Portalmec::Application.repository.for(:attribute) + + # Quantity of LearningObjects fetched on each iteration + limit = 1000 + # Starting point from where LearningObjects will be fetched + offset = 0 + + loop do + p " --> importing LearningObjects from #{offset} to #{offset+limit}" + + begin + # Get LearningObjects from OrientDB (from offset to offset+limit) + learning_objects = lo_repo.all_from_offset_to_limit(offset,limit) + rescue + # Sleeps for a while to wait database's recovery + sleep(30.seconds) + # Goes to next iteration to retry + next + else + # Terminate loop if there are no more LearningObjects + break if learning_objects.empty? + + learning_objects.each do |lo| + metadata = get_unique_matadata_keys(lo) + subjects = metadata["dc.subject.category"] + subjects ||= [] + metadata.delete("dc.subject.category") + lo.subjects=[] + lo.attributes=[] + + subjects.each do |subject_name| + subject = subject_repo.find_by_name(subject_name) + if subject.nil? + subject = Subject.new(:name => subject_name) + subject_repo.create(subject) + end + lo.subjects << subject + end + + metadata.each do |key, value| + value.each do |v| + attribute = attr_repo.find_by_key_and_value(key,v).first + if attribute.nil? + attribute = Attribute.new(:key => key, :value => v) + attr_repo.create(attribute) + end + lo.attributes << attribute + end + end + + p lo_repo.create_relations(lo) + end + + offset += limit + end + end + + end + + def get_unique_matadata_keys(lo) + hash = {} + lo.metadata.each do |m| + unless hash.has_key?(m['key']) + hash[m['key']] = lo.get_metadata_values_of(m['key']) + end + end + hash + end + end \ No newline at end of file diff --git a/test/controllers/management/carousel_controller_test.rb b/test/controllers/management/carousel_controller_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..5ef47df22551ab99c7d5e8bfd325783d84fc806a --- /dev/null +++ b/test/controllers/management/carousel_controller_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class Management::CarouselControllerTest < ActionController::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/fixtures/carousels.yml b/test/fixtures/carousels.yml new file mode 100644 index 0000000000000000000000000000000000000000..874eb455b15023db983a48bf8a96c01aaa9acde1 --- /dev/null +++ b/test/fixtures/carousels.yml @@ -0,0 +1,9 @@ +# Read about fixtures at http://api.rubyonrails.org/classes/ActiveRecord/FixtureSet.html + +one: + title: MyString + url: MyText + +two: + title: MyString + url: MyText diff --git a/test/models/carousel_test.rb b/test/models/carousel_test.rb new file mode 100644 index 0000000000000000000000000000000000000000..26c20b1e122e221fdec4d8ab8789e1a060cbeb11 --- /dev/null +++ b/test/models/carousel_test.rb @@ -0,0 +1,7 @@ +require 'test_helper' + +class CarouselTest < ActiveSupport::TestCase + # test "the truth" do + # assert true + # end +end diff --git a/test/models/learning_object_test.rb b/test/models/learning_object_test.rb index 10d349407170226579f52f7a5395e55c37b82958..3c3932c319c6291c1023d103d84bf24a0ba765e7 100644 --- a/test/models/learning_object_test.rb +++ b/test/models/learning_object_test.rb @@ -2,7 +2,7 @@ require 'test_helper' class LearningObjectTest < ActiveSupport::TestCase should validate_presence_of(:name) - should validate_presence_of(:date_creation) + should validate_presence_of(:created_at) should validate_presence_of(:type) should validate_presence_of(:likes) should validate_presence_of(:views)