kit_cms 2.3.20 → 2.3.22
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/app/assets/images/kit/toolbar/smile.png +0 -0
 - data/app/assets/images/kit/toolbar/wink.gif +0 -0
 - data/app/assets/images/kit/toolbar/wink.png +0 -0
 - data/app/assets/javascripts/codemirror/editor.js +55 -17
 - data/app/assets/javascripts/codemirror/jquery.js +0 -1
 - data/app/assets/javascripts/codemirror/ruby.js +196 -0
 - data/app/assets/javascripts/jquery.js +3036 -2838
 - data/app/assets/javascripts/kit/utilities.js +655 -586
 - data/app/assets/stylesheets/codemirror/style.css +1 -1
 - data/app/assets/stylesheets/codemirror/theme.css +23 -3
 - data/app/assets/stylesheets/kit/calendar.css +6 -1
 - data/app/assets/stylesheets/kit/cms/cms.css +36 -0
 - data/app/assets/stylesheets/kit/forums.css +5 -1
 - data/app/assets/stylesheets/kit/kit.css +3 -1
 - data/app/controllers/account_controller.rb +306 -0
 - data/app/controllers/ad_controller.rb +2 -0
 - data/app/controllers/admin/ad_units_controller.rb +1 -1
 - data/app/controllers/admin/ad_zones_controller.rb +15 -0
 - data/app/controllers/admin/ads_controller.rb +5 -0
 - data/app/controllers/admin/block_controller.rb +1 -65
 - data/app/controllers/admin/blocks_controller.rb +2 -0
 - data/app/controllers/admin/content_controller.rb +3 -1
 - data/app/controllers/admin/dashboard_controller.rb +28 -4
 - data/app/controllers/admin/dj_controller.rb +45 -0
 - data/app/controllers/admin/help_controller.rb +1 -1
 - data/app/controllers/admin/html_asset_controller.rb +0 -12
 - data/app/controllers/admin/q_controller.rb +120 -0
 - data/app/controllers/admin/user_controller.rb +4 -4
 - data/app/controllers/api_controller.rb +34 -0
 - data/app/controllers/calendar_controller.rb +1 -1
 - data/app/controllers/form_controller.rb +3 -3
 - data/app/controllers/forum_controller.rb +39 -29
 - data/app/controllers/kit_controller.rb +42 -15
 - data/app/controllers/pages_controller.rb +25 -5
 - data/app/controllers/q_controller.rb +235 -0
 - data/app/controllers/repo_controller.rb +7 -0
 - data/app/controllers/user_controller.rb +14 -10
 - data/app/controllers/utility_controller.rb +1 -1
 - data/app/helpers/account_helper.rb +47 -0
 - data/app/helpers/admin/layouts_helper.rb +8 -0
 - data/app/helpers/admin/page_templates_helper.rb +8 -0
 - data/app/helpers/ads_helper.rb +11 -12
 - data/app/helpers/calendar_helper.rb +6 -2
 - data/app/helpers/form_data_helper.rb +1 -1
 - data/app/helpers/form_helper.rb +8 -0
 - data/app/helpers/forum_helper.rb +5 -1
 - data/app/helpers/kit_helper.rb +65 -35
 - data/app/helpers/kit_modules_helper.rb +4 -0
 - data/app/helpers/user_helper.rb +0 -28
 - data/app/jobs/page_link_job.rb +34 -0
 - data/app/jobs/queue_job.rb +134 -0
 - data/app/mailers/notification.rb +10 -0
 - data/app/mailers/queue_mailer.rb +13 -0
 - data/app/models/ad.rb +6 -6
 - data/app/models/ad_unit.rb +1 -1
 - data/app/models/ad_zone.rb +4 -0
 - data/app/models/block.rb +1 -1
 - data/app/models/delayed_job.rb +3 -0
 - data/app/models/form.rb +16 -4
 - data/app/models/html_asset.rb +19 -4
 - data/app/models/html_asset_usage.rb +3 -0
 - data/app/models/html_assetable.rb +4 -0
 - data/app/models/layout.rb +36 -6
 - data/app/models/newsletter.rb +1 -1
 - data/app/models/page.rb +36 -2
 - data/app/models/page_link.rb +5 -0
 - data/app/models/page_template.rb +22 -2
 - data/app/models/preference.rb +1 -1
 - data/app/models/q_event.rb +12 -0
 - data/app/models/q_klass.rb +5 -0
 - data/app/models/q_message.rb +9 -0
 - data/app/models/q_publisher.rb +35 -0
 - data/app/models/q_subscription.rb +7 -0
 - data/app/models/q_user.rb +29 -0
 - data/app/models/q_users_method.rb +6 -0
 - data/app/models/q_users_publisher.rb +6 -0
 - data/app/models/user.rb +127 -19
 - data/app/models/user_login.rb +4 -0
 - data/app/validators/email_validator.rb +14 -0
 - data/app/views/account/_edit.html.haml +40 -0
 - data/app/views/account/_edit_intro.html.haml +3 -0
 - data/app/views/account/_forgotten.html.haml +20 -0
 - data/app/views/account/_forgotten_intro.html.haml +5 -0
 - data/app/views/account/_sign_in.html.haml +31 -0
 - data/app/views/account/_sign_in_intro.html.haml +4 -0
 - data/app/views/account/_sign_up.html.haml +51 -0
 - data/app/views/account/_sign_up_intro.html.haml +4 -0
 - data/app/views/account/edit.html.haml +1 -0
 - data/app/views/account/forgotten.html.haml +1 -0
 - data/app/views/account/sign_in.html.haml +2 -0
 - data/app/views/account/sign_up.html.haml +1 -0
 - data/app/views/ad/_buy.html.haml +2 -1
 - data/app/views/admin/ad_zones/_form.html.haml +1 -1
 - data/app/views/admin/ad_zones/show.html.haml +2 -0
 - data/app/views/admin/blocks/_form.html.haml +11 -1
 - data/app/views/admin/dashboard/broken_links.html.haml +9 -0
 - data/app/views/admin/dashboard/system.html.haml +11 -0
 - data/app/views/admin/dj/index.html.haml +43 -0
 - data/app/views/admin/form/_form.html.haml +15 -10
 - data/app/views/admin/group/index.html.haml +1 -1
 - data/app/views/admin/help/edit.html.haml +1 -1
 - data/app/views/admin/html_asset/show.html.haml +9 -2
 - data/app/views/admin/layouts/show.html.haml +10 -16
 - data/app/views/admin/page_templates/_form.html.haml +9 -17
 - data/app/views/admin/page_templates/show.html.haml +5 -4
 - data/app/views/admin/q/events.html.haml +26 -0
 - data/app/views/admin/q/index.html.haml +28 -0
 - data/app/views/admin/q/klasses.html.haml +61 -0
 - data/app/views/admin/q/messages.html.haml +37 -0
 - data/app/views/admin/q/show.html.haml +98 -0
 - data/app/views/admin/q/subscriptions.html.haml +26 -0
 - data/app/views/admin/q/users.html.haml +27 -0
 - data/app/views/admin/snippet/edit.html.erb +1 -1
 - data/app/views/admin/snippet/new.html.erb +1 -1
 - data/app/views/admin/stylesheet/show.html.haml +1 -1
 - data/app/views/admin/user/index.html.erb +15 -6
 - data/app/views/admin/user/view.html.erb +5 -4
 - data/app/views/admin/views/_form.html.haml +3 -3
 - data/app/views/calendar/_buy_tickets.html.haml +1 -1
 - data/app/views/calendar/_calendar_entry.html.haml +1 -1
 - data/app/views/calendar/_month.html.haml +7 -7
 - data/app/views/form/_show.html.haml +1 -1
 - data/app/views/forum/_add_post.html.haml +7 -8
 - data/app/views/forum/_mod_thread.js.erb +46 -6
 - data/app/views/forum/_post_moderation.html.haml +2 -1
 - data/app/views/forum/_post_preview.html.haml +1 -9
 - data/app/views/forum/_post_scripts.js.erb +29 -5
 - data/app/views/forum/fetch_raw.html.haml +1 -0
 - data/app/views/forum/moderate.html.haml +1 -0
 - data/app/views/forum/topic_index.html.haml +4 -0
 - data/app/views/notification/{event.txt.erb → event.text.erb} +0 -0
 - data/app/views/notification/forgotten_password.text.erb +2 -0
 - data/app/views/pages/content_edit.html.haml +1 -1
 - data/app/views/pages/info.html.erb +13 -2
 - data/app/views/pages/links.html.haml +63 -0
 - data/app/views/user/edit_profile.html.haml +1 -1
 - data/app/views/utility/_cm_editor.html.erb +13 -10
 - data/app/views/utility/_cm_toolbar_markdown.html.haml +8 -1
 - data/app/views/utility/_menu.html.haml +4 -0
 - data/app/views/utility/mercury_html.html.haml +1 -0
 - data/config/initializers/elastic_search.rb +6 -3
 - data/config/initializers/extend_controller.rb +3 -0
 - data/config/initializers/string.rb +9 -6
 - data/config/initializers/warden.rb +49 -0
 - data/config/locales/en.yml +29 -1
 - data/config/routes.rb +35 -2
 - data/lib/kit_cms.rb +7 -2
 - data/lib/tasks/kit.rake +90 -2
 - metadata +139 -27
 - data/app/controllers/user/confirmations_controller.rb +0 -11
 - data/app/controllers/user/passwords_controller.rb +0 -13
 - data/app/controllers/user/registrations_controller.rb +0 -110
 - data/app/controllers/user/sessions_controller.rb +0 -33
 - data/app/controllers/user/unlocks_controller.rb +0 -13
 - data/app/views/devise/_links.erb +0 -25
 - data/app/views/devise/confirmations/new.html.erb +0 -12
 - data/app/views/devise/mailer/confirmation_instructions.html.erb +0 -5
 - data/app/views/devise/mailer/reset_password_instructions.html.erb +0 -8
 - data/app/views/devise/mailer/unlock_instructions.html.erb +0 -7
 - data/app/views/devise/passwords/edit.html.erb +0 -16
 - data/app/views/devise/passwords/new.html.erb +0 -12
 - data/app/views/devise/registrations/edit.html.erb +0 -28
 - data/app/views/devise/registrations/new.html.erb +0 -18
 - data/app/views/devise/sessions/new.html.erb +0 -18
 - data/app/views/devise/shared/_links.erb +0 -25
 - data/app/views/devise/unlocks/new.html.erb +0 -12
 - data/app/views/pages/links.html.erb +0 -8
 - data/app/views/user/shared/_links.erb +0 -25
 - data/config/initializers/devise.rb +0 -196
 - data/config/initializers/devise_extender.rb +0 -39
 
