diff --git a/admin/app/admin/jam_ruby_users.rb b/admin/app/admin/jam_ruby_users.rb index cce181faf..c079792e9 100644 --- a/admin/app/admin/jam_ruby_users.rb +++ b/admin/app/admin/jam_ruby_users.rb @@ -16,6 +16,13 @@ ActiveAdmin.register JamRuby::User, :as => 'Users' do form :partial => "form" + member_action :delete_forever, :method => :get do + resource.permanently_delete + redirect_to :back, {notice: 'User email and login credentials have been permanently changed'} + end + + + show do |user| panel "Common" do attributes_table do @@ -60,6 +67,11 @@ ActiveAdmin.register JamRuby::User, :as => 'Users' do end end end + row "Delete Forever" do |user| + span do + link_to("delete forever", delete_forever_admin_user_path(user.id), :data => {:confirm => 'Are you sure?'}) + end + end row :jamclass_credits row :via_amazon @@ -243,6 +255,7 @@ ActiveAdmin.register JamRuby::User, :as => 'Users' do @user.email = params[:jam_ruby_user][:email] @user.admin = params[:jam_ruby_user][:admin] @user.is_onboarder = params[:jam_ruby_user][:is_onboarder] + @user.subscribe_email = params[:jam_ruby_user][:subscribe_email] @user.musician = params[:jam_ruby_user][:musician] @user.first_name = params[:jam_ruby_user][:first_name] @user.last_name = params[:jam_ruby_user][:last_name] diff --git a/admin/app/views/admin/users/_form.html.slim b/admin/app/views/admin/users/_form.html.slim index 2e8d483b9..bb666c081 100644 --- a/admin/app/views/admin/users/_form.html.slim +++ b/admin/app/views/admin/users/_form.html.slim @@ -3,6 +3,7 @@ = f.input :email, label: 'Email' = f.input :admin = f.input :is_onboarder, label: 'Is Support Consultant' + = f.input :subscribe_email, label: 'Subscribed to Emails?' = f.input :first_name = f.input :last_name = f.input :city diff --git a/db/manifest b/db/manifest index 19a9059d2..3429696ea 100755 --- a/db/manifest +++ b/db/manifest @@ -383,4 +383,5 @@ age_out_sessions.sql alter_crash_dumps.sql onboarding.sql better_lesson_notices.sql -teacher_search_control.sql \ No newline at end of file +teacher_search_control.sql +user_timezone.sql \ No newline at end of file diff --git a/db/up/user_timezone.sql b/db/up/user_timezone.sql new file mode 100644 index 000000000..7f0e0da1d --- /dev/null +++ b/db/up/user_timezone.sql @@ -0,0 +1,2 @@ +ALTER TABLE users ADD COLUMN timezone VARCHAR; +ALTER TABLE users ADD COLUMN deleted BOOLEAN NOT NULL DEFAULT FALSE; \ No newline at end of file diff --git a/ruby/lib/jam_ruby/app/mailers/admin_mailer.rb b/ruby/lib/jam_ruby/app/mailers/admin_mailer.rb index 79f5c2c0f..4d6a50682 100644 --- a/ruby/lib/jam_ruby/app/mailers/admin_mailer.rb +++ b/ruby/lib/jam_ruby/app/mailers/admin_mailer.rb @@ -52,6 +52,15 @@ module JamRuby subject: options[:subject]) end + def ugly(options) + mail(to: options[:to], + cc: options[:cc], + from: APP_CONFIG.email_generic_from, + body: options[:body], + content_type: "text/plain", + subject: options[:subject]) + end + def recurly_alerts(user, options) body = options[:body] diff --git a/ruby/lib/jam_ruby/models/anonymous_user.rb b/ruby/lib/jam_ruby/models/anonymous_user.rb index e32a230ea..9890a52ba 100644 --- a/ruby/lib/jam_ruby/models/anonymous_user.rb +++ b/ruby/lib/jam_ruby/models/anonymous_user.rb @@ -41,6 +41,10 @@ module JamRuby 0 end + def timezone + @cookies[:'browser.timezone'] + end + def free_jamtracks if has_redeemable_jamtrack 1 diff --git a/ruby/lib/jam_ruby/models/lesson_booking.rb b/ruby/lib/jam_ruby/models/lesson_booking.rb index ddd30c2b1..58c4baa38 100644 --- a/ruby/lib/jam_ruby/models/lesson_booking.rb +++ b/ruby/lib/jam_ruby/models/lesson_booking.rb @@ -962,6 +962,7 @@ module JamRuby if lesson_booking.same_school lesson_booking.same_school_free = false # !user.school.education # non-education schools (music schools) are 'free' when school-on-school end + user.update_timezone(lesson_booking_slots[0].timezone) if lesson_booking_slots.length > 0 else lesson_booking.same_school = false lesson_booking.same_school_free = false @@ -975,7 +976,7 @@ module JamRuby end if lesson_booking_slots if lesson_booking.save - description = '' if description.nil? + description = '' if description.nil? msg = ChatMessage.create(user, lesson_booking.lesson_sessions[0], description, ChatMessage::CHANNEL_LESSON, nil, teacher, lesson_booking.lesson_sessions[0], 'Lesson Requested') end end diff --git a/ruby/lib/jam_ruby/models/lesson_booking_slot.rb b/ruby/lib/jam_ruby/models/lesson_booking_slot.rb index 0b190609f..74911ae5f 100644 --- a/ruby/lib/jam_ruby/models/lesson_booking_slot.rb +++ b/ruby/lib/jam_ruby/models/lesson_booking_slot.rb @@ -166,12 +166,14 @@ module JamRuby found ||= lesson_session.lesson_booking end - def pretty_scheduled_start(with_timezone = true) + def pretty_scheduled_start(with_timezone = true, user_tz = nil) start_time = scheduled_time(0) + tz_identifier = user_tz || self.timezone + begin - tz = TZInfo::Timezone.get(timezone) + tz = TZInfo::Timezone.get(tz_identifier) rescue Exception => e @@log.error("unable to find timezone=#{tz_identifier}, e=#{e}") end @@ -205,12 +207,14 @@ module JamRuby end end - def pretty_start_time(with_timezone = true) + def pretty_start_time(with_timezone = true, user_tz = nil) start_time = scheduled_time(0) + tz_identifier = user_tz || self.timezone + begin - tz = TZInfo::Timezone.get(timezone) + tz = TZInfo::Timezone.get(tz_identifier) rescue Exception => e @@log.error("unable to find timezone=#{tz_identifier}, e=#{e}") end diff --git a/ruby/lib/jam_ruby/models/lesson_session.rb b/ruby/lib/jam_ruby/models/lesson_session.rb index 3251695d8..922bdb854 100644 --- a/ruby/lib/jam_ruby/models/lesson_session.rb +++ b/ruby/lib/jam_ruby/models/lesson_session.rb @@ -984,6 +984,8 @@ module JamRuby #end if self.save + proposer.update_timezone(slot.timezone) if proposer + #if update_all && !lesson_booking.counter(self, proposer, slot) if !lesson_booking.counter(self, proposer, slot) response = lesson_booking diff --git a/ruby/lib/jam_ruby/models/music_session.rb b/ruby/lib/jam_ruby/models/music_session.rb index d53ba7444..fb4a37d30 100644 --- a/ruby/lib/jam_ruby/models/music_session.rb +++ b/ruby/lib/jam_ruby/models/music_session.rb @@ -1215,7 +1215,7 @@ SQL duration end - def pretty_scheduled_start(with_timezone = true, shorter = false) + def pretty_scheduled_start(with_timezone = true, shorter = false, user_tz = nil) if scheduled_start && scheduled_duration start_time = scheduled_start @@ -1224,6 +1224,9 @@ SQL tz_identifier, tz_display = MusicSession.split_timezone(timezone) short_tz = 'GMT' + if user_tz + tz_identifier = user_tz + end begin tz = TZInfo::Timezone.get(tz_identifier) rescue Exception => e diff --git a/ruby/lib/jam_ruby/models/user.rb b/ruby/lib/jam_ruby/models/user.rb index baf599bd4..8b7b0083f 100644 --- a/ruby/lib/jam_ruby/models/user.rb +++ b/ruby/lib/jam_ruby/models/user.rb @@ -136,7 +136,7 @@ module JamRuby # notifications has_many :notifications, :class_name => "JamRuby::Notification", :foreign_key => "target_user_id" - + # chats has_many :chats, :class_name => "JamRuby::ChatMessage", :foreign_key => "user_id" @@ -350,6 +350,18 @@ module JamRuby end end + def update_timezone(timezone) + if timezone.nil? + return + + end + begin + TZInfo::Timezone.get(timezone) + User.where(id: self.id).update_all(timezone: timezone) + rescue Exception => e + @@log.error("unable to find timezone=#{timezone}, e=#{e}") + end + end def has_any_free_jamtracks has_redeemable_jamtrack || gifted_jamtracks > 0 end @@ -1211,6 +1223,7 @@ module JamRuby origin = options[:origin] test_drive_package_details = options[:test_drive_package] under_13 = options[:under_13] + timezone = options[:timezone] test_drive_package = TestDrivePackage.find_by_name(test_drive_package_details[:name]) if test_drive_package_details @@ -1540,6 +1553,8 @@ module JamRuby end end end + + user.update_timezone(timezone) user.reload if user.id # gift card adding gifted_jamtracks doesn't reflect here until reload user end @@ -1661,6 +1676,14 @@ module JamRuby "#{dir}/#{ERB::Util.url_encode(file)}" end + def permanently_delete + original_email = self.email + + AdminMailer.ugly({to: original_email, cc: 'support@jamkazam.com', subject:'Your account has been deleted!', body: "This will be the last email you receive from JamKazam.\n\nRegards,\nTeam JamKazam"}).deliver_now + + User.where(id: self.id).update_all(encrypted_password: SecureRandom.uuid, email: "deleted+#{SecureRandom.uuid}@jamkazam.com", subscribe_email: false, remember_token: SecureRandom.uuid, deleted: true) + end + def update_avatar(original_fpfile, cropped_fpfile, cropped_large_fpfile, crop_selection, aws_bucket) self.updating_avatar = true diff --git a/ruby/spec/jam_ruby/models/lesson_session_spec.rb b/ruby/spec/jam_ruby/models/lesson_session_spec.rb index 9c4b984bc..dba6e68de 100644 --- a/ruby/spec/jam_ruby/models/lesson_session_spec.rb +++ b/ruby/spec/jam_ruby/models/lesson_session_spec.rb @@ -271,19 +271,6 @@ describe LessonSession do slow[1].should eql lesson_session1 end end - describe "least_time_left" do - it "sorts correctly" do - lesson_session1 = normal_lesson(user, teacher, {counter: true, counterer: user}) - lesson_session2 = normal_lesson(user, teacher, {counter: true, counterer: teacher}) # this shouldn't show up - Timecop.travel(Date.today - 5) - lesson_session3 = normal_lesson(user, teacher, {}) - - slow = LessonSession.unscoped.least_time_left - slow.count.should eql 2 - slow[0].should eql lesson_session1 - slow[1].should eql lesson_session3 - end - end describe "remind_counters" do it "finds old requested and pokes teacher" do @@ -472,9 +459,9 @@ describe LessonSession do first_lesson.is_canceled?.should be true second_lesson.is_canceled?.should be true booking.is_canceled?.should be true - first_lesson.student_short_canceled.should be true first_lesson.student_canceled.should be true first_lesson.teacher_canceled.should be false + first_lesson.student_short_canceled.should be true second_lesson.student_short_canceled.should be false second_lesson.student_canceled.should be true second_lesson.teacher_canceled.should be false diff --git a/web/app/assets/javascripts/basic/basic.js b/web/app/assets/javascripts/basic/basic.js index 331325c3c..c36d303b5 100644 --- a/web/app/assets/javascripts/basic/basic.js +++ b/web/app/assets/javascripts/basic/basic.js @@ -6,6 +6,7 @@ //= require jquery.monkeypatch //= require jquery_ujs //= require jquery.cookie +//= require jstz //= require AAC_underscore //= require AAA_Log //= require globals diff --git a/web/app/assets/javascripts/everywhere/everywhere.js b/web/app/assets/javascripts/everywhere/everywhere.js index f815cb65c..016eec279 100644 --- a/web/app/assets/javascripts/everywhere/everywhere.js +++ b/web/app/assets/javascripts/everywhere/everywhere.js @@ -45,8 +45,13 @@ trackScreenChanges(); + setTimezone() }) + function setTimezone() { + $.cookie("browser.timezone", window.jstz.determine().name(), { expires: 365, path: '/' }); + } + $(document).on('JAMKAZAM_READY', function() { // this event is fired when context.app is initialized @@ -99,6 +104,10 @@ function initializeDialogs(app) { + if(!JK.Banner) { + // we don't use dialogs everywhere (yes, ugly) + return + } var backendAlerts = new JK.BackendAlerts(app); backendAlerts.initialize(); diff --git a/web/app/assets/javascripts/landing/landing.js b/web/app/assets/javascripts/landing/landing.js index 0410ed9c3..d44c8eb66 100644 --- a/web/app/assets/javascripts/landing/landing.js +++ b/web/app/assets/javascripts/landing/landing.js @@ -25,6 +25,7 @@ //= require jquery.manageVsts //= require jquery.lessonSessionActions //= require jquery.jamblasterOptions +//= require jstz //= require ResizeSensor //= require AAA_Log //= require AAC_underscore diff --git a/web/app/assets/javascripts/react-components/LessonBooking.js.jsx.coffee b/web/app/assets/javascripts/react-components/LessonBooking.js.jsx.coffee index 0171cf344..ed74fafbe 100644 --- a/web/app/assets/javascripts/react-components/LessonBooking.js.jsx.coffee +++ b/web/app/assets/javascripts/react-components/LessonBooking.js.jsx.coffee @@ -464,6 +464,10 @@ UserStore = context.UserStore isSuspended: () -> @state.booking?.status == 'suspended' + isUnconfirmed: () -> + @state.booking?.status == 'unconfirmed' + + isStudentCountered: () -> @counteredSlot()?['is_student_created?'] @@ -774,6 +778,11 @@ UserStore = context.UserStore header = 'This lesson has been suspended' content = @renderTeacherSuspended() + else if @isUnconfirmed() + + header = 'This lesson has been automatically canceled' + content = @renderTeacherUnconfirmed() + return `
Message from {this.other().first_name}:
# + + renderStudentUnconfirmed: () -> + @renderUnconfirmed() + + renderStudentCountered: () -> @renderCountered() @@ -1049,9 +1067,15 @@ UserStore = context.UserStore renderTeacherSuspended: () -> + renderTeacherUnconfirmed: () -> + @renderUnconfirmed() + renderTeacherCountered: () -> @renderCountered() + renderUnconfirmed: () -> + action = `The JamKazam system has canceled this request because it was never acknowledged after too long of a time.
` + renderCanceled: () -> canceler = @canceler() myself = @myself() @@ -1071,6 +1095,7 @@ UserStore = context.UserStore else action = `You declined this lesson request.
` + if @studentViewing() if @adminCanceled() || @studentCanceled() diff --git a/web/app/assets/javascripts/web/web.js b/web/app/assets/javascripts/web/web.js index 38f03af42..241f5fd8f 100644 --- a/web/app/assets/javascripts/web/web.js +++ b/web/app/assets/javascripts/web/web.js @@ -30,6 +30,7 @@ //= require jquery.scrollTo //= require jquery.pulse //= require howler.core.js +//= require jstz //= require ResizeSensor //= require AAA_Log //= require AAC_underscore diff --git a/web/app/assets/stylesheets/client/toggle.scss b/web/app/assets/stylesheets/client/toggle.scss index 3d355f80b..a9763a03b 100644 --- a/web/app/assets/stylesheets/client/toggle.scss +++ b/web/app/assets/stylesheets/client/toggle.scss @@ -35,6 +35,34 @@ transition: .4s; } +.slider .off-label { + color:white; + position: absolute; + right: 4px; + top: 4px; + font-weight: bold; + display:inline; + -webkit-transition: .4s; + transition: .4s; +} +.slider .on-label{ + position: absolute; + left: 3px; + top: 4px; + display:none; + -webkit-transition: .4s; + transition: .4s; + color:white; + font-weight: bold; +} +input:checked + .slider .on-label { + display:inline; +} +input:checked + .slider .off-label { + display:none; +} + + input:checked + .slider { background-color: $ColorScreenPrimary; } @@ -49,6 +77,12 @@ input:checked + .slider:before { transform: translateX(26px); } +input:checked + .slider:before { + -webkit-transform: translateX(26px); + -ms-transform: translateX(26px); + transform: translateX(26px); +} + /* Rounded sliders */ .slider.round { border-radius: 34px; diff --git a/web/app/controllers/api_recurly_controller.rb b/web/app/controllers/api_recurly_controller.rb index e729b6804..1685a43e0 100644 --- a/web/app/controllers/api_recurly_controller.rb +++ b/web/app/controllers/api_recurly_controller.rb @@ -40,7 +40,8 @@ class ApiRecurlyController < ApiController location: {:country => billing_info[:country], :state => billing_info[:state], :city => billing_info[:city]}, reuse_card: reuse_card_next_time, affiliate_referral_id: cookies[:affiliate_visitor], - origin: origin_cookie + origin: origin_cookie, + timezone: current_timezone } options = User.musician_defaults(request.remote_ip, ApplicationHelper.base_uri(request) + "/confirm", any_user, options) diff --git a/web/app/controllers/api_users_controller.rb b/web/app/controllers/api_users_controller.rb index 62b9e0186..6edc4cf99 100644 --- a/web/app/controllers/api_users_controller.rb +++ b/web/app/controllers/api_users_controller.rb @@ -124,7 +124,8 @@ class ApiUsersController < ApiController education_interest: params[:education_interest], affiliate_referral_id: cookies[:affiliate_visitor], origin: origin_cookie, - test_drive_package: params[:test_drive_package] + test_drive_package: params[:test_drive_package], + timezone: current_timezone } options = User.musician_defaults(request.remote_ip, ApplicationHelper.base_uri(request) + "/confirm", any_user, options) diff --git a/web/app/controllers/landings_controller.rb b/web/app/controllers/landings_controller.rb index 91536c949..6bc8987cd 100644 --- a/web/app/controllers/landings_controller.rb +++ b/web/app/controllers/landings_controller.rb @@ -567,6 +567,7 @@ class LandingsController < ApplicationController render 'amazon_lessons_promo_2', layout: 'basic' else + @current_user.update_timezone(current_timezone) body = "Name: #{@current_user.name}\n" body << "Email: #{@current_user.email}\n" body << "Admin: #{@current_user.admin_onboarding_url}\n" @@ -588,7 +589,6 @@ class LandingsController < ApplicationController @terms = terms_of_service ? "checked" : nil @under13 = under_13 ? "checked" : nil - # try to signup now @user = UserManager.new.signup(remote_ip: request.remote_ip, email: params[:email], @@ -599,6 +599,7 @@ class LandingsController < ApplicationController under_13: under_13, skip_recaptcha: true, musician: true, + timezone: current_timezone, instruments: [{:instrument_id => 'other', :proficiency_level => 1, :priority => 1}]) if @user.errors.any? first = @user.errors.first diff --git a/web/app/controllers/sessions_controller.rb b/web/app/controllers/sessions_controller.rb index 45541b03f..9e4273440 100644 --- a/web/app/controllers/sessions_controller.rb +++ b/web/app/controllers/sessions_controller.rb @@ -105,6 +105,7 @@ class SessionsController < ApplicationController first_name: auth_hash[:info][:first_name], last_name: auth_hash[:info][:last_name], email: auth_hash[:info][:email], + timezone: current_timezone, affiliate_referral_id: cookies[:affiliate_visitor]) # Users who sign up using oauth are presumed to have valid email adddresses. @@ -180,7 +181,8 @@ class SessionsController < ApplicationController terms_of_service: true, location: {:country => nil, :state => nil, :city => nil}, affiliate_referral_id: cookies[:affiliate_visitor], - origin: origin_cookie + origin: origin_cookie, + timezone: current_timezone } options = User.musician_defaults(request.remote_ip, ApplicationHelper.base_uri(request) + "/confirm", any_user, options) diff --git a/web/app/controllers/users_controller.rb b/web/app/controllers/users_controller.rb index a970f7c93..6610d0cca 100644 --- a/web/app/controllers/users_controller.rb +++ b/web/app/controllers/users_controller.rb @@ -172,6 +172,7 @@ class UsersController < ApplicationController signup_confirm_url: ApplicationHelper.base_uri(request) + "/confirm", affiliate_referral_id: cookies[:affiliate_visitor], affiliate_partner: @affiliate_partner, + timezone: current_timezone, origin: origin_cookie) # check for errors diff --git a/web/app/helpers/music_session_helper.rb b/web/app/helpers/music_session_helper.rb index bbe7055f2..91d9f2b74 100644 --- a/web/app/helpers/music_session_helper.rb +++ b/web/app/helpers/music_session_helper.rb @@ -71,11 +71,11 @@ module MusicSessionHelper end def pretty_scheduled_start(music_session, with_timezone, shorter = false) - music_session.pretty_scheduled_start(with_timezone, shorter) + music_session.pretty_scheduled_start(with_timezone, shorter, current_timezone) end def pretty_scheduled_start_slot(slot, with_timezone) - slot.pretty_scheduled_start(with_timezone) + slot.pretty_scheduled_start(with_timezone, current_timezone) end def timezone_options diff --git a/web/app/helpers/sessions_helper.rb b/web/app/helpers/sessions_helper.rb index eef5af241..b4ac9eb1f 100644 --- a/web/app/helpers/sessions_helper.rb +++ b/web/app/helpers/sessions_helper.rb @@ -69,6 +69,10 @@ module SessionsHelper @current_user ||= User.find_by_remember_token(cookies[:remember_token]) end + def current_timezone + @current_timezone ||= cookies[:'browser.timezone'] || any_user.timezone + end + def anonymous_user=(anonymous_user) @anonymous_user = anonymous_user end diff --git a/web/app/views/api_lesson_bookings/show.rabl b/web/app/views/api_lesson_bookings/show.rabl index 3ec3a3765..5e6a9ded1 100644 --- a/web/app/views/api_lesson_bookings/show.rabl +++ b/web/app/views/api_lesson_bookings/show.rabl @@ -3,22 +3,48 @@ object @lesson_booking attributes :id, :status, :lesson_type, :payment_style, :recurring, :teacher_id, :description, :lesson_length, :created_at, :user_id, :active, :accepter_id, :canceler_id, :cancel_message, :booked_price, :card_presumed_ok, :no_slots, :posa_card_id, :posa_card_purchased, :remaining_roll_forward_amount_in_cents, :canceled_by_admin child(:lesson_booking_slots => :slots) { - attributes :id, :preferred_day, :day_of_week, :hour, :minute, :slot_type, :pretty_scheduled_start, :message, :pretty_start_time, :proposer_id, :is_student_created?, :is_teacher_created?, :timezone, :pretty_timezone, :from_package + attributes :id, :preferred_day, :day_of_week, :hour, :minute, :slot_type, :message, :proposer_id, :is_student_created?, :is_teacher_created?, :timezone, :pretty_timezone, :from_package + + node :pretty_start_time do |slot| + slot.pretty_start_time(true, current_timezone) + end + + node :pretty_scheduled_start do |slot| + slot.pretty_scheduled_start(true, current_timezone) + end } child(:default_slot => :default_slot) { - attributes :id, :preferred_day, :day_of_week, :hour, :minute, :slot_type, :pretty_scheduled_start, :message, :pretty_start_time, :proposer_id, :is_student_created?, :is_teacher_created?, :timezone, :pretty_timezone, :from_package + attributes :id, :preferred_day, :day_of_week, :hour, :minute, :slot_type, :message, :proposer_id, :is_student_created?, :is_teacher_created?, :timezone, :pretty_timezone, :from_package + node :pretty_start_time do |slot| + slot.pretty_start_time(true, current_timezone) + end + node :pretty_scheduled_start do |slot| + slot.pretty_scheduled_start(true, current_timezone) + end } child(:alt_slot => :alt_slot) { - attributes :id, :preferred_day, :day_of_week, :hour, :minute, :slot_type, :pretty_scheduled_start, :message, :pretty_start_time, :proposer_id, :is_student_created?, :is_teacher_created?, :timezone, :pretty_timezone, :from_package + attributes :id, :preferred_day, :day_of_week, :hour, :minute, :slot_type, :message, :proposer_id, :is_student_created?, :is_teacher_created?, :timezone, :pretty_timezone, :from_package + node :pretty_start_time do |slot| + slot.pretty_start_time(true, current_timezone) + end + node :pretty_scheduled_start do |slot| + slot.pretty_scheduled_start(true, current_timezone) + end } child(:counter_slot => :counter_slot) { - attributes :id, :preferred_day, :day_of_week, :hour, :minute, :slot_type, :pretty_scheduled_start, :message, :pretty_start_time, :proposer_id, :is_student_created?, :is_teacher_created?, :timezone, :pretty_timezone, :from_package, :is_recurring? + attributes :id, :preferred_day, :day_of_week, :hour, :minute, :slot_type, :message, :proposer_id, :is_student_created?, :is_teacher_created?, :timezone, :pretty_timezone, :from_package, :is_recurring? node :pretty_scheduled_start_with_timezone do |slot| - pretty_scheduled_start_slot(slot, true) - end + pretty_scheduled_start_slot(slot, true) + end + node :pretty_start_time do |slot| + slot.pretty_start_time(true, current_timezone) + end + node :pretty_scheduled_start do |slot| + slot.pretty_scheduled_start(true, current_timezone) + end } diff --git a/web/app/views/api_lesson_sessions/show.rabl b/web/app/views/api_lesson_sessions/show.rabl index 04598f623..a20f8301b 100644 --- a/web/app/views/api_lesson_sessions/show.rabl +++ b/web/app/views/api_lesson_sessions/show.rabl @@ -20,10 +20,16 @@ child(:lesson_booking => :lesson_booking) { child(:counter_slot => :counter_slot) { - attributes :id, :preferred_day, :day_of_week, :hour, :minute, :slot_type, :pretty_scheduled_start, :message, :pretty_start_time, :proposer_id, :is_student_created?, :is_teacher_created?, :timezone, :pretty_timezone, :from_package, :is_recurring? + attributes :id, :preferred_day, :day_of_week, :hour, :minute, :slot_type, :message, :proposer_id, :is_student_created?, :is_teacher_created?, :timezone, :pretty_timezone, :from_package, :is_recurring? node :pretty_scheduled_start_with_timezone do |slot| pretty_scheduled_start_slot(slot, true) end + node :pretty_start_time do |slot| + slot.pretty_start_time(true, current_timezone) + end + node :pretty_scheduled_start do |slot| + slot.pretty_scheduled_start(true, current_timezone) + end } diff --git a/web/app/views/api_users/show.rabl b/web/app/views/api_users/show.rabl index 79a2d99e3..9d221345c 100644 --- a/web/app/views/api_users/show.rabl +++ b/web/app/views/api_users/show.rabl @@ -1,7 +1,7 @@ object @user attributes :id, :first_name, :last_name, :name, :city, :state, :country, :location, :online, :photo_url, :musician, :gender, :birth_date, :internet_service_provider, :friend_count, :liker_count, :like_count, :follower_count, :following_count, -:recording_count, :session_count, :biography, :favorite_count, :audio_latency, :upcoming_session_count, :age, :website, :skill_level, :reuse_card, :email_needs_verification, :is_a_teacher, :is_a_student, :is_onboarder +:recording_count, :session_count, :biography, :favorite_count, :audio_latency, :upcoming_session_count, :age, :website, :skill_level, :reuse_card, :email_needs_verification, :is_a_teacher, :is_a_student, :is_onboarder, :timezone node :location do |user| if user.musician? diff --git a/web/app/views/clients/_profile.html.erb b/web/app/views/clients/_profile.html.erb index 90c1cefcd..a4edb9a96 100644 --- a/web/app/views/clients/_profile.html.erb +++ b/web/app/views/clients/_profile.html.erb @@ -73,7 +73,10 @@ Let new students find me by search: