SynApp2 - To Do List

documentation
    -introduction
    -requirements
    -installation
    -usage
    html/css/js/action/notification/forms/ovl
    request/response
    schema
    customization
    limitations
    deployment
    examples
    user guide
    reference guide
    api reference
    wiki

-authentication and database selection
    -app
    -synapp2
    -enterprise
    -direct (oci)
    -login page improvements
    logout
    user sandbox - table/record access control - none, read, read/write

-generation
    -one page
    ??full application
    ??wizard UI
    ??prior version backup
    form preview (and customization - field size, omit fields, show constraint fields, control field copy, LIST_MACRO_FILTER/ORDER)
    default (empty) custom.inc.php in app directory

=directory organization
    =_shared_
    =synapp2

-table navigation framework
    -single-path
    -multi-path
    alternate order/flow when fk order of appearance is sub-optimal

search large basis_table record sets in non-standalone situations

=automatic semi-transparent png/gif screen img switch for IE6

='blind' fields handling for forms
    =specifically mapped
    =read-only
    =skipped as args are gathered for request
    =markup
    =client js

-code/module cleanup and consolidation
    =markup class (php)
    response class (php)
    =util.php
    standardized comments for methods/functions

support key search on prime middle with ripple up to prime tier (search/select order number, display order and then customer record)

db records to support app nav tabs
    initial generate all qid/tables + login/out + reports
    add/edit/delete customization - tab label, title/tooltip, page filename
    change tab order
    synapp2 tab for nav customization

forms customization
    drag drop positions persistence
    image background (order form, etc.)
    field exclude override
    field width override

css style sheet element substitution (i.e. support simple color themes)
    reference colors /**/
    by selector/item
    by selector/item relative % lighter/darker than selector/item (colors only) /**/
                              % red'er
                              % green'er
                              % blue'er

-database abstraction (MySQL, Oracle)
    -schema (MySQL)
    -schema (Oracle)
    =create/read/update/delete (MySQL)
    =create/read/update/delete (Oracle)
    =recno computation (MySQL, Oracle)
    =insert offset computation (MySQL)
    =num result rows computation
    =num found rows computation (MySQL)

forms default values
    =from database definition
    -ukauto

=forms read-only
    =auto generated (auto_increment, ON UPDATE CURRENT_TIMESTAMP, default CURRENT_TIMESTAMP) (ie. is_blind)

-specialized field types
    -enum (=list or radio)
    set (list or checkbox)
    boolean (list, radio)

-customizable input validation
    =numeric range
    duplicate fk
    =date
    email
    =blank
    =exceed maxlength
    -auto generated (auto_increment, ON UPDATE CURRENT_TIMESTAMP, default CURRENT_TIMESTAMP)

=delete validation

=server-side goal driven table navigation
    =moving page state management from client js to server php