| 
         @@ -0,0 +1,235 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            class QController < ApiController
         
     | 
| 
      
 2 
     | 
    
         
            +
              before_filter :publisher_authenticate, :except=>[:token, :extauth, :auth, :messages, :subscribe, :unsubscribe]
         
     | 
| 
      
 3 
     | 
    
         
            +
              before_filter :user_authenticate, :only=>[:messages, :subscribe, :unsubscribe]
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
              # notification messages
         
     | 
| 
      
 6 
     | 
    
         
            +
              # params: auth_id, user_id, session_token
         
     | 
| 
      
 7 
     | 
    
         
            +
              # optional: after (date/time)
         
     | 
| 
      
 8 
     | 
    
         
            +
              #           status
         
     | 
| 
      
 9 
     | 
    
         
            +
              #           page (paginated results)
         
     | 
| 
      
 10 
     | 
    
         
            +
              #           per (number per page, default 10)
         
     | 
| 
      
 11 
     | 
    
         
            +
              #           limit (default 100)
         
     | 
| 
      
 12 
     | 
    
         
            +
              #           min_id (IDs must be greater than this)
         
     | 
| 
      
 13 
     | 
    
         
            +
              def messages
         
     | 
| 
      
 14 
     | 
    
         
            +
                s = @quser.q_messages.sys(_sid).includes(:q_publisher).order("id desc")
         
     | 
