Compare commits

..
Author SHA1 Message Date
Bernie Chiu 40b9448a0e Merge branch '1017_ntu_ga_rss' of https://github.com/Rulingcom/orbit into 1017_ntu_ga_rss 2013-11-22 17:42:51 +08:00
Bernie Chiu 849cfa2076 Subscribe selection fix 2013-11-22 17:42:11 +08:00
thomaschen 3cce5ef8e5 Merge branch '1017_ntu_ga_rss' of https://github.com/Rulingcom/orbit into 1017_ntu_ga_rss 2013-11-22 17:21:18 +08:00
thomaschen 813fbc64cd fix lib: can fetch rss feed from selected categories 2013-11-22 17:20:39 +08:00
Bernie Chiu d07b8f4c09 Add Dynamic selection 2013-11-22 17:18:04 +08:00
thomaschen 9d3ee5b963 fix checkbox naming 2013-11-22 16:06:08 +08:00
thomaschen a93cb71d86 add feed category mutilple checkbox 2013-11-22 15:49:45 +08:00
thomaschen 9de2778869 fix layout in english version & delete useless routes 2013-11-22 14:25:18 +08:00
Bernie Chiu cb78427866 Add category selection for subscription 2013-11-20 17:01:51 +08:00
Bernie Chiu 9933db4fb5 Modify layout 2013-11-20 15:16:48 +08:00
thomaschen 3445cb8e69 create a hash rss site list from mongodb 2013-11-18 17:38:11 +08:00
thomaschen c807d8a290 delete unuse lib file 2013-11-15 17:25:01 +08:00
thomaschen 2677e0a6a5 fix name 2013-11-15 17:23:06 +08:00
thomaschen 2663b6f45f dynamic rss sites from AnnouncementFeed 2013-11-15 17:15:27 +08:00
thomaschen e6b10fbfbd add feed module(ntu_ga announcement rss feed module) 2013-11-15 16:34:37 +08:00
Bernie Chiu d73f1ac565 Fix resque scheduler errror 2013-11-13 15:38:09 +08:00
Bernie Chiu e6257a95a4 Fix model field naming 2013-11-13 15:05:25 +08:00
Bernie Chiu 4666057748 Add RSS source link and site info 2013-11-13 15:03:03 +08:00
Bernie Chiu d10b647661 Add resque job for NTU GA Announcemnet feed 2013-11-12 17:35:54 +08:00
Bernie Chiu 22b95d4b22 Fix ntu_ga sites aggregate 2013-11-12 15:09:57 +08:00
Bernie Chiu 6d6650042e Add script for NTU GA for grabbing all the bulletins 2013-11-08 17:42:48 +08:00
thomaschen b68a413574 add front-end announcement feed controller(testing) 2013-11-08 12:20:55 +08:00
Spen d1fd2b6984 fix app sub manager and ask verification code 2013-11-07 18:06:16 +08:00
Spen 8f25dc2871 fix ntu ga survey export 2013-11-04 10:00:54 +08:00
thomaschen 82988a2029 Fix front-end tag cloud search under category filters 2013-11-01 16:22:08 +08:00
thomaschen e5fccb33bf Fix tag cloud search under category filters 2013-11-01 15:38:49 +08:00
thomaschen d832f4c4b1 can read the spreadsheet each row.(need to think of a method to parse each row to figure)
Conflicts:

	Gemfile
	vendor/built_in_modules/survey/app/controllers/panel/survey/back_end/surveys_controller.rb
2013-10-25 18:36:32 +08:00
thomaschen 59af75e50a fix error 2013-10-25 18:21:17 +08:00
Bernie Chiu 67cd34ab27 Add oneline and multiline import 2013-10-25 18:21:17 +08:00
thomaschen 4a736cc92c error fix 2013-10-25 18:21:17 +08:00
Bernie Chiu 9b96f2eeb0 Merge
Conflicts:

	vendor/built_in_modules/survey/app/controllers/panel/survey/back_end/surveys_controller.rb
2013-10-25 18:21:07 +08:00
Bernie Chiu 74b89f1fac Allow update answers on radio groups
Conflicts:

	vendor/built_in_modules/survey/app/controllers/panel/survey/back_end/surveys_controller.rb
2013-10-25 18:09:55 +08:00
thomaschen 62e9acdbb8 fix error 2013-10-25 18:05:37 +08:00
thomaschen 4a897b68cf merge 2013-10-25 18:05:37 +08:00
Bernie Chiu d3fc6e5956 Add import on radiogroups on file change 2013-10-25 18:05:37 +08:00
Bernie Chiu 71acee200c Fix encoding issue and add import on title change 2013-10-25 18:05:37 +08:00
thomaschen 63156c7a95 remove unuse variable and comment 2013-10-25 18:05:37 +08:00
thomaschen 5156701094 import 'check' and 'select' question success 2013-10-25 18:05:37 +08:00
thomaschen 1266cd1384 fix import-csv column error 2013-10-25 18:05:37 +08:00
thomaschen f3f4dc842c import radio question success
Conflicts:

	Gemfile
	vendor/built_in_modules/survey/app/controllers/panel/survey/back_end/surveys_controller.rb
2013-10-25 17:56:49 +08:00
Spen 13144f62fb add ntu_ga survey init sorting 2013-10-18 18:17:05 +08:00
Bernie Chiu 6d951f8d9c Add correct department links 2013-10-18 16:20:13 +08:00
Bernie Chiu d0364c788b Fix locale error 2013-10-17 18:23:33 +08:00
Bernie Chiu e2ec8f134e Add routing and links for import 2013-10-17 18:23:17 +08:00
Bernie Chiu 83a8433e52 Fix survey title link redirection after deadline 2013-10-17 18:22:54 +08:00
thomaschen 8f65da0a04 fix js hide localsite error 2013-10-17 18:22:41 +08:00
thomaschen ad8bb72b07 fix uri parse problem 2013-10-17 18:22:11 +08:00
Manson Wang 06a8b9073e Merge branch '0913_ntu_ga_co' of github.com:Rulingcom/orbit into 0913_ntu_ga 2013-10-17 18:21:41 +08:00
Spen f9485c1f86 announcement init sorting fix
Conflicts:

	vendor/built_in_modules/announcement/init.rb
2013-10-11 18:00:39 +08:00
133 changed files with 687 additions and 2049 deletions

No files matched your search

