IZcontrol is a server side application that makes it possible to easily control remote appliances over the network using telnet, UDP and other protocols.
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

972 lines
52 KiB

4 years ago
CHANGELOG
3.7.2 (28 May 2020)
* CHANGED, View->sandbox: disable escaping when rendering as text/plain, bcosca/fatfree#654
* update HTTP protocol checks, #bcosca/fatfree#1190
* Base->clear: close vulnerability on variable compilation, bcosca/fatfree#1191
* DB\SQL\Mapper: fix empty ID after insert, bcosca/fatfree#1175
* DB\SQL\Mapper: fix using correct key variable for grouped sql pagination sets
* Fix return type of 'count' in Cursor->paginate() (bcosca/fatfree#1187)
* Bug fix, Web->minify: fix minification of ES6 template literals, bcosca/fatfree#1178
* Bug fix, config: refactoring custom section parser regex, bcosca/fatfree#1149
* Bug fix: token resolve on non-alias reroute paths, ref. 221f0c930f8664565c9825faeb9ed9af0f7a01c8
* Websocket: Improved event handler usage
* optimized internal get calls
* only use cached lexicon when a $ttl was given
* only use money_format up until php7.4, fixes bcosca/fatfree#1174
3.7.1 (30. December 2019)
* Base->build: Add support for brace-enclosed route tokens
* Base->reroute, fix duplicate fragment issue on non-alias routes
* DB\SQL\Mapper: fix empty check for pkey when reloading after insert
* Web->minify: fix minification with multiple files, [bcosca/fatfree#1152](https://github.com/bcosca/fatfree/issues/1152), [#bcosca/fatfree#1169](https://github.com/bcosca/fatfree/issues/1169)
3.7.0 (26. November 2019)
* NEW: Matrix, added select and walk methods for array processing and validation tools
* NEW: Added configurable file locking via LOCK var
* NEW: json support for dictionary files
* NEW: $die parameter on ONREROUTE hook
* NEW: Added SameSite cookie support for php7.3+ (JAR.samesite), [bcosca/fatfree#1165](https://github.com/bcosca/fatfree/issues/1165)
* NEW, DB\SQL\Mapper: added updateAll method to batch-update multiple records at once
* CHANGED, DB\SQL\Mapper: Throw error on update/erase if the table has no primary key, [#285](https://github.com/bcosca/fatfree-core/issues/285)
* Cache, Redis: Added ability to set a Redis password, [#287](https://github.com/bcosca/fatfree-core/issues/287)
* DB\SQL\Session: make datatype of data column configurable, [bcosca/fatfree#1130](https://github.com/bcosca/fatfree/issues/1130)
* DB\SQL\Mapper: only add adhoc fields in count queries that are used for grouping
* DB\SQL\Mapper: fixed inserting an already loaded record again (duplicating), [bcosca/fatfree#1093](https://github.com/bcosca/fatfree/issues/1093)
* Magic (Mappers): fix isset check on existing properties
* SMTP: added support for Bounce mail recipient ("Sender" header)
* OAuth2: make query string encode type configurable, [#268](https://github.com/bcosca/fatfree-core/issues/268) [#269](https://github.com/bcosca/fatfree-core/issues/269)
* Web: Added more cyrillic letters to diacritics, [bcosca/fatfree#1158](https://github.com/bcosca/fatfree/issues/1158)
* Web: Fixed url string falsely detected as comment section [9ac8e615](https://github.com/bcosca/fatfree-core/commit/9ac8e615ccaf750b49497a3c86161331b24e637f)
* Web: added file inspection for mime-type detection, [#270](https://github.com/bcosca/fatfree-core/issues/270), [bcosca/fatfree#1138](https://github.com/bcosca/fatfree/issues/1138)
* WS: Fixed processing all queued data frames inside the buffer, [#277](https://github.com/bcosca/fatfree-core/issues/277)
* WS: Allow packet size override
* Markdown: Support mixed `strong` and `italic` elements, [#276](https://github.com/bcosca/fatfree-core/issues/276)
* Markdown: Keep spaces around `=` sign in ini code blocks
* Added route alias key name validation, [#243](https://github.com/bcosca/fatfree-core/issues/243)
* Added fragment argument to alias method, [#282](https://github.com/bcosca/fatfree-core/issues/282)
* Allow adding fragment to reroute, [#1156](https://github.com/bcosca/fatfree/issues/1156)
* Added additional HTTP status codes, [#283](https://github.com/bcosca/fatfree-core/issues/283)
* Added X-Forwarded-For IP to log entries, [bcosca/fatfree#1042](https://github.com/bcosca/fatfree/issues/1042)
* Bug fix: broken custom date/time formatting, [bcosca/fatfree#1147](https://github.com/bcosca/fatfree/issues/1147)
* Bug fix: duplicate UI path rendering edge-case in Views and minify, [bcosca/fatfree#1152](https://github.com/bcosca/fatfree/issues/1152)
* Bug fix: unicode chars in custom config section keys, [bcosca/fatfree#1149](https://github.com/bcosca/fatfree/issues/1149)
* Bug fix: ensure valid reroute path in location header, [bcosca/fatfree#1140](https://github.com/bcosca/fatfree/issues/1140)
* Bug fix: use dictionary path for lexicon caching-hash
* Bug fix, php7.3: number format ternary, [bcosca/fatfree#1142](https://github.com/bcosca/fatfree/issues/1142)
* fix PHPdoc and variable inspection, [bcosca/fatfree#865](https://github.com/bcosca/fatfree/issues/865), [bcosca/fatfree#1128](https://github.com/bcosca/fatfree/issues/1128)
3.6.5 (24 December 2018)
* NEW: Log, added timestamp to each line
* NEW: Auth, added support for custom compare method, [#116](https://github.com/bcosca/fatfree-core/issues/116)
* NEW: cache tag support for mongo & jig mapper, ref [#166](https://github.com/bcosca/fatfree-core/issues/116)
* NEW: Allow PHP functions as template token filters
* Web: Fix double redirect bug when running cURL with open_basedir disabled
* Web: Cope with responses from HTTP/2 servers
* Web->filler: remove very first space, when $std is false
* Web\OAuth2: Cope with HTTP/2 responses
* Web\OAuth2: take Content-Type header into account for json decoding, [#250](https://github.com/bcosca/fatfree-core/issues/250) [#251](https://github.com/bcosca/fatfree-core/issues/251)
* Web\OAuth2: fixed empty results on some endpoints [#250](https://github.com/bcosca/fatfree-core/issues/250)
* DB\SQL\Mapper: optimize mapper->count memory usage
* DB\SQL\Mapper: New table alias operator
* DB\SQL\Mapper: fix count() performance on non-grouped result sets, [bcosca/fatfree#1114](https://github.com/bcosca/fatfree/issues/1114)
* DB\SQL: Support for CTE in postgreSQL, [bcosca/fatfree#1107](https://github.com/bcosca/fatfree/issues/1107), [bcosca/fatfree#1116](https://github.com/bcosca/fatfree/issues/1116), [bcosca/fatfree#1021](https://github.com/bcosca/fatfree/issues/1021)
* DB\SQL->log: Remove extraneous whitespace
* DB\SQL: Added ability to add inline comments per SQL query
* CLI\WS, Refactoring: Streamline socket server
* CLI\WS: Add option for dropping query in OAuth2 URI
* CLI\WS: Add URL-safe base64 encoding
* CLI\WS: Detect errors in returned JSON values
* CLI\WS: Added support for Sec-WebSocket-Protocol header
* Matrix->calendar: Allow unix timestamp as date argument
* Basket: Access basket item by _id [#260](https://github.com/bcosca/fatfree-core/issues/260)
* SMTP: Added TLS 1.2 support [bcosca/fatfree#1115](https://github.com/bcosca/fatfree/issues/1115)
* SMTP->send: Respect $log argument
* Base->cast: recognize binary and octal numbers in config
* Base->cast: add awareness of hexadecimal literals
* Base->abort: Remove unnecessary Content-Encoding header
* Base->abort: Ensure headers have not been flushed
* Base->format: Differentiate between long- and full-date (with localized weekday) formats
* Base->format: Conform with intl extension's number output
* Enable route handler to override Access-Control headers in response to OPTIONS request, [#257](https://github.com/bcosca/fatfree-core/issues/257)
* Augment filters with a var_export function
* Bug fix php7.3: Fix template parse regex to be compatible with strict PCRE2 rules for hyphen placement in a character class
* Bug fix, Cache->set: update creation time when updating existing cache entries
* Bug fix: incorrect ICU date/time formatting
* Bug fix, Jig: lazy write on empty data
* Bug fix: Method uppercase to avoid route failure [#252](https://github.com/bcosca/fatfree-core/issues/252)
* Fixed error description when (PSR-11) `CONTAINER` fails to resolve a class [#253](https://github.com/bcosca/fatfree-core/issues/253)
* Mitigate CSRF predictability/vulnerability
* Expose Mapper->factory() method
3.6.4 (19 April 2018)
* NEW: Added Dependency Injection support with CONTAINER variable [#221](https://github.com/bcosca/fatfree-core/issues/221)
* NEW: configurable LOGGABLE error codes [#1091](https://github.com/bcosca/fatfree/issues/1091#issuecomment-364674701)
* NEW: JAR.lifetime option, [#178](https://github.com/bcosca/fatfree-core/issues/178)
* Template: reduced Prefab calls
* Template: optimized reflection for better derivative support, [bcosca/fatfree#1088](https://github.com/bcosca/fatfree/issues/1088)
* Template: optimized parsing for template attributes and tokens
* DB\Mongo: fixed logging with mongodb extention
* DB\Jig: added lazy-loading [#7e1cd9b9b89](https://github.com/bcosca/fatfree-core/commit/7e1cd9b9b89c4175d0f6b86ced9d9bd49c04ac39)
* DB\Jig\Mapper: Added group feature, bcosca/fatfree#616
* DB\SQL\Mapper: fix PostgreSQL RETURNING ID when no pkey is available, [bcosca/fatfree#1069](https://github.com/bcosca/fatfree/issues/1069), [#230](https://github.com/bcosca/fatfree-core/issues/230)
* DB\SQL\Mapper: disable order clause auto-quoting when it's already been quoted
* Web->location: add failsafe for geoip_region_name_by_code() [#GB:Bxyn9xn9AgAJ](https://groups.google.com/d/msg/f3-framework/APau4wnwNzE/Bxyn9xn9AgAJ)
* Web->request: Added proxy support [#e936361b](https://github.com/bcosca/fatfree-core/commit/e936361bc03010c4c7c38a396562e5e96a8a100d)
* Web->mime: Added JFIF format
* Markdown: handle line breaks in paragraph blocks, [bcosca/fatfree#1100](https://github.com/bcosca/fatfree/issues/1100)
* config: reduced cast calls on parsing config sections
* Patch empty SERVER_NAME [bcosca/fatfree#1084](https://github.com/bcosca/fatfree/issues/1084)
* Bugfix: unreliable request headers in Web->request() response [bcosca/fatfree#1092](https://github.com/bcosca/fatfree/issues/1092)
* Fixed, View->render: utilizing multiple UI paths, [bcosca/fatfree#1083](https://github.com/bcosca/fatfree/issues/1083)
* Fixed URL parsing with PHP 5.4 [#247](https://github.com/bcosca/fatfree-core/issues/247)
* Fixed PHP 7.2 warnings when session is active prematurely, [#238](https://github.com/bcosca/fatfree-core/issues/238)
* Fixed setcookie $expire variable type [#240](https://github.com/bcosca/fatfree-core/issues/240)
* Fixed expiration time when updating an existing cookie
3.6.3 (31 December 2017)
* PHP7 fix: remove deprecated (unset) cast
* Web->request: restricted follow_location to 3XX responses only
* CLI mode: refactored arguments parsing
* CLI mode: fixed query string encoding
* SMTP: Refactor parsing of attachments
* SMTP: clean-up mail headers for multipart messages, [#1065](https://github.com/bcosca/fatfree/issues/1065)
* config: fixed performance issues on parsing config files
* config: cast command parameters in config entries to php type & constant, [#1030](https://github.com/bcosca/fatfree/issues/1030)
* config: reduced registry calls
* config: skip hive escaping when resolving dynamic config vars, [#1030](https://github.com/bcosca/fatfree/issues/1030)
* Bug fix: Incorrect cookie lifetime computation, [#1070](https://github.com/bcosca/fatfree/issues/1070), [#1016](https://github.com/bcosca/fatfree/issues/1016)
* DB\SQL\Mapper: use RETURNING option instead of a sequence query to get lastInsertId in PostgreSQL, [#1069](https://github.com/bcosca/fatfree/issues/1069), [#230](https://github.com/bcosca/fatfree-core/issues/230)
* DB\SQL\Session: check if _agent is too long for SQL based sessions [#236](https://github.com/bcosca/fatfree-core/issues/236)
* DB\SQL\Session: fix Session handler table creation issue on SQL Server, [#899](https://github.com/bcosca/fatfree/issues/899)
* DB\SQL: fix oracle db issue with empty error variable, [#1072](https://github.com/bcosca/fatfree/issues/1072)
* DB\SQL\Mapper: fix sorting issues on SQL Server, [#1052](https://github.com/bcosca/fatfree/issues/1052) [#225](https://github.com/bcosca/fatfree-core/issues/225)
* Prevent directory traversal attacks on filesystem based cache [#1073](https://github.com/bcosca/fatfree/issues/1073)
* Bug fix, Template: PHP constants used in include with attribute, [#983](https://github.com/bcosca/fatfree/issues/983)
* Bug fix, Template: Numeric value in expression alters PHP_EOL context
* Template: use existing linefeed instead of PHP_EOL, [#1048](https://github.com/bcosca/fatfree/issues/1048)
* Template: make newline interpolation handling configurable [#223](https://github.com/bcosca/fatfree-core/issues/223)
* Template: add beforerender to Preview
* fix custom FORMATS without modifiers
* Cache: Refactor Cache->reset for XCache
* Cache: loosen reset cache key pattern, [#1041](https://github.com/bcosca/fatfree/issues/1041)
* XCache: suffix reset only works if xcache.admin.enable_auth is disabled
* Added HTTP 103 as recently approved by the IETF
* LDAP changes to for AD flexibility [#227](https://github.com/bcosca/fatfree-core/issues/227)
* Hide debug trace from ajax errors when DEBUG=0 [#1071](https://github.com/bcosca/fatfree/issues/1071)
* fix View->render using potentially wrong cache entry
3.6.2 (26 June 2017)
* Return a status code > 0 when dying on error [#220](https://github.com/bcosca/fatfree-core/issues/220)
* fix SMTP line width [#215](https://github.com/bcosca/fatfree-core/issues/215)
* Allow using a custom field for ldap user id checking [#217](https://github.com/bcosca/fatfree-core/issues/217)
* NEW: DB\SQL->exists: generic method to check if SQL table exists
* Pass handler to route handler and hooks [#1035](https://github.com/bcosca/fatfree/issues/1035)
* pass carriage return of multiline dictionary keys
* Better Web->slug customization
* fix incorrect header issue [#211](https://github.com/bcosca/fatfree-core/issues/211)
* fix schema issue on databases with case-sensitive collation, fixes [#209](https://github.com/bcosca/fatfree-core/issues/209)
* Add filter for deriving C-locale equivalent of a number
* Bug fix: @LANGUAGE remains unchanged after override
* abort: added Header pre-check
* Assemble URL after ONREROUTE
* Add reroute argument to skip script termination
* Invoke ONREROUTE after headers are sent
* SQLite switch to backtick as quote
* Bug fix: Incorrect timing in SQL query logs
* DB\SQL\Mapper: Cast return value of count to integer
* Patched $_SERVER['REQUEST_URI'] to ensure it contains a relative URI
* Tweak debug verbosity
* fix php carriage return issue in preview->build [#205](https://github.com/bcosca/fatfree-core/pull/205)
* fixed template string resolution [#205](https://github.com/bcosca/fatfree-core/pull/205)
* Fixed unexpected default seed on CACHE set [#1028](https://github.com/bcosca/fatfree/issues/1028)
* DB\SQL\Mapper: Optimized field escaping on options
* Optimize template conversion to PHP file
3.6.1 (2 April 2017)
* NEW: Recaptcha plugin [#194](https://github.com/bcosca/fatfree-core/pull/194)
* NEW: MB variable for detecting multibyte support
* NEW: DB\SQL: Cache parsed schema for the TTL duration
* NEW: quick erase flag on Jig/Mongo/SQL mappers [#193](https://github.com/bcosca/fatfree-core/pull/193)
* NEW: Allow OPTIONS method to return a response body [#171](https://github.com/bcosca/fatfree-core/pull/171)
* NEW: Add support for Memcached (bcosca/fatfree#997)
* NEW: Rudimentary preload resource (HTTP2 server) support via template push()
* NEW: Add support for new MongoDB driver [#177](https://github.com/bcosca/fatfree-core/pull/177)
* Changed: template filter are all lowercase now
* Changed: Fix template lookup inconsistency: removed base dir from UI on render
* Changed: count() method now has an options argument [#192](https://github.com/bcosca/fatfree-core/pull/192)
* Changed: SMTP, Spit out error message if any
* \DB\SQL\Mapper: refactored row count strategy
* DB\SQL\Mapper: Allow non-scalar values to be assigned as mapper property
* DB\SQL::PARAM_FLOAT: remove cast to float (#106 and bcosca/fatfree#984) (#191)
* DB\SQL\mapper->erase: allow empty string
* DB\SQL\mapper->insert: fields reset after successful INSERT
* Add option to debounce Cursor->paginate subset [#195](https://github.com/bcosca/fatfree-core/pull/195)
* View: Don't delete sandboxed variables (#198)
* Preview: Optimize compilation of template expressions
* Preview: Use shorthand tag for direct rendering
* Preview->resolve(): new tweak to allow template persistence as option
* Web: Expose diacritics translation table
* SMTP: Enable logging of message body only when $log argument is 'verbose'
* SMTP: Convert headers to camelcase for consistency
* make cache seed more flexible, #164
* Improve trace details for DEBUG>2
* Enable config() to read from an array of input files
* Improved alias and reroute regex
* Make camelCase and snakeCase Unicode-aware
* format: Provision for optional whitespaces
* Break APCu-BC dependence
* Old PHP 5.3 cleanup
* Debug log must include HTTP query
* Recognize X-Forwarded-Port header (bcosca/fatfree#1002)
* Avoid use of deprecated mcrypt module
* Return only the client's IP when using the `X-Forwarded-For` header to deduce an IP address
* Remove orphan mutex locks on termination (#157)
* Use 80 as default port number to avoid issues when `$_SERVER['SERVER_PORT']` is not existing
* fread replaced with readfile() for simple send() usecase
* Bug fix: request URI with multiple leading slashes, #203
* Bug fix: Query generates wrong adhoc field value
* Bug fix: SMTP stream context issue #200
* Bug fix: child pseudo class selector in minify, bcosca/fatfree#1008
* Bug fix: "Undefined index: CLI" error (#197)
* Bug fix: cast Cache-Control expire time to int, bcosca/fatfree#1004
* Bug fix: Avoid issuance of multiple Content-Type headers for nested templates
* Bug fix: wildcard token issue with digits (bcosca/fatfree#996)
* Bug fix: afterupdate ignored when row does not change
* Bug fix: session handler read() method for PHP7 (need strict string) #184 #185
* Bug fix: reroute mocking in CLI mode (#183)
* Bug fix: Reroute authoritative relative references (#181)
* Bug fix: locales order and charset hyphen
* Bug fix: base stripped twice in router (#176)
3.6.0 (19 November 2016)
* NEW: [cli] request type
* NEW: console-friendly CLI mode
* NEW: lexicon caching
* NEW: Silent operator skips startup error check (#125)
* NEW: DB\SQL->trans()
* NEW: custom config section parser, i.e. [conf > Foo::bar]
* NEW: support for cache tags in SQL
* NEW: custom FORMATS
* NEW: Mongo mapper fields whitelist
* NEW: WebSocket server
* NEW: Base->extend method (#158)
* NEW: Implement framework variable caching via config, i.e. FOO = "bar" | 3600
* NEW: Lightweight OAuth2 client
* NEW: SEED variable, configurable app-specific hashing prefix (#149, bcosca/fatfree#951, bcosca/fatfree#884, bcosca/fatfree#629)
* NEW: CLI variable
* NEW: Web->send, specify custom filename (#124)
* NEW: Web->send, added flushing flag (#131)
* NEW: Indexed route wildcards, now exposed in PARAMS['*']
* Changed: PHP 5.4 is now the minimum version requirement
* Changed: Prevent database wrappers from being cloned
* Changed: Router works on PATH instead of URI (#126) NB: PARAMS.0 no longer contains the query string
* Changed: Removed ALIASES autobuilding (#118)
* Changed: Route wildcards match empty strings (#119)
* Changed: Disable default debug highlighting, HIGHLIGHT is false now
* General PHP 5.4 optimizations
* Optimized config parsing
* Optimized Base->recursive
* Optimized header extraction
* Optimized cache/expire headers
* Optimized session_start behaviour (bcosca/fatfree#673)
* Optimized reroute regex
* Tweaked cookie removal
* Better route precedence order
* Performance tweak: reduced cache calls
* Refactored lexicon (LOCALES) build-up, much faster now
* Added turkish locale bug workaround
* Geo->tzinfo Update to UTC
* Added Xcache reset (bcosca/fatfree#928)
* Redis cache: allow db name in dsn
* SMTP: Improve server emulation responses
* SMTP: Optimize transmission envelope
* SMTP: Implement mock transmission
* SMTP: Various bug fixes and feature improvements
* SMTP: quit on failed authentication
* Geo->weather: force metric units
* Base->until: Implement CLI interoperability
* Base->format: looser plural syntax
* Base->format: Force decimal as default number format
* Base->merge: Added $keep flag to save result to the hive key
* Base->reroute: Allow array as URL argument for aliasing
* Base->alias: Allow query string (or array) to be appended to alias
* Permit reroute to named routes with URL query segment
* Sync COOKIE global on set()
* Permit non-hive variables to use JS dot notation
* RFC2616: Use absolute URIs for Location header
* Matrix->calendar: Check if calendar extension is loaded
* Markdown: require start of line/whitespace for text processing (#136)
* DB\[SQL|Jig|Mongo]->log(FALSE) disables logging
* DB\SQL->exec: Added timestamp toggle to db log
* DB\SQL->schema: Remove unnecessary line terminators
* DB\SQL\Mapper: allow array filter with empty string
* DB\SQL\Mapper: optimized handling for key-less tables
* DB\SQL\Mapper: added float support (#106)
* DB\SQL\Session: increased default column sizes (#148, bcosca/fatfree#931, bcosca/fatfree#950)
* Web: Catch cURL errors
* Optimize Web->receive (bcosca/fatfree#930)
* Web->minify: fix arbitrary file download vulnerability
* Web->request: fix cache control max-age detection (bcosca/fatfree#908)
* Web->request: Add request headers & error message to return value (bcosca/fatfree#737)
* Web->request: Refactored response to HTTP request
* Web->send flush while sending big files
* Image->rgb: allow hex strings
* Image->captcha: Check if GD module supports TrueType
* Image->load: Return FALSE on load failure
* Image->resize: keep aspect ratio when only width or height was given
* Updated OpenID lib (bcosca/fatfree#965)
* Audit->card: add new mastercard "2" BIN range (bcosca/fatfree#954)
* Deprecated: Bcrypt class
* Preview->render: optimized detection to remove short open PHP tags and allow xml tags (#133)
* Display file and line number in exception handler (bcosca/fatfree#967)
* Added error reporting level to Base->error and ERROR.level (bcosca/fatfree#957)
* Added optional custom cache instance to Session (#141)
* CLI-aware mock()
* XFRAME and PACKAGE can be switched off now (#128)
* Bug fix: wrong time calculation on memcache reset (#170)
* Bug fix: encode CLI parameters
* Bug fix: Close connection on abort explicitly (#162)
* Bug fix: Image->identicon, Avoid double-size sprite rotation (and possible segfault)
* Bug fix: Image->render and Image->dump, removed unnecessary 2nd argument (#146)
* Bug fix: Magic->offsetset, access property as array element (#147)
* Bug fix: multi-line custom template tag parsing (bcosca/fatfree#935)
* Bug fix: cache headers on errors (bcosca/fatfree#885)
* Bug fix: Web, deprecated CURLOPT_SSL_VERIFYHOST in curl
* Bug fix: Web, Invalid user error constant (bcosca/fatfree#962)
* Bug fix: Web->request, redirections for domain-less location (#135)
* Bug fix: DB\SQL\Mapper, reset changed flag after update (#142, #152)
* Bug fix: DB\SQL\Mapper, fix changed flag when using assignment operator #143 #150 #151
* Bug fix: DB\SQL\Mapper, revival of the HAVING clause
* Bug fix: DB\SQL\Mapper, pgsql with non-integer primary keys (bcosca/fatfree#916)
* Bug fix: DB\SQL\Session, quote table name (bcosca/fatfree#977)
* Bug fix: snakeCase returns word starting with underscore (bcosca/fatfree#927)
* Bug fix: mock does not populate PATH variable
* Bug fix: Geo->weather API key (#129)
* Bug fix: Incorrect compilation of array element with zero index
* Bug fix: Compilation of array construct is incorrect
* Bug fix: Trailing slash redirection on UTF-8 paths (#121)
3.5.1 (31 December 2015)
* NEW: ttl attribute in <include> template tag
* NEW: allow anonymous function for template filter
* NEW: format modifier for international and custom currency symbol
* NEW: Image->data() returns image resource
* NEW: extract() get prefixed array keys from an assoc array
* NEW: Optimized and faster Template parser with full support for HTML5 empty tags
* NEW: Added support for {@token} encapsulation syntax in routes definition
* NEW: DB\SQL->exec(), automatically shift to 1-based query arguments
* NEW: abort() flush output
* Added referenced value to devoid()
* Template token filters are now resolved within Preview->token()
* Web->_curl: restrict redirections to HTTP
* Web->minify(), skip importing of external files
* Improved session and error handling in until()
* Get the error trace array with the new $format parameter
* Better support for unicode URLs
* Optimized TZ detection with date_default_timezone_get()
* format() Provide default decimal places
* Optimize code: remove redundant TTL checks
* Optimized timeout handling in Web->request()
* Improved PHPDoc hints
* Added missing russian DIACRITICS letters
* DB\Cursor: allow child implementation of reset()
* DB\Cursor: Copyfrom now does an internal call to set()
* DB\SQL: Provide the ability to disable SQL logging
* DB\SQL: improved query analysis to trigger fetchAll
* DB\SQL\Mapper: added support for binary table columns
* SQL,JIG,MONGO,CACHE Session handlers refactored and optimized
* SMTP Refactoring and optimization
* Bug fix: SMTP, Align quoted_printable_encode() with SMTP specs (dot-stuffing)
* Bug fix: SMTP, Send buffered optional headers to output
* Bug fix: SMTP, Content-Transfer-Encoding for non-TLS connections
* Bug fix: SMTP, Single attachment error
* Bug fix: Cursor->load not always mapping to first record
* Bug fix: dry SQL mapper should not trigger 'load'
* Bug fix: Code highlighting on empty text
* Bug fix: Image->resize, round dimensions instead of cast
* Bug fix: whitespace handling in $f3->compile()
* Bug fix: TTL of `View` and `Preview` (`Template`)
* Bug fix: token filter regex
* Bug fix: Template, empty attributes
* Bug fix: Preview->build() greedy regex
* Bug fix: Web->minify() single-line comment on last line
* Bug fix: Web->request(), follow_location with cURL and open_basedir
* Bug fix: Web->send() Single quotes around filename not interpreted correctly by some browsers
3.5.0 (2 June 2015)
* NEW: until() method for long polling
* NEW: abort() to disconnect HTTP client (and continue execution)
* NEW: SQL Mapper->required() returns TRUE if field is not nullable
* NEW: PREMAP variable for allowing prefixes to handlers named after HTTP verbs
* NEW: [configs] section to allow config includes
* NEW: Test->passed() returns TRUE if no test failed
* NEW: SQL mapper changed() function
* NEW: fatfree-core composer support
* NEW: constants() method to expose constants
* NEW: Preview->filter() for configurable token filters
* NEW: CORS variable for Cross-Origin Resource Sharing support, #731
* Change in behavior: Switch to htmlspecialchars for escaping
* Change in behavior: No movement in cursor position after erase(), #797
* Change in behavior: ERROR.trace is a multiline string now
* Change in behavior: Strict token recognition in <include> href attribute
* Router fix: loose method search
* Better route precedence order, #12
* Preserve contents of ROUTES, #723
* Alias: allow array of parameters
* Improvements on reroute method
* Fix for custom Jig session files
* Audit: better mobile detection
* Audit: add argument to test string as browser agent
* DB mappers: abort insert/update/erase from hooks, #684
* DB mappers: Allow array inputs in copyfrom()
* Cache,SQL,Jig,Mongo Session: custom callback for suspect sessions
* Fix for unexpected HIVE values when defining an empty HIVE array
* SQL mapper: check for results from CALL and EXEC queries, #771
* SQL mapper: consider SQL schema prefix, #820
* SQL mapper: write to log before execution to
enable tracking of PDOStatement error
* Add SQL Mapper->table() to return table name
* Allow override of the schema in SQL Mapper->schema()
* Improvement: Keep JIG table as reference, #758
* Expand regex to include whitespaces in SQL DB dsn, #817
* View: Removed reserved variables $fw and $implicit
* Add missing newlines after template expansion
* Web->receive: fix for complex field names, #806
* Web: Improvements in socket engine
* Web: customizable user_agent for all engines, #822
* SMTP: Provision for Content-ID in attachments
* Image + minify: allow absolute paths
* Promote framework error to E_USER_ERROR
* Geo->weather switch to OpenWeather
* Expose mask() and grab() methods for routing
* Expose trace() method to expose the debug backtrace
* Implement recursion strategy using IteratorAggregate, #714
* Exempt whitespace between % and succeeding operator from being minified, #773
* Optimized error detection and ONERROR handler, fatfree-core#18
* Tweak error log output
* Optimized If-Modified-Since cache header usage
* Improved APCu compatibility, #724
* Bug fix: Web::send fails on filename with spaces, #810
* Bug fix: overwrite limit in findone()
* Bug fix: locale-specific edge cases affecting SQL schema, #772
* Bug fix: Newline stripping in config()
* Bug fix: bracket delimited identifier for sybase and dblib driver
* Bug fix: Mongo mapper collection->count driver compatibility
* Bug fix: SQL Mapper->set() forces adhoc value if already defined
* Bug fix: Mapper ignores HAVING clause
* Bug fix: Constructor invocation in call()
* Bug fix: Wrong element returned by ajax/sync request
* Bug fix: handling of non-consecutive compound key members
* Bug fix: Virtual fields not retrieved when group option is present, #757
* Bug fix: group option generates incorrect SQL query, #757
* Bug fix: ONERROR does not receive PARAMS on fatal error
3.4.0 (1 January 2015)
* NEW: [redirects] section
* NEW: Custom config sections
* NEW: User-defined AUTOLOAD function
* NEW: ONREROUTE variable
* NEW: Provision for in-memory Jig database (#727)
* Return run() result (#687)
* Pass result of run() to mock() (#687)
* Add port suffix to REALM variable
* New attribute in <include> tag to extend hive
* Adjust unit tests and clean up templates
* Expose header-related methods
* Web->request: allow content array
* Preserve contents of ROUTES (#723)
* Smart detection of PHP functions in template expressions
* Add afterrender() hook to View class
* Implement ArrayAccess and magic properties on hive
* Improvement on mocking of superglobals and request body
* Fix table creation for pgsql handled sessions
* Add QUERY to hive
* Exempt E_NOTICE from default error_reporting()
* Add method to build alias routes from template, fixes #693
* Fix dangerous caching of cookie values
* Fix multiple encoding in nested templates
* Fix node attribute parsing for empty/zero values
* Apply URL encoding on BASE to emulate v2 behavior (#123)
* Improve Base->map performance (#595)
* Add simple backtrace for fatal errors
* Count Cursor->load() results (#581)
* Add form field name to Web->receive() callback arguments
* Fix missing newlines after template expansion
* Fix overwrite of ENCODING variable
* limit & offset workaround for SQL Server, fixes #671
* SQL Mapper->find: GROUP BY SQL compliant statement
* Bug fix: Missing abstract method fields()
* Bug fix: Auto escaping does not work with mapper objects (#710)
* Bug fix: 'with' attribute in <include> tag raise error when no token
inside
* View rendering: optional Content-Type header
* Bug fix: Undefined variable: cache (#705)
* Bug fix: Routing does not work if project base path includes valid
special URI character (#704)
* Bug fix: Template hash collision (#702)
* Bug fix: Property visibility is incorrect (#697)
* Bug fix: Missing Allow header on HTTP 405 response
* Bug fix: Double quotes in lexicon files (#681)
* Bug fix: Space should not be mandatory in ICU pluralization format string
* Bug fix: Incorrect log entry when SQL query contains a question mark
* Bug fix: Error stack trace
* Bug fix: Cookie expiration (#665)
* Bug fix: OR operator (||) parsed incorrectly
* Bug fix: Routing treatment of * wildcard character
* Bug fix: Mapper copyfrom() method doesn't allow class/object callbacks
(#590)
* Bug fix: exists() creates elements/properties (#591)
* Bug fix: Wildcard in routing pattern consumes entire query string (#592)
* Bug fix: Workaround bug in latest MongoDB driver
* Bug fix: Default error handler silently fails for AJAX request with
DEBUG>0 (#599)
* Bug fix: Mocked BODY overwritten (#601)
* Bug fix: Undefined pkey (#607)
3.3.0 (8 August 2014)
* NEW: Attribute in <include> tag to extend hive
* NEW: Image overlay with transparency and alignment control
* NEW: Allow redirection of specified route patterns to a URL
* Bug fix: Missing AND operator in SQL Server schema query (Issue #576)
* Count Cursor->load() results (Feature request #581)
* Mapper copyfrom() method doesn't allow class/object callbacks (Issue #590)
* Bug fix: exists() creates elements/properties (Issue #591)
* Bug fix: Wildcard in routing pattern consumes entire query string
(Issue #592)
* Tweak Base->map performance (Issue #595)
* Bug fix: Default error handler silently fails for AJAX request with
DEBUG>0 (Issue #599)
* Bug fix: Mocked BODY overwritten (Issue #601)
* Bug fix: Undefined pkey (Issue #607)
* Bug fix: beforeupdate() position (Issue #633)
* Bug fix: exists() return value for cached keys
* Bug fix: Missing error code in UNLOAD handler
* Bug fix: OR operator (||) parsed incorrectly
* Add input name parameter to custom slug function
* Apply URL encoding on BASE to emulate v2 behavior (Issue #123)
* Reduce mapper update() iterations
* Bug fix: Routing treatment of * wildcard character
* SQL Mapper->find: GROUP BY SQL compliant statement
* Work around bug in latest MongoDB driver
* Work around probable race condition and optimize cache access
* View rendering: Optional Content-Type header
* Fix missing newlines after template expansion
* Add form field name to Web->receive() callback arguments
* Quick reference: add RAW variable
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