IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Ruby on Rails Discussion :

Plugin Redmine: comment ajouter un bouton dans la liste des issues ?


Sujet :

Ruby on Rails

  1. #1
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut Plugin Redmine: comment ajouter un bouton dans la liste des issues ?
    Bonjour tout le monde.

    Je suis en train de développer une suite de plugin pour une grande compagnie pour ajouter une géométrie (base de données spatiale) aux issues.
    Ce premier plugin fonctionne bien.

    Le second ajoute un bouton d'information dans la page détails d'une issue, celui-ci est capable d'envoyer l'identifiant de l'issue à un plugn QGis via un WebSocket pour dire à QGis d'afficher la géométrie.
    Ceci fonctionne bien aussi.
    The init.rb :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    require 'redmine'
     
    Rails.logger.info 'Plugin d’affichage du statut de la présence d’une géométrie pour Redmine'
     
    # This is the important line.
    # It requires the file in lib/geometry_status/view_hook_listeners.rb
    require_dependency 'geometry_status/view_hook_listeners'
     
    Redmine::Plugin.register :geometry_status do
      name 'Geometry Status plugin'
      author 'xxxxxx'
      description 'Ceci est le plugin pour l’intégration du status de la géométrie dans Redmine'
      version '1.0.0'
      # Requires the redmine geometry plugin
      requires_redmine_plugin :geometry, :version_or_higher => '1.0.0'
    end
    view_hook_listeners.rb :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    module GeometryStatus
      # Voir : http://www.redmine.org/projects/redmine/wiki/Hooks
      class Hooks < Redmine::Hook::ViewListener
        def view_layouts_base_html_head(context)
          stylesheet_link_tag("plugin", :plugin => 'geometry_status') +
          javascript_include_tag('plugin', :plugin => 'geometry_status')
        end
     
        # rewrite select for trackers on issue form // view_issues_show_details_bottom
        def view_issues_show_details_bottom(context={})
          issue = context[:issue]
          project = context[:project]
     
          html_return = ''
          if project != nil && project.id == 24 && issue != nil
            # Afficher tous les custom fields :
            #==================================
            # html_return = "<hr>"
            # CustomField.all.each do |custom|
            #   html_return += "<br/>custom id=#{custom.id} / name=#{custom.name}"
            #   custom.possible_values.each do |value|
            #     html_return += "<br/>    => #{value}"
            #   end
            # end
            # return html_return
     
            # id == 24 => project.name == "Base des défauts"
            pointe = Pointes.where(issue_id: issue.id)
     
            if pointe.first != nil
              # La géométrie a été trouvée
              html_button_click = "onClick=\"call_qgis('#{issue.id}|#{pointe.first.pointe}')\""
              html_button = "<button class=\"geometry_status_button\" #{html_button_click}>" + image_tag('geometry.png', :plugin => 'geometry_status', :title => "La FT #{issue.id} a une géométrie\nCliquez sur le bouton pour l'ouvrir dans le plugin Redmine sous QGis", :align => "center") + "</button>"
              html_return = "<hr><p>#{html_button}<strong class=\"geometry_status_centered_text\">Géométrie</strong><div class=\"wiki\"><p>La FT a une géométrie => WKT = #{pointe.first.pointe}</p></div>"
            else
              # La géométrie n'a pas été trouvée
              html_button_click = "onClick=\"call_qgis('#{issue.id}|')\""
              value = CustomField.select('id, name, possible_values').where(name: 'Portée du Défaut').first
              if value
                # Obligé de mettre dans "#{xxxxxx}" sinon la comparaison ne fonctionne pas !
                portee_du_defaut = "#{issue.custom_value_for(value.id)}"
     
                if portee_du_defaut == "Général"
                  html_button   = "<button class=\"geometry_status_button\" #{html_button_click}>" + image_tag('geometry_none.png', :plugin => 'geometry_status', :title => "La FT #{issue.id} n'a pas de géométrie\nCliquez sur le bouton pour l'ouvrir dans le plugin Redmine sous QGis", :align => "center") + "</button>"
                  html_return = "<hr><p>#{html_button}<strong class=\"geometry_status_centered_text\">Géométrie</strong><div class=\"wiki\"><p>La FT générale ne contient pas de géométrie</p></div>"
                elsif portee_du_defaut == "Local"
                  html_button = "<button class=\"geometry_status_button\" #{html_button_click}>" + image_tag('geometry_gray.png', :plugin => 'geometry_status', :title => "La FT #{issue.id} n'a pas de géométrie mais elle devrait en avoir une !\nCliquez sur le bouton pour l'ouvrir dans le plugin Redmine sous QGis", :align => "center") + "</button>"
                  html_return = "<hr><p>#{html_button}<strong class=\"geometry_status_centered_text\">Géométrie</strong><div class=\"wiki\"><p>La FT locale ne contient pas de géométrie mais elle devrait en avoir une !</p></div>"
                else
                  html_return = "<hr><p><strong class=\"geometry_status_centered_text\">Géométrie</strong><div class=\"wiki\"><p>La FT ne contient pas de géométrie. <strong class=\"geometry_unknown_portee_default\">Attention, la portée du défaut '#{portee_du_defaut}' est inconnue !</strong></p></div>"
                end
              end
            end
          end
     
          html_return
        end 
      end
    end
    L'appel à la websocket est implémentée dans le fichier plugin.js.
    Tout fonctionne bien.

    Maintenant, je voudrais ajouter un bouton global dans la page affichant la liste des issues afin d'envoyer toute cette liste (les identifiants) au plugin QGis.
    J'ai essayé d'utiliser les hooks :
    view_layouts_base_body_top
    view_layouts_base_content
    view_layouts_base_body_bottom
    view_projects_show_right

    Mais aucun ne se place où je voudrais : au début de la liste, après la ligne appliquer / filtrer.
    Un autre problème : je n'ai pas accès à la liste des ids à partir du contexte passé en paramètre dans les hooks.

    Je suis certain qu'il existe d'autres voies (hook de contrôller ?) mais je ne sais pas comment faire.
    J'epsère que quelqu'un pourrat m'indiquer la démarche à suivre pour faire ce que je souhaite.

    Merci à tous.

  2. #2
    Membre habitué

    Inscrit en
    Février 2007
    Messages
    250
    Détails du profil
    Informations personnelles :
    Âge : 54

    Informations forums :
    Inscription : Février 2007
    Messages : 250
    Points : 162
    Points
    162
    Par défaut
    Sujet résolu, j'ai répondu ici

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 17/04/2012, 11h38
  2. [AC-2003] comment ajouter un élément dans une liste avec InputBox
    Par spacesheep dans le forum VBA Access
    Réponses: 6
    Dernier message: 02/10/2009, 14h33
  3. Réponses: 8
    Dernier message: 01/03/2008, 14h33
  4. Comment ajouter un bouton dans la barre de titre d'une fenêtre ?
    Par Interruption13h dans le forum C++Builder
    Réponses: 10
    Dernier message: 04/07/2006, 20h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo