scrivito_crm_form_widget 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 8edade64456eba469316b551c719434715441ca6
4
+ data.tar.gz: c1407696c8e8773dbf940ffdd6d235843b29d484
5
+ SHA512:
6
+ metadata.gz: 67ee4165f8e527e4907641133c77806d64d33cfa8a2d71cf56d159fe28f50da339135d1f47352cadacb46c4c9e05b8634ab36a7242ccce03673b957e5a8aec4c
7
+ data.tar.gz: 1885e496263b4febdb81b191778d3ef531738e907a61216e7fb3f4bd36df77cb6aadb34286aac15a1b7596d9f0b22a6eea2d857abe84bb06fce8d13c973fd78b
data/LICENSE ADDED
@@ -0,0 +1,4 @@
1
+ Copyright (c) 2009 - 2014 Infopark AG (http://www.infopark.com)
2
+
3
+ This software can be used and modified under the LGPL-3.0. Please refer to
4
+ http://www.gnu.org/licenses/lgpl-3.0.html for the license text.
data/Rakefile ADDED
@@ -0,0 +1,21 @@
1
+ begin
2
+ require 'bundler/setup'
3
+ rescue LoadError
4
+ puts 'You must `gem install bundler` and `bundle install` to run rake tasks'
5
+ end
6
+
7
+ require 'rdoc/task'
8
+
9
+ RDoc::Task.new(:rdoc) do |rdoc|
10
+ rdoc.rdoc_dir = 'rdoc'
11
+ rdoc.title = 'ScrivitoJrFormWidget'
12
+ rdoc.options << '--line-numbers'
13
+ rdoc.rdoc_files.include('README.rdoc')
14
+ rdoc.rdoc_files.include('lib/**/*.rb')
15
+ end
16
+
17
+
18
+
19
+
20
+ Bundler::GemHelper.install_tasks
21
+
Binary file
@@ -0,0 +1 @@
1
+ //= require scrivito_advanced_editors
@@ -0,0 +1,3 @@
1
+ /*
2
+ *= require scrivito_advanced_editors
3
+ */
@@ -0,0 +1,4 @@
1
+ module ScrivitoJrFormWidget
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,34 @@
1
+ class CrmFormWidget < Widget
2
+ include Crm
3
+
4
+ attribute :activity_id, :string
5
+ attribute :event_id, :string
6
+ attribute :subject, :string
7
+ attribute :tags, :string
8
+ attribute :redirect_to, :reference
9
+ attribute :submit_button_text, :string
10
+
11
+ def self.activities
12
+ Obj.try(:crm_activity_filter) || Crm::Type.all.select {|i| i.item_base_type == "Activity"}
13
+ end
14
+
15
+ def attributes
16
+ activity.attribute_definitions
17
+ end
18
+
19
+ def activity
20
+ Crm::Type.find(activity_id)
21
+ end
22
+
23
+ def activity_id?
24
+ self.activity_id != ""
25
+ end
26
+
27
+ def submit_button
28
+ submit_button_text.present? ? submit_button_text : "send"
29
+ end
30
+
31
+ def self.events
32
+ Obj.try(:crm_activity_filter) || Crm::Event.all.to_a
33
+ end
34
+ end
@@ -0,0 +1,97 @@
1
+ class CrmFormPresenter < CrmFormAttributes
2
+
3
+ def attribute_names
4
+ @type.standard_attrs.keys + @type.custom_attrs.keys
5
+ end
6
+
7
+ def initialize(widget, request, controller)
8
+ @widget = widget
9
+ @activity = widget.activity
10
+ @page = widget.obj
11
+ @params = request.params["crm_form_presenter"]
12
+
13
+ if request.post?
14
+ redirect_after_submit(controller, widget, self.submit)
15
+ end
16
+ end
17
+
18
+ def submit
19
+ contact = nil
20
+
21
+ if @params['custom_email'] && @params['custom_last_name']
22
+ contact = manipulate_or_create_user
23
+ end
24
+
25
+ if contact
26
+ set_params_for_activty(contact)
27
+ add_contact_to_event(contact) if @widget.event_id.present?
28
+ end
29
+
30
+ @params["title"] = @params[:title].empty? ? @activity.id : @params[:title]
31
+ @params["type_id"] = @activity.id
32
+ @params["state"] = @activity.attributes['states'].first
33
+
34
+ activity = Crm::Activity.create(@params)
35
+
36
+ return {status: "success", message: "Your form was send successfully"}
37
+ rescue Crm::Errors::InvalidValues => e
38
+ return {status: "error", message: e.validation_errors}
39
+ end
40
+
41
+ private
42
+ def manipulate_or_create_user
43
+ contact = Crm::Contact.where(:email, :equals, @params['custom_email']).and(:last_name, :equals, @params['custom_last_name']).first
44
+ unless contact
45
+ contact = Crm::Contact.create({
46
+ first_name: @params['custom_first_name'],
47
+ last_name: @params['custom_last_name'],
48
+ email: @params['custom_email'],
49
+ language: 'de'
50
+ })
51
+ end
52
+
53
+ add_tags_to(contact)
54
+
55
+ return contact
56
+ end
57
+
58
+ def add_contact_to_event(contact)
59
+ Crm::EventContact.create({
60
+ contact_id: contact.id,
61
+ event_id: @widget.event_id,
62
+ state: 'registered'
63
+ })
64
+ end
65
+
66
+ def add_tags_to(contact)
67
+ if @widget.tags
68
+ tags = contact.tags + @widget.tags.split("|")
69
+ contact.update({tags: tags})
70
+ end
71
+ end
72
+
73
+ def set_params_for_activty(contact)
74
+ if @params["title"] == ""
75
+ @params["title"] = @activity.id
76
+ end
77
+
78
+ @params["contact_ids"] = contact.id
79
+ end
80
+
81
+ def redirect_path(page, widget)
82
+ obj = redirect_obj(page, widget)
83
+ obj.binary? ? obj.try(:binary_url) : "/#{obj.id}"
84
+ end
85
+
86
+ def redirect_obj(page, widget)
87
+ (widget.respond_to?('redirect_to') && widget.redirect_to.present?) ? widget.redirect_to : page
88
+ end
89
+
90
+ def redirect_after_submit(controller, widget, submit_message)
91
+ if submit_message[:status] == "success"
92
+ controller.redirect_to(redirect_path(@page, widget), notice: submit_message[:message])
93
+ elsif submit_message[:status] == "error"
94
+ controller.redirect_to("/#{@page.id}", alert: submit_message[:message])
95
+ end
96
+ end
97
+ end
@@ -0,0 +1,13 @@
1
+ <div class="form-group">
2
+ <%= form.label name.to_sym, class: "control-label col-sm-3 #{options[:mandatory] ? 'mandatory' : ''}" %>
3
+ <div class="col-sm-9">
4
+ <% options['valid_values'].each do |value| %>
5
+ <div class="radio">
6
+ <%= form.label "#{name}_#{value.downcase}" do %>
7
+ <%= form.radio_button name.to_sym, value %>
8
+ <%= t("helpers.label.crm_form_presenter.#{name}_option.#{value.downcase}") %>
9
+ <% end %>
10
+ </div>
11
+ <% end %>
12
+ </div>
13
+ </div>
@@ -0,0 +1,13 @@
1
+ <div class="form-group">
2
+ <%= form.label name.to_sym, class: "control-label col-sm-3 #{options[:mandatory] ? 'mandatory' : ''}" %>
3
+ <div class="col-sm-9">
4
+ <% options['valid_values'].each do |value| %>
5
+ <div class="^checkbox">
6
+ <%= form.label "#{name}_#{value.downcase}" do %>
7
+ <%= form.check_box name.to_sym, value %>
8
+ <%= t("helpers.label.crm_form_presenter.#{name}_option.#{value.downcase}") %>
9
+ <% end %>
10
+ </div>
11
+ <% end %>
12
+ </div>
13
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="form-group">
2
+ <%= form.label name.to_sym, class: "control-label col-sm-3 #{options[:mandatory] ? 'mandatory' : ''}" %>
3
+ <div class="col-sm-9">
4
+ <%= form.text_field name.to_sym, class: "form-control", maxlength: options[:maxlength] %>
5
+ </div>
6
+ </div>
@@ -0,0 +1,6 @@
1
+ <div class="form-group">
2
+ <%= form.label name.to_sym, class: "control-label col-sm-3 #{options[:mandatory] ? 'mandatory' : ''}" %>
3
+ <div class="col-sm-9">
4
+ <%= form.text_area name.to_sym, class: "form-control", maxlength: options[:maxlength] %>
5
+ </div>
6
+ </div>
@@ -0,0 +1,12 @@
1
+ <%= form_for CrmFormPresenter.new(widget, request, controller), url: scrivito_path(widget.obj), html: { class: "form-horizontal"} do |form| %>
2
+ <% if widget.subject %>
3
+ <%= form.hidden_field(:title, value: widget.subject) %>
4
+ <% end %>
5
+
6
+ <% widget.attributes.each do |name, options| %>
7
+ <%= render "crm_form_widget/crm_#{options["attribute_type"]}", form: form, name: name, options: options %>
8
+ <% end %>
9
+
10
+ <%= form.submit widget.submit_button, class: "btn btn-primary pull-right" %>
11
+
12
+ <% end %>
@@ -0,0 +1,39 @@
1
+ <div class="details-view">
2
+ <ul class="tab-list">
3
+ <li class="active" data-panel-target="#edit-general">General</li>
4
+ <li data-panel-target="#edit-tags">Tags</li>
5
+ <li data-panel-target="#edit-activity">Activity</li>
6
+ <li data-panel-target="#edit-event">Event</li>
7
+ </ul>
8
+
9
+ <div class="tab-panels">
10
+ <div class="tab-panel" id="edit-general">
11
+ <h4>Subject</h4>
12
+ <%= scrivito_tag :div, widget, :subject %>
13
+ <h4>Redirect after submit</h4>
14
+ <%= scrivito_tag :div, widget, :redirect_to %>
15
+
16
+ <h4>Text on submitbutton</h4>
17
+ <%= scrivito_tag :div, widget, :submit_button_text %>
18
+ </div>
19
+
20
+ <div class="tab-panel" id="edit-tags">
21
+ <h4>Tags for Contact <abbr title="optional attribute. can be used to add tags to a contact like has_visited_event. contatc will be calculated by the custom attributes email and last_name of your selected activtiy. If this fields do not exist, this field has no effect." class="initialism"></abbr></h4>
22
+ <%= scrivito_tag :div, widget, :tags, data: {editor: 'scrivito-list-editor'} %>
23
+ </div>
24
+
25
+ <div class="tab-panel" id="edit-activity">
26
+ <h4>Activity</h4>
27
+ <%= scrivito_toggle_button_editor widget, :activity_id, CrmFormWidget.activities.map { |a| a.id } %>
28
+ </div>
29
+
30
+ <div class="tab-panel" id="edit-event">
31
+ <h4>Activity</h4>
32
+ <%= scrivito_toggle_button_editor widget, :event_id, CrmFormWidget.events do |event|
33
+ scrivito_tag(:button, widget, :event_id, data: {editor: 'scrivito-toggle-button', content: event.id}) do
34
+ event.name
35
+ end
36
+ end %>
37
+ </div>
38
+ </div>
39
+ </div>
@@ -0,0 +1,7 @@
1
+ <% if widget.activity_id? %>
2
+ <%= render 'crm_form_widget/form', widget: widget %>
3
+ <% else %>
4
+ <div class="alert alert-warning">
5
+ Select an activty in the details view.
6
+ </div>
7
+ <% end %>
@@ -0,0 +1,3 @@
1
+ <%= scrivito_thumbnail 'Infopark Crm Form Widget', image_tag("form.png") do %>
2
+ Add a formular to your page based on an activty from Infopark CRM.
3
+ <% end %>
@@ -0,0 +1,4 @@
1
+ require "scrivito_crm_form_widget/engine"
2
+
3
+ module ScrivitoCrmFormWidget
4
+ end
@@ -0,0 +1,9 @@
1
+ require 'scrivito_advanced_editors'
2
+ require 'active_attr'
3
+ require 'infopark_webcrm_sdk'
4
+
5
+ module ScrivitoCrmFormWidget
6
+ class Engine < ::Rails::Engine
7
+ isolate_namespace ScrivitoCrmFormWidget
8
+ end
9
+ end
@@ -0,0 +1,3 @@
1
+ module ScrivitoCrmFormWidget
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,4 @@
1
+ # desc "Explaining what the task does"
2
+ # task :scrivito_crm_form_widget do
3
+ # # Task goes here
4
+ # end
@@ -0,0 +1,17 @@
1
+ class CreateJrFormWidget < ::Scrivito::Migration
2
+ def up
3
+ Scrivito::ObjClass.create(
4
+ name: 'JrFormWidget',
5
+ type: 'publication',
6
+ title: 'Just Relate Fromular Widget',
7
+ attributes: [
8
+ {name: "activity_id", type: "string"},
9
+ {name: "event_id", type: "string"},
10
+ {name: "subject", type: "string"},
11
+ {name: "tags", type: "string"},
12
+ {name: "redirect_to", type: "reference"},
13
+ {name: "submit_button_text", type: "string"},
14
+ ]
15
+ )
16
+ end
17
+ end
metadata ADDED
@@ -0,0 +1,149 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: scrivito_crm_form_widget
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Scrivito
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-05-15 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: scrivito_sdk
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: scrivito_advanced_editors
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: active_attr
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: infopark_webcrm_sdk
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: A widget for Scrivito to show a form using Infopark CRM api v2.0.
98
+ email:
99
+ - support@scrivito.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - LICENSE
105
+ - Rakefile
106
+ - app/assets/images/form.png
107
+ - app/assets/scripts/scrivito_crm_form_widget.js
108
+ - app/assets/styles/scrivito_crm_form_widget.css
109
+ - app/controllers/scrivito_crm_form_widget/application_controller.rb
110
+ - app/models/crm_form_widget.rb
111
+ - app/presenter/crm_form_presenter.rb
112
+ - app/views/crm_form_widget/_crm_enum.html.erb
113
+ - app/views/crm_form_widget/_crm_multienum.html.erb
114
+ - app/views/crm_form_widget/_crm_string.html.erb
115
+ - app/views/crm_form_widget/_crm_text.html.erb
116
+ - app/views/crm_form_widget/_form.html.erb
117
+ - app/views/crm_form_widget/details.html.erb
118
+ - app/views/crm_form_widget/show.html.erb
119
+ - app/views/crm_form_widget/thumbnail.html.erb
120
+ - lib/scrivito_crm_form_widget.rb
121
+ - lib/scrivito_crm_form_widget/engine.rb
122
+ - lib/scrivito_crm_form_widget/version.rb
123
+ - lib/tasks/scrivito_crm_form_widget_tasks.rake
124
+ - scrivito/migrate/0_create_jr_form_widget.rb
125
+ homepage: https://www.scrivito.com
126
+ licenses:
127
+ - LGPL-3.0
128
+ metadata: {}
129
+ post_install_message:
130
+ rdoc_options: []
131
+ require_paths:
132
+ - lib
133
+ required_ruby_version: !ruby/object:Gem::Requirement
134
+ requirements:
135
+ - - ">="
136
+ - !ruby/object:Gem::Version
137
+ version: '0'
138
+ required_rubygems_version: !ruby/object:Gem::Requirement
139
+ requirements:
140
+ - - ">="
141
+ - !ruby/object:Gem::Version
142
+ version: '0'
143
+ requirements: []
144
+ rubyforge_project:
145
+ rubygems_version: 2.2.2
146
+ signing_key:
147
+ specification_version: 4
148
+ summary: A widget for Scrivito to show a form using Infopark CRM api v2.0.
149
+ test_files: []