SynApp2 - To Do List

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

-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 (regenerate all)
    ??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
    =_config_
    =_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
    form specific subquery (2009-09-10)

-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 (A_HREF, A_TEXT)
    -change tab order (TAB_ORDER - 2009-09-21)
    synapp2 tab for nav customization

-forms customization
    -drag drop positions persistence
    -image background (order form, etc.) (template.htm)
    =field exclude override (COL_OMIT_
    =field width override (COL_SIZE)

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
    -appid-specific customization of background color/image

-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

=duplicate key violation

=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) [supports multi-view for pages and reports]
    =suppress by key value == '_OMIT_'

-more complete/uniform page-registry mechanism (map ids 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
    =key_action callback

-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?)
    - custom format function (COL_FORMAT)
    #float
    #int
    cdata

-text areas
    -forms
    -table (column width control wraps content onto multiple lines)

-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/delete)
    insert
        serial
        batch
    edit/update
        serial
        batch
    =delete

??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
        -row shading
        -cell borders on/off
        -formatting callbacks
        -centering
        -headings
        -width
        -expressions
        -sort/group/breaks/stats
        -unique columns (sort/group)
    data export
        crv
        -excel (text, tab-delimited) (2009-09-14)

-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)
    more clearly define event/trigger vs action

-processes
    -setup/customization
    -implementation
    -invocation
    more event/triggers

-authorization vs. username
    -setup/customization
    -appid, qid, pid ,rid, qid action, process
    record sub-sets

-customizable page flow
    -synapp2 pagegen page improvements
    =tier table persistence

-customizable key naming conventions
    -keymap page improvements

drag-n-drop record insert

-hotlink image support (use extra column to format img tag)

??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 (Full ISO--Latin-1 support 1.8.0beta_2b)

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

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

testing
    unit
    regression
    distributable test scripts/suite

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

bug/feature tracking database

issues
    =input form with only textarea and/or select element(s) does not capture container focus or keyboard [arrow] events properly (2010-10-05), fixed (2010-10-07)
    -multiple keyboard (submit) events cause AJAX request collisions (i.e. more than 1 request gets generated), probably fixed (0.1.7)
    =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 column did not fetch/copy from parent to child when parent record is_constraint (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/during tform rollup (2009-02-11), fixed (2009-02-15) 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 (blank page) if table has fkey (field) defined for a non-existent table (2009-09-23 confirmed)
    =PageGen page - poor feedback if template file does not exist (2008-09-22), fixed (2009-08-17)
    =Keymap page - poor handling of bad database name, fixed (2009-01-02)
    =Keymap page - must create _keymap_ table if it does not exist, fixed (2008-11-22)
    =Keymap page - poor handling of fk selected for one table and onchange of fk options of another table, fixed (2009-06-11) markup.php - test !empty($_jkey_)
    =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), fixed (2010-01-07)
    =dbx::escape_sql_term() returned a string for 'empty()' numeric term (2009-03-30), fixed (2009-03-30)
    =nav control for 'add' not managed for prime constraint (2009-04-27), fixed (2009-04-30) synapp2.js - is_selection_short() now uses find_constraint_select_container()
    =args not passed to custom process functions, wrong variable name in action.php - m_process_args (2009-05-28), fixed (2009-05-28)
    =empty form value when NULL allowed for INT type column attempts to insert/update empty string. Note: ON_EMPTY_VALUE_SET_DEFAULT works ok (2009-06-03), Fixed (1.8.0beta_2b)
    =empty form value when NULL allowed for DATE type column attempts to insert/update empty string. Note: ON_EMPTY_VALUE_SET_DEFAULT works ok (2009-09-10), Fixed (1.8.0beta_2b)
    =can not enter 0 for int field that allows NULL, fixed (2009-03-06), fixed (2009-06-06) test is_numeric() schema.php - translate_special_col_value()
    -circular FK references cause infinite recursion, schema::fetch_table_paths() - (2009-06-11), fixed (2009-06-12) HACK limit depth (but need correct heuristic approach)
    -Oracle - FK naming conventions not recognized due to case sensitivity (e.g. 'id_' != 'ID_') (2009-06-12), must use _keymap_ mechanism, (for now)
    KeyMap page - allows select list elements that would cause circular FK references (2009-06-12)
    'direct' login method unnecessarily tries (and fails) to select synapp2 database (2009-07-15)
    value for enum type column appears in sform after iform canceled (2009-09-08)
    =invalid (size) markup generated for Report Form date range_elements (2009-09-09), fixed (2009-09-09)
    -iform 'esc'/ cancel key action broken because 'submit' __form id does not map to the id registered for the qid arg (2009-09-14),  probably fixed (0.1.7)
    =PDF Reports - report.php, report::auto_widths() was broken from 0.1.4 development, fixed (2009-09-16)
    PK/PRImary key naming convention may mask/conflict/override the formal primary key of a table (2009-09-22)
    ??Cannot define/have a self referencing FK (i.e. reference a record in the same table) (2009-09-22)
    =reg_lookup() not enabled for FETCH customization where parent/child column names do not match (2009-09-23), fixed (2009-09-24)
    =PHP 5.3 compatability - failure to initialize parent class by parent name - use base class/constructor name instead, report.php fixed (2009-12-01)
    =PHP 5.3 compatability - convert regular exprssion functions from depricated POSIX ereg to Perl preg, fixed (2010-01-08)
    =PHP 5.3 compatability - convert 1 remaining regular exprssion function from depricated POSIX ereg to Perl preg - schema::get_col_type_detail(), (2010-01-08)
    =resize_container() - no action when [response payload is empty] row_size = 0 (2009-12-19), fixed (2009-12-22) clip row_size to 1 - synapp2.js
    =custom::get_nav_incl_tabs() - does not handle space(s) between CSV elements, (2010-01-02), fixed (2010-01-02) trim() the CSV elements
    =Report filter form (FFORM) submit not triggered by enter key, fixed (2010-01-14)

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