| 
      
 15 
     | 
    
         
            +
                s = s.where(["created_at > ?", params[:after]]) if params[:after]
         
     | 
| 
      
 16 
     | 
    
         
            +
                s = s.where(["status = ?", params[:status]]) if params[:status]
         
     | 
| 
      
 17 
     | 
    
         
            +
                s = s.where(["id > ?", params[:min_id]]) if params[:min_id]
         
     | 
| 
      
 18 
     | 
    
         
            +
                s = s.limit(params[:limit] || 100) 
         
     | 
| 
      
 19 
     | 
    
         
            +
                s = s.page(params[:page]).per(params[:per] || 10) if params[:page]
         
     | 
| 
      
 20 
     | 
    
         
            +
                
         
     | 
| 
      
 21 
     | 
    
         
            +
                r = []
         
     | 
| 
      
 22 
     | 
    
         
            +
                s.all.each do |ss|
         
     | 
| 
      
 23 
     | 
    
         
            +
                  r << { :id=>ss.id, :status=>ss.status, :h1=>ss.h1, :h2=>ss.h2, :body=>ss.body, :publisher=>ss.q_publisher.name, :created_at=>ss.created_at }
         
     | 
| 
      
 24 
     | 
    
         
            +
                  unless params[:nomark]
         
     | 
| 
      
 25 
     | 
    
         
            +
                    ss.status = "OK"
         
     | 
| 
      
 26 
     | 
    
         
            +
                    ss.save
         
     | 
| 
      
 27 
     | 
    
         
            +
                  end
         
     | 
| 
      
 28 
     | 
    
         
            +
                end 
         
     | 
| 
      
 29 
     | 
    
         
            +
                logger.debug r.to_json
         
     | 
| 
      
 30 
     | 
    
         
            +
                render :json=>r, :callback=>params[:callback]
         
     | 
| 
      
 31 
     | 
    
         
            +
              end
         
     | 
| 
      
 32 
     | 
    
         
            +
             
     | 
| 
      
 33 
     | 
    
         
            +
              # call client's authentication URL with whatever params are passed to this method
         
     | 
| 
      
 34 
     | 
    
         
            +
              # returns: if auth URL returns status code 200, return the same as "register" would return
         
     | 
| 
      
 35 
     | 
    
         
            +
              # else, return whatever the auth URL returned
         
     | 
| 
      
 36 
     | 
    
         
            +
              def extauth
         
     | 
| 
      
 37 
     | 
    
         
            +
                head :error 
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              # authenticate an already-registered user, and potentially set their notification method
         
     | 
| 
      
 41 
     | 
    
         
            +
              # params: auth_id
         
     | 
| 
      
 42 
     | 
    
         
            +
              #         user: id
         
     | 
| 
      
 43 
     | 
    
         
            +
              #         password: unencrypted
         
     | 
| 
      
 44 
     | 
    
         
            +
              def auth
         
     | 
| 
      
 45 
     | 
    
         
            +
                @publisher = QPublisher.sys(_sid).where(:auth_id=>params[:auth_id]).first
         
     | 
| 
      
 46 
     | 
    
         
            +
             
     | 
| 
      
 47 
     | 
    
         
            +
                quser = @publisher.q_users.sys(_sid).where(:id=>params[:user_id]).first
         
     | 
| 
      
 48 
     | 
    
         
            +
             
     | 
| 
      
 49 
     | 
    
         
            +
                if quser && quser.password == params[:password]
         
     | 
| 
      
 50 
     | 
    
         
            +
                  update_notification(quser)
         
     | 
| 
      
 51 
     | 
    
         
            +
                  quser.generate_session_token 
         
     | 
| 
      
 52 
     | 
    
         
            +
                  quser.save
         
     | 
| 
      
 53 
     | 
    
         
            +
                  render :json=>{:error=>nil, :session=>quser.session_token}, :callback=>params[:callback]
         
     | 
| 
      
 54 
     | 
    
         
            +
                else
         
     | 
| 
      
 55 
     | 
    
         
            +
                  render :json=>{:error=>"Incorrect username or password"}, :callback=>params[:callback]
         
     | 
| 
      
 56 
     | 
    
         
            +
                end
         
     | 
| 
      
 57 
     | 
    
         
            +
              end
         
     | 
| 
      
 58 
     | 
    
         
            +
             
     | 
| 
      
 59 
     | 
    
         
            +
              # send system_id and password to get a token which can be use for token authentication (if publisher auth method is token) or encrypting requests (if publisher auth method is digest)
         
     | 
| 
      
 60 
     | 
    
         
            +
              # params: auth_id, auth_secret
         
     | 
| 
      
 61 
     | 
    
         
            +
              # returns: token
         
     | 
| 
      
 62 
     | 
    
         
            +
              def token
         
     | 
