Loading...
 
Skip to main content

History: CartoGraf_15

Source of version: 38 (current)

Copy to clipboard
            ::{img src="https://tiki.org/display545" link="https://profiles.tiki.org/CartoGraf-15" alt="CartoGraf site" desc="CartoGraf site" align="center" imalign="center" width="550"}::

! CartoGraf for Tiki version 15+

__CartoGraf__ is an interactive web-based mapping application to enhance learning in history and geography classes in high schools. CartoGraf is mainly based on [https://doc.tiki.org/Maps|Maps], [https://doc.tiki.org/Drawings|Drawings], [https://doc.tiki.org/PluginAppFrame|PluginAppFrame] and [https://doc.tiki.org/Trackers|Trackers]. It is a great example of how to use profiles in a general purpose app to make a very specific application using Tiki as a ((dev:Framework)).

To get your own copy of CartoGraf:
# You need to get branches/15x (Tiki 15.x version from SVN) for the latest and greatest goodies :-)
# Activate .htaccess by renaming _htaccess (even better is to link from .htaccess to _htaccess) {REMARKSBOX()}Note: rewrite rules are essential for this profile{REMARKSBOX}
# You need to get the CartoGraf theme first and copy it over to the -+themes/+- directory (see Theme section below)
# Select and apply this __CartoGraf_15__ profile from tiki-admin.php?page=profiles
# Follow the ((CartoGraf_15_Setup|profile Setup instructions))

We hope you like it and feel free to join the Tiki community!

To see a demo video of the older version, please visit: [https://tv.tiki.org/CartoGraf|https://tv.tiki.org/CartoGraf|box;]

! Theme
* As for ongoing theme development, the code is on https://sourceforge.net/p/tikiwiki/code/HEAD/tree/users/cartograf/cartograf_tiki15/
* You can also use SVN to get all the latest code developed by using the following command:{CODE()}svn checkout https://svn.code.sf.net/p/tikiwiki/code/users/cartograf cartograf{CODE}

! Pages included by this profile
* ((CartoGraf_HomePage))
* ((CartoGraf_Footer))
* ((CartoGraf_15_Setup))
* ((CartoGraf_Help))
* ((CartoGraf_15_Map))
* ((CartoGraf_MapCanvasShare))
* ((CartoGraf_MapCanvasSolo))
* ((CartoGraf_MapSelector))
* ((CartoGraf_NewAccountValidationIncludedPage))
* ((CartoGraf_languages))

!! General Preferences
{CODE(caption="YAML")}
#instructions: Setup
preferences:
 feature_search_fulltext: n
 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
 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
{CODE}
!! Temporary 
{CODE(caption="YAML")}
preferences:
 validateUsers: n
 feature_antibot: n
 sitelogo_alt: CartoGraf logo
{CODE}

!! File Galleries Prefs 
{CODE(caption="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
{CODE}

!! User Files 
{CODE(caption="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
{CODE}

!! Limit username pattern
CartoGraf relies heavily on ((doc:Unified Search)) (Zend_Search_Lucene). 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.

{CODE(caption="YAML" colors="yaml")}
preferences:
 username_pattern: /^[_a-zA-Z0-9]*$/
 login_is_email: n
 min_username_length: 5
{CODE}

!! Permissions
{CODE(caption=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
{CODE}

!! Look & Feel
{CODE(caption=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]
{CODE}

!! Menus
{CODE(caption=>YAML,wrap=1)}
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))
{CODE}

!! Modules
{CODE(caption=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
{CODE}

!! Features
{CODE(caption=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
{CODE}


!! Drawing
{CODE(caption="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

{CODE}
!! Trackers
!!! Points of interest
{CODE(caption=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
{CODE}

!!! Zones
This is both for polygons and paths

{CODE(caption=YAML)}
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: "2,image/*,1,img,,,1,n,$profileobject:imageBank$,2"
   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 ]
{CODE}

!!! Maps
{CODE(caption="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
{CODE}

!!! Legends
{CODE(caption="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
{CODE}

!! File Galleries
User files need to be added somewhere
{CODE(caption=YAML)}
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
{CODE}
!! Wiki Pages
{CODE(caption=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_15_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
{CODE}

!!! Application Frame Pages
{CODE(caption=YAML)}
objects:
 -
  type: wiki_page
  ref: map_page
  data:
   name: Map
   content: wikicontent:CartoGraf_15_Map
 -
  type: wiki_page
  ref: mapcanvas_share_page
  data:
   name: MapCanvasShare
   content: wikicontent:CartoGraf_MapCanvasShare
 -
  type: wiki_page
  ref: mapcanvas_solo_page
  data:
   name: MapCanvasSolo
   content: wikicontent:CartoGraf_MapCanvasSolo
 -
  type: wiki_page
  ref: mapselector_page
  data:
   name: MapSelector
   content: wikicontent:CartoGraf_MapSelector
{CODE}

! Known Issues
!! Regressions
(means it works fine in Tiki 12)
* Streetview images loaded remotely from Google after saving the marker do not load (403 forbidden even with API key filled in to control panels - seems missing lib reference in html head for some reason?)
* --Uploading files (images) via modal dialog does not work (returns error "File empty") ( see https://dev.tiki.org/item6350 )-- Workaround-ed by setting the height max size too.

! Notes
* [https://tiki.org/TikiFestMontreal-Ottawa11#Maps_REAL_AMP_CartoGraf|CartoGraf was originally and officially launched on 2013-04-13 during the TikiFest Montréal/Ottawa in 2013] and is in production at http://cartograf.recitus.qc.ca/ (This site is in French) and at [https://cartograf.learnquebec.ca] (in English)

! Development Wiki
Moved to [https://dev.tiki.org/CartoGraf].

-=Aliases=-
(alias(CartoGraf-15)) | (alias(CartoGraf for Tiki 15))