diff --git a/app/assets/stylesheets/questionnaire.css b/app/assets/stylesheets/questionnaire.css new file mode 100644 index 00000000..eab2710b --- /dev/null +++ b/app/assets/stylesheets/questionnaire.css @@ -0,0 +1,112 @@ +.o-question { + font-size: 15px; +} +.o-question input[type=checkbox], .o-question input[type=radio] { + margin: 0; +} +.o-question textarea { + resize: vertical; +} +.o-question-topic { + font-size: 2em; + line-height: normal; + margin: 0; + padding: 0.5em 0; +} +.o-question-description { + font-size: 0.9em; + line-height: 1.5em; +} +.o-question-list { + clear: both; + margin: 40px 0; + padding: 0; + font-weight: bold; +} +.o-question-list > li { + margin: 0 0 0 40px; + padding: 16px 0; + border-top: solid 1px #eee; +} +.o-question-list > li:first-child { + border: 0; +} +.o-question-title { + font-weight: bold; +} +.o-question-title + input[type=text], .o-question-title + textarea, .o-question-title + select { + display: block; +} +.o-question-title + input[type=text], .o-question-title + textarea { + border: solid 1px #ccc; + padding: 6px; + margin: 20px 0; + line-height: 24px; +} +.o-question-title + input[type=text] { + width: 40%; +} +.o-question-title + textarea { + width: 70%; +} +.o-question-group { + margin: 20px 0; + padding: 0; +} +.o-question-option { + font-weight: normal; +} +.o-question-group.view-list { + list-style: none; +} +.o-question-group.view-list .o-question-option {} +.o-question-group.view-list > li { + margin-top: 8px; +} +.o-question-group.view-list > li:first-child { + margin: 0; +} +.o-question-group.view-list > li > * { + display: inline-block; + margin: 0; + padding: 0; + vertical-align: middle; +} +.o-question-group.view-list > li input + .o-question-option { + margin: 0 0 0 12px; +} +.o-question-group.view-dropdown { + height: 24px; + line-height: 24px; +} +.o-question-group.view-grid { + border-collapse: collapse; + max-width: 90%; + min-width: 50%; +} +.o-question-group.view-grid th, .o-question-group.view-grid td { + padding: 6px; +} +.o-question-group.view-grid thead th {} +.o-question-group.view-grid tbody th {} +.o-question-group.view-grid tbody .odd .o-question-title, .o-question-group.view-grid tbody .odd td { + background-color: #f6f6f6; +} +.o-question-group.view-grid tbody .odd .o-question-title { + background-color: transparent; +} +.o-question-group.view-grid tbody .odd td {} +.o-question-group.view-grid tbody tr:hover td { + background-color: #aaa; +} +.o-question-group.view-grid tbody td { + vertical-align: middle; + text-align: center; +} +.o-question-group.view-grid tbody td input { + vertical-align: baseline; +} +.o-question-action { + padding: 20px; + background-color: #f6f6f6; +} \ No newline at end of file diff --git a/app/assets/stylesheets/standalone.css b/app/assets/stylesheets/standalone.css new file mode 100644 index 00000000..c35ff4e9 --- /dev/null +++ b/app/assets/stylesheets/standalone.css @@ -0,0 +1,52 @@ +@import url(http://fonts.googleapis.com/css?family=Open+Sans:400,700); +body { + margin: 0; + padding: 50px 0; + background-color: #eee; + font-family: 'Open Sans', sans-serif; +} + +.wrapper { + background-color: #FFFFFF; + box-shadow: 0 0 50px rgba(0, 0, 0, 0.1); + margin: 0 auto; + overflow: hidden; + width: 980px; +} + +.wrapper > h1 { + margin: 0; + padding: 20px; + font-family: 'Open Sans', sans-serif; + font-weight: bold; +} +section { + border-top: dashed 3px #eee; + padding: 40px; + overflow: hidden; +} +section:first-child { + border: 0; + padding-top: 0; +} +section > h2 { + font-size: 13px; + font-weight: bold; + border: solid 1px #ddd; + background-color: #2676C0; + color: #fff; + display: inline-block; + padding: 0 16px; + box-shadow: 0 1px 1px #fff, 0 2px 6px rgba(0,0,0,0.1); +} +.side { + float: right; + width: 189px; + padding-left: 20px; + border-left: solid 1px #eee; +} +.main { + float: left; + width: 710px; + padding-right: 20px; +} \ No newline at end of file diff --git a/app/views/layouts/standalone.html.erb b/app/views/layouts/standalone.html.erb new file mode 100644 index 00000000..faa592d9 --- /dev/null +++ b/app/views/layouts/standalone.html.erb @@ -0,0 +1,31 @@ + + + + + <%= page_title(@item).html_safe %> + "> + <%= page_metas(@item).html_safe %> + + <%= page_stylesheets(@item).html_safe %> + + <%= yield :page_stylesheets %> + <%= page_javascripts(@item).html_safe %> + <%= csrf_meta_tag %> + + +
+ <%= yield %> +
+ <% if flash[:error] %> + + + <% end -%> + + \ No newline at end of file diff --git a/config/routes.rb b/config/routes.rb index 2f084967..59c5e42b 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -288,11 +288,11 @@ Orbit::Application.routes.draw do match '/panel/:app_name/front_end/:app_action/:id(/:controller_action)' => 'pages#show_from_link', :constraints => lambda { |request| - !request.query_string.include?("inner=true") + !request.query_string.include?("inner=true") && !request.query_string.include?("standalone=true") } match '/panel/:app_name/front_end/:app_action' => 'pages#index_from_link', :constraints => lambda { |request| - !request.query_string.include?("inner=true") + !request.query_string.include?("inner=true") && !request.query_string.include?("standalone=true") } match '/share/:model/:id' => 'application#render_share' diff --git a/solr/conf/admin-extra.html b/solr/conf/admin-extra.html deleted file mode 100644 index aa739da8..00000000 --- a/solr/conf/admin-extra.html +++ /dev/null @@ -1,31 +0,0 @@ - - - diff --git a/solr/conf/elevate.xml b/solr/conf/elevate.xml deleted file mode 100644 index 7630ebe2..00000000 --- a/solr/conf/elevate.xml +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - - - - - - - - - - - - - diff --git a/solr/conf/mapping-ISOLatin1Accent.txt b/solr/conf/mapping-ISOLatin1Accent.txt deleted file mode 100644 index ede77425..00000000 --- a/solr/conf/mapping-ISOLatin1Accent.txt +++ /dev/null @@ -1,246 +0,0 @@ -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -# Syntax: -# "source" => "target" -# "source".length() > 0 (source cannot be empty.) -# "target".length() >= 0 (target can be empty.) - -# example: -# "À" => "A" -# "\u00C0" => "A" -# "\u00C0" => "\u0041" -# "ß" => "ss" -# "\t" => " " -# "\n" => "" - -# À => A -"\u00C0" => "A" - -# Á => A -"\u00C1" => "A" - -#  => A -"\u00C2" => "A" - -# à => A -"\u00C3" => "A" - -# Ä => A -"\u00C4" => "A" - -# Å => A -"\u00C5" => "A" - -# Æ => AE -"\u00C6" => "AE" - -# Ç => C -"\u00C7" => "C" - -# È => E -"\u00C8" => "E" - -# É => E -"\u00C9" => "E" - -# Ê => E -"\u00CA" => "E" - -# Ë => E -"\u00CB" => "E" - -# Ì => I -"\u00CC" => "I" - -# Í => I -"\u00CD" => "I" - -# Î => I -"\u00CE" => "I" - -# Ï => I -"\u00CF" => "I" - -# IJ => IJ -"\u0132" => "IJ" - -# Ð => D -"\u00D0" => "D" - -# Ñ => N -"\u00D1" => "N" - -# Ò => O -"\u00D2" => "O" - -# Ó => O -"\u00D3" => "O" - -# Ô => O -"\u00D4" => "O" - -# Õ => O -"\u00D5" => "O" - -# Ö => O -"\u00D6" => "O" - -# Ø => O -"\u00D8" => "O" - -# Œ => OE -"\u0152" => "OE" - -# Þ -"\u00DE" => "TH" - -# Ù => U -"\u00D9" => "U" - -# Ú => U -"\u00DA" => "U" - -# Û => U -"\u00DB" => "U" - -# Ü => U -"\u00DC" => "U" - -# Ý => Y -"\u00DD" => "Y" - -# Ÿ => Y -"\u0178" => "Y" - -# à => a -"\u00E0" => "a" - -# á => a -"\u00E1" => "a" - -# â => a -"\u00E2" => "a" - -# ã => a -"\u00E3" => "a" - -# ä => a -"\u00E4" => "a" - -# å => a -"\u00E5" => "a" - -# æ => ae -"\u00E6" => "ae" - -# ç => c -"\u00E7" => "c" - -# è => e -"\u00E8" => "e" - -# é => e -"\u00E9" => "e" - -# ê => e -"\u00EA" => "e" - -# ë => e -"\u00EB" => "e" - -# ì => i -"\u00EC" => "i" - -# í => i -"\u00ED" => "i" - -# î => i -"\u00EE" => "i" - -# ï => i -"\u00EF" => "i" - -# ij => ij -"\u0133" => "ij" - -# ð => d -"\u00F0" => "d" - -# ñ => n -"\u00F1" => "n" - -# ò => o -"\u00F2" => "o" - -# ó => o -"\u00F3" => "o" - -# ô => o -"\u00F4" => "o" - -# õ => o -"\u00F5" => "o" - -# ö => o -"\u00F6" => "o" - -# ø => o -"\u00F8" => "o" - -# œ => oe -"\u0153" => "oe" - -# ß => ss -"\u00DF" => "ss" - -# þ => th -"\u00FE" => "th" - -# ù => u -"\u00F9" => "u" - -# ú => u -"\u00FA" => "u" - -# û => u -"\u00FB" => "u" - -# ü => u -"\u00FC" => "u" - -# ý => y -"\u00FD" => "y" - -# ÿ => y -"\u00FF" => "y" - -# ff => ff -"\uFB00" => "ff" - -# fi => fi -"\uFB01" => "fi" - -# fl => fl -"\uFB02" => "fl" - -# ffi => ffi -"\uFB03" => "ffi" - -# ffl => ffl -"\uFB04" => "ffl" - -# ſt => ft -"\uFB05" => "ft" - -# st => st -"\uFB06" => "st" diff --git a/solr/conf/protwords.txt b/solr/conf/protwords.txt deleted file mode 100644 index 1dfc0abe..00000000 --- a/solr/conf/protwords.txt +++ /dev/null @@ -1,21 +0,0 @@ -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -#----------------------------------------------------------------------- -# Use a protected word file to protect against the stemmer reducing two -# unrelated words to the same base word. - -# Some non-words that normally won't be encountered, -# just to test that they won't be stemmed. -dontstems -zwhacky - diff --git a/solr/conf/schema.xml b/solr/conf/schema.xml deleted file mode 100644 index 17a751ad..00000000 --- a/solr/conf/schema.xml +++ /dev/null @@ -1,238 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - id - - text - - - - diff --git a/solr/conf/scripts.conf b/solr/conf/scripts.conf deleted file mode 100644 index f58b262a..00000000 --- a/solr/conf/scripts.conf +++ /dev/null @@ -1,24 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -user= -solr_hostname=localhost -solr_port=8983 -rsyncd_port=18983 -data_dir= -webapp_name=solr -master_host= -master_data_dir= -master_status_dir= diff --git a/solr/conf/solrconfig.xml b/solr/conf/solrconfig.xml deleted file mode 100644 index 65c19607..00000000 --- a/solr/conf/solrconfig.xml +++ /dev/null @@ -1,934 +0,0 @@ - - - - - - ${solr.abortOnConfigurationError:true} - - - - - - - - - - - - - ${solr.data.dir:./solr/data} - - - - false - 10 - - - - 32 - - 10000 - 1000 - 10000 - - - - - - - - native - - - - - - false - 32 - 10 - - - - - - false - - true - - - - - - 1 - - 0 - - - - false - - - - - - - - - - - - - - - - - 1024 - - - - - - - - - - true - - - - - 20 - - 200 - - - - - - - - - - - - solr rocks - 0 - 10 - - - static firstSearcher warming query from solrconfig.xml - - - - - false - - 2 - - - - - - - - - - - - - - - - - - explicit - - - - - - - - - - - dismax - explicit - 0.01 - - text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 manu^1.1 cat^1.4 - - - text^0.2 features^1.1 name^1.5 manu^1.4 manu_exact^1.9 - - - popularity^0.5 recip(price,1,1000,1000)^0.3 - - - id,name,price,score - - - 2<-1 5<-2 6<90% - - 100 - *:* - - text features name - - 0 - - name - regex - - - - - - - dismax - explicit - text^0.5 features^1.0 name^1.2 sku^1.5 id^10.0 - 2<-1 5<-2 6<90% - - incubationdate_dt:[* TO NOW/DAY-1MONTH]^2.2 - - - - inStock:true - - - - cat - manu_exact - price:[* TO 500] - price:[500 TO *] - - - - - - textSpell - - default - name - ./spellchecker - - - - - - - - - false - - false - - 1 - - - spellcheck - - - - - - - true - - - tvComponent - - - - - - - - default - - org.carrot2.clustering.lingo.LingoClusteringAlgorithm - - 20 - - - stc - org.carrot2.clustering.stc.STCClusteringAlgorithm - - - - - true - default - true - - name - id - - features - - true - - - - false - - - clusteringComponent - - - - - - - text - true - ignored_ - - true - links - ignored_ - - - - - - - true - - - termsComponent - - - - - - string - elevate.xml - - - - - explicit - - - elevator - - - - - - - - - - - - - - - - - - standard - solrpingquery - all - - - - - - explicit - - true - - - - - - - - 100 - - - - - - - 70 - - 0.5 - - [-\w ,/\n\"']{20,200} - - - - - - ]]> - ]]> - - - - - - - - - 5 - - - - - - solr - - - - - 1 - 2 - - - diff --git a/solr/conf/spellings.txt b/solr/conf/spellings.txt deleted file mode 100644 index d7ede6f5..00000000 --- a/solr/conf/spellings.txt +++ /dev/null @@ -1,2 +0,0 @@ -pizza -history \ No newline at end of file diff --git a/solr/conf/stopwords.txt b/solr/conf/stopwords.txt deleted file mode 100644 index b5824da3..00000000 --- a/solr/conf/stopwords.txt +++ /dev/null @@ -1,58 +0,0 @@ -# Licensed to the Apache Software Foundation (ASF) under one or more -# contributor license agreements. See the NOTICE file distributed with -# this work for additional information regarding copyright ownership. -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -#----------------------------------------------------------------------- -# a couple of test stopwords to test that the words are really being -# configured from this file: -stopworda -stopwordb - -#Standard english stop words taken from Lucene's StopAnalyzer -a -an -and -are -as -at -be -but -by -for -if -in -into -is -it -no -not -of -on -or -s -such -t -that -the -their -then -there -these -they -this -to -was -will -with - diff --git a/solr/conf/synonyms.txt b/solr/conf/synonyms.txt deleted file mode 100644 index b0e31cb7..00000000 --- a/solr/conf/synonyms.txt +++ /dev/null @@ -1,31 +0,0 @@ -# The ASF licenses this file to You under the Apache License, Version 2.0 -# (the "License"); you may not use this file except in compliance with -# the License. You may obtain a copy of the License at -# -# http://www.apache.org/licenses/LICENSE-2.0 -# -# Unless required by applicable law or agreed to in writing, software -# distributed under the License is distributed on an "AS IS" BASIS, -# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -# See the License for the specific language governing permissions and -# limitations under the License. - -#----------------------------------------------------------------------- -#some test synonym mappings unlikely to appear in real input text -aaa => aaaa -bbb => bbbb1 bbbb2 -ccc => cccc1,cccc2 -a\=>a => b\=>b -a\,a => b\,b -fooaaa,baraaa,bazaaa - -# Some synonym groups specific to this example -GB,gib,gigabyte,gigabytes -MB,mib,megabyte,megabytes -Television, Televisions, TV, TVs -#notice we use "gib" instead of "GiB" so any WordDelimiterFilter coming -#after us won't split it into two words. - -# Synonym mappings can be used for spelling correction too -pixima => pixma - diff --git a/vendor/built_in_modules/personal_journal/Gemfile.lock b/vendor/built_in_modules/personal_journal/Gemfile.lock deleted file mode 100644 index 70464db4..00000000 --- a/vendor/built_in_modules/personal_journal/Gemfile.lock +++ /dev/null @@ -1,99 +0,0 @@ -PATH - remote: . - specs: - personal_journal (0.0.1) - rails (~> 3.1.4) - -GEM - remote: http://rubygems.org/ - specs: - actionmailer (3.1.9) - actionpack (= 3.1.9) - mail (~> 2.3.3) - actionpack (3.1.9) - activemodel (= 3.1.9) - activesupport (= 3.1.9) - builder (~> 3.0.0) - erubis (~> 2.7.0) - i18n (~> 0.6) - rack (~> 1.3.6) - rack-cache (~> 1.2) - rack-mount (~> 0.8.2) - rack-test (~> 0.6.1) - sprockets (~> 2.0.4) - activemodel (3.1.9) - activesupport (= 3.1.9) - builder (~> 3.0.0) - i18n (~> 0.6) - activerecord (3.1.9) - activemodel (= 3.1.9) - activesupport (= 3.1.9) - arel (~> 2.2.3) - tzinfo (~> 0.3.29) - activeresource (3.1.9) - activemodel (= 3.1.9) - activesupport (= 3.1.9) - activesupport (3.1.9) - multi_json (>= 1.0, < 1.3) - arel (2.2.3) - builder (3.0.4) - erubis (2.7.0) - hike (1.2.1) - i18n (0.6.1) - jquery-rails (2.1.4) - railties (>= 3.0, < 5.0) - thor (>= 0.14, < 2.0) - json (1.7.6) - mail (2.3.3) - i18n (>= 0.4.0) - mime-types (~> 1.16) - treetop (~> 1.4.8) - mime-types (1.19) - multi_json (1.2.0) - polyglot (0.3.3) - rack (1.3.6) - rack-cache (1.2) - rack (>= 0.4) - rack-mount (0.8.3) - rack (>= 1.0.0) - rack-ssl (1.3.2) - rack - rack-test (0.6.2) - rack (>= 1.0) - rails (3.1.9) - actionmailer (= 3.1.9) - actionpack (= 3.1.9) - activerecord (= 3.1.9) - activeresource (= 3.1.9) - activesupport (= 3.1.9) - bundler (~> 1.0) - railties (= 3.1.9) - railties (3.1.9) - actionpack (= 3.1.9) - activesupport (= 3.1.9) - rack-ssl (~> 1.3.2) - rake (>= 0.8.7) - rdoc (~> 3.4) - thor (~> 0.14.6) - rake (10.0.3) - rdoc (3.12) - json (~> 1.4) - sprockets (2.0.4) - hike (~> 1.2) - rack (~> 1.0) - tilt (~> 1.1, != 1.3.0) - sqlite3 (1.3.6) - thor (0.14.6) - tilt (1.3.3) - treetop (1.4.12) - polyglot - polyglot (>= 0.3.1) - tzinfo (0.3.35) - -PLATFORMS - ruby - -DEPENDENCIES - jquery-rails - personal_journal! - sqlite3 diff --git a/vendor/built_in_modules/survey/app/controllers/panel/survey/back_end/surveys_controller.rb b/vendor/built_in_modules/survey/app/controllers/panel/survey/back_end/surveys_controller.rb index de3c1f84..d0286ab0 100644 --- a/vendor/built_in_modules/survey/app/controllers/panel/survey/back_end/surveys_controller.rb +++ b/vendor/built_in_modules/survey/app/controllers/panel/survey/back_end/surveys_controller.rb @@ -1,3 +1,5 @@ +require 'csv' + class Panel::Survey::BackEnd::SurveysController < OrbitBackendController include AdminHelper @@ -82,5 +84,84 @@ class Panel::Survey::BackEnd::SurveysController < OrbitBackendController end redirect_to panel_survey_back_end_surveys_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options]) end + + def export + @survey = ::Survey.find(params[:id]) + @survey_questions = @survey.survey_questions.all + + respond_to do |format| + format.csv do + + csv = CSV.generate do |csv| + csv << @survey_questions.map(&:title) + @survey.survey_answers.each do |answer| + row = [] + @survey_questions.each do |question| + row << answer[question.id.to_s] + end + csv << row + end + + end + + render :text => csv + end + end + end + + def chart + @survey = ::Survey.find(params[:id]) + @chart_data, @survey_questions, @survey_answers = @survey.generate_chart_data + end + + def set_answers + @survey = ::Survey.find(params[:id]) + end + + def jump + @survey = ::Survey.find(params[:id]) + @questions = @survey.survey_questions.all + + @jump_to_options = [[ t('survey.not_jump'), 0 ], [t('survey.jump_to_end'), 1]] + @jump_to_options += @questions.collect {|q| [ q.title, q.id.to_s ] } + end + + def duplicate_it + @survey = ::Survey.find(params[:id]) + + @new_survey = ::Survey.new + + @survey.attributes.each do |key, value| + unless ['_id', 'created_at', 'updated_at', 'update_user_id'].include? key + if @survey.respond_to?(key + '_translations') + @new_survey.send(key + '_translations=', value) + else + @new_survey.write_attribute(key, value) + end + end + end + @survey.survey_questions.all.each do |question| + new_question = @new_survey.survey_questions.new + question.attributes.each do |key, value| + unless ['_id', 'created_at', 'updated_at'].include? key + if @survey.respond_to?(key + '_translations') + new_question.send(key + '_translations=', value) + else + new_question.write_attribute(key, value) + end + end + end + end + + @new_survey.create_user_id = current_user.id + @new_survey.update_user_id = current_user.id + + @new_survey.save! + + respond_to do |format| + format.html { redirect_to(panel_survey_back_end_surveys_url) } + format.xml { render :xml => @survey, :status => :created, :location => @new_survey } + end + end end \ No newline at end of file diff --git a/vendor/built_in_modules/survey/app/controllers/panel/survey/front_end/surveys_controller.rb b/vendor/built_in_modules/survey/app/controllers/panel/survey/front_end/surveys_controller.rb index 80b03c5b..0cf5d848 100644 --- a/vendor/built_in_modules/survey/app/controllers/panel/survey/front_end/surveys_controller.rb +++ b/vendor/built_in_modules/survey/app/controllers/panel/survey/front_end/surveys_controller.rb @@ -1,4 +1,5 @@ class Panel::Survey::FrontEnd::SurveysController < OrbitWidgetController + helper ApplicationHelper def initialize super @@ -6,11 +7,18 @@ class Panel::Survey::FrontEnd::SurveysController < OrbitWidgetController end def index - end def show - @survey = ::Survey.find params[:id] + redirect_standalone panel_survey_front_end_survey_path(params[:id], :standalone => 'true') do + @survey = ::Survey.find params[:id] + @questions = @survey.survey_questions.all + if @survey.jump_mode + @jumpable_questions = @questions.all.select{ |q| q.jumpable? && q.can_set_jump? } + + @jump_tos_map = @jumpable_questions.map(&:get_jump_tos).inject(:merge) + end + end end def update @@ -20,7 +28,7 @@ class Panel::Survey::FrontEnd::SurveysController < OrbitWidgetController @answer_model = @survey.survey_answers.new @survey.survey_questions.each do |question| qid = question.id.to_s - if question.is_required && answer[qid].blank? + if question.is_required && answer[qid].blank? && !@survey.jump_mode #&& (! @survey.jump_mode || ( @survey.jump_mode && question.jumpable? ) ) @answer_model.errors.add question.title, t('survey_question.required_error') else case question.type @@ -65,7 +73,6 @@ class Panel::Survey::FrontEnd::SurveysController < OrbitWidgetController end end end - p @answer_model if @answer_model.errors.empty? @answer_model.save! render :answer_success @@ -75,4 +82,26 @@ class Panel::Survey::FrontEnd::SurveysController < OrbitWidgetController end end + def result + redirect_standalone result_panel_survey_front_end_survey_path(params[:id], :standalone => 'true') do + @survey = ::Survey.find params[:id] + case @survey.result_type + when ::Survey::ResultChart + @chart_data, @survey_questions, @survey_answers = @survey.generate_chart_data + end + end + end + + def redirect_standalone url + unless params[:standalone] == 'true' + @redirect_url = url + render :redirect_standalone + else + module_app = ModuleApp.first(:conditions => {:key => 'survey'}) + @item = Item.where(module_app_id: module_app.id, app_frontend_url: 'default_widget').first + yield + render :layout => 'standalone' + end + end + end \ No newline at end of file diff --git a/vendor/built_in_modules/survey/app/models/survey.rb b/vendor/built_in_modules/survey/app/models/survey.rb index 3706947c..2491a4b5 100644 --- a/vendor/built_in_modules/survey/app/models/survey.rb +++ b/vendor/built_in_modules/survey/app/models/survey.rb @@ -5,6 +5,10 @@ class Survey include Mongoid::Document include Mongoid::Timestamps + ResultChart = 0 + ResultExtern = 1 + ResultFile = 2 + scope :available_for_lang, ->(locale){ where("available_for_#{locale}".to_sym => true) } scope :can_display, where(is_hidden: false) @@ -18,6 +22,12 @@ class Survey field :deadline, :type => DateTime field :is_hidden, :type => Boolean, :default => false + + field :result_type, :type => Integer, :default => 0 + field :extern_link + mount_uploader :upload_file, AssetUploader + + field :jump_mode, :type => Boolean, :default => false validates :title, :at_least_one => true @@ -34,6 +44,43 @@ class Survey r end + def result + I18n.t 'survey.view_result' + end + + def generate_chart_data + survey_questions = self.survey_questions.all + survey_answers = self.survey_answers.all + + chart_data = {} + + survey_questions.each do |question| + qid = question.id.to_s + case question.type + when ::SurveyQuestion::Radio, ::SurveyQuestion::Select + chart_data[qid] = {} + answers = survey_answers.each do |answer| + if answer[qid] + chart_data[qid][answer[qid]] ||= 0 + chart_data[qid][answer[qid]] += 1 + end + end + when ::SurveyQuestion::Check + chart_data[qid] = {} + answers = survey_answers.each do |answer| + if answer[qid] + answer[qid].each do |option| + chart_data[qid][option] ||= 0 + chart_data[qid][option] += 1 + end + end + end + end + end + + [chart_data, survey_questions, survey_answers] + end + protected def check_deadline diff --git a/vendor/built_in_modules/survey/app/models/survey_question.rb b/vendor/built_in_modules/survey/app/models/survey_question.rb index 9d1e3155..c482a48a 100644 --- a/vendor/built_in_modules/survey/app/models/survey_question.rb +++ b/vendor/built_in_modules/survey/app/models/survey_question.rb @@ -24,4 +24,22 @@ class SurveyQuestion accepts_nested_attributes_for :survey_question_options, :allow_destroy => true accepts_nested_attributes_for :survey_question_radiogroups, :allow_destroy => true + + def jumpable? + case type + when SurveyQuestion::Radio, SurveyQuestion::Select + true + else + false + end + end + + def can_set_jump? + ( !custom_option ) + end + + def get_jump_tos + Hash[survey_question_options.select{ |o| !o.jump_to.blank? }.collect{ |o| [o.id.to_s, o.jump_to] }] + end + end diff --git a/vendor/built_in_modules/survey/app/models/survey_question_oneline.rb b/vendor/built_in_modules/survey/app/models/survey_question_oneline.rb new file mode 100644 index 00000000..4b5dab3c --- /dev/null +++ b/vendor/built_in_modules/survey/app/models/survey_question_oneline.rb @@ -0,0 +1,3 @@ +class SurveyQuestionOneline < SurveyQuestion + +end \ No newline at end of file diff --git a/vendor/built_in_modules/survey/app/models/survey_question_option.rb b/vendor/built_in_modules/survey/app/models/survey_question_option.rb index 22dfd0f5..c6cc2ba5 100644 --- a/vendor/built_in_modules/survey/app/models/survey_question_option.rb +++ b/vendor/built_in_modules/survey/app/models/survey_question_option.rb @@ -2,6 +2,7 @@ class SurveyQuestionOption include Mongoid::Document field :name, :localize => true + field :jump_to, :default => 0 embedded_in :survey_question end \ No newline at end of file diff --git a/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/_form_survey_question.html.erb b/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/_form_survey_question.html.erb index 4163991e..9cfb1b67 100644 --- a/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/_form_survey_question.html.erb +++ b/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/_form_survey_question.html.erb @@ -111,7 +111,7 @@ -
+
<%= f.label :custom_option, t('survey_question.custom_option')%> <%= f.check_box :custom_option %>
diff --git a/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/_survey.html.erb b/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/_survey.html.erb index eeaa50ea..09dde95a 100644 --- a/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/_survey.html.erb +++ b/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/_survey.html.erb @@ -10,7 +10,12 @@ diff --git a/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/chart.html.erb b/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/chart.html.erb new file mode 100644 index 00000000..6356b183 --- /dev/null +++ b/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/chart.html.erb @@ -0,0 +1,40 @@ +

<%= @survey.title %> <%= t('survey.chart') %>

+ +<% @survey_questions.each do |question| %> + +

<%= question.title %>

+ <% case question.type %> + <% when ::SurveyQuestion::Radio, ::SurveyQuestion::Check, ::SurveyQuestion::Select %> +
+ <% else %> +

<%= t('survey_question.have_not_chart') %>

+ <% end %> + +<% end %> + +
+ <%= link_to t('back'), get_go_back, :class=>"btn" %> +
+ +<% content_for :page_specific_javascript do %> + + +<% end %> \ No newline at end of file diff --git a/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/jump.html.erb b/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/jump.html.erb new file mode 100644 index 00000000..a56c4c1e --- /dev/null +++ b/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/jump.html.erb @@ -0,0 +1,56 @@ +

<%= @survey.title %> <%= t('survey.jump') %>

+ +<%= form_for @survey, :url => panel_survey_back_end_survey_path(@survey), :html => {:class => 'clear'} do |f| %> +
+
+
+ <%= f.label :jump_mode, t('survey.jump_mode')%> + <%= f.check_box :jump_mode %> +
+ + <% @questions.each_with_index do |question, i| %> + + <%= f.fields_for :survey_questions, question do |f| %> + +
" class="survey_question_item clear"> +
+

<%= question.title %>

+
+ <% if question.jumpable? %> + <% if question.can_set_jump? %> +
    + <% question.survey_question_options.each_with_index do |option, i| %> + + <%= f.fields_for :survey_question_options, option do |f| %> + +
  1. + <%= f.label :survey_question_options, option.name %> + <%= f.select :jump_to, @jump_to_options %> +
  2. + + <% end %> + + <% end %> +
+ <% else %> + <%= t('survey.right_type_cant_jump') %> + <% end %> + <% else %> + <%= t('survey.wrong_type_cant_jump') %> + <% end %> +
+
+
+ + <% end %> + + <% end %> + +
+ <%= hidden_field_tag 'page', params[:page] if !params[:page].blank? %> + <%= f.submit t('submit'), :class=>'btn btn-primary' %> + <%= link_to t('cancel'), get_go_back, :class=>"btn" %> +
+
+
+<% end %> \ No newline at end of file diff --git a/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/set_answers.html.erb b/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/set_answers.html.erb new file mode 100644 index 00000000..99c45fde --- /dev/null +++ b/vendor/built_in_modules/survey/app/views/panel/survey/back_end/surveys/set_answers.html.erb @@ -0,0 +1,34 @@ +

<%= @survey.title %> <%= t('survey.set_answers') %>

+ +<%= form_for @survey, :url => panel_survey_back_end_survey_path(@survey), :html => {:class => 'clear'} do |f| %> +
+
+
+ <%= f.label :result_type, t('survey.result_type')%> + <%= f.select :result_type, { + t('survey.chart') => Survey::ResultChart, + t('survey.extern_link') => Survey::ResultExtern, + t('survey.upload_file') => Survey::ResultFile + }, {}, :class => "tinput-medium" %> +
+ +
+ <%= f.label :upload_file, t('survey.upload_file') %> + <%= f.file_field :upload_file %> + <% if @survey.upload_file? %> + <%= link_to t(:view), @survey.upload_file.url, {:class => 'for_preview btn', :target => '_blank', :title => t(:view), "data-trigger" => :hover} %> + <%= f.label :remove_upload_file, t('survey.remove_upload_file')%> + <%= f.check_box :remove_upload_file %> + <% end %> +
+
+ <%= hidden_field_tag 'page', params[:page] if !params[:page].blank? %> + <%= f.submit t('submit'), :class=>'btn btn-primary' %> + <%= link_to t('cancel'), get_go_back, :class=>"btn" %> +
+
+
+<% end %> \ No newline at end of file diff --git a/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/answer_error.html.erb b/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/answer_error.html.erb index 67e73a44..0e5cff46 100644 --- a/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/answer_error.html.erb +++ b/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/answer_error.html.erb @@ -1,4 +1,4 @@ \ No newline at end of file diff --git a/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/redirect_standalone.html.erb b/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/redirect_standalone.html.erb new file mode 100644 index 00000000..de9b2f49 --- /dev/null +++ b/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/redirect_standalone.html.erb @@ -0,0 +1,3 @@ + \ No newline at end of file diff --git a/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/result.html.erb b/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/result.html.erb new file mode 100644 index 00000000..b0aefc2f --- /dev/null +++ b/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/result.html.erb @@ -0,0 +1,49 @@ +<% case @survey.result_type %> +<% when ::Survey::ResultChart %> + +

<%= @survey.title %> <%= t('survey.chart') %>

+
+ <% @survey_questions.each do |question| %> + + <% case question.type %> + <% when ::SurveyQuestion::Radio, ::SurveyQuestion::Check, ::SurveyQuestion::Select %> +
+ <% end %> + + <% end %> +
+ + + +<% when ::Survey::ResultExtern %> + +<% when ::Survey::ResultFile %> +

<%= @survey.title %> <%= t('survey.upload_file') %>

+
+ <%= link_to t(:view), @survey.upload_file.url, {:class => 'for_preview btn', :target => '_blank', :title => t(:view), "data-trigger" => :hover} %> +
+<% end %> \ No newline at end of file diff --git a/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/show.html.erb b/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/show.html.erb index 2e4cca6c..e2126998 100644 --- a/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/show.html.erb +++ b/vendor/built_in_modules/survey/app/views/panel/survey/front_end/surveys/show.html.erb @@ -1,87 +1,157 @@ <% # encoding: utf-8 %> -

<%= @survey.title %>

-<%= form_for :answer, :method => :put, :url => panel_survey_front_end_survey_path(@survey, :inner => true), :html => {:class => 'clear'} do |f| %> - <% @survey.survey_questions.each do |question| %> - <% label = question.title %> - <% label += ' (' + t('survey_question.required') + ')' if question.is_required %> - <%= f.label question.id, label %> -

<%= question.description %>

- <% case question.type %> - <% when ::SurveyQuestion::Oneline %> - <%= f.text_field question.id, :required => question.is_required %> - <% when ::SurveyQuestion::Multiline %> - <%= f.text_area question.id, :rows => 5, :required => question.is_required %> - <% when ::SurveyQuestion::Radio %> - <% question.survey_question_options.each do |option| %> -

- <%= f.radio_button question.id, option.id %> - <%= f.label "#{question.id}_#{option.id}", option.name, :style => "display:inline" %> -

- <% end %> - <% if question.custom_option %> -

- <%= f.radio_button question.id, 'custom_option' %> - <%= f.label "#{question.id}_custom_option", t('survey_question.use_custom_option') + ': ', :style => "display:inline" %> - <%= f.text_field "#{question.id}_custom_option" %> -

- <% end %> - <% when ::SurveyQuestion::Check %> - <%= f.fields_for "#{question.id}" do |cf| %> - <% question.survey_question_options.each do |option| %> -

- <%= cf.check_box option.id %> - <%= cf.label option.id, option.name, :style => "display:inline" %> -

- <% end %> - <% if question.custom_option %> -

- <%= cf.check_box 'custom_option' %> - <%= f.label "#{question.id}_custom_option", t('survey_question.use_custom_option') + ': ', :style => "display:inline" %> - <%= f.text_field "#{question.id}_custom_option" %> -

- <% end %> - <% end %> - <% when ::SurveyQuestion::Select %> - <% options = question.survey_question_options.collect {|o| [ o.name, o.id ] } %> - <% if question.custom_option %> - <% options.push [t('survey_question.use_custom_option'), 'custom_option'] %> - <% end %> - <%= f.select question.id, options %> - <% if question.custom_option %> - <%= f.text_field "#{question.id}_custom_option" %> - <% end %> - <% when ::SurveyQuestion::Radiogroup %> - <%= f.fields_for "#{question.id}" do |rgf| %> - - - - - <% question.survey_question_radiogroups.each do |radiogroup| %> - - <% end %> - - - - <% question.survey_question_options.each do |option| %> - - - <% question.survey_question_radiogroups.each do |radiogroup| %> - +

<%= @survey.title %>

+
+
+
+ <%= form_for :answer, :method => :put, :url => panel_survey_front_end_survey_path(@survey, :inner => true), :html => {:class => 'clear'} do |f| %> +
+ <%= @survey.description %> +
+
    + <% @questions.each_with_index do |question, i| %> +
  1. + <% label = question.title %> + <% label += ' (' + t('survey_question.required') + ')' if question.is_required %> + <%= f.label question.id, label, :class => "o-question-title" %> +
    + <%= question.description %> +
    + <% case question.type %> + <% when ::SurveyQuestion::Oneline %> + <%= f.text_field question.id, :required => question.is_required %> + <% when ::SurveyQuestion::Multiline %> + <%= f.text_area question.id, :rows => 5, :required => question.is_required %> + <% when ::SurveyQuestion::Radio %> + <% question.survey_question_options.each do |option| %> +

    + <%= f.radio_button question.id, option.id %> + <%= f.label "#{question.id}_#{option.id}", option.name, :style => "display:inline" %> +

    <% end %> -
- <% end %> - -
- <%= rgf.label radiogroup.id, radiogroup.name %> -
- <%= rgf.label option.id, option.name %> - - <%= rgf.radio_button option.id, radiogroup.id %> -
+ <% if question.custom_option %> +

+ <%= f.radio_button question.id, 'custom_option' %> + <%= f.label "#{question.id}_custom_option", t('survey_question.use_custom_option') + ': ', :style => "display:inline" %> + <%= f.text_field "#{question.id}_custom_option" %> +

+ <% end %> + <% when ::SurveyQuestion::Check %> + <%= f.fields_for "#{question.id}" do |cf| %> + <% question.survey_question_options.each do |option| %> +

+ <%= cf.check_box option.id %> + <%= cf.label option.id, option.name, :style => "display:inline" %> +

+ <% end %> + <% if question.custom_option %> +

+ <%= cf.check_box 'custom_option' %> + <%= f.label "#{question.id}_custom_option", t('survey_question.use_custom_option') + ': ', :style => "display:inline" %> + <%= f.text_field "#{question.id}_custom_option" %> +

+ <% end %> + <% end %> + <% when ::SurveyQuestion::Select %> + <% options = question.survey_question_options.collect {|o| [ o.name, o.id ] } %> + <% if question.custom_option %> + <% options.push [t('survey_question.use_custom_option'), 'custom_option'] %> + <% end %> + <%= f.select question.id, options %> + <% if question.custom_option %> + <%= f.text_field "#{question.id}_custom_option", :class => 'custom_option' %> + <% end %> + <% when ::SurveyQuestion::Radiogroup %> + <%= f.fields_for "#{question.id}" do |rgf| %> + + + + + <% question.survey_question_radiogroups.each do |radiogroup| %> + + <% end %> + + + + <% question.survey_question_options.each_with_index do |option, j| %> + > + + <% question.survey_question_radiogroups.each do |radiogroup| %> + + <% end %> + + <% end %> + +
+ <%= radiogroup.name %> +
+ <%= option.name %> + + <%= rgf.radio_button option.id, radiogroup.id %> +
+ <% end %> + <% end %> + + <% end %> + +
+ <%= f.submit t('submit'), :class => 'survey-submit' %> +
<% end %> - <% end %> - <% end %> -

- <%= f.submit t('submit') %> -

-<% end %> \ No newline at end of file +
+ + +<% content_for :page_stylesheets do %> + +<% end %> + \ No newline at end of file diff --git a/vendor/built_in_modules/survey/config/locales/en.yml b/vendor/built_in_modules/survey/config/locales/en.yml index d2ce8eb7..440af263 100644 --- a/vendor/built_in_modules/survey/config/locales/en.yml +++ b/vendor/built_in_modules/survey/config/locales/en.yml @@ -7,11 +7,63 @@ en: postdate: Start Date deadline: End Date no_postdate: No Start Date - no_deadline: No Start Date + no_deadline: No End Date results_count: Results Count update_user: Update User question: Question + result_type: Result Type (Frontend) + extern_link: Extern Link + upload_file: Uploaded File + + remove_upload_file: Remove Uploaded File + + answer_success: Successfully answered,jump back now + answer_error: Unsuccessful answer + + answers_list: Answers List + export_csv: Export CSV + chart: Chart + set_answers: Set Answers + duplicate_it: Duplicate It + + view_result: View Result + + jump: Jump-To + jump_mode: Jump-To Mode + wrong_type_cant_jump: Only radio or select can set jump-to + right_type_cant_jump: Custom option allowed can't set jump-to + not_jump: Not Jump + jump_to_end: End of Survey + + must_answer: Must be Answered + + default_widget: + title: Title + time_range: Date Range + result: Result + + frontend: + survey: Survey Frontend + survey_question: title: Question - description: Description \ No newline at end of file + description: Description + type: Type + is_required: Is Required + required: Required + required_error: Can't not be empty + oneline: Oneline + multiline: Multi-line + radio: Radio + check: Check + select: Select + radiogroup: Radio Group + options_lists: Options List + radiogroup_label: Radio Group Label + radiogroups_lists: Radio Groups List + option: Option + custom_option: Allow Custom Option + use_custom_option: Other + + have_not_chart: This type of question havn't chart \ No newline at end of file diff --git a/vendor/built_in_modules/survey/config/locales/zh_tw.yml b/vendor/built_in_modules/survey/config/locales/zh_tw.yml index f099acb1..9e691286 100644 --- a/vendor/built_in_modules/survey/config/locales/zh_tw.yml +++ b/vendor/built_in_modules/survey/config/locales/zh_tw.yml @@ -13,14 +13,36 @@ zh_tw: update_user: 最後更新者 question: 問題 + result_type: 前端結果表示方式 + extern_link: 外部連結 + upload_file: 結果文件 + + remove_upload_file: 移除存在的結果文件 + answer_success: 問卷填寫成功,現在跳回 answer_error: 問卷填寫錯誤 - answers: 結果 + answers_list: 結果清單 + export_csv: 匯出CSV + chart: 結果圖表 + set_answers: 設定結果 + duplicate_it: 複製問卷 + + view_result: 查看結果 + + jump: 跳題 + jump_mode: 設爲跳題方式回答 + wrong_type_cant_jump: 不是單選或下拉無法使用跳題 + right_type_cant_jump: 允許自定回答的問題無法使用跳題 + not_jump: 依據試卷列出所有問題數 + jump_to_end: 結束問題 + + must_answer: 必須回答這個問題 default_widget: title: 問卷標題 time_range: 問卷期間 + result: 結果 frontend: survey: 問卷調查前台 @@ -44,3 +66,5 @@ zh_tw: option: 選項 custom_option: 允許自定回答選項 use_custom_option: 其他 + + have_not_chart: 此種類型問題不含結果圖表 diff --git a/vendor/built_in_modules/survey/config/routes.rb b/vendor/built_in_modules/survey/config/routes.rb index aeae5f5b..fa9b1168 100644 --- a/vendor/built_in_modules/survey/config/routes.rb +++ b/vendor/built_in_modules/survey/config/routes.rb @@ -7,6 +7,13 @@ Rails.application.routes.draw do collection do get 'delete' end + member do + get 'export' + get 'chart' + get 'set_answers' + get 'jump' + get 'duplicate_it' + end resources :answers, :controller => :surveys_answers do collection do get 'delete' @@ -15,7 +22,11 @@ Rails.application.routes.draw do end end namespace :front_end do - resources :surveys + resources :surveys do + member do + get 'result' + end + end end end end diff --git a/vendor/built_in_modules/survey/init.rb b/vendor/built_in_modules/survey/init.rb index f1c3deb7..6ba276d4 100644 --- a/vendor/built_in_modules/survey/init.rb +++ b/vendor/built_in_modules/survey/init.rb @@ -22,9 +22,10 @@ module Faq default_widget do enable ["typeA"] query 'Survey.any_of( {deadline: nil,:postdate.lte => Time.now} , {:deadline.gte => Time.now, :postdate.lte => Time.now} )' - link_field :title,{:method => 'panel_survey_front_end_survey_path',:args=>:self} + link_field :title, {:method => 'panel_survey_front_end_survey_path',:args=>:self} + link_field :result, {:method => 'result_panel_survey_front_end_survey_path', :args=>:self} field :time_range - link_to_more 'panel_survey_front_end_survey_path',:title_i18n=> 'faq.default_widget.to_more' + link_to_more 'panel_survey_front_end_survey_path', :title_i18n=> 'faq.default_widget.to_more' end end