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

Last change on this file since 16012 was 16012, checked in by grum, 12 years ago

feature:2634- compatibility with Piwigo 2.4
+add some objects on js framework

  • Property svn:executable set to *
File size: 8.9 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            token:''
56          };
57
58    /**
59     *
60     */
61    this.doAction = function(fct)
62    {
63      switch(fct)
64      {
65        case 'queryResult':
66          /* function 'queryResult' : when query is executed, prepare the interface
67           */
68          if(arguments.length==3)
69          {
70            displayQueryResult(arguments[1], arguments[2]);
71          }
72          break;
73        case 'queryPage':
74          /* function 'queryPage' : display returned page
75           */
76          if(arguments.length==3)
77          {
78            displayQueryPage(arguments[1], arguments[2]);
79          }
80          break;
81        case 'show':
82          /* function 'show' : show/hide the query/result
83           */
84          if(arguments.length==2)
85          {
86            show(arguments[1]);
87          }
88          break;
89        case 'setOptions':
90          /* function 'setOptions' : allows to set options after the object was
91           *                         created
92           */
93          if(arguments.length==2)
94          {
95            setOptions(arguments[1]);
96          }
97          break;
98        case 'fillCaddie':
99          /* function 'fillCaddie' : allows to fill the caddie with the search result
100           *
101           */
102          if(arguments.length==2)
103          {
104            fillCaddie(arguments[1], this.getRequestNumber());
105          }
106          break;
107      }
108    };
109
110    /**
111     * returns the current request number
112     */
113    this.getRequestNumber = function ()
114    {
115      return(requestNumber);
116    };
117
118    /**
119     * returns the number of items per page
120     */
121    this.getNumberPerPage = function ()
122    {
123      return(options.numberPerPage);
124    };
125
126    /**
127     * this function show/hide the different panels
128     *  'buildQuery'  : hide the result panel and display the panel to build query
129     *  'resultQuery' : hide the panel to build query and display the result panel
130     */
131    var show = function(mode)
132    {
133      switch(mode)
134      {
135        case 'buildQuery':
136          $('.'+options.requestCriterionsVisible).css('display', 'block');
137          $('.'+options.requestCriterionsHidden).css('display', 'none');
138          $('.'+options.requestResult).css('display', 'none');
139          break;
140        case 'resultQuery':
141          $('#iResultQueryContent').html("<br><img class='waitingResult' src='./plugins/GrumPluginClasses/icons/processing.gif'>");
142          $('.'+options.requestCriterionsVisible).css('display', 'none');
143          $('.'+options.requestCriterionsHidden).css('display', 'block');
144          $('.'+options.requestResult).css('display', 'block');
145          break;
146      }
147    },
148
149    /**
150     * this function display the number of items found and prepare the page
151     * navigator
152     *
153     * @param String nfo : 2 information separated with a semi-colon ';'
154     *                      requestNumber;numberOfItems
155     */
156    displayQueryResult = function (isSuccess, nfo)
157    {
158      if(isSuccess)
159      {
160        nfo=nfo.split(';');
161
162        requestNumber=nfo[0];
163        $('#iResultQueryNfo').html(nfo[1]);
164        pn.doAction('setOptions', { numberItem:nfo[1], defaultPage:1 } );
165        show('resultQuery');
166      }
167      else
168      {
169        //$('#'+options.requestResultContent).html("");
170        show('buildQuery');
171        alert(requestBuilderOptions.textSomethingWrong);
172      }
173    },
174
175
176    /**
177     * this function display the number of items found and prepare the page
178     * navigator
179     *
180     * @param String nfo : 2 information separated with a semi-colon ';'
181     *                      requestNumber;numberOfItems
182     */
183    displayQueryPage = function (isSuccess, nfo)
184    {
185      if(isSuccess)
186      {
187        $('#iResultQueryContent').html(nfo);
188      }
189      else
190      {
191        alert(requestBuilderOptions.textSomethingWrong);
192      }
193    },
194
195
196    /**
197     *
198     * @param Object optionsToSet : set the given options
199     */
200    setOptions = function(optionsToSet)
201    {
202      if(typeof optionsToSet=='object')
203      {
204        options = jQuery.extend(options, optionsToSet);
205      }
206    },
207
208    /**
209     * initialize the object
210     */
211    init = function (optionsToSet)
212    {
213      setOptions(optionsToSet);
214
215      pn = new pagesNavigator(options.requestResultPagesNavigator,
216        {
217          itemPerPage:options.numberPerPage,
218          displayNumPage:9,
219          classActive:'pnActive',
220          classInactive:'pnInactive',
221          onPageChange: function (page)
222            {
223              if(options.onPageChange!=null && jQuery.isFunction(options.onPageChange))
224              {
225                options.onPageChange(requestNumber, page, options.numberPerPage);
226              }
227            }
228        }
229      );
230
231      requestNumber=options.requestResultRequestNumber;
232    },
233
234    /**
235     * fill the caddie with the search results
236     * @param String mode : 'add' or 'fill'
237     */
238    fillCaddie = function (mode, requestNumber)
239    {
240      $('#iMenuCaddieImg').css('display', 'inline-block');
241      $('#iMenuCaddieItems ul').css('display', 'none');
242
243      $.ajax(
244        {
245          type: "POST",
246          url: "plugins/GrumPluginClasses/gpc_ajax.php",
247          async: true,
248          data: {
249              ajaxfct:"admin.rbuilder.fillCaddie",
250              fillMode:mode,
251              requestNumber:requestNumber,
252              token:options.token
253            },
254          success:
255            function(msg)
256            {
257              $('#iMenuCaddieImg').css('display', 'none');
258              $('#iMenuCaddieItems ul').css('display', 'block');
259              alert(requestBuilderOptions.textCaddieUpdated);
260            },
261          error:
262            function(msg)
263            {
264              $('#iMenuCaddieImg').css('display', 'none');
265              $('#iMenuCaddieItems ul').css('display', 'block');
266              alert(requestBuilderOptions.textSomethingWrong);
267            }
268        }
269      );
270    };
271
272    init(optionsToSet);
273  };
274
275
276  function init()
277  {
278    im = new interfaceManager(
279      {
280        requestCriterionsVisible:'cRequestCriterions',
281        requestCriterionsHidden:'cModifyRequest',
282        requestResult:'cResultQuery',
283        requestResultContent:'iResultQueryContent',
284        requestResultNfo:'iResultQueryNfo',
285        requestResultPagesNavigator:'iPagesNavigator'
286      }
287    );
288
289    requestBuilderOptions.classGroup='gcBorderInput gcTextInput';
290    requestBuilderOptions.classItem='gcBgInput gcTextInput';
291    requestBuilderOptions.classOperator='cbOperator cbOperatorBg gcLinkHover';
292    requestBuilderOptions.onRequestSuccess = function (msg) { im.doAction('queryResult', true, msg); cb.doAction('getPage', im.getRequestNumber(), 1, im.getNumberPerPage()); };
293    requestBuilderOptions.onRequestError = function (msg) { im.doAction('queryResult', false, msg); };
294    requestBuilderOptions.onGetPageSuccess = function (msg) { im.doAction('queryPage', true, msg); };
295    requestBuilderOptions.onGetPageError = function (msg) { im.doAction('queryPage', false, msg); };
296
297    cb = new criteriaBuilder('iListSelectedCriterions', requestBuilderOptions);
298
299    im.doAction('setOptions',
300      {
301        onPageChange:
302          function (requestNumber, page, numberPerPage)
303          {
304            $('#iResultQueryContent').html("<br><img class='waitingResult' src='./plugins/GrumPluginClasses/icons/processing.gif'>");
305            cb.doAction('getPage', requestNumber, page, numberPerPage);
306          }
307      }
308    );
309  }
Note: See TracBrowser for help on using the repository browser.