123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416 |
- CHANGELOG
- 3.2.2 (19 March 2014)
- * NEW: Locales set automatically (Feature request #522)
- * NEW: Mapper dbtype()
- * NEW: before- and after- triggers for all mappers
- * NEW: Decode HTML5 entities if PHP>5.3 detected (Feature request #552)
- * NEW: Send credentials only if AUTH is present in the SMTP extension
- response (Feature request #545)
- * NEW: BITMASK variable to allow ENT_COMPAT override
- * NEW: Redis support for caching
- * Enable SMTP feature detection
- * Enable extended ICU custom date format (Feature request #555)
- * Enable custom time ICU format
- * Add option to turn off session table creation (Feature request #557)
- * Enhanced template token rendering and custom filters (Feature request
- #550)
- * Avert multiple loads in DB-managed sessions (Feature request #558)
- * Add EXEC to associative fetch
- * Bug fix: Building template tokens breaks on inline OR condition (Issue
- #573)
- * Bug fix: SMTP->send does not use the $log parameter (Issue #571)
- * Bug fix: Allow setting sqlsrv primary keys on insert (Issue #570)
- * Bug fix: Generated query for obtaining table schema in sqlsrv incorrect
- (Bug #565)
- * Bug fix: SQL mapper flag set even when value has not changed (Bug #562)
- * Bug fix: Add XFRAME config option (Feature request #546)
- * Bug fix: Incorrect parsing of comments (Issue #541)
- * Bug fix: Multiple Set-Cookie headers (Issue #533)
- * Bug fix: Mapper is dry after save()
- * Bug fix: Prevent infinite loop when error handler is triggered
- (Issue #361)
- * Bug fix: Mapper tweaks not passing primary keys as arguments
- * Bug fix: Zero indexes in dot-notated arrays fail to compile
- * Bug fix: Prevent GROUP clause double-escaping
- * Bug fix: Regression of zlib compression bug
- * Bug fix: Method copyto() does not include ad hoc fields
- * Check existence of OpenID mode (Issue #529)
- * Generate a 404 when a tokenized class doesn't exist
- * Fix SQLite quotes (Issue #521)
- * Bug fix: BASE is incorrect on Windows
- 3.2.1 (7 January 2014)
- * NEW: EMOJI variable, UTF->translate(), UTF->emojify(), and UTF->strrev()
- * Allow empty strings in config()
- * Add support for turning off php://input buffering via RAW
- (FALSE by default)
- * Add Cursor->load() and Cursor->find() TTL support
- * Support Web->receive() large file downloads via PUT
- * ONERROR safety check
- * Fix session CSRF cookie detection
- * Framework object now passed to route handler contructors
- * Allow override of DIACRITICS
- * Various code optimizations
- * Support log disabling (Issue #483)
- * Implicit mapper load() on authentication
- * Declare abstract methods for Cursor derivatives
- * Support single-quoted HTML/XML attributes (Feature request #503)
- * Relax property visibility of mappers and derivatives
- * Deprecated: {{~ ~}} instructions and {{* *}} comments; Use {~ ~} and
- {* *} instead
- * Minor fix: Audit->ipv4() return value
- * Bug fix: Backslashes in BASE not converted on Windows
- * Bug fix: UTF->substr() with negative offset and specified length
- * Bug fix: Replace named URL tokens on render()
- * Bug fix: BASE is not empty when run from document root
- * Bug fix: stringify() recursion
- 3.2.0 (18 December 2013)
- * NEW: Automatic CSRF protection (with IP and User-Agent checks) for
- sessions mapped to SQL-, Jig-, Mongo- and Cache-based backends
- * NEW: Named routes
- * NEW: PATH variable; returns the URL relative to BASE
- * NEW: Image->captcha() color parameters
- * NEW: Ability to access MongoCuror thru the cursor() method
- * NEW: Mapper->fields() method returns array of field names
- * NEW: Mapper onload(), oninsert(), onupdate(), and onerase() event
- listeners/triggers
- * NEW: Preview class (a lightweight template engine)
- * NEW: rel() method derives path from URL relative to BASE; useful for
- rerouting
- * NEW: PREFIX variable for prepending a string to a dictionary term;
- Enable support for prefixed dictionary arrays and .ini files (Feature
- request #440)
- * NEW: Google static map plugin
- * NEW: devoid() method
- * Introduce clean(); similar to scrub(), except that arg is passed by
- value
- * Use $ttl for cookie expiration (Issue #457)
- * Fix needs_rehash() cost comparison
- * Add pass-by-reference argument to exists() so if method returns TRUE,
- a subsequent get() is unnecessary
- * Improve MySQL support
- * Move esc(), raw(), and dupe() to View class where they more
- appropriately belong
- * Allow user-defined fields in SQL mapper constructor (Feature request
- #450)
- * Re-implement the pre-3.0 template resolve() feature
- * Remove redundant instances of session_commit()
- * Add support for input filtering in Mapper->copyfrom()
- * Prevent intrusive behavior of Mapper->copyfrom()
- * Support multiple SQL primary keys
- * Support custom tag attributes/inline tokens defined at runtime
- (Feature request #438)
- * Broader support for HTTP basic auth
- * Prohibit Jig _id clear()
- * Add support for detailed stringify() output
- * Add base directory to UI path as fallback
- * Support Test->expect() chaining
- * Support __tostring() in stringify()
- * Trigger error on invalid CAPTCHA length (Issue #458)
- * Bug fix: exists() pass-by-reference argument returns incorrect value
- * Bug fix: DB Exec does not return affected row if query contains a
- sub-SELECT (Issue #437)
- * Improve seed generator and add code for detecting of acceptable
- limits in Image->captcha() (Feature request #460)
- * Add decimal format ICU extension
- * Bug fix: 404-reported URI contains HTTP query
- * Bug fix: Data type detection in DB->schema()
- * Bug fix: TZ initialization
- * Bug fix: paginate() passes incorrect argument to count()
- * Bug fix: Incorrect query when reloading after insert()
- * Bug fix: SQL preg_match error in pdo_type matching (Issue #447)
- * Bug fix: Missing merge() function (Issue #444)
- * Bug fix: BASE misdefined in command line mode
- * Bug fix: Stringifying hive may run infinite (Issue #436)
- * Bug fix: Incomplete stringify() when DEBUG<3 (Issue #432)
- * Bug fix: Redirection of basic auth (Issue #430)
- * Bug fix: Filter only PHP code (including short tags) in templates
- * Bug fix: Markdown paragraph parser does not convert PHP code blocks
- properly
- * Bug fix: identicon() colors on same keys are randomized
- * Bug fix: quotekey() fails on aliased keys
- * Bug fix: Missing _id in Jig->find() return value
- * Bug fix: LANGUAGE/LOCALES handling
- * Bug fix: Loose comparison in stringify()
- 3.1.2 (5 November 2013)
- * Abandon .chm help format; Package API documentation in plain HTML;
- (Launch lib/api/index.html in your browser)
- * Deprecate BAIL in favor of HALT (default: TRUE)
- * Revert to 3.1.0 autoload behavior; Add support for lowercase folder
- names
- * Allow Spring-style HTTP method overrides
- * Add support for SQL Server-based sessions
- * Capture full X-Forwarded-For header
- * Add protection against malicious scripts; Extra check if file was really
- uploaded
- * Pass-thru page limit in return value of Cursor->paginate()
- * Optimize code: Implement single-pass escaping
- * Short circuit Jig->find() if source file is empty
- * Bug fix: PHP globals passed by reference in hive() result (Issue #424)
- * Bug fix: ZIP mime type incorrect behavior
- * Bug fix: Jig->erase() filter malfunction
- * Bug fix: Mongo->select() group
- * Bug fix: Unknown bcrypt constant
- 3.1.1 (13 October 2013)
- * NEW: Support OpenID attribute exchange
- * NEW: BAIL variable enables/disables continuance of execution on non-fatal
- errors
- * Deprecate BAIL in favor of HALT (default: FALSE)
- * Add support for Oracle
- * Mark cached queries in log (Feature Request #405)
- * Implement Bcrypt->needs_reshash()
- * Add entropy to SQL cache hash; Add uuid() method to DB backends
- * Find real document root; Simplify debug paths
- * Permit OpenID required fields to be declared as comma-separated string or
- array
- * Pass modified filename as argument to user-defined function in
- Web->receive()
- * Quote keys in optional SQL clauses (Issue #408)
- * Allow UNLOAD to override fatal error detection (Issue #404)
- * Mutex operator precedence error (Issue #406)
- * Bug fix: exists() malfunction (Issue #401)
- * Bug fix: Jig mapper triggers error when loading from CACHE (Issue #403)
- * Bug fix: Array index check
- * Bug fix: OpenID verified() return value
- * Bug fix: Basket->find() should return a set of results (Issue #407);
- Also implemented findone() for consistency with mappers
- * Bug fix: PostgreSQL last insert ID (Issue #410)
- * Bug fix: $port component URL overwritten by _socket()
- * Bug fix: Calculation of elapsed time
- 3.1.0 (20 August 2013)
- * NEW: Web->filler() returns a chunk of text from the standard
- Lorem Ipsum passage
- * Change in behavior: Drop support for JSON serialization
- * SQL->exec() now returns value of RETURNING clause
- * Add support for $ttl argument in count() (Issue #393)
- * Allow UI to be overridden by custom $path
- * Return result of PDO primitives: begintransaction(), rollback(), and
- commit()
- * Full support for PHP 5.5
- * Flush buffers only when DEBUG=0
- * Support class->method, class::method, and lambda functions as
- Web->basic() arguments
- * Commit session on Basket->save()
- * Optional enlargement in Image->resize()
- * Support authentication on hosts running PHP-CGI
- * Change visibility level of Cache properties
- * Prevent ONERROR recursion
- * Work around Apache pre-2.4 VirtualDocumentRoot bug
- * Prioritize cURL in HTTP engine detection
- * Bug fix: Minify tricky JS
- * Bug fix: desktop() detection
- * Bug fix: Double-slash on TEMP-relative path
- * Bug fix: Cursor mapping of first() and last() records
- * Bug fix: Premature end of Web->receive() on multiple files
- * Bug fix: German umlaute to its corresponding grammatically-correct
- equivalent
- 3.0.9 (12 June 2013)
- * NEW: Web->whois()
- * NEW: Template <switch> <case> tags
- * Improve CACHE consistency
- * Case-insensitive MIME type detection
- * Support pre-PHP 5.3.4 in Prefab->instance()
- * Refactor isdesktop() and ismobile(); Add isbot()
- * Add support for Markdown strike-through
- * Work around ODBC's lack of quote() support
- * Remove useless Prefab destructor
- * Support multiple cache instances
- * Bug fix: Underscores in OpenId keys mangled
- * Refactor format()
- * Numerous tweaks
- * Bug fix: MongoId object not preserved
- * Bug fix: Double-quotes included in lexicon() string (Issue #341)
- * Bug fix: UTF-8 formatting mangled on Windows (Issue #342)
- * Bug fix: Cache->load() error when CACHE is FALSE (Issue #344)
- * Bug fix: send() ternary expression
- * Bug fix: Country code constants
- 3.0.8 (17 May 2013)
- * NEW: Bcrypt lightweight hashing library\
- * Return total number of records in superset in Cursor->paginate()
- * ONERROR short-circuit (Enhancement #334)
- * Apply quotes/backticks on DB identifiers
- * Allow enabling/disabling of SQL log
- * Normalize glob() behavior (Issue #330)
- * Bug fix: mbstring 2-byte text truncation (Issue #325)
- * Bug fix: Unsupported operand types (Issue #324)
- 3.0.7 (2 May 2013)
- * NEW: route() now allows an array of routing patterns as first argument;
- support array as first argument of map()
- * NEW: entropy() for calculating password strength (NIST 800-63)
- * NEW: AGENT variable containing auto-detected HTTP user agent string
- * NEW: ismobile() and isdesktop() methods
- * NEW: Prefab class and descendants now accept constructor arguments
- * Change in behavior: Cache->exists() now returns timestamp and TTL of
- cache entry or FALSE if not found (Feature request #315)
- * Preserve timestamp and TTL when updating cache entry (Feature request
- #316)
- * Improved currency formatting with C99 compliance
- * Suppress unnecessary program halt at startup caused by misconfigured
- server
- * Add support for dashes in custom attribute names in templates
- * Bug fix: Routing precedene (Issue #313)
- * Bug fix: Remove Jig _id element from document property
- * Bug fix: Web->rss() error when not enough items in the feed (Issue #299)
- * Bug fix: Web engine fallback (Issue #300)
- * Bug fix: <strong> and <em> formatting
- * Bug fix: Text rendering of text with trailing punctuation (Issue #303)
- * Bug fix: Incorrect regex in SMTP
- 3.0.6 (31 Mar 2013)
- * NEW: Image->crop()
- * Modify documentation blocks for PHPDoc interoperability
- * Allow user to control whether Base->rerouet() uses a permanent or
- temporary redirect
- * Allow JAR elements to be set individually
- * Refactor DB\SQL\Mapper->insert() to cope with autoincrement fields
- * Trigger error when captcha() font is missing
- * Remove unnecessary markdown regex recursion
- * Check for scalars instead of DB\SQL strings
- * Implement more comprehensive diacritics table
- * Add option for disabling 401 errors when basic auth() fails
- * Add markdown syntax highlighting for Apache configuration
- * Markdown->render() deprecated to remove dependency on UI variable;
- Feature replaced by Markdown->convert() to enable translation from
- markdown string to HTML
- * Optimize factory() code of all data mappers
- * Apply backticks on MySQL table names
- * Bug fix: Routing failure when directory path contains a tilde (Issue #291)
- * Bug fix: Incorrect markdown parsing of strong/em sequences and inline HTML
- * Bug fix: Cached page not echoed (Issue #278)
- * Bug fix: Object properties not escaped when rendering
- * Bug fix: OpenID error response ignored
- * Bug fix: memcache_get_extended_stats() timeout
- * Bug fix: Base->set() doesn't pass TTL to Cache->set()
- * Bug fix: Base->scrub() ignores pass-thru * argument (Issue #274)
- 3.0.5 (16 Feb 2013)
- * NEW: Markdown class with PHP, HTML, and .ini syntax highlighting support
- * NEW: Options for caching of select() and find() results
- * NEW: Web->acceptable()
- * Add send() argument for forcing downloads
- * Provide read() option for applying Unix LF as standard line ending
- * Bypass lexicon() call if LANGUAGE is undefined
- * Load fallback language dictionary if LANGUAGE is undefined
- * map() now checks existence of class/methods for non-tokenized URLs
- * Improve error reporting of non-existent Template methods
- * Address output buffer issues on some servers
- * Bug fix: Setting DEBUG to 0 won't suppress the stack trace when the
- content type is application/json (Issue #257)
- * Bug fix: Image dump/render additional arguments shifted
- * Bug fix: ob_clean() causes buffer issues with zlib compression
- * Bug fix: minify() fails when commenting CSS @ rules (Issue #251)
- * Bug fix: Handling of commas inside quoted strings
- * Bug fix: Glitch in stringify() handling of closures
- * Bug fix: dry() in mappers returns TRUE despite being hydrated by
- factory() (Issue #265)
- * Bug fix: expect() not handling flags correctly
- * Bug fix: weather() fails when server is unreachable
- 3.0.4 (29 Jan 2013)
- * NEW: Support for ICU/CLDR pluralization
- * NEW: User-defined FALLBACK language
- * NEW: minify() now recognizes CSS @import directives
- * NEW: UTF->bom() returns byte order mark for UTF-8 encoding
- * Expose SQL\Mapper->schema()
- * Change in behavior: Send error response as JSON string if AJAX request is
- detected
- * Deprecated: afind*() methods
- * Discard output buffer in favor of debug output
- * Make _id available to Jig queries
- * Magic class now implements ArrayAccess
- * Abort execution on startup errors
- * Suppress stack trace on DEBUG level 0
- * Allow single = as equality operator in Jig query expressions
- * Abort OpenID discovery if Web->request() fails
- * Mimic PHP *RECURSION* in stringify()
- * Modify Jig parser to allow wildcard-search using preg_match()
- * Abort execution after error() execution
- * Concatenate cached/uncached minify() iterations; Prevent spillover
- caching of previous minify() result
- * Work around obscure PHP session id regeneration bug
- * Revise algorithm for Jig filter involving undefined fields (Issue #230)
- * Use checkdnsrr() instead of gethostbyname() in DNSBL check
- * Auto-adjust pagination to cursor boundaries
- * Add Romanian diacritics
- * Bug fix: Root namespace reference and sorting with undefined Jig fields
- * Bug fix: Greedy receive() regex
- * Bug fix: Default LANGUAGE always 'en'
- * Bug fix: minify() hammers cache backend
- * Bug fix: Previous values of primary keys not saved during factory()
- instantiation
- * Bug fix: Jig find() fails when search key is not present in all records
- * Bug fix: Jig SORT_DESC (Issue #233)
- * Bug fix: Error reporting (Issue #225)
- * Bug fix: language() return value
- 3.0.3 (29 Dec 2013)
- * NEW: [ajax] and [sync] routing pattern modifiers
- * NEW: Basket class (session-based pseudo-mapper, shopping cart, etc.)
- * NEW: Test->message() method
- * NEW: DB profiling via DB->log()
- * NEW: Matrix->calendar()
- * NEW: Audit->card() and Audit->mod10() for credit card verification
- * NEW: Geo->weather()
- * NEW: Base->relay() accepts comma-separated callbacks; but unlike
- Base->chain(), result of previous callback becomes argument of the next
- * Numerous performance tweaks
- * Interoperability with new MongoClient class
- * Web->request() now recognizes gzip and deflate encoding
- * Differences in behavior of Web->request() engines rectified
- * mutex() now uses an ID as argument (instead of filename to make it clear
- that specified file is not the target being locked, but a primitive
- cross-platform semaphore)
- * DB\SQL\Mapper field _id now returned even in the absence of any
- auto-increment field
- * Magic class spinned off as a separate file
- * ISO 3166-1 alpha-2 table updated
- * Apache redirect emulation for PHP 5.4 CLI server mode
- * Framework instance now passed as argument to any user-defined shutdown
- function
- * Cache engine now used as storage for Web->minify() output
- * Flag added for enabling/disabling Image class filter history
- * Bug fix: Trailing routing token consumes HTTP query
- * Bug fix: LANGUAGE spills over to LOCALES setting
- * Bug fix: Inconsistent dry() return value
- * Bug fix: URL-decoding
- 3.0.2 (23 Dec 2013)
- * NEW: Syntax-highlighted stack traces via Base->highlight(); boolean
- HIGHLIGHT global variable can be used to enable/disable this feature
- * NEW: Template engine <ignore> tag
- * NEW: Image->captcha()
- * NEW: DNSBL-based spammer detection (ported from 2.x)
- * NEW: paginate(), first(), and last() methods for data mappers
- * NEW: X-HTTP-Method-Override header now recognized
- * NEW: Base->chain() method for executing callbacks in succession
- * NEW: HOST global variable; derived from either $_SERVER['SERVER_NAME'] or
- gethostname()
- * NEW: REALM global variable representing full canonical URI
- * NEW: Auth plug-in
- * NEW: Pingback plug-in (implements both Pingback 1.0 protocol client and
- server)
- * NEW: DEBUG verbosity can now reach up to level 3; Base->stringify() drills
- down to object properties at this setting
- * NEW: HTTP PATCH method added to recognized HTTP ReST methods
- * Web->slug() now trims trailing dashes
- * Web->request() now allows relative local URLs as argument
- * Use of PARAMS in route handlers now unnecessary; framework now passes two
- arguments to route handlers: the framework object instance and an array
- containing the captured values of tokens in route patterns
- * Standardized timeout settings among Web->request() backends
- * Session IDs regenerated for additional security
- * Automatic HTTP 404 responses by Base->call() now restricted to route
- handlers
- * Empty comments in ini-style files now parsed properly
- * Use file_get_contents() in methods that don't involve high concurrency
- 3.0.1 (14 Dec 2013)
- * Major rewrite of much of the framework's core features
|