------------------------------------------------------------------------------ What's new in each version of Interchange (since the version 4.8 branch) ------------------------------------------------------------------------------ Interchange 4.9.2 not yet released Core ---- * New ability to run Interchange entirely inside Apache and mod_perl. See POD documentation inside scripts/ic_mod_perl.PL for details. * Add new Jobs and Cron facility: - While we don't keep the time, and a scheduler will have to set the execution time, it allows ITL to be run without the hassles of having to deal with HTTP. - Use $Vend::Cfg->{Cron} for setup. - Emails either to command line address or $Vend::Cfg->{Cron}{email} (only if the cron job supplies output). Uses the $Vend::Cfg->{Cron} variables subject, from, reply_to and extra_headers. - Logs to $Vend::Cfg->{Cron}{log} (only if the cron job supplies output). - Can add session dump when $Vend::Cfg->{Cron}{add_session}. - Base directory set by $Vend::Cfg->{Cron}{base_directory}, defaults to etc/cron. If $Vend::Cfg->{Cron}{use_global} is set, the same directory in $Global::ConfDir is scanned too. - The macros $Vend::Cfg->{initialize} and $Vend::Cfg->{autoload} are executed once resp. before each job. * Add First and Last links to more-list, with ability to customize via [first-anchor] and [last-anchor] containers. * Add new menu editor and menu system. It is based around Vend::Menu and the new tag [menu ...], which builds various types of DHTMl and standard HTML menus based on browser type. The menu editor can edit simple menus or tree-based menus. All UI menus use this. A simple menu component (i.e. a link list) and a tree-based list are provided for Foundation. * New support for database-native sequences for MySQL, PostgreSQL, and Oracle: - To do a minimal sequenced table, all you need to do is: Database sequenced sequenced.txt __DBIDSN__ Database sequenced AUTO_SEQUENCE sequenced_seq - The parameter passed to AUTO_SEQUENCE (in the above, "sequenced") will be used as the sequence name for Postgres and Oracle (and presumably others that emulate them). For MySQL, the same technique that Stefan introduced is used, with an AUTO_INCREMENT field. The value in AUTO_SEQUENCE is just a non-false value. The behavior depends on the definition of $capability->{LAST_SEQUENCE_FUNCTION}. If MySQL is the DB in use, $key = $s->autonumber(); returns nothing and the key will be later found with $key = $s->last_sequence_value($key); and returned in $db->set_slice, etc. ($db->set_row also uses this, but the key value is never returned. You can get it with $db->last_sequence_value if you need it.) If PostgreSQL/Oracle is used, the key is returned with $key = $s->autonumber(); and is just parroted back with $key = $s->last_sequence_value($key); If the table is being created, the sequence will be created as well. If it exists, it will not be dropped. If the "code" or key field is not set with a COLUMN_DEF, the field type to be used will be found in $capability->{SEQUENCE_KEY}. Capablility entries used: SEQUENCE_CREATE Query to create a sequence on table creation. SEQUENCE_QUERY Query to get next value in sequence. SEQUENCE_KEY Type definition for key field when AUTO_SEQUENCE table is created. SEQUENCE_VALUE_FUNCTION Query to get current value of sequence. SEQUENCE_LAST_FUNCTION Query to get key when MySQL behavior is wanted. - Can automatically drop existing sequence if: Database sometable AUTO_SEQUENCE_DROP 1 * Add BASE_CAPABILITY configuration parameter to allow testing of a new SQL database type with settings based on one of the known types. If behavior is different in particulars, that capability can be modified in the config file. * In Vend::Config, fix incompatibility in Perl 5.005-style regex that causes rejection of certain Locale settings. * Remove unnecessary CGI variable mappings at end of Vend::Config. * Fix call to [item-tag object name]. * Add Filter alias e = encode_entites. Extensions ---------- * Various Quickbooks updates: - Fixed: When an auto-created user orders from the same company as an existing Quickbooks customer, it overwrites the customer. - Save the auto-created user id (e.g. U00001) and use it in the Customer Name as a unique identifier, just as logged-in users. - New variables for easy customization of export features via Admin UI, documented via item-specific meta referenced in the documentation. - Fixed: "INTL" showing up without country (now matches US or USA). - Put the company name on a separate line in Ship-to and Bill-to addresses. Now utilizing all 5 lines. - Item name updates: - Length filter now customizable via QB_ITEM_LENGTH - Default is 30 (backwards compatible) - Item name taken from 'title' first, if any, then 'description' second. - Optionally cause Quickbooks invoice number to be blank, to keep Quickbook's invoice number progression unmodified. - Accompanying documentation. Payment ------- * Support for TrustCommerce added. Written, tested, and donated by Dan Helfman of TrustCommerce . Thanks, Dan! * Support for the Mainstreet Credit Verification Engine (MCVE) added. Written, tested, and donated by Tom Friedel . Thanks, Tom! UI -- * [import_fields]: Performance enhancement: use set_slice() to update all fields in a record at once when importing files. ------------------------------------------------------------------------------ Interchange 4.9.1 released 2002-07-22 Core ---- * The great tag breakout! - Almost all tags are now UserTag definitions. The exceptions are: and bounce goto if label or unless - New TagDir directive (default is VENDROOT/code) sets the directory (or directories) which are searched for code definitions set by UserTag and CodeDef. - New TagGroup directive establishes groups of ITL tags which can be included. TagGroup :crufty "banner default ecml html_table onfly sql" The default groups include :core, which contains all of the ITL tags defined in 4.8/early 4.9. The groups are defined in $Vend::Cfg::StdTags and can be undefined if desired with "TagGroup :group". - New TagInclude directive allows inclusion of tags (or groups of tags). If a tag is defined as a core tag (with a .coretag or .tag or .ct extension) and is not included, it will not be compiled and placed in the tag map. This is for all catalogs, so if *any* catalog uses a tag it must be included. Examples: # Include the base tags TagInclude :core # Not the commerce tags TagInclude !:commerce # But make sure item-list is included even though # it is in :commerce TagInclude item-list ## Double negatives are honored TagGroup :foo "bar !baz buz" ## With the group above, the below is equivalent ## to TagInclude !bar baz !buz TagInclude !:foo - New CodeDef directive allows the setting of filters, order checks, FormAction, ActionMap, ItemAction, and LocaleChange. ## filters CodeDef mixedcase Filter CodeDef mixedcase Routine <$ANCHOR$[/link-template] * Add utility functions Vend::Data::product_row and product_row_hash, which do the same thing as product_field, but return the whole row instead of just one field. UI -- * Major changes to the content editing scheme. - Requires a CSS/Javascript 1.3 compliant browser. Tested on Mozilla 0.9.8, MSIE 5.51, Opera 6.0tp2. All work pretty well; Mozilla is a bit slow, Opera doesn't have CSS widths down. - Page editor has a quasi-visual layout that should be much more intuitive. Support for a "PAGE_PICTURE" file in the templates allows visual links to the editor page. - Components, templates, and pages are now all editable. Template and component editors need to be brought up to speed with the page editor, but work fairly well. - Added new lib/UI/ContentEditor.pm module which implements this stuff in conjunction with lib/UI/pages/include/*_editor. A bit of a JavaScript dependency nightmare on the generated attribute editors, but I may get this more canned as time goes on. - Let's get this on record -- this content editiing WILL NOT UNDER ANY CIRCUMSTANCES EVER WORK ON NETSCAPE 4. Do not ask, though I know the people who monitor this stuff won't. * Added Mike's cool new "auto_wizard" which builds a wizard from a file like in the example. It will be the method to provide scripted content addition. * More table-editor updates -- added notable option, and all_opts option which allows building the options in Perl and then doing: [table-editor all-opts=`\%opts`] * Look for major updates on the table editor to make it completely templateable. * Fix problem with $Tag->display() called with null table, affecting "wizard" mode. * Add a "admin/test_code.html" page for testing short snippets of ITL without having to create a test page. * Make the table populator JavaScript honor the db tables the particular admin user is supposed to see. * [import-fields replace=1] -- added option to replace items in the database * Add su facility for catalog superuser to switch users to another user id, using new UI_Tag su as follows: [su username=miltonbear] 1. Stringifies current session after checking that su user is valid 2. Writes a random string to "$Global::ConfDir/tmp/$Session->{id}" 3. Issues a cookie hashing the above two 4. Inits a new session, putting in the login info 5. Writes $Session->{su} with session string [su exit=1] 1. Reads random string from "$Global::ConfDir/tmp/$Session->{id}" 2. Hashes that with session and verifies with cookie 3. Safe evals session string 4. Retrieves session username/admin info [su create_user=1 username=bobby password=howdy verify=howdy] Allows combined creation of new user and switching to that user. Any options you would pass to userdb tag can be given to su usertag, to tweak account creation. If user already exists, it's silently switched to. MMsu profile is called on admin/customer.html to run the switch. When you "log out", you are reverting to the previous user, and you can go no further back. So if you go from superuser->adminuser, then adminuser->regular user, there is no way back to superuser without logging in again. * Continuing work on meta_display and Vend::Form. - Relocated date and option widgets - Prepared for breaking out image widgets to code/Widget - Fixed various bugs in widgets - Code simplification in Primitive.pm - Fix widget.coretag to not call UI::Primitive routine - Redo option_format filtering * Display server hostname on the information page (genconfig). * Unused usertags component, set-alias and set-click removed. Payment ------- * Support for Wells Fargo added Accounting ---------- * Vend::Accounting module added, along with example module for SQL_Ledger. This is the basis for a start of a defined accounting system interface. Some intended functions: NOTE: AS = Accounting Software, i.e. SQL-Ledger, IC = Interchange 1. Assign customer number 2. Change customer information based on input, limit to fields customer should have control over 3. Add sales transaction (IC) 4. Feed back sales transaction from AS side for account status 5. Enter payments (IC --> AS), with credit-cards used to pay invoices 6. Reconcile AS account status with IC, i.e. ship status 7. Cancel order (IC) 8. Ship portion or all of order (IC) 9. Mark order complete Input on other functions needed is appreciated. PROPOSED: * Set of modules selectable by route handle: Vend::Account::SQL_Ledger (exists) Vend::Account::QuickBooks (proposed) Vend::Account::Compiere (proposed) Vend::Account::[fill-in-the-blank] * Use a usertag [account] (a la [charge]) to interface functions. * Use a profile primitive, "&account=label function" ala "&charge=" to do some accounting functions in profiles, notably getting an order number or customer number * Allow either COMMIT or no-COMMIT operation, with tradeoffs * Define accounting system parameters via Route, and build in accounting functions into Route so that they can be a predicate for order success. * Define two transitional state tables for handshaking: orderstatus -- status of orders, i.e. pending,transmitted,received,shipped,complete accountstatus -- record of payments and orders for account statement Foundation demo --------------- * use [if variable MV_DEMO_MODE] instead of the more cumbersome [if type=explicit compare="__MV_DEMO_MODE__"]. * add global INTERCHANGE_URL and INTERCHANGE_EMAIL variables to be used for the Interchange developer website & email contact points, instead of hard-coded stuff * standardize on the short form "Interchange" for the application name. * update a few URLs, etc. * Remove history-scan tag from catalog.cfg; it is now in code/UserTag. * Remove no_html_parse pragma, for which code has already been deleted. * Moved payment routes to the top of the Route stack. Technically they should not be below the default route, and though it works in the standard foundation setup, it caused lots of failures when people tried to customize their order routing. * (Oracle) Add missing Database xxx UPPERCASE 1 settings. Thanks to Jonathan Lee for reporting. * Get rid of weird tax rate popup notice when updating account info, which is especially strange when you've never had anything in your cart ... * Change catalog.cfg to highlight etc/after.cfg. UserTags -------- * [fedex-query] -- Stop dying if there's a problem with FedEx express lookups, which kept even ground rate lookups from being done during the first request when the Business::Fedex object is first created. Instead, just log the error but continue on with possible ground lookup. (This situation resulted in the oddity of the shipping rate displaying as $0.00 on the checkout page, but still getting added into the total cost and displaying in the shipping rate pulldown select box just fine.) * interchange.cfg: Remove now-redundant include of usertag/*.tag. * [db-columns] -- Add ability to get back an array instead of a joined string to $Tag->list_databases,$Tag->list_keys,$Tag->db_columns, * [email] -- Add enhancement made by Jurgen Botz to use send_mail program so that Net::SMTP can send the email tag. Thanks Jurgen! * [history_scan] -- Count option added, which guarantees that the returned link is at least count # of clicks back in the page history. * [image] -- descriptionsfields and exists_only options added. Build ----- * Removed stale POD documentation from main interchange repository; for some time now, docs source has been in SDF format in docs repository and available in separate docs package. * Keep test from giving warning about not being able to stat "code" directory. * Big changes to RPM specfile: - Allow non-root RPM builds. - Don't add interch user on build machine. - Don't automatically start Interchange after installing RPM. - Remove unneeded .empty files used in CVS to avoid pruning important but empty directories. - Make admin UI images owned by root. - Don't allow Interchange RPMs to own /usr/share/man/man[18] system directories. - Start using RPM dependencies for Perl CPAN modules. Users who install directly from CPAN will have to use --nodeps. - Start daemon in UNIX mode only by default. - Build foundation-demo RPM with MV_DEMO_MODE set. - On uninstall, remove autogenerated /usr/lib/interchange/etc/varnames - Start using Red Hat standard /sbin/service instead of directly running /etc/rc.d/init.d/interchange. - Add standard 'reload' function as alias for restart. - Quell /sbin/service stop errors. - Let user see if we turn off old IC server before install/upgrade. - Make packages architecture-dependent, to save lots of hassles. - Stop checking for /home/httpd, but use a define for webdir that can easily be changed if needed. ------------------------------------------------------------------------------ Interchange 4.9.0 "released" only via CVS ------------------------------------------------------------------------------ (end)