diff --git a/Changelog.md b/Changelog.md index b53fad879dfb9d98ff270618058ff9fcca54aee7..79e13c40995e378f183744078139a70413de36d1 100644 --- a/Changelog.md +++ b/Changelog.md @@ -7,6 +7,7 @@ * Update comment in database example config [#7282](https://github.com/diaspora/diaspora/pull/7282) ## Features +* Add support for [Liberapay](https://liberapay.com) donations [#7290](https://github.com/diaspora/diaspora/pull/7290) # 0.6.3.0 diff --git a/app/assets/images/buttons/liberapay-button.svg b/app/assets/images/buttons/liberapay-button.svg new file mode 100644 index 0000000000000000000000000000000000000000..995dd029cfc37ea5e1196b0b49f0a42daf79f9e8 --- /dev/null +++ b/app/assets/images/buttons/liberapay-button.svg @@ -0,0 +1,10 @@ +<svg xmlns="http://www.w3.org/2000/svg" width="83" height="30"> + <rect id="back" fill="#f6c915" x="1" y=".5" width="82" height="29" rx="4"/> + <svg viewBox="0 0 80 80" height="16" width="16" x="7" y="7"> + <g transform="translate(-78.37-208.06)" fill="#1a171b"> + <path d="m104.28 271.1c-3.571 0-6.373-.466-8.41-1.396-2.037-.93-3.495-2.199-4.375-3.809-.88-1.609-1.308-3.457-1.282-5.544.025-2.086.313-4.311.868-6.675l9.579-40.05 11.69-1.81-10.484 43.44c-.202.905-.314 1.735-.339 2.489-.026.754.113 1.421.415 1.999.302.579.817 1.044 1.546 1.395.729.353 1.747.579 3.055.679l-2.263 9.278"/> + <path d="m146.52 246.14c0 3.671-.604 7.03-1.811 10.07-1.207 3.043-2.879 5.669-5.01 7.881-2.138 2.213-4.702 3.935-7.693 5.167-2.992 1.231-6.248 1.848-9.767 1.848-1.71 0-3.42-.151-5.129-.453l-3.394 13.651h-11.162l12.52-52.19c2.01-.603 4.311-1.143 6.901-1.622 2.589-.477 5.393-.716 8.41-.716 2.815 0 5.242.428 7.278 1.282 2.037.855 3.708 2.024 5.02 3.507 1.307 1.484 2.274 3.219 2.904 5.205.627 1.987.942 4.11.942 6.373m-27.378 15.461c.854.202 1.91.302 3.167.302 1.961 0 3.746-.364 5.355-1.094 1.609-.728 2.979-1.747 4.111-3.055 1.131-1.307 2.01-2.877 2.64-4.714.628-1.835.943-3.858.943-6.071 0-2.161-.479-3.998-1.433-5.506-.956-1.508-2.615-2.263-4.978-2.263-1.61 0-3.118.151-4.525.453l-5.28 21.948"/> + </g> + </svg> + <text fill="#1a171b" text-anchor="middle" font-family="Helvetica Neue,Helvetica,Arial,sans-serif" font-weight="700" font-size="14" x="50" y="20">Donate</text> +</svg> diff --git a/app/helpers/application_helper.rb b/app/helpers/application_helper.rb index 6fed2b8b6b355bedae28c0ec415a40428be1a008..3a89c597db50c0eb9744b07d260989ead75bf37c 100644 --- a/app/helpers/application_helper.rb +++ b/app/helpers/application_helper.rb @@ -23,6 +23,12 @@ module ApplicationHelper AppConfig.settings.source_url.presence || "#{root_path.chomp('/')}/source.tar.gz" end + def donations_enabled? + AppConfig.settings.paypal_donations.enable? || + AppConfig.settings.liberapay_username.present? || + AppConfig.bitcoin_donation_address.present? + end + def timeago(time, options={}) timeago_tag(time, options.merge(:class => 'timeago', :title => time.iso8601, :force => true)) if time end diff --git a/app/views/shared/_donatepod.html.haml b/app/views/shared/_donatepod.html.haml index 430525e6fb3f50ed868ed19ed23392c1de505b55..c2d860f9262990436f7a1c78b7ec92e52b4ad307 100644 --- a/app/views/shared/_donatepod.html.haml +++ b/app/views/shared/_donatepod.html.haml @@ -1,15 +1,29 @@ - if AppConfig.settings.paypal_donations.enable? - PayPal: - %form{action: "https://www.paypal.com/cgi-bin/webscr", method: "post", target: "_blank"} - %input{name: "cmd", type: "hidden", value: "_s-xclick"} - - if AppConfig.settings.paypal_donations.paypal_hosted_button_id.present? - %input{name: "hosted_button_id", type: "hidden", value: AppConfig.settings.paypal_donations.paypal_hosted_button_id} - -if AppConfig.settings.paypal_donations.paypal_unhosted_button_encrypted.present? - %input{name: "encrypted", type: "hidden", value: AppConfig.settings.paypal_donations.paypal_unhosted_button_encrypted} - %input{name: "currency_code", type: "hidden", value: AppConfig.settings.paypal_donations.currency} - %input{name: "submit", type: "submit", value: t("aspects.index.donate"), class: "btn btn-default"} + %p + PayPal: + %br + %form{action: "https://www.paypal.com/cgi-bin/webscr", method: "post", target: "_blank"} + %input{name: "cmd", type: "hidden", value: "_s-xclick"} + - if AppConfig.settings.paypal_donations.paypal_hosted_button_id.present? + %input{name: "hosted_button_id", type: "hidden", + value: AppConfig.settings.paypal_donations.paypal_hosted_button_id} + - if AppConfig.settings.paypal_donations.paypal_unhosted_button_encrypted.present? + %input{name: "encrypted", type: "hidden", + value: AppConfig.settings.paypal_donations.paypal_unhosted_button_encrypted} + %input{name: "currency_code", type: "hidden", value: AppConfig.settings.paypal_donations.currency} + %input.btn.btn-default{name: "submit", type: "submit", value: t("aspects.index.donate")} -- if AppConfig.bitcoin_donation_address - Bitcoin: - %input{type: "text", id: "bitcoin_address", value: AppConfig.bitcoin_donation_address, readonly: true} +- if AppConfig.settings.liberapay_username.present? + %p + Liberapay: + %br + %a{id: "liberapay-button", href: "https://liberapay.com/#{AppConfig.settings.liberapay_username}/donate"} + = image_tag "buttons/liberapay-button.svg", + alt: t("aspects.index.donate"), + title: t("aspects.index.donate_liberapay") +- if AppConfig.bitcoin_donation_address + %p + Bitcoin: + %br + %input{type: "text", id: "bitcoin_address", value: AppConfig.bitcoin_donation_address, readonly: true} diff --git a/app/views/streams/main_stream.html.haml b/app/views/streams/main_stream.html.haml index ed210d1856f4b820112ed764cce562d7d20d3b90..b5130de8ca0802f5ac6e0035cf5568854ea864d8 100644 --- a/app/views/streams/main_stream.html.haml +++ b/app/views/streams/main_stream.html.haml @@ -124,7 +124,7 @@ .content != t("bookmarklet.explanation", link: link_to(t("bookmarklet.post_something"), bookmarklet_code)) - - if AppConfig.settings.paypal_donations.enable? || AppConfig.bitcoin_donation_address + - if donations_enabled? .section.collapsed .title %h5.title-header diff --git a/config/defaults.yml b/config/defaults.yml index 285b9d6cfe30adcb9669aaa7d971a49917c4ad52..ca3e4d5e6755ce806b4f193abc40c6689d142fcb 100644 --- a/config/defaults.yml +++ b/config/defaults.yml @@ -105,6 +105,7 @@ defaults: currency: USD paypal_hosted_button_id: paypal_unhosted_button_encrypted: + liberapay_username: bitcoin_address: bitcoin_wallet_id: # DEPRECATED: Remove with 0.6 community_spotlight: diff --git a/config/diaspora.yml.example b/config/diaspora.yml.example index d4f0622e5958d7756b20eadfe2502cae6a2b0cf4..833f36bb0ac0975f26c0591c47a896ae804be688 100644 --- a/config/diaspora.yml.example +++ b/config/diaspora.yml.example @@ -430,6 +430,10 @@ configuration: ## Section ## OR encrypted key of unhosted button #paypal_unhosted_button_encrypted: "-----BEGIN PKCS7-----" + ## Liberapay.com is a free platform which allow donations like patreon + ## Set your username to include your liberapay button + # liberapay_username: "change_me" + ## Bitcoin donations ## You can provide a bitcoin address here to allow your users to provide ## donations towards the running of their pod. diff --git a/config/locales/diaspora/en.yml b/config/locales/diaspora/en.yml index 669079d3a17a90b0aedaa93ae56bdce36b74b39d..065f7336c01df548969581bbbb1ea6380c2ddd13 100644 --- a/config/locales/diaspora/en.yml +++ b/config/locales/diaspora/en.yml @@ -194,6 +194,7 @@ en: index: donate: "Donate" keep_pod_running: "Keep %{pod} running fast and buy servers their coffee fix with a monthly donation!" + donate_liberapay: "Donate to liberapay" welcome_to_diaspora: "Welcome to diaspora*, %{name}!" introduce_yourself: "This is your stream. Jump in and introduce yourself." diff --git a/features/desktop/donations.feature b/features/desktop/donations.feature index 0985ff132cfc2d08712e47447323ed526a6210fe..8ef798acb683813ebd1e43380228c35daca32921 100644 --- a/features/desktop/donations.feature +++ b/features/desktop/donations.feature @@ -16,3 +16,10 @@ Feature: donations Then I should see "Donate" within ".info-bar" And I click on "Donate" navbar title Then I should see the Bitcoin address + + Scenario: Liberapay donations + Given I have configured a Liberapay username + And I go to the home page + Then I should see "Donate" within ".info-bar" + And I click on "Donate" navbar title + Then I should see the Liberapay donate button diff --git a/features/step_definitions/custom_web_steps.rb b/features/step_definitions/custom_web_steps.rb index a84f2d337bbac07996a9bb1a4bba613c29ba9c9c..c72deff6a6ec21d40b407ea2b4afdd125482be6b 100644 --- a/features/step_definitions/custom_web_steps.rb +++ b/features/step_definitions/custom_web_steps.rb @@ -288,6 +288,14 @@ Then /^I should see the Bitcoin address$/ do find("#bitcoin_address")['value'].should == "AAAAAA" end +Given /^I have configured a Liberapay username$/ do + AppConfig.settings.liberapay_username = "BBBBBB" +end + +Then /^I should see the Liberapay donate button$/ do + find("#liberapay-button")["href"].should == "https://liberapay.com/BBBBBB/donate" +end + Given /^"([^"]*)" is hidden$/ do |selector| page.should have_selector(selector, visible: false) page.should_not have_selector(selector) diff --git a/spec/helpers/application_helper_spec.rb b/spec/helpers/application_helper_spec.rb index 84bc7cc35ac8aa497fda4291a8091b29e5d3fe02..8a277d41a44db392ea454645d9c58e9f2ea3781f 100644 --- a/spec/helpers/application_helper_spec.rb +++ b/spec/helpers/application_helper_spec.rb @@ -68,6 +68,34 @@ describe ApplicationHelper, :type => :helper do end end + describe "#donations_enabled?" do + it "returns false when nothing is set" do + expect(helper.donations_enabled?).to be false + end + + it "returns true when the paypal donations is enabled" do + AppConfig.settings.paypal_donations.enable = true + expect(helper.donations_enabled?).to be true + end + + it "returns true when the liberapay username is set" do + AppConfig.settings.liberapay_username = "foo" + expect(helper.donations_enabled?).to be true + end + + it "returns true when the bitcoin_address is set" do + AppConfig.settings.bitcoin_address = "bar" + expect(helper.donations_enabled?).to be true + end + + it "returns true when all the donations are enabled" do + AppConfig.settings.paypal_donations.enable = true + AppConfig.settings.liberapay_username = "foo" + AppConfig.settings.bitcoin_address = "bar" + expect(helper.donations_enabled?).to be true + end + end + describe "#changelog_url" do let(:changelog_url_setting) { double.tap {|double| allow(AppConfig).to receive(:settings).and_return(double(changelog_url: double)) }