| 
      
 63 
     | 
    
         
            +
                publisher = QPublisher.sys(_sid).where(:auth_id=>params[:auth_id]).first
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                if publisher && publisher.auth_secret == params[:auth_secret]
         
     | 
| 
      
 66 
     | 
    
         
            +
                  render :json=>{:auth_id=>publisher.auth_id, :token=>publisher.token}
         
     | 
| 
      
 67 
     | 
    
         
            +
                else
         
     | 
| 
      
 68 
     | 
    
         
            +
                  head :forbidden
         
     | 
| 
      
 69 
     | 
    
         
            +
                end
         
     | 
| 
      
 70 
     | 
    
         
            +
              end
         
     | 
| 
      
 71 
     | 
    
         
            +
             
     | 
| 
      
 72 
     | 
    
         
            +
              # associate a user ID with a notification method/address
         
     | 
| 
      
 73 
     | 
    
         
            +
              # params: user (the external ID by which the user is known)
         
     | 
| 
      
 74 
     | 
    
         
            +
              #         auth_id (the publisher auth ID)
         
     | 
| 
      
 75 
     | 
    
         
            +
              #         method (the notification method)
         
     | 
| 
      
 76 
     | 
    
         
            +
              #         address (the address at which they can be notified)
         
     | 
| 
      
 77 
     | 
    
         
            +
              #         encrypted_password (optional, to allow direct authentication, should already be bcrypted)
         
     | 
| 
      
 78 
     | 
    
         
            +
              #         password (optional, to allow direct authentication, will be bcrypted)
         
     | 
| 
      
 79 
     | 
    
         
            +
              def register
         
     | 
| 
      
 80 
     | 
    
         
            +
                quser = @publisher.q_users.sys(_sid).where(:q_external_id=>params[:user]).first
         
     | 
| 
      
 81 
     | 
    
         
            +
                
         
     | 
| 
      
 82 
     | 
    
         
            +
                if quser
         
     | 
| 
      
 83 
     | 
    
         
            +
                  if quser.password != params[:password]
         
     | 
| 
      
 84 
     | 
    
         
            +
                    head :forbidden
         
     | 
| 
      
 85 
     | 
    
         
            +
                    return
         
     | 
| 
      
 86 
     | 
    
         
            +
                  else
         
     | 
| 
      
 87 
     | 
    
         
            +
                    quser.password = params[:new_password] if params[:new_password]
         
     | 
| 
      
 88 
     | 
    
         
            +
                  end
         
     | 
| 
      
 89 
     | 
    
         
            +
                else
         
     | 
| 
      
 90 
     | 
    
         
            +
                  quser = QUser.new
         
     | 
| 
      
 91 
     | 
    
         
            +
                  quser.system_id = _sid
         
     | 
| 
      
 92 
     | 
    
         
            +
                  quser.q_publisher = @publisher.id
         
     | 
| 
      
 93 
     | 
    
         
            +
                  quser.q_external_id = params[:user]
         
     | 
| 
      
 94 
     | 
    
         
            +
                  quser.encrypted_password = params[:encrypted_password] if params[:encrypted_password]
         
     | 
| 
      
 95 
     | 
    
         
            +
                end
         
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
                update_notification(quser) 
         
     | 
| 
      
 98 
     | 
    
         
            +
                quser.save
         
     | 
| 
      
 99 
     | 
    
         
            +
                unless quser.q_external_id
         
     | 
| 
      
 100 
     | 
    
         
            +
                  quser.q_external_id = quser.id
         
     | 
| 
      
 101 
     | 
    
         
            +
                  quser.save
         
     | 
| 
      
 102 
     | 
    
         
            +
                end
         
     | 
| 
      
 103 
     | 
    
         
            +
                render :json=>{:id=>quser.q_external_id}, :callback=>params[:callback]
         
     | 
| 
      
 104 
     | 
    
         
            +
              end
         
     | 
| 
      
 105 
     | 
    
         
            +
             
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
              # deregistered a User ID with a notification method/address - i.e. destroy the user account
         
     | 
| 
      
 108 
     | 
    
         
            +
              # params: user (the external ID by which the user is known)
         
     | 
| 
      
 109 
     | 
    
         
            +
              def deregister
         
     | 
| 
      
 110 
     | 
    
         
            +
                quser = @publisher.q_users.sys(_sid).where(:q_external_id=>params[:user]).first
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
                quser.destroy
         
     | 
| 
      
 113 
     | 
    
         
            +
                head :ok
         
     | 
| 
      
 114 
     | 
    
         
            +
              end
         
     | 
| 
      
 115 
     | 
    
         
            +
             
     | 
| 
      
 116 
     | 
    
         
            +
              # subscribe to a topic (i.e. receive a notification when that topic happens)
         
     | 
| 
      
 117 
     | 
    
         
            +
              # params: user (the external ID by which the user is known)
         
     | 
| 
      
 118 
     | 
    
         
            +
              #         topic (the topic to which is being subscribed)
         
     | 
| 
      
 119 
     | 
    
         
            +
              def subscribe
         
     | 
| 
      
 120 
     | 
    
         
            +
                quser = @publisher.q_users.sys(_sid).where(:q_external_id=>params[:user]).first
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
                unless quser
         
     | 
| 
      
 123 
     | 
    
         
            +
                 head :bad_request
         
     | 
| 
      
 124 
     | 
    
         
            +
                 return
         
     | 
| 
      
 125 
     | 
    
         
            +
                end
         
     | 
| 
      
 126 
     | 
    
         
            +
                
         
     | 
| 
      
 127 
     | 
    
         
            +
                qs = QSubscription.sys(_sid).where(:q_publisher_id=>@publisher.id).where(:q_user_id=>quser.id).where(:topic=>params[:topic]).first
         
     | 
