20 | | |
21 | | # Provide layer-specific options in it's own table: |
22 | | db.define_table('gis_layer_newlayertype', |
23 | | SQLField('modified_on','datetime',default=now), |
24 | | SQLField('layer',length=64), |
25 | | SQLField('newfield')) |
26 | | db.gis_layer_newlayertype.layer.requires=IS_IN_DB(db,'gis_layer.uuid','gis_layer.name') |
| 20 | gis_layer_newlayertype_subtypes=['Satellite','Maps','Hybrid'] |
| 21 | # Base table from which the rest inherit |
| 22 | gis_layer=SQLTable(db,'gis_layer', |
| 23 | db.Field('modified_on','datetime',default=now), |
| 24 | #db.Field('uuid',length=64,default=uuid.uuid4()), # Layers like OpenStreetMap, Google, etc shouldn't sync |
| 25 | db.Field('name'), |
| 26 | db.Field('description',length=256), |
| 27 | #db.Field('priority','integer'), # System default priority is set in ol_layers_all.js. User priorities are set in WMC. |
| 28 | db.Field('enabled','boolean',default=True)) |
| 29 | gis_layer.name.requires=IS_NOT_EMPTY() |
| 30 | for layertype in gis_layer_types: |
| 31 | resource='layer_'+layertype |
| 32 | table=module+'_'+resource |
| 33 | title_create=T('Add Layer') |
| 34 | title_display=T('Layer Details') |
| 35 | title_list=T('List Layers') |
| 36 | title_update=T('Edit Layer') |
| 37 | subtitle_create=T('Add New Layer') |
| 38 | subtitle_list=T('Layers') |
| 39 | label_list_button=T('List Layers') |
| 40 | label_create_button=T('Add Layer') |
| 41 | msg_record_created=T('Layer added') |
| 42 | msg_record_modified=T('Layer updated') |
| 43 | msg_record_deleted=T('Layer deleted') |
| 44 | msg_list_empty=T('No Layers currently defined') |
| 45 | # Create Type-specific Layer tables |
| 46 | if layertype=="newlayertype": |
| 47 | t=SQLTable(db,table, |
| 48 | db.Field('subtype'), |
| 49 | gis_layer) |
| 50 | t.subtype.requires=IS_IN_SET(gis_layer_newlayertype_subtypes) |
| 51 | db.define_table(table,t) |
| 52 | db['%s' % table].represent=lambda table:shn_list_item(table,resource='layer_newlayertype',action='display',extra=str(table.enabled)) |
| 53 | if not len(db().select(db['%s' % table].ALL)): |
| 54 | # Populate table |
| 55 | for subtype in gis_layer_newlayertype_subtypes: |
| 56 | db['%s' % table].insert( |
| 57 | name='New Layer Type '+subtype, |
| 58 | subtype=subtype |
| 59 | ) |
| 60 | # Customise CRUD strings if-desired |
| 61 | msg_list_empty=T('No New Layer Type Layers currently defined') |
| 62 | exec('crud_strings.%s=Storage(title_create=title_create, title_display=title_display, title_list=title_list, title_update=title_update, subtitle_create=subtitle_create, subtitle_list=subtitle_list, label_list_button=label_list_button, label_create_button=label_create_button, msg_record_created=msg_record_created, msg_record_modified=msg_record_modified, msg_record_deleted=msg_record_deleted, msg_list_empty=msg_list_empty)' % resource) |
38 | | def shn_gis_create_layer(): |
39 | | customform=FORM( |
40 | | INPUT(_name="newfield"), |
41 | | elif type_new=="newlayertype": |
42 | | db['gis_layer_%s' % type_new].insert( |
43 | | layer=id, |
44 | | newfield=customform.vars.newfield |
45 | | ) |
| 73 | def map_viewing_client(): |
| 74 | newlayertype=Storage() |
| 75 | layers_newlayertype=db(db.gis_layer_newlayertype.enabled==True).select(db.gis_layer_newlayertype.ALL) |
| 76 | for layer in layers_newlayertype: |
| 77 | for subtype in gis_layer_newlayertype_subtypes: |
| 78 | if layer.subtype==subtype: |
| 79 | newlayertype['%s' % subtype]=layer.name |
| 80 | |
| 81 | # Add the Layers to the Return |
| 82 | output.update(dict(newlayertype=newlayertype)) |
| 83 | }}} |
| 84 | Note that these functions are now deprecated as of [changeset:,52]: |
| 85 | * {{{layer()}}} |
| 86 | * {{{shn_gis_create_layer()}}} |
| 87 | * {{{shn_gis_update_layer()}}} |
69 | | Custom fields need form views creating:[[BR]] |
70 | | {{{views/gis/form_field.html}}} |
71 | | {{{ |
72 | | <tr><td><label>{{=T("field_label")}}</label></td> |
73 | | <td><input name="field" type="text" value="{{try:}}{{=resource.field}}{{except:}}{{pass}}" /> |
74 | | {{if customform.errors.field:}}<div class="error">{{=customform.errors.field}}</div>{{pass}}</td></tr> |
75 | | }}} |
76 | | Then adding to the layer CRUD views, such as {{{views/gis/update_layer.html}}}: |
77 | | {{{ |
78 | | {{include 'gis/form_field.html'}} |
79 | | }}} |
80 | | {{{static/scripts/gis_layers.js}}} |
81 | | {{{ |
82 | | } else if (type=="newlayertype") { |
83 | | var fields_hide=["key"]; |
84 | | |
85 | | } else if (type=="newlayertype") { |
86 | | var fields_hide=["subtype","key"]; |
87 | | var fields_show=["field"]; |
88 | | }}} |