Development notice
Currently being updated for Tiki 27+, seems to work mostly, please report any issues to the Tiki chat room
CartoGraf for Tiki version 27+
CartoGraf was officially launched on 2013-04-13 during the 2013 Montreal TikiFest and is in production at http://cartograf.learnquebec.ca
CartoGraf site
CartoGraf is an interactive web-based mapping application to enhance learning in history and geography classes in high schools. CartoGraf is mainly based on Maps, Drawings, PluginAppFrame and Trackers. It is a great example of how to use profiles in a general purpose app (Tiki) to make a very specific application using Tiki as Framework.
To get your own copy of CartoGraf
- You need to get branches/27x (from GitLab) for the latest and greatest goodies :-) (Use the Daily Build of Tiki from git)
- The custom theme is also available from GitLab here
- Activate .htaccess by renaming _htaccess (even better is to link from .htaccess to _htaccess) Note: rewrite rules are essential for this profile
- Select and apply the CartoGraf profile from tiki-admin.php?page=profiles
- Follow the profile Setup instructions
We hope you like it and please do join the community!
To see a demo, please visit: (coming soon)
Theme
- Theme is attached to this page as a zip (soon).
- Also available from https://gitlab.com/tikiwiki/profiles/cartograf
Pages included by this profile
Using:- CartoGraf_HomePage
- CartoGraf_Footer
- CartoGraf_Setup
- CartoGraf_Help
- CartoGraf_Map
- CartoGraf_MapCanvasShare
- CartoGraf_MapCanvasSolo
- CartoGraf_MapCanvasEmpty
- CartoGraf_MapSelector
- CartoGraf_NewAccountValidationIncludedPage
- CartoGraf_languages
General Preferences
YAML
instructions: Setup preferences: feature_search: y feature_sefurl: y allowRegister: n browsertitle: CartoGraf Demo tracker_refresh_itemlink_detail: y geo_always_load_openlayers: y url_after_validation: Account_Validated feature_jquery_ui_theme: start feature_left_column: n theme_unified_admin_backend: y tracker_clone_item: y toolbar_trackers: bold,list,numlist,wikiplugin_youtube layout_add_body_group_class: y layout_tabs_optional: n feature_wiki_ext_icon: n feature_syntax_highlighter: n search_error_missing_field: n sitelogo_title: CartoGraf sitelogo_alt: CartoGraf logo geo_enabled: y jquery_select2: y jquery_select2_sortable: y wizard_admin_hide_on_login: y
Temporary
YAML
preferences: validateUsers: n feature_antibot: n sitelogo_alt: CartoGraf logo
File Galleries Prefs
YAML
preferences: fgal_tracker_existing_search: y fgal_elfinder_feature: y fgal_upload_from_source: y fgal_quota_per_fgal: y fgal_quota_default: 0 fgal_sort_mode: lastModif fgal_list_name: n fgal_list_description: y fgal_list_last_user: y fgal_list_author: o fgal_list_created: o fgal_list_lastModif: y fgal_list_size: y fgal_list_files: n fgal_image_max_size_x: 800
User Files
YAML
preferences: feature_userfiles: y feature_use_fgal_for_user_files: y userfiles_private: n userfiles_hidden: y userfiles_quota: 30 quota_show: bar_and_text
Limit username pattern
CartoGraf relies heavily on Unified Search. Because of this, a username jean-marc won't work. Since hypens are often used in emails, you can't use CartoGraf with the pref "Use email as username" (login_is_email). Space and quote should also not be permitted. Theoretically, underscore (_) should work, but tests have demonstrated that is doesn't. Thus, we are restricting to only numbers and letters, without any accents.As of Tiki 12 the default unified search engine uses mysql which has a minimum searchable token length of 4, so setting minumum user name length to 5 to be safe.
YAML
preferences: username_pattern: /^[_a-zA-Z0-9]*$/ login_is_email: n min_username_length: 5
Permissions
YAML
permissions: Anonymous: allow: - search - view_trackers - tracker_view_attachments Registered: allow: - attach_trackers - create_tracker_items - add_object - remove_object - upload_files - list_file_galleries - view_file_gallery - userfiles
Look & Feel
YAML
preferences: theme: CartoGraf feature_fixed_width: n jquery_ui_selectmenu: y feature_page_title: n feature_sitelogo: y wiki_edit_plugin: n sitelogo_src: themes/CartoGraf/img/logo.gif smarty_security_dirs: [themes/CartoGraf/img]
Menus
YAML
objects: - type: menu ref: CartoGraf_Top_menu data: name: Top description: A menu containing the base navigation of the site collapse: none items: - name: Home url: ((HomePage)) - name: Help url: ((Help)) - name: Setup url: ((Setup)) permissions: [ admin ] - name: Admin url: tiki-admin.php permissions: [ admin ] - type: menu ref: CartoGraf_RightEdge_menu data: name: RightEdge description: collapse: none items: - name: Register url: tiki-register.php groups: [ Anonymous ] - name: Demo url: ((Demo)) - name: Contact url: ((Contact))
Modules
YAML
preferences: modseparateanon: y objects: - type: module ref: LiveHeaderMap_module data: position: top order: 0 name: LiveHeaderMap groups: [ Anonymous, Registered ] params: nobox: y nopage: Map custom: <div id="TheLiveHeaderMap" style="height:188px"></div> - type: module ref: Footer_module data: position: bottom order: 0 name: Footer groups: [ Anonymous, Registered ] params: nobox: y custom: "{if $prefs.language eq 'fr'}{wikiplugin _name='include' page='Footer' start='-FR-START-' stop='-FR-END-'}{/wikiplugin}{else}{wikiplugin _name='include' page='Footer' start='-EN-START-' stop='-EN-END-'}{/wikiplugin}{/if}" - type: module ref: CustomDynamicCSS_module data: position: pagetop order: 0 name: Custom Dynamic CSS groups: [ Anonymous, Registered ] params: nobox: y custom: "{if $prefs.search_error_missing_field eq 'n'}{literal}<style type='text/css'>#error_report .alert {display: none}</style>{/literal}{/if}" - type: module ref: LocationSearch_module data: position: top order: 49 #ensure the map location search is assigned as last module name: map_search_location groups: [ Registered ] params: legacy_mode: search_box show_search_button: y show_go_button: n show_edit_button: n default_button: search page: Map nobox: y style: "float: right; margin-right: 15px" #most of the params ignored as the module is not standard and does have no module div rendered but just the form tag (TODO: fix in Tiki) - type: module ref: TopMenu_module data: position: top order: 1 name: menu groups: [ Anonymous, Registered ] params: id: $CartoGraf_Top_menu type: horiz css: y menu_id: TopMenu translate: y nobox: y decorations: n notitle: y style: "float: left; margin-left: 350px" - type: module ref: RightEdgeMenu_module data: position: right order: 1 name: menu groups: [ Anonymous ] params: bootstrap: n id: $CartoGraf_RightEdge_menu menu_id: RightEdgeMenu nobox: y nopage: Map
Features
YAML
preferences: feature_wiki: y feature_articles: n feature_mytiki: n feature_trackers: y geo_tilesets: [openstreetmap, google_street, google_satellite, google_physical, google_hybrid, blank] geo_google_streetview: y geo_google_streetview_overlay: y wikiplugin_appframe: y wikiplugin_list: y feature_search: y feature_wiki_argvariable: y trackerfield_geographicfeature: y
Drawing
YAML
preferences: feature_draw: y feature_draw_separate_base_image: y feature_draw_in_userfiles: y feature_draw_hide_buttons: ellipse_cx, tool_ellipse_cy, tool_ellipse_rx, tool_ellipse_ry, rect_width_tool, rect_height_tool, cornerRadiusLabel, tool_eyedropper, view_grid, tool_angle, tool_blur, tool_position, xy_panel, marker_panel, tool_reorient, rulers, tool_source, tool_zoom, tool_eyedropper, view_grid, tool_wireframe, line_panel, main_button
Trackers
Points of interest
YAML
objects: - type: tracker ref: pointsOfInterest data: name: Points of interest allow: [creator_modification, creator_deletion] show: list_modification_date section_format: tab admin_only_view: y - type: tracker_option data: tracker: $pointsOfInterest name: popup_fields value: "$profileobject:poiImage$,$profileobject:poiDescription$,$profileobject:poiFinder$" - type: tracker_field ref: poiName data: order: 10 name: Name type: text_field tracker: $pointsOfInterest flags: [ public, mandatory, list, title, link, searchable ] - type: tracker_field ref: poiDescription data: order: 20 name: Description type: text_area options: toolbars: 1 height: 6 distinct: n wysiwyg: n samerow: 1 tracker: $pointsOfInterest flags: [ public ] - type: tracker_field ref: poiIcon data: order: 30 name: Icon type: icon tracker: $pointsOfInterest flags: [ public, list ] options: "$profileobject:iconContainer$" - type: tracker_field ref: poiCoordinates data: order: 40 name: Coordinates type: header tracker: $pointsOfInterest - type: tracker_field ref: poiLocation data: order: 50 name: Location type: map options: "1" tracker: $pointsOfInterest flags: [ public, mandatory ] - type: tracker_field ref: poiAttachments data: order: 60 name: Attachments type: header tracker: $pointsOfInterest - type: tracker_field ref: poiImage data: order: 70 name: Image type: files options: galleryId: 2 filter: image/* count: 1 displayMode: img replace: n uploadInModal: y image_x: 800 image_y: 800 tracker: $pointsOfInterest flags: [ public ] - type: tracker_field ref: poiDetails data: order: 80 name: Details type: header tracker: $pointsOfInterest - type: tracker_field ref: poiMap data: order: 90 name: Map type: item_link options: trackerId: $profileobject:maps$ fieldId: $profileobject:mapName$ displayFieldsList: - 0 status: opc preSelectFieldMethod: exact displayOneItem: one indexRemote: - $profileobject:mapShareCode$ cascade: 7 tracker: $pointsOfInterest flags: [ public, mandatory, list, title, searchable ] permname: map visible: immutable - type: tracker_field ref: poiFinder data: order: 100 name: Finder type: user options: "1" tracker: $pointsOfInterest flags: [ public, mandatory, list ] permname: finder visible: immutable
Zones
This is both for polygons and pathsYAML
objects: - type: tracker ref: zones data: name: Zones allow: [creator_modification, creator_deletion] show: list_modification_date section_format: tab admin_only_view: y - type: tracker_option data: tracker: $zones name: popup_fields value: "$profileobject:zoneImage$,$profileobject:zoneDescription$,$profileobject:zoneFinder$" - type: tracker_field ref: zoneName data: order: 10 name: Name type: text_field tracker: $zones flags: [ public, list, title, link, searchable ] - type: tracker_field ref: zoneDescription data: order: 20 name: Description type: text_area options: toolbars: 1 height: 6 distinct: n wysiwyg: n samerow: 1 tracker: $zones flags: [ public ] - type: tracker_field ref: zoneAttachments data: order: 30 name: Attachments type: header tracker: $zones - type: tracker_field ref: zoneImage data: order: 40 name: Image type: files options: galleryId: 2 filter: image/* count: 1 displayMode: img replace: n uploadInModal: y image_x: 800 image_y: 800 tracker: $zones flags: [ public ] - type: tracker_field ref: zoneDetails data: order: 50 name: Details type: header tracker: $zones - type: tracker_field ref: zoneMap data: order: 60 name: Map type: item_link options: trackerId: $profileobject:maps$ fieldId: $profileobject:mapName$ displayFieldsList: - 0 status: opc preSelectFieldMethod: exact displayOneItem: one indexRemote: - $profileobject:mapShareCode$ cascade: 7 tracker: $zones flags: [ public, mandatory, list, title, searchable ] permname: map visible: immutable - type: tracker_field ref: zoneFinder data: order: 70 name: Finder type: user options: "1" tracker: $zones flags: [ public, mandatory, list ] permname: finder visible: immutable - type: tracker_field ref: zoneFeature data: order: 80 name: Zone type: geographic_feature options: "" tracker: $zones flags: [ public, mandatory ]
Maps
YAML
objects: - type: tracker ref: maps data: name: Maps allow: [creator_modification, creator_deletion] show: list_modification_date section_format: tab admin_only_view: y - type: tracker_option data: tracker: $maps name: popup_fields value: "$profileobject:mapDescription$" - type: tracker_field ref: mapName data: name: Name type: text_field tracker: $maps order: 10 flags: [ public, mandatory, list, title, link, searchable ] - type: tracker_field ref: mapDescription data: name: Instructions type: text_area options: toolbars: 1 height: 6 distinct: n wysiwyg: n samerow: 1 tracker: $maps order: 20 flags: [ public, searchable ] - type: tracker_field ref: mapShareCode data: name: Share Code type: text_field tracker: $maps flags: [ public, list, searchable ] options: "0,10,,,50" order: 30 permname: shareCode validation: regex validation_param: \w* validation_message: Only letters and numbers are allowed in share codes - type: tracker_field ref: mapDetailsHeader data: name: Change Base location type: header tracker: $maps order: 40 - type: tracker_field ref: mapBaseLocation data: name: Base Location type: map tracker: $maps order: 50 flags: [ public, mandatory ] - type: tracker_field ref: mapOwner data: name: Owner type: user options: "1" tracker: $maps order: 60 flags: [ public, mandatory, list ] permname: owner visible: immutable
Legends
YAML
objects: - type: tracker ref: legend data: name: Legend allow: [creator_modification, creator_deletion] show: list_modification_date admin_only_view: y - type: tracker_field ref: legendIcon data: name: Icon type: icon tracker: $legend flags: [ public, mandatory, list ] order: 10 options: "$profileobject:iconContainer$" - type: tracker_field ref: legendText data: name: Text type: text_field tracker: $legend order: 20 flags: [ public, mandatory, list, title, link, searchable ] - type: tracker_field ref: legendMap data: name: Map type: item_link options: trackerId: $profileobject:maps$ fieldId: $profileobject:mapName$ displayFieldsList: - 0 status: opc preSelectFieldMethod: exact displayOneItem: one indexRemote: - $profileobject:mapShareCode$ cascade: 7 tracker: $legend flags: [ public, mandatory, list, title, searchable ] permname: map order: 30 visible: immutable - type: tracker_field ref: legendFinder data: name: Finder type: user options: "1" tracker: $legend order: 40 flags: [ public, mandatory, list ] permname: finder visible: immutable
File Galleries
User files need to be added somewhereYAML
objects: - type: file_gallery ref: iconContainer data: parent: 1 name: Icons description: Icons available for selection in the map. owner: admin archives: 5 flags: [visible] # init_files: # - https://profiles.tiki.org/pics/icons/plugin.png - type: file_gallery ref: imageBank data: parent: 1 name: Image Bank description: Images uploaded by site admins, for use by teachers and students owner: admin archives: -1 flags: [visible] image_max_size_x: 0
Wiki Pages
YAML
objects: - type: wiki_page ref: home_page data: name: HomePage content: wikicontent:CartoGraf_HomePage - type: wiki_page ref: cartograf_footer data: name: Footer content: wikicontent:CartoGraf_Footer - type: wiki_page ref: cartograf_setup data: name: Setup description: Post-Profile Setup Instructions lang: en content: wikicontent:CartoGraf_Setup - type: wiki_page ref: cartograf_help data: name: Help description: Help lang: en content: wikicontent:CartoGraf_Help - type: wiki_page ref: account_validated_page data: name: Account_Validated description: Account Validated lang: en content: wikicontent:CartoGraf_NewAccountValidationIncludedPage - type: wiki_page ref: demo_page data: name: Demo lang: en content: wikicontent:CartoGraf_Demo - type: wiki_page ref: partners_page data: name: Partners lang: en content: wikicontent:CartoGraf_Partners - type: wiki_page ref: contact_page data: name: Contact lang: en content: wikicontent:CartoGraf_Contact
Application Frame Pages
YAML
objects: - type: wiki_page ref: map_page data: name: Map wysiwyg: n content: wikicontent:CartoGraf_Map - type: wiki_page ref: mapcanvas_share_page data: name: MapCanvasShare wysiwyg: n content: wikicontent:CartoGraf_MapCanvasShare - type: wiki_page ref: mapcanvas_solo_page data: name: MapCanvasSolo wysiwyg: n content: wikicontent:CartoGraf_MapCanvasSolo - type: wiki_page ref: mapcanvas_empty_page data: name: MapCanvasEmpty wysiwyg: n content: wikicontent:CartoGraf_MapCanvasEmpty - type: wiki_page ref: mapselector_page data: name: MapSelector wysiwyg: n content: wikicontent:CartoGraf_MapSelector