| 
      
 128 
     | 
    
         
            +
                unless qs
         
     | 
| 
      
 129 
     | 
    
         
            +
                  qs = QSubscription.new
         
     | 
| 
      
 130 
     | 
    
         
            +
                  qs.system_id = _sid
         
     | 
| 
      
 131 
     | 
    
         
            +
                  qs.q_publisher = @publisher
         
     | 
| 
      
 132 
     | 
    
         
            +
                  qs.q_user = quser
         
     | 
| 
      
 133 
     | 
    
         
            +
                  qs.topic = params[:topic]
         
     | 
| 
      
 134 
     | 
    
         
            +
                  qs.save
         
     | 
| 
      
 135 
     | 
    
         
            +
                end
         
     | 
| 
      
 136 
     | 
    
         
            +
             
     | 
| 
      
 137 
     | 
    
         
            +
                render :json=>{:subscription=>qs.id}
         
     | 
| 
      
 138 
     | 
    
         
            +
              end
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
              # unsubscribe from topic (i.e. stop receiving notifications when a topic happens)
         
     | 
| 
      
 141 
     | 
    
         
            +
              # params: user (the external ID by which the user is known)
         
     | 
| 
      
 142 
     | 
    
         
            +
              #         topic (the topic to which is being unsubscribed)
         
     | 
| 
      
 143 
     | 
    
         
            +
              def unsubscribe
         
     | 
| 
      
 144 
     | 
    
         
            +
                quser = @publisher.q_users.sys(_sid).where(:q_external_id=>params[:user]).first
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
                unless quser
         
     | 
| 
      
 147 
     | 
    
         
            +
                 head :bad_request
         
     | 
| 
      
 148 
     | 
    
         
            +
                 return
         
     | 
| 
      
 149 
     | 
    
         
            +
                end
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
                qs = QSubscription.sys(_sid).where(:q_publisher_id=>@publisher.id).where(:q_user_id=>quser.id).where(:topic=>params[:topic]).first
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
                qs.destroy    
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
                head :ok
         
     | 
| 
      
 156 
     | 
    
         
            +
              end
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
              def event
         
     | 
| 
      
 159 
     | 
    
         
            +
                event = QEvent.create(:system_id=>_sid, :q_publisher_id=>@publisher.id, 
         
     | 
| 
      
 160 
     | 
    
         
            +
                                      :topic=>params[:topic], :data=>params[:data], 
         
     | 
| 
      
 161 
     | 
    
         
            +
                                      :klass=>params[:class])
         
     | 
| 
      
 162 
     | 
    
         
            +
             
     | 
| 
      
 163 
     | 
    
         
            +
                render :json=>{:event=>event.id} 
         
     | 
| 
      
 164 
     | 
    
         
            +
              end
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
              private
         
     | 
| 
      
 167 
     | 
    
         
            +
             
     | 
| 
      
 168 
     | 
    
         
            +
              def user_authenticate
         
     | 
| 
      
 169 
     | 
    
         
            +
               if params[:auth_id] && params[:user_id]
         
     | 
| 
      
 170 
     | 
    
         
            +
                 @publisher = QPublisher.sys(_sid).where(:auth_id=>params[:auth_id]).first
         
     | 
| 
      
 171 
     | 
    
         
            +
                 @quser = @publisher.q_users.sys(_sid).where(:id=>params[:user_id]).first if @publisher
         
     | 
| 
      
 172 
     | 
    
         
            +
                end
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
                unless @publisher && @quser
         
     | 
| 
      
 175 
     | 
    
         
            +
                  head :forbidden
         
     | 
| 
      
 176 
     | 
    
         
            +
                  return
         
     | 
| 
      
 177 
     | 
    
         
            +
                end
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
               return true if @quser.session_token && @quser.session_token == params[:session_token]
         
     | 
| 
      
 180 
     | 
    
         
            +
               return publisher_authenticate
         
     | 
| 
      
 181 
     | 
    
         
            +
              end
         
     | 
| 
      
 182 
     | 
    
         
            +
              
         
     | 
| 
      
 183 
     | 
    
         
            +
              def publisher_authenticate
         
     | 
| 
      
 184 
     | 
    
         
            +
                @publisher ||= QPublisher.sys(_sid).where(:auth_id=>params[:auth_id]).first
         
     | 
| 
      
 185 
     | 
    
         
            +
             
     | 
| 
      
 186 
     | 
    
         
            +
                auth = false
         
     | 
| 
      
 187 
     | 
    
         
            +
             
     | 
| 
      
 188 
     | 
    
         
            +
                if @publisher.auth_method=='token'
         
     | 
| 
      
 189 
     | 
    
         
            +
                  auth = authenticate_token
         
     | 
| 
      
 190 
     | 
    
         
            +
                elsif @publisher.auth_method=='digest'
         
     | 
| 
      
 191 
     | 
    
         
            +
                  auth = authenticate_digest
         
     | 
| 
      
 192 
     | 
    
         
            +
                end
         
     | 
| 
      
 193 
     | 
    
         
            +
             
     | 
| 
      
 194 
     | 
    
         
            +
                if auth
         
     | 
| 
      
 195 
     | 
    
         
            +
                  return true
         
     | 
| 
      
 196 
     | 
    
         
            +
                else
         
     | 
| 
      
 197 
     | 
    
         
            +
                  head :forbidden
         
     | 
| 
      
 198 
     | 
    
         
            +
                  return false
         
     | 
| 
      
 199 
     | 
    
         
            +
                end
         
     | 
| 
      
 200 
     | 
    
         
            +
              end
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
              # encrypt, using the token, the digest_secret, the user ID (or '0'), the topic (or '0')
         
     | 
