changelog.txt 19 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416
  1. CHANGELOG
  2. 3.2.2 (19 March 2014)
  3. * NEW: Locales set automatically (Feature request #522)
  4. * NEW: Mapper dbtype()
  5. * NEW: before- and after- triggers for all mappers
  6. * NEW: Decode HTML5 entities if PHP>5.3 detected (Feature request #552)
  7. * NEW: Send credentials only if AUTH is present in the SMTP extension
  8. response (Feature request #545)
  9. * NEW: BITMASK variable to allow ENT_COMPAT override
  10. * NEW: Redis support for caching
  11. * Enable SMTP feature detection
  12. * Enable extended ICU custom date format (Feature request #555)
  13. * Enable custom time ICU format
  14. * Add option to turn off session table creation (Feature request #557)
  15. * Enhanced template token rendering and custom filters (Feature request
  16. #550)
  17. * Avert multiple loads in DB-managed sessions (Feature request #558)
  18. * Add EXEC to associative fetch
  19. * Bug fix: Building template tokens breaks on inline OR condition (Issue
  20. #573)
  21. * Bug fix: SMTP->send does not use the $log parameter (Issue #571)
  22. * Bug fix: Allow setting sqlsrv primary keys on insert (Issue #570)
  23. * Bug fix: Generated query for obtaining table schema in sqlsrv incorrect
  24. (Bug #565)
  25. * Bug fix: SQL mapper flag set even when value has not changed (Bug #562)
  26. * Bug fix: Add XFRAME config option (Feature request #546)
  27. * Bug fix: Incorrect parsing of comments (Issue #541)
  28. * Bug fix: Multiple Set-Cookie headers (Issue #533)
  29. * Bug fix: Mapper is dry after save()
  30. * Bug fix: Prevent infinite loop when error handler is triggered
  31. (Issue #361)
  32. * Bug fix: Mapper tweaks not passing primary keys as arguments
  33. * Bug fix: Zero indexes in dot-notated arrays fail to compile
  34. * Bug fix: Prevent GROUP clause double-escaping
  35. * Bug fix: Regression of zlib compression bug
  36. * Bug fix: Method copyto() does not include ad hoc fields
  37. * Check existence of OpenID mode (Issue #529)
  38. * Generate a 404 when a tokenized class doesn't exist
  39. * Fix SQLite quotes (Issue #521)
  40. * Bug fix: BASE is incorrect on Windows
  41. 3.2.1 (7 January 2014)
  42. * NEW: EMOJI variable, UTF->translate(), UTF->emojify(), and UTF->strrev()
  43. * Allow empty strings in config()
  44. * Add support for turning off php://input buffering via RAW
  45. (FALSE by default)
  46. * Add Cursor->load() and Cursor->find() TTL support
  47. * Support Web->receive() large file downloads via PUT
  48. * ONERROR safety check
  49. * Fix session CSRF cookie detection
  50. * Framework object now passed to route handler contructors
  51. * Allow override of DIACRITICS
  52. * Various code optimizations
  53. * Support log disabling (Issue #483)
  54. * Implicit mapper load() on authentication
  55. * Declare abstract methods for Cursor derivatives
  56. * Support single-quoted HTML/XML attributes (Feature request #503)
  57. * Relax property visibility of mappers and derivatives
  58. * Deprecated: {{~ ~}} instructions and {{* *}} comments; Use {~ ~} and
  59. {* *} instead
  60. * Minor fix: Audit->ipv4() return value
  61. * Bug fix: Backslashes in BASE not converted on Windows
  62. * Bug fix: UTF->substr() with negative offset and specified length
  63. * Bug fix: Replace named URL tokens on render()
  64. * Bug fix: BASE is not empty when run from document root
  65. * Bug fix: stringify() recursion
  66. 3.2.0 (18 December 2013)
  67. * NEW: Automatic CSRF protection (with IP and User-Agent checks) for
  68. sessions mapped to SQL-, Jig-, Mongo- and Cache-based backends
  69. * NEW: Named routes
  70. * NEW: PATH variable; returns the URL relative to BASE
  71. * NEW: Image->captcha() color parameters
  72. * NEW: Ability to access MongoCuror thru the cursor() method
  73. * NEW: Mapper->fields() method returns array of field names
  74. * NEW: Mapper onload(), oninsert(), onupdate(), and onerase() event
  75. listeners/triggers
  76. * NEW: Preview class (a lightweight template engine)
  77. * NEW: rel() method derives path from URL relative to BASE; useful for
  78. rerouting
  79. * NEW: PREFIX variable for prepending a string to a dictionary term;
  80. Enable support for prefixed dictionary arrays and .ini files (Feature
  81. request #440)
  82. * NEW: Google static map plugin
  83. * NEW: devoid() method
  84. * Introduce clean(); similar to scrub(), except that arg is passed by
  85. value
  86. * Use $ttl for cookie expiration (Issue #457)
  87. * Fix needs_rehash() cost comparison
  88. * Add pass-by-reference argument to exists() so if method returns TRUE,
  89. a subsequent get() is unnecessary
  90. * Improve MySQL support
  91. * Move esc(), raw(), and dupe() to View class where they more
  92. appropriately belong
  93. * Allow user-defined fields in SQL mapper constructor (Feature request
  94. #450)
  95. * Re-implement the pre-3.0 template resolve() feature
  96. * Remove redundant instances of session_commit()
  97. * Add support for input filtering in Mapper->copyfrom()
  98. * Prevent intrusive behavior of Mapper->copyfrom()
  99. * Support multiple SQL primary keys
  100. * Support custom tag attributes/inline tokens defined at runtime
  101. (Feature request #438)
  102. * Broader support for HTTP basic auth
  103. * Prohibit Jig _id clear()
  104. * Add support for detailed stringify() output
  105. * Add base directory to UI path as fallback
  106. * Support Test->expect() chaining
  107. * Support __tostring() in stringify()
  108. * Trigger error on invalid CAPTCHA length (Issue #458)
  109. * Bug fix: exists() pass-by-reference argument returns incorrect value
  110. * Bug fix: DB Exec does not return affected row if query contains a
  111. sub-SELECT (Issue #437)
  112. * Improve seed generator and add code for detecting of acceptable
  113. limits in Image->captcha() (Feature request #460)
  114. * Add decimal format ICU extension
  115. * Bug fix: 404-reported URI contains HTTP query
  116. * Bug fix: Data type detection in DB->schema()
  117. * Bug fix: TZ initialization
  118. * Bug fix: paginate() passes incorrect argument to count()
  119. * Bug fix: Incorrect query when reloading after insert()
  120. * Bug fix: SQL preg_match error in pdo_type matching (Issue #447)
  121. * Bug fix: Missing merge() function (Issue #444)
  122. * Bug fix: BASE misdefined in command line mode
  123. * Bug fix: Stringifying hive may run infinite (Issue #436)
  124. * Bug fix: Incomplete stringify() when DEBUG<3 (Issue #432)
  125. * Bug fix: Redirection of basic auth (Issue #430)
  126. * Bug fix: Filter only PHP code (including short tags) in templates
  127. * Bug fix: Markdown paragraph parser does not convert PHP code blocks
  128. properly
  129. * Bug fix: identicon() colors on same keys are randomized
  130. * Bug fix: quotekey() fails on aliased keys
  131. * Bug fix: Missing _id in Jig->find() return value
  132. * Bug fix: LANGUAGE/LOCALES handling
  133. * Bug fix: Loose comparison in stringify()
  134. 3.1.2 (5 November 2013)
  135. * Abandon .chm help format; Package API documentation in plain HTML;
  136. (Launch lib/api/index.html in your browser)
  137. * Deprecate BAIL in favor of HALT (default: TRUE)
  138. * Revert to 3.1.0 autoload behavior; Add support for lowercase folder
  139. names
  140. * Allow Spring-style HTTP method overrides
  141. * Add support for SQL Server-based sessions
  142. * Capture full X-Forwarded-For header
  143. * Add protection against malicious scripts; Extra check if file was really
  144. uploaded
  145. * Pass-thru page limit in return value of Cursor->paginate()
  146. * Optimize code: Implement single-pass escaping
  147. * Short circuit Jig->find() if source file is empty
  148. * Bug fix: PHP globals passed by reference in hive() result (Issue #424)
  149. * Bug fix: ZIP mime type incorrect behavior
  150. * Bug fix: Jig->erase() filter malfunction
  151. * Bug fix: Mongo->select() group
  152. * Bug fix: Unknown bcrypt constant
  153. 3.1.1 (13 October 2013)
  154. * NEW: Support OpenID attribute exchange
  155. * NEW: BAIL variable enables/disables continuance of execution on non-fatal
  156. errors
  157. * Deprecate BAIL in favor of HALT (default: FALSE)
  158. * Add support for Oracle
  159. * Mark cached queries in log (Feature Request #405)
  160. * Implement Bcrypt->needs_reshash()
  161. * Add entropy to SQL cache hash; Add uuid() method to DB backends
  162. * Find real document root; Simplify debug paths
  163. * Permit OpenID required fields to be declared as comma-separated string or
  164. array
  165. * Pass modified filename as argument to user-defined function in
  166. Web->receive()
  167. * Quote keys in optional SQL clauses (Issue #408)
  168. * Allow UNLOAD to override fatal error detection (Issue #404)
  169. * Mutex operator precedence error (Issue #406)
  170. * Bug fix: exists() malfunction (Issue #401)
  171. * Bug fix: Jig mapper triggers error when loading from CACHE (Issue #403)
  172. * Bug fix: Array index check
  173. * Bug fix: OpenID verified() return value
  174. * Bug fix: Basket->find() should return a set of results (Issue #407);
  175. Also implemented findone() for consistency with mappers
  176. * Bug fix: PostgreSQL last insert ID (Issue #410)
  177. * Bug fix: $port component URL overwritten by _socket()
  178. * Bug fix: Calculation of elapsed time
  179. 3.1.0 (20 August 2013)
  180. * NEW: Web->filler() returns a chunk of text from the standard
  181. Lorem Ipsum passage
  182. * Change in behavior: Drop support for JSON serialization
  183. * SQL->exec() now returns value of RETURNING clause
  184. * Add support for $ttl argument in count() (Issue #393)
  185. * Allow UI to be overridden by custom $path
  186. * Return result of PDO primitives: begintransaction(), rollback(), and
  187. commit()
  188. * Full support for PHP 5.5
  189. * Flush buffers only when DEBUG=0
  190. * Support class->method, class::method, and lambda functions as
  191. Web->basic() arguments
  192. * Commit session on Basket->save()
  193. * Optional enlargement in Image->resize()
  194. * Support authentication on hosts running PHP-CGI
  195. * Change visibility level of Cache properties
  196. * Prevent ONERROR recursion
  197. * Work around Apache pre-2.4 VirtualDocumentRoot bug
  198. * Prioritize cURL in HTTP engine detection
  199. * Bug fix: Minify tricky JS
  200. * Bug fix: desktop() detection
  201. * Bug fix: Double-slash on TEMP-relative path
  202. * Bug fix: Cursor mapping of first() and last() records
  203. * Bug fix: Premature end of Web->receive() on multiple files
  204. * Bug fix: German umlaute to its corresponding grammatically-correct
  205. equivalent
  206. 3.0.9 (12 June 2013)
  207. * NEW: Web->whois()
  208. * NEW: Template <switch> <case> tags
  209. * Improve CACHE consistency
  210. * Case-insensitive MIME type detection
  211. * Support pre-PHP 5.3.4 in Prefab->instance()
  212. * Refactor isdesktop() and ismobile(); Add isbot()
  213. * Add support for Markdown strike-through
  214. * Work around ODBC's lack of quote() support
  215. * Remove useless Prefab destructor
  216. * Support multiple cache instances
  217. * Bug fix: Underscores in OpenId keys mangled
  218. * Refactor format()
  219. * Numerous tweaks
  220. * Bug fix: MongoId object not preserved
  221. * Bug fix: Double-quotes included in lexicon() string (Issue #341)
  222. * Bug fix: UTF-8 formatting mangled on Windows (Issue #342)
  223. * Bug fix: Cache->load() error when CACHE is FALSE (Issue #344)
  224. * Bug fix: send() ternary expression
  225. * Bug fix: Country code constants
  226. 3.0.8 (17 May 2013)
  227. * NEW: Bcrypt lightweight hashing library\
  228. * Return total number of records in superset in Cursor->paginate()
  229. * ONERROR short-circuit (Enhancement #334)
  230. * Apply quotes/backticks on DB identifiers
  231. * Allow enabling/disabling of SQL log
  232. * Normalize glob() behavior (Issue #330)
  233. * Bug fix: mbstring 2-byte text truncation (Issue #325)
  234. * Bug fix: Unsupported operand types (Issue #324)
  235. 3.0.7 (2 May 2013)
  236. * NEW: route() now allows an array of routing patterns as first argument;
  237. support array as first argument of map()
  238. * NEW: entropy() for calculating password strength (NIST 800-63)
  239. * NEW: AGENT variable containing auto-detected HTTP user agent string
  240. * NEW: ismobile() and isdesktop() methods
  241. * NEW: Prefab class and descendants now accept constructor arguments
  242. * Change in behavior: Cache->exists() now returns timestamp and TTL of
  243. cache entry or FALSE if not found (Feature request #315)
  244. * Preserve timestamp and TTL when updating cache entry (Feature request
  245. #316)
  246. * Improved currency formatting with C99 compliance
  247. * Suppress unnecessary program halt at startup caused by misconfigured
  248. server
  249. * Add support for dashes in custom attribute names in templates
  250. * Bug fix: Routing precedene (Issue #313)
  251. * Bug fix: Remove Jig _id element from document property
  252. * Bug fix: Web->rss() error when not enough items in the feed (Issue #299)
  253. * Bug fix: Web engine fallback (Issue #300)
  254. * Bug fix: <strong> and <em> formatting
  255. * Bug fix: Text rendering of text with trailing punctuation (Issue #303)
  256. * Bug fix: Incorrect regex in SMTP
  257. 3.0.6 (31 Mar 2013)
  258. * NEW: Image->crop()
  259. * Modify documentation blocks for PHPDoc interoperability
  260. * Allow user to control whether Base->rerouet() uses a permanent or
  261. temporary redirect
  262. * Allow JAR elements to be set individually
  263. * Refactor DB\SQL\Mapper->insert() to cope with autoincrement fields
  264. * Trigger error when captcha() font is missing
  265. * Remove unnecessary markdown regex recursion
  266. * Check for scalars instead of DB\SQL strings
  267. * Implement more comprehensive diacritics table
  268. * Add option for disabling 401 errors when basic auth() fails
  269. * Add markdown syntax highlighting for Apache configuration
  270. * Markdown->render() deprecated to remove dependency on UI variable;
  271. Feature replaced by Markdown->convert() to enable translation from
  272. markdown string to HTML
  273. * Optimize factory() code of all data mappers
  274. * Apply backticks on MySQL table names
  275. * Bug fix: Routing failure when directory path contains a tilde (Issue #291)
  276. * Bug fix: Incorrect markdown parsing of strong/em sequences and inline HTML
  277. * Bug fix: Cached page not echoed (Issue #278)
  278. * Bug fix: Object properties not escaped when rendering
  279. * Bug fix: OpenID error response ignored
  280. * Bug fix: memcache_get_extended_stats() timeout
  281. * Bug fix: Base->set() doesn't pass TTL to Cache->set()
  282. * Bug fix: Base->scrub() ignores pass-thru * argument (Issue #274)
  283. 3.0.5 (16 Feb 2013)
  284. * NEW: Markdown class with PHP, HTML, and .ini syntax highlighting support
  285. * NEW: Options for caching of select() and find() results
  286. * NEW: Web->acceptable()
  287. * Add send() argument for forcing downloads
  288. * Provide read() option for applying Unix LF as standard line ending
  289. * Bypass lexicon() call if LANGUAGE is undefined
  290. * Load fallback language dictionary if LANGUAGE is undefined
  291. * map() now checks existence of class/methods for non-tokenized URLs
  292. * Improve error reporting of non-existent Template methods
  293. * Address output buffer issues on some servers
  294. * Bug fix: Setting DEBUG to 0 won't suppress the stack trace when the
  295. content type is application/json (Issue #257)
  296. * Bug fix: Image dump/render additional arguments shifted
  297. * Bug fix: ob_clean() causes buffer issues with zlib compression
  298. * Bug fix: minify() fails when commenting CSS @ rules (Issue #251)
  299. * Bug fix: Handling of commas inside quoted strings
  300. * Bug fix: Glitch in stringify() handling of closures
  301. * Bug fix: dry() in mappers returns TRUE despite being hydrated by
  302. factory() (Issue #265)
  303. * Bug fix: expect() not handling flags correctly
  304. * Bug fix: weather() fails when server is unreachable
  305. 3.0.4 (29 Jan 2013)
  306. * NEW: Support for ICU/CLDR pluralization
  307. * NEW: User-defined FALLBACK language
  308. * NEW: minify() now recognizes CSS @import directives
  309. * NEW: UTF->bom() returns byte order mark for UTF-8 encoding
  310. * Expose SQL\Mapper->schema()
  311. * Change in behavior: Send error response as JSON string if AJAX request is
  312. detected
  313. * Deprecated: afind*() methods
  314. * Discard output buffer in favor of debug output
  315. * Make _id available to Jig queries
  316. * Magic class now implements ArrayAccess
  317. * Abort execution on startup errors
  318. * Suppress stack trace on DEBUG level 0
  319. * Allow single = as equality operator in Jig query expressions
  320. * Abort OpenID discovery if Web->request() fails
  321. * Mimic PHP *RECURSION* in stringify()
  322. * Modify Jig parser to allow wildcard-search using preg_match()
  323. * Abort execution after error() execution
  324. * Concatenate cached/uncached minify() iterations; Prevent spillover
  325. caching of previous minify() result
  326. * Work around obscure PHP session id regeneration bug
  327. * Revise algorithm for Jig filter involving undefined fields (Issue #230)
  328. * Use checkdnsrr() instead of gethostbyname() in DNSBL check
  329. * Auto-adjust pagination to cursor boundaries
  330. * Add Romanian diacritics
  331. * Bug fix: Root namespace reference and sorting with undefined Jig fields
  332. * Bug fix: Greedy receive() regex
  333. * Bug fix: Default LANGUAGE always 'en'
  334. * Bug fix: minify() hammers cache backend
  335. * Bug fix: Previous values of primary keys not saved during factory()
  336. instantiation
  337. * Bug fix: Jig find() fails when search key is not present in all records
  338. * Bug fix: Jig SORT_DESC (Issue #233)
  339. * Bug fix: Error reporting (Issue #225)
  340. * Bug fix: language() return value
  341. 3.0.3 (29 Dec 2013)
  342. * NEW: [ajax] and [sync] routing pattern modifiers
  343. * NEW: Basket class (session-based pseudo-mapper, shopping cart, etc.)
  344. * NEW: Test->message() method
  345. * NEW: DB profiling via DB->log()
  346. * NEW: Matrix->calendar()
  347. * NEW: Audit->card() and Audit->mod10() for credit card verification
  348. * NEW: Geo->weather()
  349. * NEW: Base->relay() accepts comma-separated callbacks; but unlike
  350. Base->chain(), result of previous callback becomes argument of the next
  351. * Numerous performance tweaks
  352. * Interoperability with new MongoClient class
  353. * Web->request() now recognizes gzip and deflate encoding
  354. * Differences in behavior of Web->request() engines rectified
  355. * mutex() now uses an ID as argument (instead of filename to make it clear
  356. that specified file is not the target being locked, but a primitive
  357. cross-platform semaphore)
  358. * DB\SQL\Mapper field _id now returned even in the absence of any
  359. auto-increment field
  360. * Magic class spinned off as a separate file
  361. * ISO 3166-1 alpha-2 table updated
  362. * Apache redirect emulation for PHP 5.4 CLI server mode
  363. * Framework instance now passed as argument to any user-defined shutdown
  364. function
  365. * Cache engine now used as storage for Web->minify() output
  366. * Flag added for enabling/disabling Image class filter history
  367. * Bug fix: Trailing routing token consumes HTTP query
  368. * Bug fix: LANGUAGE spills over to LOCALES setting
  369. * Bug fix: Inconsistent dry() return value
  370. * Bug fix: URL-decoding
  371. 3.0.2 (23 Dec 2013)
  372. * NEW: Syntax-highlighted stack traces via Base->highlight(); boolean
  373. HIGHLIGHT global variable can be used to enable/disable this feature
  374. * NEW: Template engine <ignore> tag
  375. * NEW: Image->captcha()
  376. * NEW: DNSBL-based spammer detection (ported from 2.x)
  377. * NEW: paginate(), first(), and last() methods for data mappers
  378. * NEW: X-HTTP-Method-Override header now recognized
  379. * NEW: Base->chain() method for executing callbacks in succession
  380. * NEW: HOST global variable; derived from either $_SERVER['SERVER_NAME'] or
  381. gethostname()
  382. * NEW: REALM global variable representing full canonical URI
  383. * NEW: Auth plug-in
  384. * NEW: Pingback plug-in (implements both Pingback 1.0 protocol client and
  385. server)
  386. * NEW: DEBUG verbosity can now reach up to level 3; Base->stringify() drills
  387. down to object properties at this setting
  388. * NEW: HTTP PATCH method added to recognized HTTP ReST methods
  389. * Web->slug() now trims trailing dashes
  390. * Web->request() now allows relative local URLs as argument
  391. * Use of PARAMS in route handlers now unnecessary; framework now passes two
  392. arguments to route handlers: the framework object instance and an array
  393. containing the captured values of tokens in route patterns
  394. * Standardized timeout settings among Web->request() backends
  395. * Session IDs regenerated for additional security
  396. * Automatic HTTP 404 responses by Base->call() now restricted to route
  397. handlers
  398. * Empty comments in ini-style files now parsed properly
  399. * Use file_get_contents() in methods that don't involve high concurrency
  400. 3.0.1 (14 Dec 2013)
  401. * Major rewrite of much of the framework's core features