]> git.evergreen-ils.org Git - working/Evergreen.git/blob - Open-ILS/web/js/dojo/MARC/AuthorityControlSet.js
Add some logic for fetching stored controlsets and switching amongst them
[working/Evergreen.git] / Open-ILS / web / js / dojo / MARC / AuthorityControlSet.js
1 /* vim: et:sw=4:ts=4:
2  * ---------------------------------------------------------------------------
3  * Copyright (C) 2011  Equinox Software, Inc.
4  * Mike Rylander <miker@esilibrary.com>
5  *
6  * This program is free software; you can redistribute it and/or
7  * modify it under the terms of the GNU General Public License
8  * as published by the Free Software Foundation; either version 2
9  * of the License, or (at your option) any later version.
10  *
11  * This program is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  * ---------------------------------------------------------------------------
16  */
17
18 if(!dojo._hasResource["MARC.AuthorityControlSet"]) {
19
20     dojo.require('openils.PermaCrud');
21     dojo.require('MARC.FixedFields');
22
23     dojo._hasResource["MARC.AuthorityControlSet"] = true;
24     dojo.provide("MARC.AuthorityControlSet");
25     dojo.declare('MARC.AuthorityControlSet', null, {
26
27         _controlset : -1,
28
29         constructor : function(kwargs) {
30
31             if (!MARC.AuthorityControlSet._remote_loaded) {
32
33                 // TODO -- push the raw tree into the oils cache for later reuse
34
35                 var pcrud = new openils.PermaCrud();
36                 var acs_list = pcrud.retrieveAll('acs');
37
38                 // loop over each acs
39                 dojo.forEach( acs_list, function (cs) {
40                     MARC.AuthorityControlSet._controlsets[cs.id()] = {
41                         id : cs.id(),
42                         name : cs.name(),
43                         description : cs.description(),
44                         authority_tag_map : {},
45                         control_map : {},
46                         bib_fields : [],
47                         raw : cs
48                     };
49
50                     // grab the authority fields
51                     var acsaf_list = pcrud.search('acsaf', {control_set : cs.id()});
52                     MARC.AuthorityControlSet._controlsets[cs.name()].raw.authority_fields( acsaf_list );
53
54                     // and loop over each
55                     dojo.forEach( acsaf_list, function (csaf) {
56                         // link the main entry if we're subordinate
57                         if (csaf.main_entry()) {
58                             csaf.main_entry(
59                                 dojo.filter(acsaf_list, function (x) {
60                                     return x.id() == csaf.main_entry();
61                                 })[0]
62                             );
63                         }
64
65                         // link the sub entries if we're main
66                         csaf.sub_entries(
67                             dojo.filter(acsaf_list, function (x) {
68                                 return x.main_entry() == csaf.id();
69                             })[0]
70                         );
71
72                         // now, bib fields
73                         var acsbf_list = pcrud.search('acsbf', {authority_field : csaf.id()});
74                         csaf.bib_fields( acsbf_list );
75
76                         MARC.AuthorityControlSet._controlsets[cs.name()].bib_fields = [].concat(
77                             MARC.AuthorityControlSet._controlsets[cs.name()].bib_fields
78                             acsbf_list
79                         );
80
81                         dojo.forEach( acsbf_list, function (csbf) {
82                             // link the main entry if we're subordinate
83                             if (csbf.authority_field()) {
84                                 csbf.authority_field(
85                                     dojo.filter(acsaf_list, function (x) {
86                                         return x.a() == csbf.authority_field();
87                                     })[0]
88                                 );
89                             }
90     
91                         });
92                     });
93
94                     // build the authority_tag_map
95                     dojo.forEach( MARC.AuthorityControlSet._controlsets[cs.name()].bib_fields, function (bf) {
96                         MARC.AuthorityControlSet._controlsets[cs.name()].authority_tag_map[bf.tag()] = [/*XXX*/];
97                         MARC.AuthorityControlSet._controlsets[cs.name()].control_map[bf.tag()] = {/*XXX*/};
98                     });
99                 });
100
101             }
102
103             if (kwargs.controlSet) {
104                 this._controlset = kwargs.controlSet;
105             }
106         },
107
108         controlSetId: function (x) {
109             if (x) this._controlset = x;
110             return this._controlset;
111         },
112
113         controlSet: function (x) {
114             return MARC.AuthorityControlSet._controlsets[this.controlSetId(x)];
115         },
116
117         controlSetList : function () {
118             var l = [];
119             for (var i in MARC.AuthorityControlSet._controlsets) {
120                 l.push(i);
121             }
122             return l;
123         }
124
125     });
126
127     MARC.AuthorityControlSet._remote_loaded = false;
128
129     MARC.AuthorityControlSet._controlsets = {
130         // static sorta-LoC setup ... to be overwritten with server data 
131         -1 : {
132             id : -1,
133             name : 'Static LoC legacy mapping',
134             description : 'Legacy mapping provided as a default',
135             authority_tag_map : {
136                 100 : [[100,500,700],100],
137                 700 : [[100,500,700],100],
138                 800 : [[100,500,700],100],
139                 110 : [[110,510,710],110],
140                 610 : [[110,510,710],110],
141                 710 : [[110,510,710],110],
142                 810 : [[110,510,710],110],
143                 111 : [[111,511,711],111],
144                 611 : [[111,511,711],111],
145                 711 : [[111,511,711],111],
146                 811 : [[111,511,711],111],
147                 240 : [[130,530,730],130],
148                 130 : [[130,530,730],130],
149                 730 : [[130,530,730],130],
150                 830 : [[130,530,730],130],
151                 600 : [[100,500,580,581,582,585,700,780,781,782,785],100],
152                 630 : [[130,530,730],130],
153                 648 : [[148,548],148],
154                 650 : [[150,550,580,581,582,585,750,780,781,782,785],150],
155                 651 : [[151,551,580,581,582,585,751,780,781,782,785],151],
156                 655 : [[155,555,580,581,582,585,755,780,781,782,785],155]
157             },
158             contorl_map : {
159                 100 : {
160                     'a' : { 100 : 'a' },
161                     'd' : { 100 : 'd' },
162                     'e' : { 100 : 'e' },
163                     'q' : { 100 : 'q' }
164                 },
165                 110 : {
166                     'a' : { 110 : 'a' },
167                     'd' : { 110 : 'd' }
168                 },
169                 111 : {
170                     'a' : { 111 : 'a' },
171                     'd' : { 111 : 'd' }
172                 },
173                 130 : {
174                     'a' : { 130 : 'a' },
175                     'd' : { 130 : 'd' }
176                 },
177                 240 : {
178                     'a' : { 130 : 'a' },
179                     'd' : { 130 : 'd' }
180                 },
181                 400 : {
182                     'a' : { 100 : 'a' },
183                     'd' : { 100 : 'd' }
184                 },
185                 410 : {
186                     'a' : { 110 : 'a' },
187                     'd' : { 110 : 'd' }
188                 },
189                 411 : {
190                     'a' : { 111 : 'a' },
191                     'd' : { 111 : 'd' }
192                 },
193                 440 : {
194                     'a' : { 130 : 'a' },
195                     'n' : { 130 : 'n' },
196                     'p' : { 130 : 'p' }
197                 },
198                 700 : {
199                     'a' : { 100 : 'a' },
200                     'd' : { 100 : 'd' },
201                     'q' : { 100 : 'q' },
202                     't' : { 100 : 't' }
203                 },
204                 710 : {
205                     'a' : { 110 : 'a' },
206                     'd' : { 110 : 'd' }
207                 },
208                 711 : {
209                     'a' : { 111 : 'a' },
210                     'c' : { 111 : 'c' },
211                     'd' : { 111 : 'd' }
212                 },
213                 730 : {
214                     'a' : { 130 : 'a' },
215                     'd' : { 130 : 'd' }
216                 },
217                 800 : {
218                     'a' : { 100 : 'a' },
219                     'd' : { 100 : 'd' }
220                 },
221                 810 : {
222                     'a' : { 110 : 'a' },
223                     'd' : { 110 : 'd' }
224                 },
225                 811 : {
226                     'a' : { 111 : 'a' },
227                     'd' : { 111 : 'd' }
228                 },
229                 830 : {
230                     'a' : { 130 : 'a' },
231                     'd' : { 130 : 'd' }
232                 },
233                 600 : {
234                     'a' : { 100 : 'a' },
235                     'd' : { 100 : 'd' },
236                     'q' : { 100 : 'q' },
237                     't' : { 100 : 't' },
238                     'v' : { 180 : 'v',
239                         100 : 'v',
240                         181 : 'v',
241                         182 : 'v',
242                         185 : 'v'
243                     },
244                     'x' : { 180 : 'x',
245                         100 : 'x',
246                         181 : 'x',
247                         182 : 'x',
248                         185 : 'x'
249                     },
250                     'y' : { 180 : 'y',
251                         100 : 'y',
252                         181 : 'y',
253                         182 : 'y',
254                         185 : 'y'
255                     },
256                     'z' : { 180 : 'z',
257                         100 : 'z',
258                         181 : 'z',
259                         182 : 'z',
260                         185 : 'z'
261                     }
262                 },
263                 610 : {
264                     'a' : { 110 : 'a' },
265                     'd' : { 110 : 'd' },
266                     't' : { 110 : 't' },
267                     'v' : { 180 : 'v',
268                         110 : 'v',
269                         181 : 'v',
270                         182 : 'v',
271                         185 : 'v'
272                     },
273                     'x' : { 180 : 'x',
274                         110 : 'x',
275                         181 : 'x',
276                         182 : 'x',
277                         185 : 'x'
278                     },
279                     'y' : { 180 : 'y',
280                         110 : 'y',
281                         181 : 'y',
282                         182 : 'y',
283                         185 : 'y'
284                     },
285                     'z' : { 180 : 'z',
286                         110 : 'z',
287                         181 : 'z',
288                         182 : 'z',
289                         185 : 'z'
290                     }
291                 },
292                 611 : {
293                     'a' : { 111 : 'a' },
294                     'd' : { 111 : 'd' },
295                     't' : { 111 : 't' },
296                     'v' : { 180 : 'v',
297                         111 : 'v',
298                         181 : 'v',
299                         182 : 'v',
300                         185 : 'v'
301                     },
302                     'x' : { 180 : 'x',
303                         111 : 'x',
304                         181 : 'x',
305                         182 : 'x',
306                         185 : 'x'
307                     },
308                     'y' : { 180 : 'y',
309                         111 : 'y',
310                         181 : 'y',
311                         182 : 'y',
312                         185 : 'y'
313                     },
314                     'z' : { 180 : 'z',
315                         111 : 'z',
316                         181 : 'z',
317                         182 : 'z',
318                         185 : 'z'
319                     }
320                 },
321                 630 : {
322                     'a' : { 130 : 'a' },
323                     'd' : { 130 : 'd' }
324                 },
325                 648 : {
326                     'a' : { 148 : 'a' },
327                     'v' : { 148 : 'v' },
328                     'x' : { 148 : 'x' },
329                     'y' : { 148 : 'y' },
330                     'z' : { 148 : 'z' }
331                 },
332                 650 : {
333                     'a' : { 150 : 'a' },
334                     'b' : { 150 : 'b' },
335                     'v' : { 180 : 'v',
336                         150 : 'v',
337                         181 : 'v',
338                         182 : 'v',
339                         185 : 'v'
340                     },
341                     'x' : { 180 : 'x',
342                         150 : 'x',
343                         181 : 'x',
344                         182 : 'x',
345                         185 : 'x'
346                     },
347                     'y' : { 180 : 'y',
348                         150 : 'y',
349                         181 : 'y',
350                         182 : 'y',
351                         185 : 'y'
352                     },
353                     'z' : { 180 : 'z',
354                         150 : 'z',
355                         181 : 'z',
356                         182 : 'z',
357                         185 : 'z'
358                     }
359                 },
360                 651 : {
361                     'a' : { 151 : 'a' },
362                     'v' : { 180 : 'v',
363                         151 : 'v',
364                         181 : 'v',
365                         182 : 'v',
366                         185 : 'v'
367                     },
368                     'x' : { 180 : 'x',
369                         151 : 'x',
370                         181 : 'x',
371                         182 : 'x',
372                         185 : 'x'
373                     },
374                     'y' : { 180 : 'y',
375                         151 : 'y',
376                         181 : 'y',
377                         182 : 'y',
378                         185 : 'y'
379                     },
380                     'z' : { 180 : 'z',
381                         151 : 'z',
382                         181 : 'z',
383                         182 : 'z',
384                         185 : 'z'
385                     }
386                 },
387                 655 : {
388                     'a' : { 155 : 'a' },
389                     'v' : { 180 : 'v',
390                         155 : 'v',
391                         181 : 'v',
392                         182 : 'v',
393                         185 : 'v'
394                     },
395                     'x' : { 180 : 'x',
396                         155 : 'x',
397                         181 : 'x',
398                         182 : 'x',
399                         185 : 'x'
400                     },
401                     'y' : { 180 : 'y',
402                         155 : 'y',
403                         181 : 'y',
404                         182 : 'y',
405                         185 : 'y'
406                     },
407                     'z' : { 180 : 'z',
408                         155 : 'z',
409                         181 : 'z',
410                         182 : 'z',
411                         185 : 'z'
412                     }
413                 }
414             }
415         }
416      };
417
418 }