Commit 2a60008b6f38a9f9397014e90b37ec6ae6955f66

Authored by Victor Costa
1 parent 7aa57416

Added serpro integration plugin global configuration and fix gitlab project creation

plugins/serpro_integration/Gemfile 0 → 100644
... ... @@ -0,0 +1 @@
  1 +gem 'gitlab', '~> 3.1.0'
... ...
plugins/serpro_integration/controllers/serpro_integration_plugin_admin_controller.rb 0 → 100644
... ... @@ -0,0 +1,15 @@
  1 +class SerproIntegrationPluginAdminController < AdminController
  2 +
  3 + def index
  4 + settings = params[:settings]
  5 + settings ||= {}
  6 +
  7 + @settings = Noosfero::Plugin::Settings.new(environment, SerproIntegrationPlugin, settings)
  8 + if request.post?
  9 + @settings.save!
  10 + session[:notice] = 'Settings succefully saved.'
  11 + redirect_to :action => 'index'
  12 + end
  13 + end
  14 +
  15 +end
... ...
plugins/serpro_integration/lib/ext/community.rb
1 1 require_dependency 'community'
2   -#require 'gitlab'
  2 +require 'gitlab'
3 3 #require 'jenkins_api_client'
4 4  
5 5 class Community
... ... @@ -9,53 +9,54 @@ class Community
9 9 settings_items :allow_jenkins_integration, :type => :boolean, :default => true
10 10  
11 11 #FIXME make test for default option
12   - settings_items :serpro_integration_plugin, :type => Hash
  12 + settings_items :serpro_integration_plugin, :type => Hash, :default => {}
  13 +
  14 + attr_accessible :allow_unauthenticated_comments, :allow_gitlab_integration, :gitlab, :allow_sonar_integration, :sonar, :allow_jenkins_integration, :jenkins
13 15  
14 16 ##########################################
15 17 # Gitlab stuff #
16 18 ##########################################
17 19  
18   - after_create :create_gitlab_project
  20 + #after_create :create_gitlab_project
19 21  
20 22 def gitlab= params
21 23 self.serpro_integration_plugin[:gitlab] = params
22 24 end
23 25  
24 26 def gitlab
25   - self.serpro_integration_plugin ||= {}
26 27 self.serpro_integration_plugin[:gitlab] ||= {}
27   - self.serpro_integration_plugin[:gitlab]
28 28 end
29 29  
30   - def create_gitlab_project
31   - Gitlab.endpoint = self.gitlab_host
32   - Gitlab.private_token = self.gitlab_private_token
  30 + def serpro_integration_plugin_settings
  31 + @settings ||= Noosfero::Plugin::Settings.new(environment, SerproIntegrationPlugin)
  32 + end
33 33  
34   - user = nil
  34 + def create_gitlab_project
  35 + Gitlab.endpoint = gitlab_host
  36 + Gitlab.private_token = serpro_integration_plugin_settings.gitlab[:private_token]
35 37  
36 38 #Find user by email
37 39 begin
38   - user = Gitlab.users(:search => email)
  40 + gitlab_user = Gitlab.users(:search => gitlab[:email])
39 41 rescue Gitlab::Error::NotFound, Gitlab::Error::Parsing
40   - user = nil
  42 + gitlab_user = nil
41 43 end
42 44  
43 45 #User not found, create user
44   - if user == nil || user.count == 0
45   - user = self.admins.first
  46 + if gitlab_user == nil || gitlab_user.count == 0
46 47 gitlab_user = Gitlab.create_user(user.email, '123456', {:username => user.identifier, :name => user.name, :provider => 'ldap'})
47 48 end
48 49  
49 50 if gitlab_user.nil?
50 51 self.gitlab[:errors] = _('Gitlab user could not be created')
51 52 return nil
52   - end
53   -
  53 + end
  54 +
54 55 #Create project for user
55 56 begin
56 57 #FIXME Why this?
57 58 if gitlab_user.is_a?(Array)
58   - gitlab_user = user[0]
  59 + gitlab_user = gitlab_user[0]
59 60 end
60 61  
61 62 project_options = {}
... ... @@ -64,7 +65,7 @@ class Community
64 65 project_options[:wall_enabled] = true
65 66 project_options[:wiki_enabled] = true
66 67 project_options[:public] = true
67   - project = Gitlab.create_project(self.identifier, project_options)
  68 + project = Gitlab.create_project(gitlab_project_name, project_options)
