I need database administration web application (CRUD like), similar to phpMyAdmin, but managed tables and operations allowed on this tables will be configured in XML configuration file.
Webapp design is not relevant, important is functionality and usability.
Project deadlines can be extended if needed.
**Please read requirements details, before bidding.**
## Deliverables
Whole webapp behaviour will be configurable via XML, that will specify what and how will be managed, what operations will be allowed etc.
This config file structure also implies how will app GUI work and interract.
## Config file
DbAdmin will be configured using XML config file, that specifies which views, details tables and fields should it display and make available for administration. DbAdmin provides possibility to enable basic table auto-configuration, if underlying database driver has such a feature available.
### Database config
Configures available database, and view that belong to this database.
Specifies:
* Database name
* Database connection string
* list of views (see View config)
* flag: transaction available
### View config
Configures tables that will be available for viewing (main table).
Specifies:
* table name (unique)
* description
* db table to be used - table/query
* mapped fields (see Field config)
* list of detail table(s) and key field for given table (see Table config)
* list of related views
* list of possible operations (see Operation config)
### Table config
Configures detail tables that will be displayed along with main table in view, depending on primary key selected in main view.
Specifies:
* table name
* description
* table and filter field, that will be filtered by view key, or SQL query
with binding field.
* mapped fields (see Field config)
### Field config
Configures which fields and how should be displayed for given view/table.
Specifies:
* display name (table unique)
* type
* flag: is key
* flag: is read only
* constraints for editing (regex, list of values, SQL query to obtain list of values)
### Operation config
Along with built-in operations on given view data, it should be possible to configure advanced operations expressed as SQL queries, that can ie. move data from one table to another.
Specifies:
* operation name
* key field(s) on which operation will be performed
* SQL query to be executed
* flag: row refresh needed
* flag: table refresh needed
* flag: disable transaction
Example operation:
<span class="CodeRay"><span class="no">1</span> <span class="r">INSERT</span> <span class="r">INTO</span> table_destination (fkey, attrib1, attrib2) <span class="no">2</span> <span class="r">SELECT</span> <span class="r">key</span>, attrib1, attrib2 <span class="r">FROM</span> table_source <span class="r">WHERE</span> key2 = %<span class="r">KEY</span>%; </span>
KEY is here a program recognized variable, that will be replaced with its real value in runtime, before executing the query.
Possibility to redefine built-in (CRUD, SEARCH) operations should exists.
### Example config
<span class="CodeRay"><span class="no"><config><br /> <databases><br /> <database name="DevDB" dsn="Pg:dbname=dev-db1"><br /> <view>view1</view><br /> <view>view2</view><br /> </database><br /> </databases><br /> <views><br /> <view name="view1"><br /> <desc>Showing some data from table_t1</desc><br /> <table>table_t1</table><br /> <fields><br /> <field name="ID" is_key="1" type="int" ro="1"><br /> <value>123</value><br /> <value>234</value><br /> <regex>^XXX$</value><br /> </field><br /> <field name="Attrib1" type="bool"/><br /> </fields><br /> <!-- related views --><br /> <related>view2</related><br /> <!-- detail tables --><br /> <detail>det1</detail><br /> <detail>det2</detail><br /> <!-- operations --><br /> <deny>DELETE</deny><br /> <allow>MOVE_v1_v2</allow><br /> <allow replace="UPDATE">UPDATE_v1</allow><br /> </view><br /> </views><br /> <details><br /> <detail name="det1"><br /> <table>table_det1</table><br /> <query>SELECT d.* FROM table_det1 d JOIN %MAIN_TABLE% v ON ([login to view URL] = [login to view URL]) WHERE [login to view URL] = %ID%<br /> ORDER BY %ORDER_COLNUM% %ORDER_ASCDESC% LIMIT %LIMIT% OFFSET %OFFSET%;</query><br /> <fields>...</fields><br /> <deny>UPDATE</deny><br /> <detail><br /> ...<br /> </detail><br /> <operations><br /> <operation name="UPDATE_v1" refresh="row,table" transaction="0"><br /> <!-- dummy example of historizing updates --><br /> <table>%TABLE%</table><br /> <query>INSERT %TABLE%_hist (field, value)<br /> SELECT '%FIELD%', %FIELD% FROM %TABLE% WHERE id = %ID%;<br /> UPDATE %TABLE% SET %FIELD% = %VALUE% WHERE id = %ID%;</query><br /> </operation><br /> ...<br /> </operations><br /></config><br /></span><br /></span>
## Database
Requirements:
* database abstraction layer is required (existing)
* in database paging should be preferred (using LIMIT/OFFSET clauses)
## Built-in operations
Built-in operations that are provided by system:
* CRUD (Create, Read, Update, Delete)
* SEARCH
* SORT
Additional built-in operations might be provided using loadable modules.
## GUI
Requirements:
* XHTML (via XSLT or other templating mechanism)
* javascript used for input checking (simple list of values/regex checking)
* javascript used for updating detail tables on view row-change
* config file implies how gui, works
### Layout
Layout is simple, copying layout of phpMyAdmin and similar apps.
* Left-upper-corner database dropdown menu
* Left navigation tree, displaying all available views, where each view has a subtree of related view.
* Remainder of a page will display main table of view data, with per row operations (text/icons)
* Under main table, detail table with data from detail table related to actually selected row in main view will be shown. If multiple detail tables defined it should be possible to select actual detail table using tabs or drop down menu. Row operations should be possible on rows of detail table.
* Paging, Filtering and Sorting should be possible on both main and detail view tables.
## Implementation
* Use existing libraries/solutions if possible (consult licensing issues before use)
* Clean modular architecture, allowing further development
* Please write 'Hello DOB', into your bid to let me identify that you have took at least quick look on this spec ;)
* Well documented code, following common coding guidelines
This should be complete, but initial-only spec. No other functionality should be added during development, changes are expected only if they make implementation simpler, improve architecture or design.
Access to live applications testing site is expected, to allow further development coordination.
Project development will continue if it proves to be usable.
==
Bid must specify which primary programming language and frameworks are assumed to be used, without it bid will be immediately refused. If you have already worked on similar application that might be modified/reused for needs of this project, please include notice and link to demo site/screenshots or anything else, to let me consider it, when deciding project assignment.