| 
      
 203 
     | 
    
         
            +
              def authenticate_digest
         
     | 
| 
      
 204 
     | 
    
         
            +
                return false unless params[:digest]
         
     | 
| 
      
 205 
     | 
    
         
            +
                aes = FastAES.new(@publisher.token)
         
     | 
| 
      
 206 
     | 
    
         
            +
                data = aes.decrypt(params[:digest]).split('-')
         
     | 
| 
      
 207 
     | 
    
         
            +
            #    logger.debug "*** #{data[0]} #{data[1]} #{data[2]}"
         
     | 
| 
      
 208 
     | 
    
         
            +
                return false unless data[0] == @publisher.digest_secret
         
     | 
| 
      
 209 
     | 
    
         
            +
                return false unless data[1] == params[:user] unless data[1]=='0'
         
     | 
| 
      
 210 
     | 
    
         
            +
                return false unless data[2] == params[:topic] unless data[2]=='0'
         
     | 
| 
      
 211 
     | 
    
         
            +
                return true 
         
     | 
| 
      
 212 
     | 
    
         
            +
              end
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
              def authenticate_token
         
     | 
| 
      
 215 
     | 
    
         
            +
                  if @publisher.token == params[:token]
         
     | 
| 
      
 216 
     | 
    
         
            +
                    return true
         
     | 
| 
      
 217 
     | 
    
         
            +
                  else
         
     | 
| 
      
 218 
     | 
    
         
            +
                    return false
         
     | 
| 
      
 219 
     | 
    
         
            +
                  end
         
     | 
| 
      
 220 
     | 
    
         
            +
              end    
         
     | 
| 
      
 221 
     | 
    
         
            +
             
     | 
| 
      
 222 
     | 
    
         
            +
              def update_notification(quser)
         
     | 
| 
      
 223 
     | 
    
         
            +
                 quser.notification_method = params[:method] if params[:method]
         
     | 
| 
      
 224 
     | 
    
         
            +
                  if params[:method]=='twitter'
         
     | 
| 
      
 225 
     | 
    
         
            +
                    quser.twitter_handle  = params[:address]
         
     | 
| 
      
 226 
     | 
    
         
            +
                  elsif params[:method]=='email'
         
     | 
| 
      
 227 
     | 
    
         
            +
                    quser.email = params[:address]
         
     | 
| 
      
 228 
     | 
    
         
            +
                  elsif params[:method]=='ios'
         
     | 
| 
      
 229 
     | 
    
         
            +
                    quser.ios_device_token = params[:address]
         
     | 
| 
      
 230 
     | 
    
         
            +
                  end
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
                  return quser
         
     | 
| 
      
 233 
     | 
    
         
            +
              end  
         
     | 
| 
      
 234 
     | 
    
         
            +
            end
         
     | 
| 
      
 235 
     | 
    
         
            +
             
     | 
| 
         @@ -1,15 +1,12 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            class UserController < KitController
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
               
     | 
| 
       4 
     | 
    
         
            -
              append_view_path Layout.resolver  
         
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
       6 
     | 
    
         
            -
              before_filter :authenticate_user!
         
     | 
| 
      
 3 
     | 
    
         
            +
              before_filter :authenticate
         
     | 
| 
       7 
4 
     | 
    
         | 
| 
       8 
5 
     | 
    
         
             
              def preferences
         
     | 
| 
       9 
6 
     | 
    
         
             
                @page_title = 'Preferences'
         
     | 
| 
       10 
7 
     | 
    
         
             
                @user = current_user
         
     | 
| 
       11 
8 
     | 
    
         | 
| 
       12 
     | 
    
         
            -
             
     | 
| 
      
 9 
     | 
    
         
            +
                render "preferences", :layout=>profile_layout
         
     | 
| 
       13 
10 
     | 
    
         
             
              end
         
     | 
| 
       14 
11 
     | 
    
         | 
| 
       15 
12 
     | 
    
         
             
              def profile
         
     | 
| 
         @@ -28,9 +25,11 @@ class UserController < KitController 
     | 
|
| 
       28 
25 
     | 
    
         
             
              def edit_profile
         
     | 
| 
       29 
26 
     | 
    
         
             
                form = Preference.get_cached(_sid, 'user_profile_edit_form')
         
     | 
| 
       30 
27 
     | 
    
         
             
                if form.not_blank?
         
     | 
| 
       31 
     | 
    
         
            -
                  render :inline=>form, :layout=>Preference.get_cached!(0,"user_profile_layout", "application") #TODO sub in auth token
         
     | 
| 
      
 28 
     | 
    
         
            +
                  render :inline=>form, :layout=>profile_layout # Preference.get_cached!(0,"user_profile_layout", "application") #TODO sub in auth token
         
     | 
| 
       32 
29 
     | 
    
         
             
                  return
         
     | 
| 
       33 
30 
     | 
    
         
             
                end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                render "edit_profile", :layout=>profile_layout
         
     | 
| 
       34 
33 
     | 
    
         
             
              end
         
     | 
| 
       35 
34 
     | 
    
         | 
| 
       36 
35 
     | 
    
         
             
              def attribute
         
     | 
| 
         @@ -135,7 +134,7 @@ class UserController < KitController 
     | 
|
| 
       135 
134 
     | 
    
         
             
                  end
         
     | 
| 
       136 
135 
     | 
    
         
             
                end
         
     | 
| 
       137 
136 
     | 
    
         | 
| 
       138 
     | 
    
         
            -
                kit_render "preferences", :layout=> 
     | 
| 
      
 137 
     | 
    
         
            +
                kit_render "preferences", :layout=>profile_layout
         
     | 