68 69  
69 70 #Create Web Hook for Jenkins' integration
70 71 # Gitlab.add_project_hook(project.id, "#{self.jenkins[:url]}/gitlab/build_now")
... ... @@ -77,14 +78,18 @@ class Community
77 78 self.gitlab[:errors] = nil
78 79 end
79 80  
  81 + def gitlab_project_name
  82 + gitlab[:project_name] || self.identifier
  83 + end
  84 +
80 85 # set an API endpoint
81 86 def gitlab_host
82   - self.serpro_integration_plugin[:gitlab_host]
  87 + serpro_integration_plugin_settings.gitlab[:host]
83 88 end
84 89  
85 90 # set a user private token
86 91 def gitlab_private_token
87   - self.serpro_integration_plugin[:gitlab_private_token]
  92 + serpro_integration_plugin_settings.gitlab[:private_token]
88 93 end
89 94  
90 95 ##########################################
... ...
plugins/serpro_integration/lib/serpro_integration_plugin.rb
1 1 class SerproIntegrationPlugin < Noosfero::Plugin
2 2  
3   -#include ActionController::UrlWriter
4   -# include ActionView::Helpers::TagHelper
5   -# include ActionView::Helpers::FormTagHelper
6   -# include FormsHelper
7   -
8   -
9   -# include ActionView::Helpers
10   -# include FormsHelper
11   -
12 3 def self.plugin_name
13 4 "Serpro Integration Plugin"
14 5 end
... ... @@ -17,10 +8,6 @@ class SerproIntegrationPlugin &lt; Noosfero::Plugin
17 8 _("Make integration with serpro servers.")
18 9 end
19 10  
20   -# def filter_comment(c)
21   -# c.reject! unless logged_in? || allowed_by_profile
22   -# end
23   -
24 11 #FIXME make this test
25 12 # User could not have this block
26 13 def self.extra_blocks
... ... @@ -49,16 +36,4 @@ class SerproIntegrationPlugin &lt; Noosfero::Plugin
49 36 ['smile_face.js']
50 37 end
51 38  
52   -# def body_beginning
53   -# "<meta name='profile.allow_unauthenticated_comments'/>" if allowed_by_profile
54   -# end
55   -#
56   -# protected
57   -#
58   -# delegate :logged_in?, :to => :context
59   -#
60   -# def allowed_by_profile
61   -# context.profile && context.profile.allow_unauthenticated_comments
62   -# end
63   -
64 39 end
... ...
plugins/serpro_integration/views/profile-editor-extras.html.erb
1   -
  1 +<script>
  2 +jQuery( document ).ready(function( $ ) {
  3 + function toggle_checkbox_selectors(el) {
  4 + if( el.is(':checked')) {
  5 + $(el.data('selector')).show('fast');
  6 + } else {
  7 + $(el.data('selector')).hide('fast');
  8 + }
  9 + }
  10 + $(".toggle_checkbox").click(function() {
  11 + toggle_checkbox_selectors($(this));
  12 + });
  13 + $(".toggle_checkbox").each(function() {
  14 + toggle_checkbox_selectors($(this));
  15 + });
  16 +});
  17 +</script>
  18 +
2 19 <div id='serpro-integration'>
3   - <div id='gitlab' class='gitlab'>
4   - <%= render :partial => 'gitlab' %>
5   - </div>
  20 + <h2><%= _('Serpro Integration') %></h2>
6 21  
  22 + <%= render :partial => 'gitlab' %>
7 23  
8   - <div>
9   - <%= labelled_check_box(_('Uses sonar integration'), 'profile_data[allow_sonar_integration]', true, profile.allow_sonar_integration) %>
10   - </div>
11   -
  24 + <div id="sonar">
  25 + <h3>
  26 + <%= labelled_check_box('', 'profile_data[allow_sonar_integration]', true, profile.allow_sonar_integration, {:class => "toggle_checkbox", 'data-selector' => 'ul.sonar'}) %>
  27 + <%= _('Sonar Integration') %>
  28 + </h3>
12 29 <ul class='sonar'>
13   - <h2><%= _('Sonar Integration') %></h2>
14 30 <li>
15 31 <%= labelled_text_field(_('Server Host'), 'profile_data[sonar]host]', profile.sonar[:host]) %>
16 32 </li>
... ... @@ -18,14 +34,14 @@
18 34 <%= labelled_text_field(_('Project: '), 'profile_data[sonar][project]', profile.sonar[:project]) %>
19 35 </li>
20 36 </ul>
21   -
22   -
23   - <div>
24   - <%= labelled_check_box(_('Uses Jenkins integration'), 'profile_data[allow_jenkins_integration]', true, profile.allow_jenkins_integration) %>
25 37 </div>
26   -
  38 +
  39 + <div id="jenkins">
  40 + <h3>
  41 + <%= labelled_check_box('', 'profile_data[allow_jenkins_integration]', true, profile.allow_jenkins_integration, {:class => "toggle_checkbox", 'data-selector' => 'ul.jenkins'}) %>
  42 + <%= _('Jenkins Integration') %>
  43 + </h3>
27 44 <ul class='jenkins'>
28   - <h2><%= _('Jenkins Integration') %></h2>
29 45 <li>
30 46 <%= labelled_text_field(_('Server Host'), 'profile_data[jenkins][host]', profile.jenkins[:host]) %>
31 47 </li>
... ... @@ -44,7 +60,6 @@
44 60 <li>
45 61 <%= labelled_text_field(_('Server Url'), 'profile_data[jenkins][url]', profile.jenkins[:url], {:disabled => true}) %>
46 62 </li>
47   -
48 63 </ul>
49   -
  64 + </div>
50 65 </div>
... ...
plugins/serpro_integration/views/profile_editor/_gitlab.html.erb
1   -<div class='option'>
2   - <%= labelled_check_box(_('Uses Gitlab integration'), 'profile_data[allow_gitlab_integration]', true, profile.allow_gitlab_integration) %>
3   -</div>
4   -
5   -<ul>
6   - <h2>
7   - <%= _('Gitlab Integration') %>
8   - <%= link_to_remote _('Force'), :url => {:controller => 'serpro_integration_plugin_myprofile', :action => 'create_gitlab'} %>
  1 +<div id="gitlab">
9 2  
10   - </h2>
  3 +<h3>
  4 + <%= labelled_check_box('', 'profile_data[allow_gitlab_integration]', true, profile.allow_gitlab_integration, {:class => "toggle_checkbox", 'data-selector' => "ul.gitlab"}) %>
  5 + <%= _('Gitlab Integration') %>
  6 +</h3>
  7 +<ul class="gitlab">
  8 + <li>
  9 + <span class="label"><%= _('Server Host:') %><span>
  10 + <span class="value"><%= profile.gitlab_host %><span>
  11 + <%= link_to _('Force'), {:controller => 'serpro_integration_plugin_myprofile', :action => 'create_gitlab'}, {:remote => true} %>
  12 + </li>
11 13 <li>
12   - <%= labelled_text_field(_('Server Host'), 'profile_data[gitlab][host]', profile.gitlab[:host]) %>
  14 + <%= labelled_text_field(_('Project Name:'), 'profile_data[gitlab][project_name]', profile.gitlab_project_name ) %>
13 15 </li>
14 16 <li>
15   - <%= labelled_text_field(_('User private token: '), 'profile_data[gitlab][private_token]', profile.gitlab[:private_token]) %>
  17 + <%= labelled_text_field(_('Owner Email:'), 'profile_data[gitlab][email]', profile.gitlab[:email] || current_user.person.email ) %>
16 18 </li>
17 19 <li>
18 20 <%= _('Erros: %s') % (profile.gitlab[:errors] || _('None')) %>
19 21 </li>
20 22  
21 23 </ul>
22   -
  24 +</div>
... ...
plugins/serpro_integration/views/serpro_integration_plugin_admin/index.html.erb 0 → 100644
... ... @@ -0,0 +1,18 @@
  1 +<h1><%= _('Serpro Integration Settings')%></h1>
  2 +
  3 +<%= form_for(:settings) do |f| %>
  4 +
  5 + <div class="gitlab_settings">
  6 + <h2><%= _('Gitlab Settings')%></h2>
  7 + <%= f.fields_for :gitlab, OpenStruct.new(@settings.gitlab) do |g| %>
  8 + <%= labelled_form_field _('Server Host'), g.text_field("host") %>
  9 + <%= labelled_form_field _('Private Token'), g.text_field(:private_token) %>
  10 + <% end %>
  11 + </div>
  12 +
  13 + <% button_bar do %>
  14 + <%= submit_button(:save, _('Save'), :cancel => {:controller => 'plugins', :action => 'index'}) %>
  15 + <% end %>
  16 +
  17 +<% end %>
  18 +
... ...