feedback/error handling
    to response
    of response
    view page
    [exchange errors in general - TBD: use serial number for all (goal) exchanges, to allow retry??

prompts
    ??table navigation
    ??record navigation
    -forms validation
    delete confirmation
    acknowledgement (e.g. [number of ]records inserted, updated, deleted, etc.)
    error recovery

#option list constraint

concurrency control - record/table locking

??debit/credit transaction support
query cache
    auto capture
    editing

??run-time logging
    view
    change

query alias (same as qid except...)
    override by replacement (i.e. same key)
    =suppress by key value == '_OMIT_'

-more complete/uniform page-registry mechanism (map id's to variables and behavior mechanisms)
    -map container/form id to everything (no more hidden form variables: qid, _nav_, order)
    static definitions within page
    ??dynamic definitions

-keyboard event management
    -form submit

-caption/toolbar
    -sform
    dform
    -tform
    iform
    postion at top of form
    ??position at top and bottom of basis_table tform
    ??left-hand and right-hand sections

=table column headers

=dynamic table column sorting

-column formatting (tdb - client or server side?)
    float
    int
    cdata

-text areas
    -forms
    table

-page rollup/reset control

-automatic fields like 'order number'
    -setup/customize
    -implementation
    customization GUI

??search basis_table in multi-node nav when large number of detail records
    setup/customize
    implementation

-multi-record selection
    -filter
    -interactive

-multi-record (mass add/edit)
    insert
        serial
        batch
    edit/update
        serial
        batch

??support visible/searchable primary key - e.g. order number, account number

??support non-required (fk) foreign key
    w/foreign orpans:
        allowed
        not allowed

-report generation
    ASCII text
    HTML
    -pdf
    label printing
        batch
        1-off

-report
    pass app background color
    setup/customizaton
    title
    spec/filter
    columns
        headings
        width
        expressions
        -sort/group/breaks/stats
        unique columns (sort/group)
    data export
        crv
        ??excel

-statistics form
    setup/customization
    - aform display basic statistics (e.g., found_rows, pageno, nopages, success msg, fail msg)
    - stat query trigger management (initial display and after changes)

-fetch
    -auto copy of named cols from parent to child
    -customizable query (stat)

processes
    setup/customization
    implementation
    invocation

-customizable page flow
    -synapp2 pagegen page improvements

-customizable key naming conventions
    -keymap page improvements

drag-n-drop record insert

hotlink image support

??external page links
    new location
    new tab
    popup
    inline frame

click recno to edit record

??convert response to JSON format in order to bypass need for well-formed xml

??consider serving (an app-specific version of) synapp2.js from php

=compatibility
    #mysql 3.23.58
    -mysql 4
    -mysql 5
    -php 4
    -php 5

testing
    unit
    regression
    distributable test scripts/suite

diagnostics
    js wrapper function getContainerById(id) -> present diagnostic message if id not found

issues
    multiple keyboard (submit) events cause AJAX request collisions (i.e. more than 1 request gets generated)
    =markup.php - erd_gen() fails when database has only one table (i.e. no paths) (2008-09-13), fixed (2008-09-22)
    =schema::get_paths() error line 650 if $basis_table has no parent(s), related to markup.php error above (2008-09-13), fixed (2008-09-22)
    schema::get_paths() error line 877 if fk conforms to convention 'id_post', but parent table is named 'posts' (2008-09-25)
    =MySQL error - 1052 'Column 'body' in field list is ambiguous' when related/joined tables have same col names eg posts.body -> comments.body (2008-09-25), fixed (2008-09-25)
    =like named textarea field didn't fetch/copy from parent to child (2008-09-25), fixed (2008-09-25)
    =feedback is not applied - no feedback label appears when id ended with and had matching imbedded string (2008-09-30), fixed (2008-09-30) endsWith() was bad
    =Nav control states not managed for for/during tform rollup (2009-02-11), fixed (2009-0215) added management to xshow() rollup_select_id block
    =Can select/edit row when tform is empty (2008-09-09), fixed (2009-02-15) added detect_pk()
    =Focus unmanaged on dynamically generated forms (e.g. database/appid on keymap, pagegen) (2008-09-09), fixed (2009-01-03)
    Form reset does not seem to affect textarea elements (FF)
    Default select option for enum-based select elements during Add (get_init) (option value is a string rather than int) (IE)
    Alternate sort '_order_' does not get passed to during update transaction, so computed nav offset is wrong
    Pagegen page - poor feedback if table has fkey (field) defined for a non-existent table
    Pagegen page - poor feedback if template file does not exist (2008-09-22)
    =Keymap page - poor handling of bad database name, fixed (2009-01-02)
    =Keymap page - must create _keymap_ table if it doesn't exist, fixed (2008-11-22)
    Keymap page - poor handling of fk selected for one table and onchange of fk options of another table
    =Search query with HAVING clause only works for MySQL - TODO: more generic search query or abstract via dbx
    -Safari drag handler breaks select options, disabled idd mechanism for Safari only, HACK: (2009-01-02)

(legend: '=' complete, '-' partial, '*' priority, '??' requirement TBD, '#' no longer applicable or required)