Author: ahorincar
Date: Tue Aug 13 20:02:15 2013
New Revision: 1513631

URL: http://svn.apache.org/r1513631
Log:
Custom queries are now embeddable

Added:
    
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_query.html
Modified:
    
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/api.py
    
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css
    
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_milestone_view.html
    
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_query.html
    
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_ticket.html

Modified: 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/api.py
URL: 
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/api.py?rev=1513631&r1=1513630&r2=1513631&view=diff
==============================================================================
--- 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/api.py
 (original)
+++ 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/api.py
 Tue Aug 13 20:02:15 2013
@@ -46,7 +46,7 @@ class EmbeddingSystem(Component):
 
 
     def query(self, req, qstr='status!=closed'):
-        q = query.ProductQuery.from_string(self.env, qstr)
+        q = Query.from_string(self.env, qstr)
         ticket_realm = Resource('ticket')
         out = []
         for t in q.execute(req):
@@ -132,14 +132,18 @@ class EmbeddingSystem(Component):
                     'component_num': component_num}
             return 'bh_emb_product.html', data, None
         elif name == 'query':
-            # Feature not yet finished
-            qstring = req.query_string
-            q = self.query(self.env, qstring)
+            qstr = req.query_string
 
-            print "Query results:"
-            print q
+            if qstr=='' or qstr=='?':
+                if req.authname and req.authname != 'anonymous':
+                    qstr = 'status!=closed&owner=$USER'
+                else:
+                    qstr = 'status!=closed'
 
-            data = {}
+            tickets = self.query(req, qstr)
+
+            data={'tickets': tickets,
+                  'query': qstr}
             return 'bh_emb_query.html', data, None
         else:
             msg = "It is not possible to embed this resource."

Modified: 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css
URL: 
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css?rev=1513631&r1=1513630&r2=1513631&view=diff
==============================================================================
--- 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css
 (original)
+++ 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/htdocs/embedding.css
 Tue Aug 13 20:02:15 2013
@@ -12,3 +12,13 @@
   padding-left: 0px;
 }
 
+
+#query-embed-content {
+  width: 300px;
+}
+
+#query-results {
+  height: 150px;
+  overflow: scroll;
+  overflow-x: hidden;
+}

Added: 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_query.html
URL: 
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_query.html?rev=1513631&view=auto
==============================================================================
--- 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_query.html
 (added)
+++ 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_embedding_plugin/bhembedding/templates/bh_emb_query.html
 Tue Aug 13 20:02:15 2013
@@ -0,0 +1,50 @@
+  <!DOCTYPE html
+    PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd";>
+<html xmlns="http://www.w3.org/1999/xhtml";
+      xmlns:xi="http://www.w3.org/2001/XInclude";
+      xmlns:py="http://genshi.edgewall.org/";
+      xmlns:i18n="http://genshi.edgewall.org/i18n";>
+      <link rel="stylesheet" 
href="${href.chrome('dashboard/css/bootstrap.css')}" type="text/css" />
+      <link rel="stylesheet" 
href="${href.chrome('dashboard/css/bootstrap-responsive.css')}" type="text/css" 
/>
+      <link rel="stylesheet" href="${href.chrome('embedding/embedding.css')}" 
type="text/css" />
+
+  <head>
+    <title>Query</title>
+  </head>
+
+  <body>
+    <div id="query-embed-content">
+      <h2>Query</h2>
+
+      <h5 class="properties">Query String</h5>
+      <p>add query string here</p>
+      <h5 class="properties">Query Results</h5>
+
+      <py:choose>
+        <py:when test="len(tickets)>5">
+          <div id="query-results">
+            <py:for each="ticket in tickets">
+              <p>
+                 <a target="_blank" href="${href.ticket(ticket)}">Ticket 
#${ticket}</a>
+              </p>
+            </py:for>
+          </div>
+        </py:when>
+
+        <py:otherwise>
+          <div>
+            <py:for each="ticket in tickets">
+              <p>
+                 <a target="_blank" href="${href.ticket(ticket)}">Ticket 
#${ticket}</a>
+              </p>
+            </py:for>
+          </div>
+        </py:otherwise>
+
+        <p>tickets: ${tickets}</p>
+
+      </py:choose>
+    </div>
+  </body>
+</html>

Modified: 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_milestone_view.html
URL: 
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_milestone_view.html?rev=1513631&r1=1513630&r2=1513631&view=diff
==============================================================================
--- 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_milestone_view.html
 (original)
+++ 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_milestone_view.html
 Tue Aug 13 20:02:15 2013
@@ -116,7 +116,7 @@
           <h3 id="myModalLabel">Embed this Milestone</h3>
         </div>
         <div class="modal-body">
-          <textarea id="embed-textarea" class="input-block-level" rows="3" 
style="width:100%;min-width:100%;max-width:100%;">
+          <textarea id="embed-textarea" class="input-block-level" rows="4" 
style="width:100%;min-width:100%;max-width:100%;">
           </textarea>
         </div>
         <div class="modal-footer">

Modified: 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_query.html
URL: 
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_query.html?rev=1513631&r1=1513630&r2=1513631&view=diff
==============================================================================
--- 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_query.html
 (original)
+++ 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_query.html
 Tue Aug 13 20:02:15 2013
@@ -101,10 +101,10 @@
                               <th colspan="${1 if field.type == 'time' else 
2}"><label>or</label></th>
                             </py:otherwise>
                           </py:choose>
-    
+
                           <td class="filter" colspan="${2 if field.type in 
('radio', 'checkbox', 'time') else None}"
                               py:choose="">
-    
+
                             <py:when test="field.type == 'select'">
                               <select name="${n_field_name}">
                                 <option></option>
@@ -120,7 +120,7 @@
                                 </optgroup>
                               </select>
                             </py:when>
