source: extensions/GrumPluginClasses/templates/GPCRequestBuilder_search.tpl @ 6208

Last change on this file since 6208 was 6208, checked in by grum, 14 years ago

Fix some bugs on the request builder and improve results display

File size: 9.2 KB
Line 
1{known_script id="jquery.ui" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.core.packed.js"}
2{known_script id="jquery.ui.dialog" src=$ROOT_URL|@cat:"themes/default/js/ui/packed/ui.dialog.packed.js"}
3{known_script id="jquery.tipTip" src=$ROOT_URL|@cat:"themes/default/js/plugins/jquery.tipTip.minified.js"}
4
5{known_script id="gpc.pagesNavigator" src=$ROOT_URL|@cat:"plugins/GrumPluginClasses/js/pagesNavigator.js"}
6
7
8{literal}
9<script type="text/javascript">
10var cb=null;
11
12  interfaceManager = function(optionsToSet)
13  {
14    var pn=null;
15    var requestNumber=0;
16
17    options =
18      {
19        requestCriterionsVisible:'',
20        requestCriterionsHidden:'',
21        requestResult:'',
22        requestResultContent:'',
23        requestResultNfo:'',
24        requestResultPagesNavigator:'',
25        requestResultRequestNumber:0,
26        onPageChange:null,
27        numberPerPage:30,
28      };
29
30    /**
31     *
32     */
33    this.doAction = function(fct)
34    {
35      switch(fct)
36      {
37        case 'queryResult':
38          /* function 'queryResult' : when query is executed, prepare the interface
39           */
40          if(arguments.length==3)
41          {
42            displayQueryResult(arguments[1], arguments[2]);
43          }
44          break;
45        case 'queryPage':
46          /* function 'queryPage' : display returned page
47           */
48          if(arguments.length==3)
49          {
50            displayQueryPage(arguments[1], arguments[2]);
51          }
52          break;
53        case 'show':
54          /* function 'show' : show/hide the query/result
55           */
56          if(arguments.length==2)
57          {
58            show(arguments[1]);
59          }
60          break;
61        case 'setOptions':
62          /* function 'setOptions' : allows to set options after the object was
63           *                         created
64           */
65          if(arguments.length==2)
66          {
67            setOptions(arguments[1]);
68          }
69          break;
70      }
71    }
72
73    /**
74     * returns the current request number
75     */
76    this.getRequestNumber = function ()
77    {
78      return(requestNumber);
79    }
80
81    /**
82     * returns the number of items per page
83     */
84    this.getNumberPerPage = function ()
85    {
86      return(options.numberPerPage);
87    }
88
89    /**
90     * this function show/hide the different panels
91     *  'buildQuery'  : hide the result panel and display the panel to build query
92     *  'resultQuery' : hide the panel to build query and display the result panel
93     */
94    var show = function(mode)
95    {
96      switch(mode)
97      {
98        case 'buildQuery':
99          $('.'+options.requestCriterionsVisible).css('display', 'block');
100          $('.'+options.requestCriterionsHidden).css('display', 'none');
101          $('.'+options.requestResult).css('display', 'none');
102          break;
103        case 'resultQuery':
104          $('#iResultQueryContent').html("<br><img src='./plugins/GrumPluginClasses/icons/processing.gif'>");
105          $('.'+options.requestCriterionsVisible).css('display', 'none');
106          $('.'+options.requestCriterionsHidden).css('display', 'block');
107          $('.'+options.requestResult).css('display', 'block');
108          break;
109      }
110    }
111
112    /**
113     * this function display the number of items found and prepare the page
114     * navigator
115     *
116     * @param String nfo : 2 information separated with a semi-colon ';'
117     *                      requestNumber;numberOfItems
118     */
119    var displayQueryResult = function (isSuccess, nfo)
120    {
121      if(isSuccess)
122      {
123        nfo=nfo.split(';');
124
125        requestNumber=nfo[0];
126        $('#iResultQueryNfo').html(nfo[1]);
127        pn.doAction('setOptions', { numberItem:nfo[1], defaultPage:1 } );
128        show('resultQuery');
129      }
130      else
131      {
132        //$('#'+options.requestResultContent).html("");
133        show('buildQuery');
134        alert('Something is wrong on the server-side !');
135      }
136    }
137
138
139    /**
140     * this function display the number of items found and prepare the page
141     * navigator
142     *
143     * @param String nfo : 2 information separated with a semi-colon ';'
144     *                      requestNumber;numberOfItems
145     */
146    var displayQueryPage = function (isSuccess, nfo)
147    {
148      if(isSuccess)
149      {
150        $('#iResultQueryContent').html(nfo);
151        $('.tiptip').tipTip(
152          {
153            'delay' : 0,
154            'fadeIn' : 0,
155            'fadeOut' : 0,
156            'edgeOffset' : 5,
157          }
158        );
159      }
160      else
161      {
162        alert('Something is wrong on the server-side !');
163      }
164    }
165
166
167    /**
168     *
169     * @param Object optionsToSet : set the given options
170     */
171    var setOptions = function(optionsToSet)
172    {
173      if(typeof optionsToSet=='object')
174      {
175        options = jQuery.extend(options, optionsToSet);
176      }
177    }
178
179    /**
180     * initialize the object
181     */
182    var init = function (optionsToSet)
183    {
184      setOptions(optionsToSet);
185
186      pn = new pagesNavigator(options.requestResultPagesNavigator,
187        {
188          itemPerPage:options.numberPerPage,
189          displayNumPage:9,
190          classActive:'pnActive{/literal}{$datas.themeName}{literal}',
191          classInactive:'pnInactive{/literal}{$datas.themeName}{literal}',
192          onPageChange: function (page)
193            {
194              if(options.onPageChange!=null && jQuery.isFunction(options.onPageChange))
195              {
196                options.onPageChange(requestNumber, page, options.numberPerPage);
197              }
198            },
199        }
200      );
201
202      requestNumber=options.requestResultRequestNumber;
203    }
204
205    init(optionsToSet);
206  }
207
208
209  function init()
210  {
211    im = new interfaceManager(
212      {
213        requestCriterionsVisible:'cRequestCriterions',
214        requestCriterionsHidden:'cModifyRequest',
215        requestResult:'cResultQuery',
216        requestResultContent:'iResultQueryContent',
217        requestResultNfo:'iResultQueryNfo',
218        requestResultPagesNavigator:'iPagesNavigator',
219      }
220    );
221
222    requestBuilderOptions.imgEditUrl='{/literal}{$ROOT_URL}{$themeconf.admin_icon_dir}{literal}/edit_s.png';
223    requestBuilderOptions.imgDeleteUrl='{/literal}{$ROOT_URL}{$themeconf.admin_icon_dir}{literal}/delete.png';
224    requestBuilderOptions.classGroup='gcBorderInput gcTextInput';
225    requestBuilderOptions.classItem='gcBgInput gcTextInput';
226    requestBuilderOptions.classOperator='cbOperator cbOperatorBg{/literal}{$datas.themeName}{literal} gcLinkHover';
227    requestBuilderOptions.onRequestSuccess = function (msg) { im.doAction('queryResult', true, msg); cb.doAction('getPage', im.getRequestNumber(), 1, im.getNumberPerPage()); };
228    requestBuilderOptions.onRequestError = function (msg) { im.doAction('queryResult', false, msg); };
229    requestBuilderOptions.onGetPageSuccess = function (msg) { im.doAction('queryPage', true, msg); };
230    requestBuilderOptions.onGetPageError = function (msg) { im.doAction('queryPage', false, msg); };
231
232    cb = new criteriaBuilder('iListSelectedCriterions', requestBuilderOptions);
233
234    im.doAction('setOptions',
235      {
236        onPageChange:
237          function (requestNumber, page, numberPerPage)
238          {
239            $('#iResultQueryContent').html("<br><img src='./plugins/GrumPluginClasses/icons/processing.gif'>");
240            cb.doAction('getPage', requestNumber, page, numberPerPage);
241          }
242      }
243    );
244  }
245
246
247
248</script>
249{/literal}
250
251{foreach from=$datas.dialogBox item=dialogBox}
252  {$dialogBox.content}
253{/foreach}
254
255<form>
256  <fieldset>
257    <legend>{'gpc_rb_search_criterion'|@translate}</legend>
258
259    <div id='iRequestCriterions' class='cRequestCriterions'>
260      <div style='width:100%;min-height:250px;margin-bottom:8px;'>
261        <ul id='iListSelectedCriterions'>
262        </ul>
263      </div>
264
265      <div id='iMenuCriterions' >
266        <div id='iMenuCTitle' class='gcLink gcBgInput cbButtons'>{'gpc_rb_add_criterions'|@translate}</div>
267        <div id='iMenuCItems'>
268          <ul class='gcBgInput'>
269            {foreach from=$datas.dialogBox item=dialogBox}
270              <li class='gcBgInput'><a onclick="{$dialogBox.handle}.show({literal}{cBuilder:cb}{/literal});">{$dialogBox.label}</a></li>
271            {/foreach}
272          </ul>
273        </div>
274      </div>
275
276      <div class='gcBgInput cbButtons'>{literal}<a onclick="cb.doAction('clear');">{/literal}{'gpc_rb_clear_criterions'|@translate}</a></div>
277    </div>
278    <div class='cModifyRequest' style='display:none;'>
279      <div class='gcBgInput cbButtons'>{literal}<a onclick="im.doAction('show', 'buildQuery');">{/literal}{'gpc_rb_do_modify_request'|@translate}</a></div>
280    </div>
281
282  </fieldset>
283
284  <input type="button" class='cRequestCriterions' style="margin-left:1em;" onclick="cb.doAction('send');" value="{'gpc_rb_search'|@translate}">
285</form>
286
287  <fieldset id='iResultQuery' style='display:none;' class='cResultQuery'>
288    <legend>{'gpc_rb_result_query'|@translate}</legend>
289
290    <div id='iResultQueryContent' style='width:100%;min-height:250px;max-height:450px;overflow:auto;margin-bottom:8px;'></div>
291
292    <div class='gcBgInput gcTextInput'>
293      <div id='iPagesNavigator' style='float:right;'></div>
294      <div style='text-align:left;padding:4px;'>{'gpc_rb_number_of_item_found'|@translate}&nbsp;:&nbsp;<span id='iResultQueryNfo'></span></div>
295    </div>
296
297  </fieldset>
298
299
300<script type="text/javascript">
301  {foreach from=$datas.dialogBox item=dialogBox}
302  var {$dialogBox.handle}=new {$dialogBox.dialogBoxClass}();
303  {/foreach}
304
305  init();
306</script>
Note: See TracBrowser for help on using the repository browser.