source: extensions/GrumPluginClasses/js/rbSearch.js @ 10884

Last change on this file since 10884 was 10884, checked in by grum, 13 years ago

fix bug:2302 - release 3.5.1

  • Property svn:executable set to *
File size: 8.8 KB
Line 
1/**
2 * -----------------------------------------------------------------------------
3 * file: criteriaBuilderSearch.js
4 * file version: 1.1.1
5 * date: 2011-05-15
6 *
7 * JS file provided by the piwigo's plugin "GrumPluginClasses"
8 *
9 * -----------------------------------------------------------------------------
10 * Author     : Grum
11 *   email    : grum@piwigo.com
12 *   website  : http://photos.grum.fr
13 *   PWG user : http://forum.phpwebgallery.net/profile.php?id=3706
14 *
15 *   << May the Little SpaceFrog be with you ! >>
16 * -----------------------------------------------------------------------------
17 *
18 * used to manage the requestBuilder search interface
19 *
20 * :: HISTORY ::
21 *
22 * | release | date       |
23 * | 1.0.0   | 2010/04/27 | * start to coding
24 * |         |            |
25 * | 1.1.0   | 2010/10/21 | * change ajax methods
26 * |         |            |
27 * |         |            | * fix bug : if there is no criteria, don't send
28 * |         |            |   request
29 * |         |            |
30 * | 1.1.1   | 2011/05/15 | * fix some incompatibilities with IE7
31 * |         |            |
32 * |         |            |
33 * |         |            |
34 * |         |            |
35 *
36 */
37
38  var cb=null;
39
40  var interfaceManager = function(optionsToSet)
41  {
42    var pn=null,
43        requestNumber=0,
44        options =
45          {
46            requestCriterionsVisible:'',
47            requestCriterionsHidden:'',
48            requestResult:'',
49            requestResultContent:'',
50            requestResultNfo:'',
51            requestResultPagesNavigator:'',
52            requestResultRequestNumber:0,
53            onPageChange:null,
54            numberPerPage:30
55          };
56
57    /**
58     *
59     */
60    this.doAction = function(fct)
61    {
62      switch(fct)
63      {
64        case 'queryResult':
65          /* function 'queryResult' : when query is executed, prepare the interface
66           */
67          if(arguments.length==3)
68          {
69            displayQueryResult(arguments[1], arguments[2]);
70          }
71          break;
72        case 'queryPage':
73          /* function 'queryPage' : display returned page
74           */
75          if(arguments.length==3)
76          {
77            displayQueryPage(arguments[1], arguments[2]);
78          }
79          break;
80        case 'show':
81          /* function 'show' : show/hide the query/result
82           */
83          if(arguments.length==2)
84          {
85            show(arguments[1]);
86          }
87          break;
88        case 'setOptions':
89          /* function 'setOptions' : allows to set options after the object was
90           *                         created
91           */
92          if(arguments.length==2)
93          {
94            setOptions(arguments[1]);
95          }
96          break;
97        case 'fillCaddie':
98          /* function 'fillCaddie' : allows to fill the caddie with the search result
99           *
100           */
101          if(arguments.length==2)
102          {
103            fillCaddie(arguments[1], this.getRequestNumber());
104          }
105          break;
106      }
107    };
108
109    /**
110     * returns the current request number
111     */
112    this.getRequestNumber = function ()
113    {
114      return(requestNumber);
115    };
116
117    /**
118     * returns the number of items per page
119     */
120    this.getNumberPerPage = function ()
121    {
122      return(options.numberPerPage);
123    };
124
125    /**
126     * this function show/hide the different panels
127     *  'buildQuery'  : hide the result panel and display the panel to build query
128     *  'resultQuery' : hide the panel to build query and display the result panel
129     */
130    var show = function(mode)
131    {
132      switch(mode)
133      {
134        case 'buildQuery':
135          $('.'+options.requestCriterionsVisible).css('display', 'block');
136          $('.'+options.requestCriterionsHidden).css('display', 'none');
137          $('.'+options.requestResult).css('display', 'none');
138          break;
139        case 'resultQuery':
140          $('#iResultQueryContent').html("<br><img class='waitingResult' src='./plugins/GrumPluginClasses/icons/processing.gif'>");
141          $('.'+options.requestCriterionsVisible).css('display', 'none');
142          $('.'+options.requestCriterionsHidden).css('display', 'block');
143          $('.'+options.requestResult).css('display', 'block');
144          break;
145      }
146    },
147
148    /**
149     * this function display the number of items found and prepare the page
150     * navigator
151     *
152     * @param String nfo : 2 information separated with a semi-colon ';'
153     *                      requestNumber;numberOfItems
154     */
155    displayQueryResult = function (isSuccess, nfo)
156    {
157      if(isSuccess)
158      {
159        nfo=nfo.split(';');
160
161        requestNumber=nfo[0];
162        $('#iResultQueryNfo').html(nfo[1]);
163        pn.doAction('setOptions', { numberItem:nfo[1], defaultPage:1 } );
164        show('resultQuery');
165      }
166      else
167      {
168        //$('#'+options.requestResultContent).html("");
169        show('buildQuery');
170        alert(requestBuilderOptions.textSomethingWrong);
171      }
172    },
173
174
175    /**
176     * this function display the number of items found and prepare the page
177     * navigator
178     *
179     * @param String nfo : 2 information separated with a semi-colon ';'
180     *                      requestNumber;numberOfItems
181     */
182    displayQueryPage = function (isSuccess, nfo)
183    {
184      if(isSuccess)
185      {
186        $('#iResultQueryContent').html(nfo);
187      }
188      else
189      {
190        alert(requestBuilderOptions.textSomethingWrong);
191      }
192    },
193
194
195    /**
196     *
197     * @param Object optionsToSet : set the given options
198     */
199    setOptions = function(optionsToSet)
200    {
201      if(typeof optionsToSet=='object')
202      {
203        options = jQuery.extend(options, optionsToSet);
204      }
205    },
206
207    /**
208     * initialize the object
209     */
210    init = function (optionsToSet)
211    {
212      setOptions(optionsToSet);
213
214      pn = new pagesNavigator(options.requestResultPagesNavigator,
215        {
216          itemPerPage:options.numberPerPage,
217          displayNumPage:9,
218          classActive:'pnActive',
219          classInactive:'pnInactive',
220          onPageChange: function (page)
221            {
222              if(options.onPageChange!=null && jQuery.isFunction(options.onPageChange))
223              {
224                options.onPageChange(requestNumber, page, options.numberPerPage);
225              }
226            }
227        }
228      );
229
230      requestNumber=options.requestResultRequestNumber;
231    },
232
233    /**
234     * fill the caddie with the search results
235     * @param String mode : 'add' or 'fill'
236     */
237    fillCaddie = function (mode, requestNumber)
238    {
239      $('#iMenuCaddieImg').css('display', 'inline-block');
240      $('#iMenuCaddieItems ul').css('display', 'none');
241
242      $.ajax(
243        {
244          type: "POST",
245          url: "plugins/GrumPluginClasses/gpc_ajax.php",
246          async: true,
247          data: { ajaxfct:"admin.rbuilder.fillCaddie", fillMode:mode, requestNumber:requestNumber },
248          success:
249            function(msg)
250            {
251              $('#iMenuCaddieImg').css('display', 'none');
252              $('#iMenuCaddieItems ul').css('display', 'block');
253              alert(requestBuilderOptions.textCaddieUpdated);
254            },
255          error:
256            function(msg)
257            {
258              $('#iMenuCaddieImg').css('display', 'none');
259              $('#iMenuCaddieItems ul').css('display', 'block');
260              alert(requestBuilderOptions.textSomethingWrong);
261            }
262        }
263      );
264    };
265
266    init(optionsToSet);
267  };
268
269
270  function init()
271  {
272    im = new interfaceManager(
273      {
274        requestCriterionsVisible:'cRequestCriterions',
275        requestCriterionsHidden:'cModifyRequest',
276        requestResult:'cResultQuery',
277        requestResultContent:'iResultQueryContent',
278        requestResultNfo:'iResultQueryNfo',
279        requestResultPagesNavigator:'iPagesNavigator'
280      }
281    );
282
283    requestBuilderOptions.classGroup='gcBorderInput gcTextInput';
284    requestBuilderOptions.classItem='gcBgInput gcTextInput';
285    requestBuilderOptions.classOperator='cbOperator cbOperatorBg gcLinkHover';
286    requestBuilderOptions.onRequestSuccess = function (msg) { im.doAction('queryResult', true, msg); cb.doAction('getPage', im.getRequestNumber(), 1, im.getNumberPerPage()); };
287    requestBuilderOptions.onRequestError = function (msg) { im.doAction('queryResult', false, msg); };
288    requestBuilderOptions.onGetPageSuccess = function (msg) { im.doAction('queryPage', true, msg); };
289    requestBuilderOptions.onGetPageError = function (msg) { im.doAction('queryPage', false, msg); };
290
291    cb = new criteriaBuilder('iListSelectedCriterions', requestBuilderOptions);
292
293    im.doAction('setOptions',
294      {
295        onPageChange:
296          function (requestNumber, page, numberPerPage)
297          {
298            $('#iResultQueryContent').html("<br><img class='waitingResult' src='./plugins/GrumPluginClasses/icons/processing.gif'>");
299            cb.doAction('getPage', requestNumber, page, numberPerPage);
300          }
301      }
302    );
303  }
Note: See TracBrowser for help on using the repository browser.