+9 -1
View File
@@ -2,6 +2,14 @@
* {
outline: none;
}
@font-face{
font-family: 'WebSymbolsRegular';
src: url(<%= asset_path 'websymbols-regular-webfont.eot' %>);
src: url(<%= asset_path 'websymbols-regular-webfont.eot?#iefix' %>) format('embedded-opentype'),
url(<%= asset_path 'websymbols-regular-webfont.woff' %>) format('woff'),
url(<%= asset_path 'websymbols-regular-webfont.ttf' %>) format('truetype'),
url(<%= asset_path 'websymbols-regular-webfont.svg#WebSymbolsRegular' %>) format('svg');
}
.login-logo {
text-indent: -9999px;
background: url(<%= asset_path 'sign-in-logo.png' %>) no-repeat center 40px;
@@ -706,4 +714,4 @@
#category_id, #module_app_id {
width: auto;
}
}
@@ -21,6 +21,8 @@ class SamlLoginsController < ApplicationController
@main_public_key = LIST[:sites][@wctx]['key']
@doc = REXML::Document.new @wresult
@main_public_key = "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzKawlFWAMzA/uV/kcewd\nmtj8PcqxosmnSh7ZzJ0DumG2ieeP9oDBicqbqIEaeJVvrRzYJD2a+u8x5KKMKB8J\nHbMUpCBFlIpkDMjU/oZVMcYT9pcH51QWNvCgHG7prVykSGFz1JRvjSP6cwuZKBFd\nFFneOViETqoMIO1DbRLXsGfPvMOJY9C1xDwv1dLv0Wbj7M9N6eNz06a50bu3I4gl\nMumxWnZUabXL3G62S/Si4NM7J2jOUnkEOxJWOhcAX/iiqS9T8AHu84um2+mLQpfB\nJJFFIWCIAtU78VnIN5JSWwjFU5TsiSyCFYpGXKxUFD25cFmt3SfG0gwmrFis5Pdn\nhwIDAQAB\n-----END PUBLIC KEY-----\n"
public_key = OpenSSL::PKey::RSA.new(@main_public_key)
encrypted_data = public_key.public_encrypt(@doc.elements["//saml:AttributeValue"].text)
@@ -0,0 +1,7 @@
class GetAnnouncementFromNtuGaRss
@queue = :high
def self.perform()
%x(ruby "#{Rails.root}/vendor/built_in_modules/announcement/lib/rss_ntu_ga_aggregate.rb")
end
end
-2
View File
@@ -5,5 +5,3 @@
# Mime::Type.register_alias "text/html", :iphone
Mime::Type.register_alias "text/html", :mobile
Mime::Type.register 'application/vnd.ms-excel',:xls
-45
View File
@@ -79,48 +79,3 @@ default_widget_style:
- style3
- style4
- style5
sites:
www:
url: www.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3fDAM40XvEiM5oG7YbA\nKnhc5Dyv/ZhVDzyrg95QB0ylBPtSs6g5xgkSSQMnIpAUCzdVIMrUd/A6DuH6f+T5\nccshgh3aDj3wISfgYZc9e7WY1csOItq9lOr6YG4HEABSyjVCcX/RrB8kCuuIGcvR\nRnvu/4fFb93vsVYHwGuivTYRJ+8VM8fOtIFCvbCxZsFj6r5cMl4qI4g4vaIn3xf2\ndXUCICebvdIBfMAdW29yaCScEap1oawEfdXtKCD5vYvAaRZ85jLY/FV5dYhbe1dz\n9G7+B1HI7VBm5bKV0MI1ZH2MTRczaqjLGf6ZF0FbMmcMYLx8iEGL1z0/hgOTcNT6\nrQIDAQAB\n-----END PUBLIC KEY-----\n"
ga:
url: www.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAx3fDAM40XvEiM5oG7YbA\nKnhc5Dyv/ZhVDzyrg95QB0ylBPtSs6g5xgkSSQMnIpAUCzdVIMrUd/A6DuH6f+T5\nccshgh3aDj3wISfgYZc9e7WY1csOItq9lOr6YG4HEABSyjVCcX/RrB8kCuuIGcvR\nRnvu/4fFb93vsVYHwGuivTYRJ+8VM8fOtIFCvbCxZsFj6r5cMl4qI4g4vaIn3xf2\ndXUCICebvdIBfMAdW29yaCScEap1oawEfdXtKCD5vYvAaRZ85jLY/FV5dYhbe1dz\n9G7+B1HI7VBm5bKV0MI1ZH2MTRczaqjLGf6ZF0FbMmcMYLx8iEGL1z0/hgOTcNT6\nrQIDAQAB\n-----END PUBLIC KEY-----\n"
doc:
url: doc.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4aE7R0/49UBf5v4rbNiA\nnaXjPZ9rio9fjkaAZeow62yaZtoGurqf44BVj/cjQVUmLnMU4WDcZMI0osLa15+H\ndXSGCP8Upmvi+eA2UqhhBZts1IQ33rPMAjePAbpSGbNRxous0VpH7cc9BxMffQwh\nsygcbghUCEE3dVWdTFGokvgxkBzaKKTNbiqhmbuc8QIuzOvFFGkZHgqlxFHcaNYZ\n7KZJxqvuKSXsJcxIsQKzDiAPI11J3zgRdIf/CFVQv5g15gl1ieQgFdGc3jplsBcd\nrdLApPZ39+BWr9a/Gj9lgP6Ll5G/cM4Uq18a7TCWJIC9PNGw8bBDJTjnUEqmOu3R\nZQIDAQAB\n-----END PUBLIC KEY-----\n"
cashier:
url: cashier.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA9wliL8gFsRn0DVZusd2h\nSoj6aQWkKq1UU6fj3vzcrb1adMy8RnKogTW6z1W9wxrcrI/GfyRz9Wop0+9+XNYx\nDH+QQ+/1po/O/MkPBGZ6WxXpH2BSCncdJdYZ9qLvlJHHRhFtczcSQki693MCDUCy\nMrMDvmL4YOowHExD7A5qrCIaYnbNcUCYMKluSLxR52AUeAuYjCwZbkgEwIQRdZ+M\n3JMgTD/9GFsvZ4c5x6n1cUnKCJNyyUIvI8jThtOnySCU8ZN17nWfKb1Cxavt17Vp\nGSdyIIL2SO9+rjOFW3PrAyX5P3xEgPYoDxA1QsYLYbj189qA0sT17xf9H7KcNzyP\n7wIDAQAB\n-----END PUBLIC KEY-----\n"
general:
url: general.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvyFUUFyaEJgsR+bYhTXx\nOA60kw82ohyHCDzkoHDT/k2xS520RZR0AzxT449qD3XfRr0+7F0c6rMx/2pBG7hS\nlHjgrTX7eQ70wV8H4OApriDIp1UDemm4+fKxcPZ6vhWqzp+3ijPdhJXe7OC9D89I\n9QKdlHPBxKFnUrBJiqn3cHGLpRrYTsKpI/Nl7VW4UJJh0k7R7P1Jqry0e+HalOLB\nBu5kl5z6iYBPy1gJ4psDHWuoNboxIgIsVR1SSLM7Mooebwx2qjm3W4VQuc7eQk0g\nh7KH4B8CrK4bC+K6lAS3ZzmTlA6M1WZPtIKv3XqEYCkyomMnkdTNZQYKbCKKlLBo\ntQIDAQAB\n-----END PUBLIC KEY-----\n"
social:
url: social.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAqB8htGdGzDPs3GA76REG\nyjM0eEYdXV6ugi4hPZEViCOBg3POC5RZslA5oTCYYWfTVui8jHC2CPD3AYQLG67Z\n79g2miLHEEyDzG7dp//dc85qp0FYR2JII1y26fJutMVCgn0hth6OpfjPB2QhkgZf\nat+Ico5ppDYIx+4jX8xQr4qqRlUIAmECMAE5ATiAUqfv117GJG/fR3AsKZPYm2U1\nFhSpKT2mvC0AiqstZzxYEm4srl1ZjpJPJ7uU+ewvi/EhRyLWFGPmygP6fvg4IaKS\nG00dx7FGedyLVcSaxJCoCX5Z98hIYEStanCSzuR3FQEL0JaB8ZKKWY8dsB+U1v46\nQwIDAQAB\n-----END PUBLIC KEY-----\n"
property:
url: property.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1bmnJSRmxcehehuKBwSQ\nXiuYhAxzUOmptIk0sgciB1hK8++anXMaHXf3QA6UiXWjNyU+g2ZL1nVfVl0Qd3Ps\nxM2+hSeZRus2sw0g7CQea7NkAqLGQrpicnZ8Fgcb+0qwgClk0RVBXwJzfTDu6V+5\nL9lLEKWnSdHmoGkxkZTPMAtJpXYx9SMLtljPYGkMWKY2C1cBqPdMOl/rKTUZ9dYp\n2eJ13NTXDJJgDJOhDFHevzK/I6kwxdJbetNo4IO1dhQdbPionR5SNkkCNZvfy3k3\n68+xopPKH3xECCIuxorcePx0hyoeXS8vdmJ09VKHVUz08LBYGq2S/36V5LIc1P/6\nSQIDAQAB\n-----END PUBLIC KEY-----\n"
procurement:
url: procurement.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAze/Yr3vrpRBpeu7ohyEP\nboPvZ476dtANbvW+rMuDyKeGD5FfoZYwzF+AbMIK6KfleWizObnMM8ABC0LdBuag\nQ0Brk4FMxyKz0aXlSgG3OZiZXJaaWm2/+gqghgpBLpAPMRFnEmK2y11b/EgCxurV\nl+RZ/MgrIviRGipnU7GXfG4O7Ai21oD4lzKt3WbvuWgBdgtEsYpZMIyddWrhkUki\noM39Vm72mCyKPkysCVYCnYaMwDXVx/SKuTRHiVQZ4GNIv74rwp7BOCkfDZ8HrNLH\nr3ObCB8X0Bh9GqUUj7gYu3cFmx8lXer7qkGtGUq2wNUM0CBc01EODVO9e9RQnulA\n3wIDAQAB\n-----END PUBLIC KEY-----\n"
fss:
url: fss.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzsvi4FfIQokfP2QmiRTs\nzuxjPg7oPK7pLHNQC/AyY35H0vmkXGTc74pVvLbfSuaprLO10WVzE4bGGQmhmls1\nDqeY7EyHg1vs7GHQm1932n+Va+qDToSx7S+Zs1ZOglYAdEzBI3dyhefIcDtNUfty\n0i64RGiEzDH4yV5lecilXo5Q4/7W/HNdtw8Oe//LopOZ2Mj+Eq7Tk70WkGFDV73Z\n/jIBLBn51g2P9nrsid63OLe1X8u0l9+xSGff0fR1VlqbElBRACCrAmPvs9ceOW7H\n+yLw71elR4nMDm+/dx/zimeYUj0WaY2A3/O8xucPhSP22YCRiO1jEsAEvMXkCU9p\n8wIDAQAB\n-----END PUBLIC KEY-----\n"
medicine:
url: medicine.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAwx7zQLnde6Azy/03bIxg\nkp5rM0DsKKkBbX8C5vhUADxaC2zVmVJuF0NnTGCWutNSSYsKWRKzFwEoZdzJ+8XS\nr8f9kRdEB0yu3Akv+EhZyHA7yVGyFvNAhPGVuekSmpDlpFFKanAqlhBzrhByku5A\nTqp2fXi3zHMoP6WX8QXb6SpG/y4CBpjXCI1qLCAJRw0Fkt7yMXkJnjO2q7zCKAnU\nnv6DVz5yDuBiZPfYlW09KHVWxSehgk5fvLu9Jb/s1XklPwEw1m5BPhIA1YG0QelR\nXk9Pdvwb7aM59LZx1xQZYcku0KGSqLo9rCDTD8YT47226v921yeM36Az8t8e4egU\nzwIDAQAB\n-----END PUBLIC KEY-----\n"
police:
url: police.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAzKawlFWAMzA/uV/kcewd\nmtj8PcqxosmnSh7ZzJ0DumG2ieeP9oDBicqbqIEaeJVvrRzYJD2a+u8x5KKMKB8J\nHbMUpCBFlIpkDMjU/oZVMcYT9pcH51QWNvCgHG7prVykSGFz1JRvjSP6cwuZKBFd\nFFneOViETqoMIO1DbRLXsGfPvMOJY9C1xDwv1dLv0Wbj7M9N6eNz06a50bu3I4gl\nMumxWnZUabXL3G62S/Si4NM7J2jOUnkEOxJWOhcAX/iiqS9T8AHu84um2+mLQpfB\nJJFFIWCIAtU78VnIN5JSWwjFU5TsiSyCFYpGXKxUFD25cFmt3SfG0gwmrFis5Pdn\nhwIDAQAB\n-----END PUBLIC KEY-----\n"
construction:
url: construction.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAvxJcKnPUDaNNyhdGpedL\n+h2OI9RDDZUTkHcvX1UvBNvlX2+dvok6sHQh2AhZoNyCUFZTbp2CRSNfIM5jXigD\nfHA3KzpN7cmGG7W7nIdBBkZU/ly4HFvkD7mGoEymB0JYgZkz59CXBx+3Zg6KLSYY\nZDoOw6wikrl643So2zFZvwHJpDkRkmX5oWWYqXOZxaZnkgbhvA3KdcH9+C1aEBYY\npY2K2MJt86k0ahW/CJfVRDb9CWSxAGir1RAPu9bRV9y9WWKKGWekH0/IqhhJPT8q\nl3v6PB1Oc6ltbOyYkS2xHbmvRxjORzGen0Xcbjzo4N8HBEoPe0Uc5iP0Y50GDjEL\nEQIDAQAB\n-----END PUBLIC KEY-----\n"
sec:
url: sec.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEApsVKJ8Cvr/A0dmHR+vDS\nAYjVzGqMNJ/4pO7GwMzUZMNSkpq3b9CIjrIGg/QKj7woTHnKM39vczu5gxPXJGYN\nIo+PnWsibMDjcz2Vm8s11XXIPho/Ce+hQkWpWGzxpaH7Z/qLKSwiwHdHhlgN3fWw\njR8jYhreQYfohkRGR70h8A9TTU4YkFY/+8yIdwGns61+5tK981kMbVkm+pcgL0cP\nMN08I7MM+c87COY6IO27jVb/ALPAYpo+QUdAfEp5hlI7BQW95nB7LHOnxAm7lLTD\nhbdETUssieQUicwgDpGa2aD769nH+V3UCp0nA4yPDWyJJyKEWsD5EEK24VAcotql\nkwIDAQAB\n-----END PUBLIC KEY-----\n"
info:
url: info.ga.ntu.edu.tw
key: "-----BEGIN PUBLIC KEY-----\nMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5MLcsMcedzVWjw7pd/lr\nf8GdrzV6rubsJgEBJbC2OdrloHc+7uxEwWiYNTfg4j46nY/zCuTqzV/Wcfni5pY8\n0yuOmZdH9LjK0PW5BgXYJwe/bZkQmQcIQhkoSPghR8o+kZlI0a3+3gs4eAkpxB21\nPR5Rg2fvzDkaO3WcHf13HymayIk9wn4i0NdLUXgKSWcz5XNJtVBh6jtMkDq7ioOH\nQZT9OAODFw5CW/TvXBJaAvSEdDHsCNTE4vgJO1h6qowC27mErgjilA7TM81JFp40\nwexOW/gXHc4gCsj9BY39tDTqa56QIbJjKdqx7iyHUr1jMFmII1osS1ZVATco9RrM\naQIDAQAB\n-----END PUBLIC KEY-----\n"
+2 -2
View File
@@ -8,10 +8,10 @@ defaults: &defaults
development:
<<: *defaults
database: test_site
database: production_0
test:
<<: *defaults
database: test_site
database: production_0
# set these environment variables on your prod server
production:
# host: <%= ENV['MONGOID_HOST'] %>
+9 -3
View File
@@ -20,16 +20,22 @@ generate_system_summary:
cron: 0 0 12 * * *
class: GenerateSystemSummary
args:
description: Generate the system status such as disk free space,package version list for showing at site tab
description: "Generate the system status such as disk free space, package version list for showing at site tab"
email_cron:
cron: 0 0 [10,16,22] * * *
cron: "0 0 10,16,22 * * *"
class: EmailCron
args:
description: EmailCron
get_announcement_from_rss:
cron: 0 0 [2,12] * * *
cron: "0 0 2,12 * * *"
class: GetAnnouncementFromRss
args:
description: Loop through the announcement RSS until 24h ago
get_announcement_from_ntu_ga_rss:
cron: "30 * * * * *"
class: GetAnnouncementFromNtuGaRss
args:
description: "Update announcement RSS to primary NTU_GA site"
-71
View File
@@ -1,71 +0,0 @@
# encoding: utf-8
# =================================================================
# move archives from main site to other sites depending on category
# =================================================================
require 'mongo'
include Mongo
DB_BASE_NAME = "production"
CATEGORIES = { 'TNR' => 3, 'DOC' => 1, 'PROPERTY' => 5, 'CASHIER' => 2, 'CON' => 10 }
main_db = MongoClient.new("localhost", 27017).db("#{DB_BASE_NAME}_#{0}")
main_categories = main_db["archive_file_categories"]
main_archive_files = main_db["archive_files"]
main_archive_file_multiples = main_db["archive_file_multiples"]
CATEGORIES.each do |key, number|
# set the target DB
target_db = MongoClient.new("localhost", 27017).db("#{DB_BASE_NAME}_#{number}")
target_categories = target_db["archive_file_categories"]
target_archive_files = target_db["archive_files"]
target_archive_file_multiples = target_db["archive_file_multiples"]
if main_cat = main_categories.find_one(key: key)
# get or create category
category_id = \
if cat = target_categories.find_one(key: main_cat['key'])
cat['_id']
else
copy_category = main_cat.clone
copy_category['_id'] = BSON::ObjectId.new
copy_category['create_user_id'] = nil
copy_category['update_user_id'] = nil
target_categories.save copy_category
end
main_archive_files.find(archive_file_category_id: main_cat['_id']).each do |archive_file|
# copy archive_file
copy_archive_file = archive_file.clone
copy_archive_file['_id'] = BSON::ObjectId.new
copy_archive_file['create_user_id'] = nil
copy_archive_file['update_user_id'] = nil
copy_archive_file['tagged_ids'] = []
copy_archive_file['user_ids'] = nil
copy_archive_file['archive_file_category_id'] = category_id
target_archive_files.save copy_archive_file
main_archive_file_multiples.find(archive_file_id: archive_file['_id']).each do |archive_file_multiple|
# copy archive_file_multiples
copy_archive_file_multiple = archive_file_multiple.clone
copy_archive_file_multiple['_id'] = BSON::ObjectId.new
copy_archive_file_multiple['create_user_id'] = nil
copy_archive_file_multiple['update_user_id'] = nil
copy_archive_file_multiple['archive_file_id'] = copy_archive_file['_id']
# copy gridfs file
main_grid = Mongo::GridFileSystem.new(main_db)
file = main_grid.open("assets/archive_file_multiple/file/#{archive_file_multiple['_id']}/#{archive_file_multiple['file']}", 'r')
target_grid = Mongo::GridFileSystem.new(target_db)
target_grid.open("assets/archive_file_multiple/file/#{copy_archive_file_multiple['_id']}/#{copy_archive_file_multiple['file']}", 'w') do |f|
f.write file
end
target_archive_file_multiples.save copy_archive_file_multiple
end
end
end
end
@@ -67,7 +67,7 @@ class Panel::Announcement::FrontEnd::BulletinsController < OrbitWidgetController
end
end
end
end
def show
@@ -42,6 +42,7 @@ class Bulletin
field :public, :type => Boolean, :default => true
field :rss_link
field :rss_source
scope :can_display, where(is_checked: true, is_rejected: false, is_pending: false)
scope :available_for_lang, ->(locale){ where("available_for_#{locale}".to_sym => true) }
@@ -11,6 +11,7 @@ xml.rss :version => "2.0" do
for bulletin in @bulletins
xml.item do
xml.title bulletin.title_translations[I18n.locale.to_s]
xml.category bulletin.bulletin_category.title
xml.pubDate bulletin.postdate.to_s(:rfc822)
xml.description bulletin.text_translations[I18n.locale.to_s]
xml.link url_for(:action=>"show", :controller=>"panel/announcement/front_end/bulletins", :id=>bulletin ,:only_path=>false)
@@ -39,13 +39,24 @@
<% end %>
<% unless @bulletin.rss_link.blank? %>
<div>
<%= link_to t('ntu.rss_origin'), @bulletin.rss_link %>
<%= link_to t('announcement.rss_origin'), @bulletin.rss_link %>
<% unless @bulletin.rss_source.blank? %>
<br />
<%= t('announcement.source') %>: <%= @bulletin.rss_source %>
<% end %>
</div>
<% end %>
</div>
<% unless @bulletin.user_ids.blank? %>
<div class="promoter">
<div>
<p><%= t(:promoter) %>:</p>
<span><%= @bulletin.get_users.map{|u| "<span>#{u.name}</span>"}.join(', ').html_safe %></span>
</div>
</div>
<% end %>
<%= share_links(@bulletin, 'announcement') %>
<% unless @bulletin.user_ids.blank? %>
<%= render partial: 'admin/member_selects/promoter_front', locals: {users: @bulletin.get_users} %>
<% end %>
<%= render partial: 'admin/member_selects/promoter_front', locals: {users: @bulletin.get_users} %>
@@ -1,6 +1,8 @@
zh_tw:
announcement:
rss_origin: 回臺大校園公告
source: 單位來源
add_new: 新建
all_articles: 文章列表
announcement: 公告
@@ -0,0 +1,97 @@
# encoding: utf-8
require 'rss'
require 'mongo'
SITES = { "總務長室暨總務處秘書室" => "sec.ga.ntu.edu.tw",
"總務處文書組" => "doc.ga.ntu.edu.tw",
"總務處事務組" => "general.ga.ntu.edu.tw",
"總務處保管組" => "property.ga.ntu.edu.tw",
"總務處營繕組" => "construction.ga.ntu.edu.tw",
"總務處出納組" => "cashier.ga.ntu.edu.tw",
"總務處採購組" => "procurement.ga.ntu.edu.tw",
"總務處經營管理組" => "fss.ga.ntu.edu.tw",
"總務處駐衛警察隊" => "police.ga.ntu.edu.tw",
"社會科學院總務分處" => "social.ga.ntu.edu.tw",
"醫學院總務分處" => "medicine.ga.ntu.edu.tw" }
DB_BASE_NAME = "production_0"
yesterday = Time.now - 86400
two_weeks_ago = Time.new - 60 * 60 * 24 * 14
recent_feed = {}
SITES.each do |name, url|
open("http://#{url}/panel/announcement/front_end/bulletins.rss?inner=true") do |rss|
# Giving false parameter is for skipping irregular format of the RSS
feed = RSS::Parser.parse(rss, false)
feed.items.each do |item|
category = item.category.to_s.gsub(/\<(\/)*category\>/, '')
if item.pubDate > yesterday
recent_feed[item.title.strip] = { date: item.pubDate, description: item.description.gsub("\r\n", '<br/>').strip,
link: item.link, category: category, source: name }
end
end
end
end
def get_category_id(category, categories, coll_cat)
if categories.keys.include? "rss_#{category}"
[categories["rss_#{category}"], categories]
else
cat = {
_type: "BulletinCategory",
key: "rss_#{category}",
disable: false,
title: {:zh_tw => category},
created_at: Time.now,
updated_at: Time.now
}
categories["rss_#{category}"] = result = coll_cat.save(cat)
[result, categories]
end
end
def get_mongo_and_categories
db = Mongo::Connection.new("localhost", 27017).db("#{DB_BASE_NAME}")
coll_bulletin = db["bulletins"]
coll_cat = db["bulletin_categories"]
categories = coll_cat.find().to_a.inject({}) do |categories, category|
categories[category['key']] = category['_id']
categories
end
[categories, coll_bulletin, coll_cat]
end
recent_feed.each do |title, bulletin|
categories, coll_bulletin, coll_cat = get_mongo_and_categories
category_id, categories = get_category_id(bulletin[:category], categories, coll_cat)
unless coll_bulletin.find_one(rss_link: bulletin[:link])
bulletin = { _type: "Bulletin",
postdate: bulletin[:date],
created_at: bulletin[:date],
updated_at: bulletin[:date],
is_checked: true,
is_pending: false,
is_rejected: false,
bulletin_category_id: category_id,
title: {:zh_tw => title},
text: {:zh_tw => bulletin[:description]},
available_for_zh_tw: true,
rss_link: bulletin[:link],
rss_source: bulletin[:source],
is_top: false,
is_hot: false,
is_hidden: false }
coll_bulletin.save(bulletin)
end
end
@@ -8,15 +8,15 @@
<tr>
<th class="column-ctrl col-title"><%= sortable(:title, t("archive.Title"))%></th>
<th class="column-ctrl col-file"><%= t("archive.Files")%></th>
<th class="column-ctrl col-promoter"><%= t(:promoter)%></th>
<th class="column-ctrl col-file"><%= t(:promoter)%></th>
</tr>
</thead>
<tbody>
<% @archive_files.each_with_index do |post,i| %>
<tr <% if ( (i + 1) % 2 ) == 0 %> class="even" <% end %>>
<td class="col-title"><div class="o-archives-title"><%= post.title %></div></td>
<td class="col-file">
<td><div class="o-archives-title"><%= post.title %></div></td>
<td>
<div class="o-archives-list-item">
<% if !post.archive_file_multiples.blank? %>
<ol>
@@ -32,7 +32,7 @@
<% end %>
</div>
</td>
<td class="col-promoter">
<td>
<% unless post.get_users.blank? %>
<div class="promoter-block">
<ul>
@@ -3,5 +3,4 @@ log/*.log
pkg/
test/dummy/db/*.sqlite3
test/dummy/log/*.log
test/dummy/tmp/
test/dummy/.sass-cache
test/dummy/tmp/
@@ -1,6 +1,6 @@
source "http://rubygems.org"
# Declare your gem's dependencies in survey_b.gemspec.
# Declare your gem's dependencies in location.gemspec.
# Bundler will treat runtime dependencies like base dependencies, and
# development dependencies will be added by default to the :development group.
gemspec
@@ -14,4 +14,4 @@ gem "jquery-rails"
# your gem to rubygems.org.
# To use debugger
# gem 'debugger'
# gem 'ruby-debug19', :require => 'ruby-debug'
@@ -1,4 +1,4 @@
Copyright 2013 YOURNAME
Copyright 2012 YOURNAME
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
+3
View File
@@ -0,0 +1,3 @@
= Location
This project rocks and uses MIT-LICENSE.
@@ -14,13 +14,14 @@ end
RDoc::Task.new(:rdoc) do |rdoc|
rdoc.rdoc_dir = 'rdoc'
rdoc.title = 'SurveyB'
rdoc.title = 'Location'
rdoc.options << '--line-numbers'
rdoc.rdoc_files.include('README.rdoc')
rdoc.rdoc_files.include('lib/**/*.rb')
end
APP_RAKEFILE = File.expand_path("../test/dummy/Rakefile", __FILE__)
load 'rails/tasks/engine.rake'
Bundler::GemHelper.install_tasks
@@ -0,0 +1,2 @@
// Place all the behaviors and hooks related to the matching controller here.
// All this logic will automatically be available in application.js.
@@ -0,0 +1,2 @@
// Place all the behaviors and hooks related to the matching controller here.
// All this logic will automatically be available in application.js.
@@ -0,0 +1,4 @@
/*
Place all the styles related to the matching controller here.
They will automatically be included in application.css.
*/
@@ -0,0 +1,4 @@
/*
Place all the styles related to the matching controller here.
They will automatically be included in application.css.
*/
Whitespace-only changes.
@@ -0,0 +1,49 @@
class Panel::Feed::BackEnd::FeedsController < OrbitBackendController
before_filter :force_order_for_visitor,:only => [:index, :new, :edit, :delete]
before_filter :force_order_for_user,:except => [:index]
def index
@feeds = AnnouncementFeed.all
respond_to do |format|
format.html
end
end
def new
@feed = AnnouncementFeed.new
end
def edit
@feed = AnnouncementFeed.find(params[:id])
@categories = @feed.categories
end
def create
@feed = AnnouncementFeed.new(params[:announcement_feed])
if @feed.save
redirect_to panel_feed_back_end_feeds_url
else
render 'new'
end
end
def update
@feed = AnnouncementFeed.find(params[:id])
if @feed.update_attributes(params[:announcement_feed])
redirect_to panel_feed_back_end_feeds_url
else
render 'edit'
end
end
def destroy
@feed = AnnouncementFeed.find(params[:id])
@feed.destroy
redirect_to panel_feed_back_end_feeds_url
end
end
View File
Whitespace-only changes.
View File
Whitespace-only changes.
View File
Whitespace-only changes.
@@ -0,0 +1,8 @@
class AnnouncementFeed
include Mongoid::Document
include Mongoid::Timestamps
field :link, type: String
field :name, type: String
end
@@ -0,0 +1,61 @@
class LocationsUploader < CarrierWave::Uploader::Base
# Include RMagick or ImageScience support:
# include CarrierWave::RMagick
# include CarrierWave::ImageScience
include CarrierWave::MiniMagick
# Choose what kind of storage to use for this uploader:
# storage :file
# storage :s3
# Override the directory where uploaded files will be stored.
# This is a sensible default for uploaders that are meant to be mounted:
def store_dir
"location/#{model.class.to_s.underscore}/#{mounted_as}/#{model.id}"
end
# Provide a default URL as a default if there hasn't been a file uploaded:
# def default_url
# "/images/fallback/" + [version_name, "default.png"].compact.join('_')
# end
# Process files as they are uploaded:
# process :scale => [200, 300]
#
# def scale(width, height)
# # do something
# end
# Create different versions of your uploaded files:
# version :thumb do
# process :scale => [50, 50]
# end
version :thumb do
process :resize_to_fill => [150, 120]
end
# Add a white list of extensions which are allowed to be uploaded.
# For images you might use something like this:
# def extension_white_list
# %w(jpg jpeg gif png)
# end
# Override the filename of the uploaded files:
# def filename
# "something.jpg" if original_filename
# end
# def manipulate!
# raise current_path.inspect
# image = ::MiniMagick::Image.open(current_path)
# image = yield(image)
# image.write(current_path)
# ::MiniMagick::Image.open(current_path)
# rescue ::MiniMagick::Error, ::MiniMagick::Invalid => e
# raise CarrierWave::ProcessingError.new("Failed to manipulate with MiniMagick, maybe it is not an image? Original Error: #{e}")
# end
end
View File
Whitespace-only changes.
@@ -0,0 +1,84 @@
<legend><h3 style="margin-left: 10px;"><%= t('feed.channel') %></h3></legend>
<fieldset style="margin-left: -25px;">
<div class="control-group">
<label class="control-label" for="inputName"><%= t('feed.enter') + " RSS " + t('feed.name')%>:</label>
<div class="controls">
<%= f.text_field :name, :class => 'span4', :placeholder => 'RSS ' + t('feed.name'), :id => "inputName" %>
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputURL"><%= t('feed.enter') + " RSS URL" %>:</label>
<div class="controls">
<%= f.text_field :link, :class => 'span4', :placeholder => 'RSS URL', :id => "inputURL" %>
</div>
</div>
<div class="control-group">
<label class="control-label" for="inputURL"><%= t('feed.choose') %>:</label>
<div class="controls">
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "全部", nil) %>
<%= label_tag "全部" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "緊急", nil) %>
<%= label_tag "緊急" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "一般", nil) %>
<%= label_tag "一般" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "研討會", nil) %>
<%= label_tag "研討會" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "演講", nil) %>
<%= label_tag "演講" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "活動", nil) %>
<%= label_tag "活動" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "徵才", nil) %>
<%= label_tag "徵才" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "招標", nil) %>
<%= label_tag "招標" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "拖吊", nil) %>
<%= label_tag "拖吊" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "校外", nil) %>
<%= label_tag "校外" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "過期", nil) %>
<%= label_tag "過期" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "H1N1", nil) %>
<%= label_tag "H1N1" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "失物招領", nil) %>
<%= label_tag "失物招領" %>
<% end -%>
<%= content_tag :label,:class => "checkbox inline" do -%>
<%= check_box("announcement_feed", "categories", {:multiple => true}, "近期", nil) %>
<%= label_tag "近期" %>
<% end -%>
</div>
</div>
<div class="control-group">
<div class="controls">
<%= f.submit t("submit"), :class => "btn btn-primary" %>
</div>
</div>
</fieldset>
@@ -0,0 +1,38 @@
<%= form_for @feed, :url => panel_feed_back_end_feed_path, :method => :put, :html => {:class => "form-horizontal"} do |f| %>
<%= render :partial => 'form', :locals => {:f => f} %>
<% end %>
<script type="text/javascript">
var $checkboxes = $('.checkbox input');
$(document).ready(function() {
var categories = <%= @categories.to_json.html_safe %>;
for (var i = 0; i < $checkboxes.length; i++) {
if ($.inArray($checkboxes[i].value, categories) != -1) {
$checkboxes[i].checked = true;
} else {
continue;
}
}
});
$('#announcement_feed_categories_').on('click', function() {
if ($checkboxes[0].checked == true) {
for (var i = 1; i < $checkboxes.length; i++) {
$checkboxes[i].checked = false;
}
}
});
$checkboxes.on('click', function() {
for (var i = 1; i < $checkboxes.length; i++) {
if ($checkboxes[i].checked == true) {
$checkboxes[0].checked = false
}
}
});
</script>
@@ -0,0 +1,27 @@
<table class="table main-list">
<thead>
<tr><th><h3><%= t('feed.channel') %></h3></th></tr>
<tr>
<th class="span4"><%= t('RSS') %></th>
<%if is_manager? %>
<th class="span4"><%= t('feed.edit') %></th>
<th class="span4"><%= t('feed.delete') %></th>
<% end %>
</tr>
</thead>
<tbody id="tbody_locations" class="sort-holder">
<% @feeds.each do |feed| %>
<tr class="with_action">
<td><%= feed.name %></td>
<%if is_manager? %>
<td><%= link_to t('feed.edit'), edit_panel_feed_back_end_feed_path(feed) %></td>
<td><%= link_to t('feed.cancel'), panel_feed_back_end_feed_path(feed), method: :delete, confirm: t(:sure?) %></td>
<% end %>
</tr>
<% end %>
</tbody>
</table>
<%if is_manager? %>
<br />
<%= link_to t('feed.new'), new_panel_feed_back_end_feed_path, :class => "btn btn-primary pull-right", :id => "create_event_btn", :ref => "add-btn" %>
<% end %>
@@ -0,0 +1,3 @@
<%= form_for @feed, :url => panel_feed_back_end_feeds_path, :html => { :class=>"form-horizontal"} do |f| %>
<%= render :partial => 'form', :locals => {:f => f} %>
<% end %>
Whitespace-only changes.
+12
View File
@@ -0,0 +1,12 @@
en:
feed:
all: All
choose: Choose a Category
feed: RSS
channel: Announcement Rss
new: New
edit: Edit
delete: Delete
cancel: Cancel RSS
enter: Enter
name: Name
+12
View File
@@ -0,0 +1,12 @@
zh_tw:
feed:
all: 全部
choose: 選擇訂閱類別
feed: RSS
channel: 公告RSS訂閱
new: 新增
edit: 編輯
delete: 刪除
cancel: 取消訂閱
enter: 輸入
name: 名稱
+9
View File
@@ -0,0 +1,9 @@
Rails.application.routes.draw do
namespace :panel do
namespace :feed do
namespace :back_end do
resources :feeds
end
end
end
end
@@ -1,22 +1,23 @@
$:.push File.expand_path("../lib", __FILE__)
# Maintain your gem's version:
require "survey_b/version"
require "location/version"
# Describe your gem and declare its dependencies:
Gem::Specification.new do |s|
s.name = "survey_b"
s.version = SurveyB::VERSION
s.name = "location"
s.version = Location::VERSION
s.authors = ["TODO: Your name"]
s.email = ["TODO: Your email"]
s.homepage = "TODO"
s.summary = "TODO: Summary of SurveyB."
s.description = "TODO: Description of SurveyB."
s.summary = "TODO: Summary of Location."
s.description = "TODO: Description of Location."
s.files = Dir["{app,config,db,lib}/**/*"] + ["MIT-LICENSE", "Rakefile", "README.rdoc"]
s.test_files = Dir["test/**/*"]
s.add_dependency "rails", "~> 3.2.12"
s.add_dependency "rails", "~> 3.1.8"
# s.add_dependency "jquery-rails"
s.add_development_dependency "sqlite3"
end
+24
View File
@@ -0,0 +1,24 @@
module Feeds
OrbitApp.registration "Feed",:type=> 'ModuleApp' do
module_label 'feed.feed'
base_url File.expand_path File.dirname(__FILE__)
# personal_plugin :enable => true,:path=>"panel/location/plugin/profile",:i18n=>'admin.location'
version "0.1"
organization "Rulingcom"
author "RD dep"
intro "I am intro"
update_info 'some update_info'
#enable_frontend true
side_bar do
head_label_i18n 'feed.channel', :icon_class=>"icon-plus"
available_for [:admin,:guest,:manager,:sub_manager]
active_for_controllers ({:private=>['feeds']})
head_link_path "panel_feed_back_end_feeds_path"
end
end
end
+91
View File
@@ -0,0 +1,91 @@
# encoding: utf-8
require 'rss'
require 'mongo'
# Change this according to local DB
DB_NAME = "production_0"
# Create a hash rss site list from mongodb
db = Mongo::Connection.new("localhost", 27017).db("#{DB_NAME}")
SITES = Hash[ db["announcement_feeds"].find().entries.collect {|f| [ f["name"], f["link"] ] } ]
CATEGORIES = Array(db["announcement_feeds"].find().entries.collect {|f| f["categories"] })
yesterday = Time.now - 86400
two_weeks_ago = Time.new - 60 * 60 * 24 * 14
recent_feed = {}
SITES.each_with_index do |(name, url), i|
open("http://#{url}/panel/announcement/front_end/bulletins.rss?inner=true") do |rss|
# Giving 'false' parameter is for skipping irregular format of the RSS
feed = RSS::Parser.parse(rss, false)
feed.items.each do |item|
category = item.category.to_s.gsub(/\<(\/)*category\>/, '')
if item.pubDate > yesterday && CATEGORIES[i].include?(category)
recent_feed[item.title.strip] = { date: item.pubDate, description: item.description.gsub("\r\n", '<br/>').strip,
link: item.link, category: category, source: name }
end
end
end
end
def get_category_id(category, categories, coll_cat)
if categories.keys.include? "rss_#{category}"
[categories["rss_#{category}"], categories]
else
cat = {
_type: "BulletinCategory",
key: "rss_#{category}",
disable: false,
title: {:zh_tw => category},
created_at: Time.now,
updated_at: Time.now
}
categories["rss_#{category}"] = result = coll_cat.save(cat)
[result, categories]
end
end
def get_mongo_and_categories
db = Mongo::Connection.new("localhost", 27017).db("#{DB_NAME}")
coll_bulletin = db["bulletins"]
coll_cat = db["bulletin_categories"]
categories = coll_cat.find().to_a.inject({}) do |categories, category|
categories[category['key']] = category['_id']
categories
end
[categories, coll_bulletin, coll_cat]
end
recent_feed.each do |title, bulletin|
categories, coll_bulletin, coll_cat = get_mongo_and_categories
category_id, categories = get_category_id(bulletin[:category], categories, coll_cat)
unless coll_bulletin.find_one(rss_link: bulletin[:link])
bulletin = { _type: "Bulletin",
postdate: bulletin[:date],
created_at: bulletin[:date],
updated_at: bulletin[:date],
is_checked: true,
is_pending: false,
is_rejected: false,
bulletin_category_id: category_id,
title: {:zh_tw => title},
text: {:zh_tw => bulletin[:description]},
available_for_zh_tw: true,
rss_link: bulletin[:link],
rss_source: bulletin[:source],
is_top: false,
is_hot: false,
is_hidden: false }
coll_bulletin.save(bulletin)
end
end
@@ -1,4 +1,4 @@
# desc "Explaining what the task does"
# task :survey_b do
# task :location do
# # Task goes here
# end
+6
View File
@@ -0,0 +1,6 @@
#!/usr/bin/env ruby
#!/usr/bin/env ruby
# This command will automatically be run when you run "rails" with Rails 3 gems installed from the root of your application.
ENGINE_PATH = File.expand_path('../..', __FILE__)
load File.expand_path('../../test/dummy/script/rails', __FILE__)
@@ -0,0 +1,9 @@
// This is a manifest file that'll be compiled into including all the files listed below.
// Add new JavaScript/Coffee code in separate files in this directory and they'll automatically
// be included in the compiled file accessible from http://example.com/assets/application.js
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// the compiled file.
//
//= require jquery
//= require jquery_ujs
//= require_tree .
@@ -0,0 +1,7 @@
/*
* This is a manifest file that'll automatically include all the stylesheets available in this directory
* and any sub-directories. You're free to add application-wide styles to this file and they'll appear at
* the top of the compiled file, but it's generally better to create a new file per style scope.
*= require_self
*= require_tree .
*/
Whitespace-only changes.
Whitespace-only changes.
@@ -2,7 +2,7 @@
<html>
<head>
<title>Dummy</title>
<%= stylesheet_link_tag "application", :media => "all" %>
<%= stylesheet_link_tag "application" %>
<%= javascript_include_tag "application" %>
<%= csrf_meta_tags %>
</head>
@@ -3,7 +3,7 @@ require File.expand_path('../boot', __FILE__)
require 'rails/all'
Bundler.require
require "survey_b"
require "location"
module Dummy
class Application < Rails::Application
@@ -35,20 +35,6 @@ module Dummy
# Configure sensitive parameters which will be filtered from the log file.
config.filter_parameters += [:password]
# Enable escaping HTML in JSON.
config.active_support.escape_html_entities_in_json = true
# Use SQL instead of Active Record's schema dumper when creating the database.
# This is necessary if your schema can't be completely dumped by the schema dumper,
# like if you have constraints or database-specific column types
# config.active_record.schema_format = :sql
# Enforce whitelist mode for mass assignment.
# This will create an empty whitelist of attributes available for mass-assignment for all models
# in your app. As such, your models will need to explicitly whitelist or blacklist accessible
# parameters by using an attr_accessible or attr_protected declaration.
config.active_record.whitelist_attributes = true
# Enable the asset pipeline
config.assets.enabled = true
@@ -2,7 +2,7 @@ Dummy::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# In the development environment your application's code is reloaded on
# every request. This slows down response time but is perfect for development
# every request. This slows down response time but is perfect for development
# since you don't have to restart the web server when you make code changes.
config.cache_classes = false
@@ -22,13 +22,6 @@ Dummy::Application.configure do
# Only use best-standards-support built into browsers
config.action_dispatch.best_standards_support = :builtin
# Raise exception on mass assignment protection for Active Record models
config.active_record.mass_assignment_sanitizer = :strict
# Log the query plan for queries taking more than this (works
# with SQLite, MySQL, and PostgreSQL)
config.active_record.auto_explain_threshold_in_seconds = 0.5
# Do not compress assets
config.assets.compress = false
@@ -20,7 +20,7 @@ Dummy::Application.configure do
# Generate digests for assets URLs
config.assets.digest = true
# Defaults to nil and saved in location specified by config.assets.prefix
# Defaults to Rails.root.join("public/assets")
# config.assets.manifest = YOUR_PATH
# Specifies the header that your server uses for sending files
@@ -33,11 +33,8 @@ Dummy::Application.configure do
# See everything in the log (default is :info)
# config.log_level = :debug
# Prepend all log lines with the following tags
# config.log_tags = [ :subdomain, :uuid ]
# Use a different logger for distributed setups
# config.logger = ActiveSupport::TaggedLogging.new(SyslogLogger.new)
# config.logger = SyslogLogger.new
# Use a different cache store in production
# config.cache_store = :mem_cache_store
@@ -60,8 +57,4 @@ Dummy::Application.configure do
# Send deprecation notices to registered listeners
config.active_support.deprecation = :notify
# Log the query plan for queries taking more than this (works
# with SQLite, MySQL, and PostgreSQL)
# config.active_record.auto_explain_threshold_in_seconds = 0.5
end
@@ -2,9 +2,9 @@ Dummy::Application.configure do
# Settings specified here will take precedence over those in config/application.rb
# The test environment is used exclusively to run your application's
# test suite. You never need to work with it otherwise. Remember that
# test suite. You never need to work with it otherwise. Remember that
# your test database is "scratch space" for the test suite and is wiped
# and recreated between test runs. Don't rely on the data there!
# and recreated between test runs. Don't rely on the data there!
config.cache_classes = true
# Configure static asset server for tests with Cache-Control for performance
@@ -29,8 +29,10 @@ Dummy::Application.configure do
# ActionMailer::Base.deliveries array.
config.action_mailer.delivery_method = :test
# Raise exception on mass assignment protection for Active Record models
config.active_record.mass_assignment_sanitizer = :strict
# Use SQL instead of Active Record's schema dumper when creating the test database.
# This is necessary if your schema can't be completely dumped by the schema dumper,
# like if you have constraints or database-specific column types
# config.active_record.schema_format = :sql
# Print deprecation notices to the stderr
config.active_support.deprecation = :stderr
@@ -8,8 +8,3 @@
# inflect.irregular 'person', 'people'
# inflect.uncountable %w( fish sheep )
# end
#
# These inflection rules are supported but not enabled by default:
# ActiveSupport::Inflector.inflections do |inflect|
# inflect.acronym 'RESTful'
# end
@@ -4,4 +4,4 @@
# If you change this key, all old signed cookies will become invalid!
# Make sure the secret is at least 30 characters and all random,
# no regular words or you'll be exposed to dictionary attacks.
Dummy::Application.config.secret_token = 'd7805d46c934ccf6140641370f099c8cabadbfcf7dbafc17f06c1b4750b9bc1ef733a96efba7389aa14ecfb942607d142a4a979e76040ce0df9a06944d45fb70'
Dummy::Application.config.secret_token = '181584334acb820e1d0e0e53b71c0985251f4e5bfd188a962d5f9acfeeb0e46dfd6ca68784528cab00d8e6e8da087cce2bf7d060fe2b2c742a814c23689ff6af'
@@ -54,5 +54,5 @@ Dummy::Application.routes.draw do
# This is a legacy wild controller route that's not recommended for RESTful applications.
# Note: This route will make all actions in every controller accessible via GET requests.
# match ':controller(/:action(/:id))(.:format)'
# match ':controller(/:action(/:id(.:format)))'
end
Whitespace-only changes.
Whitespace-only changes.
@@ -20,6 +20,7 @@
<!-- This file lives in public/500.html -->
<div class="dialog">
<h1>We're sorry, but something went wrong.</h1>
<p>We've been notified about this issue and we'll take a look at it shortly.</p>
</div>
</body>
</html>
Whitespace-only changes.
File renamed without changes.
@@ -0,0 +1,14 @@
require 'test_helper'
class Panel::Location::BackEnd::LocationsControllerTest < ActionController::TestCase
test "should get index" do
get :index
assert_response :success
end
test "should get edit" do
get :edit
assert_response :success
end
end
@@ -0,0 +1,14 @@
require 'test_helper'
class Panel::Location::BackEnd::LocationsControllerTest < ActionController::TestCase
test "should get index" do
get :index
assert_response :success
end
test "should get edit" do
get :edit
assert_response :success
end
end
@@ -0,0 +1,10 @@
require 'test_helper'
class NavigationTest < ActionDispatch::IntegrationTest
fixtures :all
# test "the truth" do
# assert true
# end
end
+7
View File
@@ -0,0 +1,7 @@
require 'test_helper'
class LocationTest < ActiveSupport::TestCase
test "truth" do
assert_kind_of Module, Location
end
end
@@ -8,8 +8,3 @@ Rails.backtrace_cleaner.remove_silencers!
# Load support files
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
# Load fixtures from the engine
if ActiveSupport::TestCase.method_defined?(:fixture_path=)
ActiveSupport::TestCase.fixture_path = File.expand_path("../fixtures", __FILE__)
end
@@ -0,0 +1,4 @@
require 'test_helper'
class Panel::Location::BackEnd::LocationsHelperTest < ActionView::TestCase
end
@@ -0,0 +1,4 @@
require 'test_helper'
class Panel::Location::BackEnd::LocationsHelperTest < ActionView::TestCase
end
-3
View File
@@ -1,3 +0,0 @@
= SurveyB
This project rocks and uses MIT-LICENSE.
@@ -1,23 +0,0 @@
class ApplicationController < ActionController::Base
protect_from_forgery
before_filter :set_locale
# Set I18n.locale
def set_locale
# update session if passed
session[:locale] = params[:locale] if params[:locale]
# set locale based on session or default
begin
# check if locale is valid for non site pages
if !VALID_LOCALES.include?(session[:locale])
I18n.locale = I18n.default_locale
else
I18n.locale = session[:locale]
end
rescue
I18n.locale = I18n.default_locale
end
end
end
@@ -1,79 +0,0 @@
class Panel::SurveyB::BackEnd::PeriodsController < OrbitBackendController
include AdminHelper
include OrbitControllerLib::DivisionForDisable
before_filter :for_app_manager
def initialize
super
@app_title = 'survey_b'
end
# before_filter :force_order_for_user,:only => :index
# before_filter :for_app_sub_manager,:except => :index
def index
@periods = SurveyBPeriod.page params[:page]
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @periods }
format.js
end
end
def new
@period = SurveyBPeriod.new
respond_to do |format|
format.html # new.html.erb
format.xml { render :xml => @period }
end
end
def create
@period = SurveyBPeriod.new params[:survey_b_period]
respond_to do |format|
if @period.save
format.html { redirect_to(panel_survey_b_back_end_periods_url) }
format.xml { render :xml => @period, :status => :created, :location => @period }
else
format.html { render :action => "new" }
format.xml { render :xml => @period.errors, :status => :unprocessable_entity }
end
end
end
def edit
@period = SurveyBPeriod.find(params[:id])
end
def update
@period = SurveyBPeriod.find(params[:id])
respond_to do |format|
if @period.update_attributes(params[:survey_b_period])
format.html { redirect_to(panel_survey_b_back_end_periods_url(:page => params[:page])) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @period.errors, :status => :unprocessable_entity }
end
end
end
def destroy
@period = SurveyBPeriod.find(params[:id])
respond_to do |format|
if @period.destroy
format.html { redirect_to(panel_survey_b_back_end_periods_url(:page => params[:page])) }
format.xml { head :ok }
end
end
end
end
@@ -1,36 +0,0 @@
class Panel::SurveyB::BackEnd::SettingsController < OrbitBackendController
include AdminHelper
include OrbitControllerLib::DivisionForDisable
before_filter :for_app_manager
def initialize
super
@app_title = 'survey_b'
end
def show
redirect_to edit_panel_survey_b_back_end_setting_path
end
def edit
@setting = SurveyBSetting.first_or_create
end
def update
@setting = SurveyBSetting.first_or_create
respond_to do |format|
if @setting.update_attributes(params[:survey_b_setting])
format.html { redirect_to(panel_survey_b_back_end_periods_url) }
format.xml { head :ok }
else
format.html { render :action => "edit" }
format.xml { render :xml => @setting.errors, :status => :unprocessable_entity }
end
end
end
end
@@ -1,152 +0,0 @@
class Panel::SurveyB::BackEnd::SurveyBController < OrbitBackendController
include AdminHelper
include OrbitControllerLib::DivisionForDisable
before_filter :for_app_manager
#before_filter :force_order_for_user,:only => :index
#before_filter :for_app_sub_manager,:except => :index
def initialize
super
@app_title = 'survey_b'
end
def index
if params[:period] && @period = SurveyBPeriod.find(params[:period])
@answers = ::SurveyBAnswer.where(:created_at.gte => @period.start_date, :created_at.lte => @period.end_date)
else
@answers = ::SurveyBAnswer.all
end
if params[:sort]
options = params[:sort_options]
options = [options] if !options.class.eql?(Array)
options.each do |option|
@answers = @answers.order_by(option, params[:direction])
end
end
@answers = @answers.page(params[:page]).per(10)
respond_to do |format|
format.html # index.html.erb
format.xml { render :xml => @answers }
format.js
end
end
def delete
if params[:ids]
answers = SurveyBAnswer.any_in(:_id => params[:ids]).destroy_all
end
redirect_to panel_survey_b_back_end_survey_b_index_url(:direction => params[:direction], :sort => params[:sort], :sort_options => params[:sort_options])
end
def result
if params[:period] && @period = SurveyBPeriod.find(params[:period])
@answers = ::SurveyBAnswer.where(:created_at.gte => @period.start_date, :created_at.lte => @period.end_date)
else
@answers = ::SurveyBAnswer.all
end
@results = Hash[(t('survey_b.institutions').keys + [ 'all' ]).map do |i_key|
[i_key, Hash[(t('survey_b.questions').keys + ['count', 'sum', 'sum7'] ).map{|q_key| [q_key, 0] }].merge({ 'count' => 0, 'sum' => 0, 'sum7' => 0 })]
end]
[:good_institutions, :bad_institutions].each do |item|
@results[item] = Hash[t('survey_b.institutions').map{|k, i| [k, 0] }]
end
[:person_question, :rate_question, :quality_question].each do |item|
@results[item] = t("survey_b.#{item}_options").map{|o| 0 }
end
@answers.each do |answer|
t('survey_b.institutions').each do |i_key, institution|
if answer[i_key.to_s]
@results[i_key]['count'] += 1
t('survey_b.questions').keys.each do |q_key|
point = 10 - ( answer[i_key.to_s][q_key.to_s].to_i * 2 )
@results[i_key][q_key] += point
@results[i_key]['sum'] += point
if q_key != :question6
@results[i_key]['sum7'] += point
end
end
end
end
[:good_institutions, :bad_institutions].each do |item|
if answer[item.to_s]
answer[item.to_s].each do |institution|
@results[item][institution] += 1
end
end
end
[:person_question, :rate_question, :quality_question].each do |item|
if answer[item.to_s]
@results[item][answer[item.to_s].to_i] += 1
end
end
end
t('survey_b.institutions').each do |i_key, institution|
(t('survey_b.questions').keys + ['count', 'sum', 'sum7'] ).each do |q_key|
@results['all'][q_key] += @results[i_key][q_key]
end
end
end
def export
if params[:period] && @period = SurveyBPeriod.find(params[:period])
@answers = ::SurveyBAnswer.where(:created_at.gte => @period.start_date, :created_at.lte => @period.end_date)
@comment_question = ::SurveyBAnswer.where(:created_at.gte => @period.start_date, :created_at.lte => @period.end_date, :comment_question.nin => [''])
else
@answers = ::SurveyBAnswer.all
@comment_question = ::SurveyBAnswer.where(:comment_question.nin => [''])
end
@results = Hash[(t('survey_b.institutions').keys + [ 'all' ]).map do |i_key|
[i_key, Hash[(t('survey_b.questions').keys + ['count', 'sum', 'sum7'] ).map{|q_key| [q_key, 0] }].merge({ 'count' => 0, 'sum' => 0, 'sum7' => 0 })]
end]
[:good_institutions, :bad_institutions].each do |item|
@results[item] = Hash[t('survey_b.institutions').map{|k, i| [k, 0] }]
end
[:person_question, :rate_question, :quality_question].each do |item|
@results[item] = t("survey_b.#{item}_options").map{|o| 0 }
end
@answers.each do |answer|
t('survey_b.institutions').each do |i_key, institution|
if answer[i_key.to_s]
@results[i_key]['count'] += 1
t('survey_b.questions').keys.each do |q_key|
point = 10 - ( answer[i_key.to_s][q_key.to_s].to_i * 2 )
@results[i_key][q_key] += point
@results[i_key]['sum'] += point
if q_key != :question6
@results[i_key]['sum7'] += point
end
end
end
end
[:good_institutions, :bad_institutions].each do |item|
if answer[item.to_s]
answer[item.to_s].each do |institution|
@results[item][institution] += 1
end
end
end
[:person_question, :rate_question, :quality_question].each do |item|
if answer[item.to_s]
@results[item][answer[item.to_s].to_i] += 1
end
end
end
t('survey_b.institutions').each do |i_key, institution|
(t('survey_b.questions').keys + ['count', 'sum', 'sum7'] ).each do |q_key|
@results['all'][q_key] += @results[i_key][q_key]
end
end
@setting = SurveyBSetting.first
headers['Content-Type'] = "application/vnd.ms-excel"
headers['Content-Disposition'] = "attachment; filename=#{@period.title}.xls"
headers['Cache-Control'] = ''
render :layout => false
end
end
@@ -1,88 +0,0 @@
class Panel::SurveyB::FrontEnd::SurveyBController < OrbitWidgetController
helper ApplicationHelper
def index
if params[:period].nil?
@period = SurveyBPeriod.get_current_survey()
else
@period = SurveyBPeriod.find(params[:period])
end
redirect_standalone panel_survey_b_front_end_survey_b_index_path( :standalone => 'true') do
@setting = SurveyBSetting.first_or_create
if params[:agree] == '1'
# @period = SurveyBPeriod.first
render :index, :layout => 'standalone'
else
# Escape from error when announcement is empty
if @setting.announcement.nil?
@setting.announcement = " "
end
render :announcement, :layout => 'standalone'
end
end
end
def create
answer = params[:answer]
@answer_model = ::SurveyBAnswer.new
not_answered = true
[:contact_name, :contact_phone, :contact_e_mail, :person_question, :rate_question, :quality_question].each do |item|
if answer[item].blank?
@answer_model.errors.add t("survey_b.#{item.to_s}_label"), t('survey_b.not_answered')
else
@answer_model[item] = answer[item]
end
end
@answer_model[:comment_question] = answer[:comment_question]
[:good_institutions, :bad_institutions].each do |item|
t('survey_b.institutions').each do |i_key, institution|
if answer[item][i_key] == '1'
@answer_model[item] ||= []
@answer_model[item].push i_key
end
end
end
t('survey_b.institutions').each do |i_key, institution|
if answer["institution_check"][i_key] == '1'
not_answered = false
@answer_model[i_key] ||= {}
t('survey_b.questions').each do |q_key, question|
if answer[i_key] && answer[i_key][q_key]
@answer_model[i_key][q_key] = answer[i_key][q_key]
else
@answer_model.errors.add institution + question, t('survey_b.not_answered')
end
end
end
end
if not_answered
@answer_model.errors.add t('survey_b.institution_check_label'), t('survey_b.not_answered')
end
if @answer_model.errors.empty?
@answer_model.save!
render :answer_success
else
@answer_error = @answer_model.errors.full_messages.join(',')
render :answer_error
end
end
def redirect_standalone url
unless params[:standalone] == 'true'
@redirect_url = url
render :redirect_standalone
else
module_app = ModuleApp.first(:conditions => {:key => 'survey_b'})
@item = Item.where(module_app_id: module_app.id).first
if @period
yield
else
# render :no_survey
# render :json => "No Survey"
render :no_survey, :layout => 'standalone'
end
end
end
end
@@ -1,5 +0,0 @@
class SurveyBAnswer
include Mongoid::Document
include Mongoid::Timestamps
end
@@ -1,41 +0,0 @@
class SurveyBPeriod
include Mongoid::Document
include Mongoid::Timestamps
field :title, :type => String
field :start_date, :type => DateTime
field :end_date, :type => DateTime
validates :start_date, :end_date, :presence => true
def self.get_current_survey
self.where(:start_date.lte => Time.now, :end_date.gte => Time.now).first
end
def isAvailable?
if start_date <= Time.now and end_date >= Time.now
return true
else
return false
end
end
def get_status_type
# status type
# reference to config/locales/en.yml and zh-tw.yml
# status_types:
# type1: 調查中
# type2: 未開始
# type3: 已結束
if start_date <= Time.now and end_date >= Time.now
return "type1"
end
if start_date > Time.now
return "type2"
end
if end_date < Time.now
return "type3"
end
end
end
@@ -1,17 +0,0 @@
class SurveyBSetting
include Mongoid::Document
field :description, :localize => true
field :announcement, :localize => true
def self.first_or_create
setting = self.first
unless setting
setting = self.new
setting.save
end
setting
end
end
@@ -1,43 +0,0 @@
<div id= "poststuff">
<div id="post-body">
<%= @period.errors.full_messages.join ', ' %>
<div id="sub-wiget" style="float: none;">
<div id="widget-title" class="widget-box widget-size-300">
<div class="widget-action clear tip" title="問卷標題">
<a href="#" class="action"><i class="icon-exclamation-sign icon-white"></i></a>
</div>
<h3 class="widget-title"><i class="icons-calendar"></i><%= t('survey_b.period_title') %></h3>
<div class="widget-content clear">
<div class="control-group">
<%= f.text_field :title %>
</div>
</div>
</div>
<br/>
<div id="widget-date" class="widget-box widget-size-300">
<div class="widget-action clear tip" title="<%= t('survey_b.period') %>">
<a href="#" class="action"><i class="icon-exclamation-sign icon-white"></i></a>
</div>
<h3 class="widget-title"><i class="icons-calendar"></i><%= t('survey_b.period') %></h3>
<div class="widget-content clear">
<div class="control-group">
<%= f.datetime_picker :start_date, :picker_type => 'separated', :label => t('survey.postdate') %>
</div>
<div class="control-group">
<%= f.datetime_picker :end_date, :picker_type => 'separated', :label => t('survey.deadline') %>
</div>
</div>
</div>
</div>
<div class="form-actions">
<%= 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" %>
</div>
</div>
</div>
@@ -1,33 +0,0 @@
<tr class="with_action">
<td>
<%= link_to period.title, panel_survey_b_front_end_survey_b_index_path(:period => period, :standalone => true), :target=>"_blank" %>
</td>
<td>
<a href="<%= result_panel_survey_b_back_end_survey_b_index_path(:period => period.id)%>">
<%= display_date_time period.start_date %>
-
<%= display_date_time period.end_date %>
</a>
<div class="quick-edit">
<ul class="nav nav-pills hide">
<li><%= link_to t('survey_b.result'), result_panel_survey_b_back_end_survey_b_index_path(:period => period, :page => params[:page]) %></li>
<li><%= link_to t(:list_), panel_survey_b_back_end_survey_b_index_path(:period => period, :page => params[:page]) %></li>
<li><%= link_to t('edit'), edit_panel_survey_b_back_end_period_path(period, :page => params[:page]) %></li>
<li><%= link_to t(:delete_), panel_survey_b_back_end_period_path(period), :confirm => t('sure?'), :method => :delete %></li>
<li><%= link_to t('survey_b.export'), export_panel_survey_b_back_end_survey_b_index_path(:period => period, :page => params[:page]) %></li>
</ul>
</div>
</td>
<td>
<% status_type = t('survey_b.status_types') %>
<% if period.start_date > Time.now %>
<span class="label label-info"><%= status_type[:type2] %></span>
<% end %>
<% if period.start_date <= Time.now and period.end_date >= Time.now %>
<span class="label label-success"><%= status_type[:type1] %></span>
<% end %>
<% if period.end_date < Time.now %>
<span class="label"><%= status_type[:type3] %></span>
<% end %>
</td>
</tr>
@@ -1,4 +0,0 @@
<h1><%= t(:edit) + t('survey_b.period') %></h1>
<%= form_for @period, :url => panel_survey_b_back_end_period_path(@period), :html => {:class => 'clear'} do |f| %>
<%= render :partial => 'form', :locals => {:f => f} %>
<% end %>
Loaded 100 of 133 files, more files were not shown because too many files have changed in this diff. Show more