| 
       139 
138 
     | 
    
         
             
              end
         
     | 
| 
       140 
139 
     | 
    
         | 
| 
       141 
140 
     | 
    
         
             
              private
         
     | 
| 
         @@ -144,11 +143,16 @@ class UserController < KitController 
     | 
|
| 
       144 
143 
     | 
    
         
             
                render :text=>"User not found" and return unless @user
         
     | 
| 
       145 
144 
     | 
    
         | 
| 
       146 
145 
     | 
    
         
             
                form = Preference.get_cached(_sid, "user_profile_#{owner ? 'owner' : 'view'}_form")
         
     | 
| 
      
 146 
     | 
    
         
            +
                
         
     | 
| 
       147 
147 
     | 
    
         
             
                if form.not_blank?
         
     | 
| 
       148 
     | 
    
         
            -
                  render :inline=>form, :layout=> 
     | 
| 
      
 148 
     | 
    
         
            +
                  render :inline=>form, :layout=>profile_layout
         
     | 
| 
       149 
149 
     | 
    
         
             
                else
         
     | 
| 
       150 
     | 
    
         
            -
                  render "user_profile"
         
     | 
| 
      
 150 
     | 
    
         
            +
                  render "user_profile", :layout=>profile_layout
         
     | 
| 
       151 
151 
     | 
    
         
             
                end
         
     | 
| 
       152 
152 
     | 
    
         
             
              end
         
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
      
 153 
     | 
    
         
            +
             
         
     | 
| 
      
 154 
     | 
    
         
            +
              def profile_layout
         
     | 
| 
      
 155 
     | 
    
         
            +
                Layout.preference(_sid, 'user_profile_layout').path
         
     | 
| 
      
 156 
     | 
    
         
            +
              end
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
       154 
158 
     | 
    
         
             
            end
         
     | 
| 
         @@ -0,0 +1,47 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            module AccountHelper
         
     | 
| 
      
 2 
     | 
    
         
            +
              include KitHelper
         
     | 
| 
      
 3 
     | 
    
         
            +
             
     | 
| 
      
 4 
     | 
    
         
            +
              def users_have_profiles?
         
     | 
| 
      
 5 
     | 
    
         
            +
                UserAttribute.sys(_sid).where(:owner_editable=>1).count>0
         
     | 
| 
      
 6 
     | 
    
         
            +
              end
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
              def account_forgotten(options = {})
         
     | 
| 
      
 9 
     | 
    
         
            +
                render :partial=>"account/forgotten", :locals=>{:options=>options}
         
     | 
| 
      
 10 
     | 
    
         
            +
              end
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
              def account_sign_in_form(options = {})
         
     | 
| 
      
 13 
     | 
    
         
            +
                render :partial=>"account/sign_in", :locals=>{:options=>options}
         
     | 
| 
      
 14 
     | 
    
         
            +
              end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
              def account_sign_up_form(options = {})
         
     | 
| 
      
 17 
     | 
    
         
            +
                render :partial=>"account/sign_up", :locals=>{:options=>options}
         
     | 
| 
      
 18 
     | 
    
         
            +
              end
         
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
              def account_edit_form(options = {})
         
     | 
| 
      
 21 
     | 
    
         
            +
                render :partial=>"account/edit", :locals=>{:options=>options}
         
     | 
| 
      
 22 
     | 
    
         
            +
              end
         
     | 
| 
      
 23 
     | 
    
         
            +
             
     | 
| 
      
 24 
     | 
    
         
            +
              def sign_up_url
         
     | 
| 
      
 25 
     | 
    
         
            +
                sys_pref("account_sign_up_url") || "/users/sign_up"
         
     | 
| 
      
 26 
     | 
    
         
            +
              end
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
              def sign_in_url
         
     | 
| 
      
 29 
     | 
    
         
            +
                sys_pref("account_sign_in_url") || "/users/sign_in"
         
     | 
| 
      
 30 
     | 
    
         
            +
              end
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
              def sign_out_url
         
     | 
| 
      
 33 
     | 
    
         
            +
                sys_pref("account_sign_out_url") || "/users/sign_out"
         
     | 
| 
      
 34 
     | 
    
         
            +
              end
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
              def forgotten_url
         
     | 
| 
      
 37 
     | 
    
         
            +
                sys_pref("account_forgotten_url") || "/users/forgotten"
         
     | 
| 
      
 38 
     | 
    
         
            +
              end
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
              def reset_url
         
     | 
| 
      
 41 
     | 
    
         
            +
                sys_pref("account_reset_url") || "/users/reset"
         
     | 
| 
      
 42 
     | 
    
         
            +
              end
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
              def account_reset_failed(options = {})
         
     | 
| 
      
 45 
     | 
    
         
            +
                render :partial=>"account/account_reset_failed", :locals=>{:options=>options}
         
     | 
| 
      
 46 
     | 
    
         
            +
              end
         
     | 
| 
      
 47 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -1,5 +1,13 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Admin::PageTemplatesHelper
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
      
 3 
     | 
    
         
            +
              def page_template_asset_selected(asset)
         
     | 
| 
      
 4 
     | 
    
         
            +
                if @page_template && @page_template.id!=nil
         
     | 
| 
      
 5 
     | 
    
         
            +
                  @page_template.html_assets.include?(asset)
         
     | 
| 
      
 6 
     | 
    
         
            +
                else
         
     | 
| 
      
 7 
     | 
    
         
            +
                  false
         
     | 
| 
      
 8 
     | 
    
         
            +
                end
         
     | 
| 
      
 9 
     | 
    
         
            +
              end
         
     | 
| 
      
 10 
     | 
    
         
            +
              
         
     | 
| 
       3 
11 
     | 
    
         
             
              def show_html_assets(list, type)
         
     | 
| 
       4 
12 
     | 
    
         
             
                return '' unless list
         
     | 
| 
       5 
13 
     | 
    
         
             
                o = ''
         
     | 
    
        data/app/helpers/ads_helper.rb
    CHANGED
    
    | 
         @@ -28,6 +28,7 @@ module AdsHelper 
     | 
|
| 
       28 
28 
     | 
    
         
             
              end
         
     | 
| 
       29 
29 
     | 
    
         | 
| 
       30 
30 
     | 
    
         
             
              def kit_ad_by_unit(unit_id, options = {})
         
     | 
| 
      
 31 
     | 
    
         
            +
                return "[[ads may appear here]]" if params[:edit]
         
     | 
| 
       31 
32 
     | 
    
         
             
                begin
         
     | 
| 
       32 
33 
     | 
    
         
             
                  possible_zones = []
         
     | 
| 
       33 
34 
     | 
    
         
             
                  highest_priority = nil
         
     | 
| 
         @@ -43,7 +44,7 @@ module AdsHelper 
     | 
|
| 
       43 
44 
     | 
    
         
             
                  if possible_zones.length>0 
         
     | 
| 
       44 
45 
     | 
    
         
             
                    return kit_ad_by_zone(possible_zones, options)
         
     | 
| 
       45 
46 
     | 
    
         
             
                  else
         
     | 
| 
       46 
     | 
    
         
            -
                    return  
     | 
| 
      
 47 
     | 
    
         
            +
                    return nil
         
     | 
| 
       47 
48 
     | 
    
         
             
                  end
         
     | 
| 
       48 
49 
     | 
    
         
             
                rescue Exception => e
         
     | 
| 
       49 
50 
     | 
    
         
             
                  logger.error e.message
         
     | 
| 
         @@ -68,17 +69,15 @@ module AdsHelper 
     | 
|
| 
       68 
69 
     | 
    
         
             
              end
         
     | 
| 
       69 
70 
     | 
    
         | 
| 
       70 
71 
     | 
    
         
             
              def kit_ad(id, options = {})
         
     | 
| 
       71 
     | 
    
         
            -
             
     | 
| 
       72 
     | 
    
         
            -
             
     | 
| 
       73 
     | 
    
         
            -
             
     | 
| 
       74 
     | 
    
         
            -
             
     | 
| 
       75 
     | 
    
         
            -
             
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
             
     | 
| 
       78 
     | 
    
         
            -
             
     | 
| 
       79 
     | 
    
         
            -
             
     | 
| 
       80 
     | 
    
         
            -
             
     | 
| 
       81 
     | 
    
         
            -
             
     | 
| 
      
 72 
     | 
    
         
            +
                begin
         
     | 
| 
      
 73 
     | 
    
         
            +
                  ad = Ad.sys(_sid).where(:id=>id).includes(:ad_zones).first
         
     | 
| 
      
 74 
     | 
    
         
            +
                  
         
     | 
| 
      
 75 
     | 
    
         
            +
                  ad = Ad.ensure_ad(ad)
         
     | 
| 
      
 76 
     | 
    
         
            +
                  ad.impress
         
     | 
| 
      
 77 
     | 
    
         
            +
                  ad.render
         
     | 
| 
      
 78 
     | 
    
         
            +
                rescue Exception => e
         
     | 
| 
      
 79 
     | 
    
         
            +
                  e.message
         
     | 
| 
      
 80 
     | 
    
         
            +
                end
         
     | 
| 
       82 
81 
     | 
    
         
             
              end
         
     | 
| 
       83 
82 
     | 
    
         | 
| 
       84 
83 
     | 
    
         
             
              def zone_with_price(zone)
         
     | 
| 
         @@ -129,6 +129,7 @@ module CalendarHelper 
     | 
|
| 
       129 
129 
     | 
    
         
             
                entries = {}
         
     | 
| 
       130 
130 
     | 
    
         
             
                days_in_this_month = days_in_month(month)
         
     | 
| 
       131 
131 
     | 
    
         | 
| 
      
 132 
     | 
    
         
            +
                logger.debug "**** days in month #{month} #{days_in_this_month}"
         
     | 
| 
       132 
133 
     | 
    
         
             
                for i in 1..days_in_this_month do
         
     | 
| 
       133 
134 
     | 
    
         
             
                  entries[i] = []
         
     | 
| 
       134 
135 
     | 
    
         
             
                end
         
     | 
| 
         @@ -160,8 +161,11 @@ module CalendarHelper 
     | 
|
| 
       160 
161 
     | 
    
         
             
                end
         
     | 
| 
       161 
162 
     | 
    
         
             
              end
         
     | 
| 
       162 
163 
     | 
    
         | 
| 
       163 
     | 
    
         
            -
               
     | 
| 
       164 
     | 
    
         
            -
             
     | 
| 
      
 164 
     | 
    
         
            +
              COMMON_YEAR_DAYS_IN_MONTH = [nil, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
         
     | 
| 
      
 165 
     | 
    
         
            +
             
     | 
| 
      
 166 
     | 
    
         
            +
              def days_in_month(month, year = Time.now.year)
         
     | 
| 
      
 167 
     | 
    
         
            +
               return 29 if month == 2 && Date.gregorian_leap?(year)
         
     | 
| 
      
 168 
     | 
    
         
            +
               COMMON_YEAR_DAYS_IN_MONTH[month]
         
     | 
| 
       165 
169 
     | 
    
         
             
              end
         
     | 
| 
       166 
170 
     | 
    
         | 
| 
       167 
171 
     | 
    
         
             
              def regions_list
         
     |