diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index 9b41b1fc9b215d11e9d8a566fd4e1abf8ce27b45..0ee354dfbc87e6f117384df434e3c1ab4b559b63 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -4,6 +4,7 @@ class UsersController < ApplicationController require File.expand_path('../../../lib/diaspora/ostatus_builder', __FILE__) + require File.expand_path('../../../lib/diaspora/exporter', __FILE__) before_filter :authenticate_user!, :except => [:new, :create, :public] @@ -56,6 +57,11 @@ class UsersController < ApplicationController end end + def export + exporter = Diaspora::Exporter.new(Diaspora::Exporters::XML) + render :xml => exporter.execute(current_user) + end + private def prep_image_url(params) url = APP_CONFIG[:pod_url].chop if APP_CONFIG[:pod_url][-1,1] == '/' diff --git a/app/views/photos/edit.html.haml b/app/views/photos/edit.html.haml index 06556039cc862511b00fbead532de680cdd64149..e70030562a16336d31f7227006e2c569d012924f 100644 --- a/app/views/photos/edit.html.haml +++ b/app/views/photos/edit.html.haml @@ -16,6 +16,7 @@ = p.label :caption = p.text_field :caption, :value => @photo.caption = p.submit + %div{:class => 'clear'} #content_bottom .back diff --git a/app/views/photos/show.html.haml b/app/views/photos/show.html.haml index 787f5861dfc85029c8d4682e9272b2fb10d7546d..53cda49bafd8bd7f6e8380ebebe9ea00acbfb4b9 100644 --- a/app/views/photos/show.html.haml +++ b/app/views/photos/show.html.haml @@ -6,14 +6,56 @@ $(document).keydown(function(e){ switch(e.keyCode) { case 37: - window.location.replace( "#{url_to_prev(@photo,@album)}" ); + if(!$("textarea").hasClass("hasfocus")){//prevent redirect if textarea has focus + window.location.replace( "#{url_to_prev(@photo,@album)}" ); + } break; case 39: - window.location.replace( "#{url_to_next(@photo,@album)}" ); + if(!$("textarea").hasClass("hasfocus")){ + window.location.replace( "#{url_to_next(@photo,@album)}" ); + } break; } }); + $(document).ready(function(){ + //add a clas to verify if a textarea has focus + $("textarea").live('focus',function(){ + $(this).addClass("hasfocus"); + }); + $("textarea").live('blur',function(){ + $(this).removeClass("hasfocus"); + }); + + //show form to add description + $(".edit-desc").click(function(){ + $(".edit_photo").toggle(); + //$(".caption").toggle(); + }); + + //Add a description with ajax request + $("#photo_submit").click(function(evenet){ + event.preventDefault(); + var method = $(".edit_photo").attr("method"); + var url = $(".edit_photo").attr("action"); + var data = $(".edit_photo").serialize(); + $(".description").text($("#photo_caption").val()); + //$(".caption").toggle(); + $(".edit_photo").toggle(); + + $.ajax({ + type: method, + url: url, + data: data, + success: function(response){ + $("#add-description").remove(); + } + }); + + }); + + });//end document ready + = content_for :page_title do = link_to "◂ #{@photo.album.name}", @photo.album @@ -38,7 +80,21 @@ #show_photo = linked_scaled_photo @photo, @album .caption - = @photo.caption + -if current_user.owns? @album + -if @photo.caption and @photo.caption != "" + = link_to 'Edit','javascript:void(0)', :id => "edit-desc", :class => "edit-desc" + .description + = @photo.caption + + -if current_user.owns? @album + %div{:class => 'clear'} + -if !@photo.caption or @photo.caption == "" + = link_to 'Add a description','javascript:void(0)', :id => "add-description", :class => "edit-desc" + + = form_for @photo do |p| + = p.text_field :caption, :value => @photo.caption + = p.submit + %div{:class => 'clear'} #content_bottom .back diff --git a/config/environments/development.rb b/config/environments/development.rb index 15d1fc2bba372ae28e8260a22b0563d0dd401af7..d848ad4e9943d0851d7bfea24d83602af9443a9f 100644 --- a/config/environments/development.rb +++ b/config/environments/development.rb @@ -24,15 +24,15 @@ Diaspora::Application.configure do config.active_support.deprecation = :log config.middleware.use MongoMapper::ClearDevMemory #config.threadsafe! - config.action_mailer.delivery_method = :smtp - config.action_mailer.default_url_options = {:host => 'localhost:3000'} + config.action_mailer.delivery_method = :smtp + config.action_mailer.default_url_options = {:host => APP_CONFIG[:terse_pod_url]} config.action_mailer.smtp_settings = { - :address => 'smtp.gmail.com', - :port => 587, - :domain => 'mail.joindiaspora.com', - :authentication => 'plain', - :user_name => 'diaspora-pivots@joindiaspora.com', - :password => "xy289|]G+R*-kA", + :address => APP_CONFIG[:smtp_address], + :port => APP_CONFIG[:smtp_port], + :domain => APP_CONFIG[:smtp_domain], + :authentication => APP_CONFIG[:smtp_authentication], + :user_name => APP_CONFIG[:smtp_username], + :password => APP_CONFIG[:smtp_password], :enable_starttls_auto => true } end diff --git a/config/environments/production.rb b/config/environments/production.rb index cb13c1d1c1222783cc0c979a14e8164930d85fb8..6b081b164741032c71c77e2e248b169175d2b9cc 100644 --- a/config/environments/production.rb +++ b/config/environments/production.rb @@ -49,14 +49,14 @@ Diaspora::Application.configure do config.threadsafe! config.action_mailer.delivery_method = :smtp - config.action_mailer.default_url_options = {:host => 'pivots.joindiaspora.com'} + config.action_mailer.default_url_options = {:host => APP_CONFIG[:terse_pod_url]} config.action_mailer.smtp_settings = { - :address => 'smtp.gmail.com', - :port => 587, - :domain => 'mail.joindiaspora.com', - :authentication => 'plain', - :user_name => 'diaspora-pivots@joindiaspora.com', - :password => "xy289|]G+R*-kA", + :address => APP_CONFIG[:smtp_address], + :port => APP_CONFIG[:smtp_port], + :domain => APP_CONFIG[:smtp_domain], + :authentication => APP_CONFIG[:smtp_authentication], + :user_name => APP_CONFIG[:smtp_username], + :password => APP_CONFIG[:smtp_password], :enable_starttls_auto => true } end diff --git a/config/routes.rb b/config/routes.rb index 12fae72e6c4af839372002e29e02d0b476a08680..6f9f529db43e75481b7a9e414fcc2a990441082e 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -10,9 +10,12 @@ Diaspora::Application.routes.draw do resources :photos, :except => [:index] resources :albums + devise_for :users, :controllers => {:registrations => "registrations", + :password => "devise/passwords"} # added public route to user match 'public/:username', :to => 'users#public' - resources :users, :except => [:create, :new, :show] + match 'users/export', :to => 'users#export' + resources :users, :except => [:create, :new, :show] match 'aspects/move_friends', :to => 'aspects#move_friends', :as => 'move_friends' match 'aspects/move_friend', :to => 'aspects#move_friend', :as => 'move_friend' @@ -31,7 +34,6 @@ Diaspora::Application.routes.draw do match 'set_profile_photo', :to => "dev_utilities#set_profile_photo" #routes for devise, not really sure you will need to mess with this in the future, lets put default, #non mutable stuff in anohter file - devise_for :users, :controllers => {:registrations => "registrations"} match 'login', :to => 'devise/sessions#new', :as => "new_user_session" match 'logout', :to => 'devise/sessions#destroy', :as => "destroy_user_session" match 'signup', :to => 'registrations#new', :as => "new_user_registration" diff --git a/lib/diaspora/exporter.rb b/lib/diaspora/exporter.rb index 9e2f719a52af84128222aea0b6f2a7e06e95acaa..106c94bb0d5bfc52184b1c61a31a86488e0d5b21 100644 --- a/lib/diaspora/exporter.rb +++ b/lib/diaspora/exporter.rb @@ -4,11 +4,6 @@ module Diaspora - def self.bone(user) - exporter = Diaspora::Exporter.new(Diaspora::Exporters::XML) - exporter.execute(user) - end - class Exporter def initialize(strategy) self.class.send(:include, strategy) @@ -22,7 +17,7 @@ module Diaspora xml.user { xml.username user.username xml.serialized_private_key user.serialized_private_key - xml.person user.person.to_xml + xml.parent << user.person.to_xml xml.aspects { user.aspects.each do |aspect| @@ -36,8 +31,14 @@ module Diaspora end } xml.posts { - aspect.posts.each do |post| - xml.post post.to_xml if post.respond_to? :to_xml + aspect.posts.find_all_by_person_id(user.person.id).each do |post| + post_doc = post.to_xml + + post.comments.each do |comment| + post_doc << comment.to_xml + end + + xml.post post_doc end } } diff --git a/spec/lib/exporter_spec.rb b/spec/lib/exporter_spec.rb new file mode 100644 index 0000000000000000000000000000000000000000..2831b8ef76c2684fe0b5ebfb52b703ea19b2ef7f --- /dev/null +++ b/spec/lib/exporter_spec.rb @@ -0,0 +1,33 @@ +# Copyright (c) 2010, Diaspora Inc. This file is +# licensed under the Affero General Public License version 3. See +# the COPYRIGHT file. + +require 'spec_helper' +require File.dirname(__FILE__) + '/../../lib/diaspora/exporter' + +describe Diaspora::Exporter do + + let!(:user1) { Factory(:user) } + let!(:user2) { Factory(:user) } + + let(:aspect1) { user1.aspect(:name => "Work") } + let(:aspect2) { user2.aspect(:name => "Family") } + + let!(:status_message1) { user1.post(:status_message, :message => "One", :public => true, :to => aspect1.id) } + let!(:status_message2) { user1.post(:status_message, :message => "Two", :public => true, :to => aspect1.id) } + let!(:status_message3) { user2.post(:status_message, :message => "Three", :public => false, :to => aspect2.id) } + + let!(:exported) { Diaspora::Exporter.new(Diaspora::Exporters::XML).execute(user1) } + + it 'should include a users posts' do + exported.should include status_message1.to_xml.to_s + exported.should include status_message2.to_xml.to_s + exported.should_not include status_message3.to_xml.to_s + end + + it 'should include a users private key' do + exported.should include user1.serialized_private_key + end + +end +