-    
+
                             <py:when test="field.type == 'radio'">
                               <py:for each="option in field.options">
                                 <input type="checkbox" 
id="_${n_field_name}_$option" name="${n_field_name}"
@@ -129,7 +129,7 @@
                                 <label for="_${n_field_name}_$option" 
class="control">${option or 'none'}</label>
                               </py:for>
                             </py:when>
-    
+
                             <py:when test="field.type == 'checkbox'">
                               <input type="radio" id="_${n_field_name}_on" 
name="$n_field_name" value="1"
                                      checked="${constraint.mode != '!' or 
constraint_value == '1' or None}" />
@@ -138,11 +138,11 @@
                                      checked="${constraint.mode == '!' or 
constraint_value != '1' or None}" />
                               <label for="_${n_field_name}_off" 
class="control">no</label>
                             </py:when>
-    
+
                             <py:when test="field.type in ('text', 'textarea', 
'id')">
                               <input type="text" name="${n_field_name}" 
value="$constraint_value" size="42" />
                             </py:when>
-                            
+
                             <py:when test="field.type == 'time'"
                                      py:with="(start, end) = '..' in 
constraint_value and constraint_value.split('..', 1)
                                                              or 
(constraint_value, '')">
@@ -156,7 +156,7 @@
                           </td>
                         </tr>
                       </tbody>
-    
+
                       <tbody py:with="last_clause = clause_num == 
(len(clauses) or 1) - 1">
                         <tr class="actions">
                           <td class="and" colspan="2">
@@ -234,7 +234,7 @@
               <input type="text" name="max" id="max" size="10" 
value="${query.max}"
                   class="input-mini" />
             </label>
-  
+
             <!--! Allow the user to decide what rows to include in the output 
of the query -->
             <label>Show under each result:
               <py:for each="column in all_textareas">
@@ -243,7 +243,7 @@
                 ${fields.get(column, {'label': column or 
'none'}).label}</label>
               </py:for>
             </label>
-  
+
           </div>
         </div>
 
@@ -251,7 +251,7 @@
           <input py:if="report_resource" type="hidden" name="report" 
value="$report_resource.id" />
           <input type="hidden" name="order" value="$query.order" />
           <input py:if="query.desc" type="hidden" name="desc" value="1" />
-          <input type="submit" name="update" value="${_('Update')}" 
+          <input type="submit" name="update" value="${_('Update')}"
               class="btn" />
         </div>
         <hr />
@@ -266,6 +266,7 @@
         </div>
       </div>
 
+
       <div class="buttons span12"
            py:with="edit = report_resource and 'REPORT_MODIFY' in 
perm(report_resource);
                     new = 'REPORT_CREATE' in perm;
@@ -287,6 +288,55 @@
                             else _('Create new report from current query')}" />
           </div>
         </form>
+
+
+        <!-- Embedding plugin -->
+        <a id="embed-btn" href="#embed-modal" role="button" class="btn" 
data-toggle="modal">Embed Results</a>
+
+        <script language="JavaScript" type="text/javascript">
+          function make_iframe(src) {
+            iframe = document.createElement("iframe");
+            var root = get_root();
+            $(iframe).attr("src", root + src);
+            $(iframe).attr("width", "470");
+            $(iframe).attr("height", "480");
+            $(iframe).attr("frameborder", "0");
+            $(iframe).attr("scrolling", "no");
+            return $(iframe).get(0).outerHTML;
+         }
+
+         $('#embed-btn').click(function() {
+           
$('#embed-textarea').val(make_iframe(prepare_embed_url('$query_href')));
+         });
+
+         function get_root() {
+           var root = window.location.protocol + '//' + window.location.host;
+           return root
+         }
+
+         function prepare_embed_url(url) {
+           var url_array = url.split('/');
+           var embed_url = '${href.embed()}';
+           return embed_url + '/' + url_array[url_array.length-1];
+         }
+        </script>
+
+
+        <!-- Embedding Modal -->
+        <div id="embed-modal" class="modal hide fade" tabindex="-1" 
role="dialog" aria-labelledby="myModalLabel" aria-hidden="true">
+          <div class="modal-header">
+            <button type="button" class="close" data-dismiss="modal" 
aria-hidden="true">×</button>
+            <h3 id="myModalLabel">Embed Query Results</h3>
+          </div>
+          <div class="modal-body">
+            <textarea id="embed-textarea" rows="5" class="input-block-level" 
style="width:100%;min-width:100%;max-width:100%;">
+            </textarea>
+          </div>
+          <div class="modal-footer">
+            <button class="btn" data-dismiss="modal" 
aria-hidden="true">Close</button>
+          </div>
+        </div>
+
         <form py:if="delete" method="get" action="${url_of(report_resource)}"
             style="display: inline-block">
           <input type="hidden" name="action" value="delete" />

Modified: 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_ticket.html
URL: 
http://svn.apache.org/viewvc/bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_ticket.html?rev=1513631&r1=1513630&r2=1513631&view=diff
==============================================================================
--- 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_ticket.html
 (original)
+++ 
bloodhound/branches/bep_0007_embeddable_objects/bloodhound_theme/bhtheme/templates/bh_ticket.html
 Tue Aug 13 20:02:15 2013
@@ -396,7 +396,7 @@
             <h3 id="myModalLabel">Embed this Ticket</h3>
           </div>
           <div class="modal-body">
-            <textarea id="embed-textarea" rows="3" class="input-block-level" 
style="width:100%;min-width:100%;max-width:100%;">
+            <textarea id="embed-textarea" rows="4" class="input-block-level" 
style="width:100%;min-width:100%;max-width:100%;">
             </textarea>
           </div>
           <div class="modal-footer">


Reply via email to