scrivito_crm_form_widget 0.1.0

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.
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: []