| 1 |
# Changelog |
| 2 |
|
| 3 |
All Notable changes to `Csv` will be documented in this file |
| 4 |
|
| 5 |
## [9.8.0] - 2022-01-04 |
| 6 |
|
| 7 |
### Added |
| 8 |
|
| 9 |
- Added PHP7.4 typed properties where applicable |
| 10 |
- `TabularDataReader::fetchColumnByName` to replace `TabularDataReader::fetchColumn` |
| 11 |
- `TabularDataReader::fetchColumnByOffset` to replace `TabularDataReader::fetchColumn` |
| 12 |
|
| 13 |
### Deprecated |
| 14 |
|
| 15 |
- `TabularDataReader::fetchColumn` use `TabularDataReader::fetchColumnByOffset` or `TabularDataReader::fetchColumnByName` instead |
| 16 |
|
| 17 |
### Fixed |
| 18 |
|
| 19 |
- `AbstractCsv` constructor is marked final via docblock. |
| 20 |
The method should never be extended or changed in child classes to avoid unexpected behaviour |
| 21 |
|
| 22 |
### Removed |
| 23 |
|
| 24 |
- PHP7.3 support |
| 25 |
- Remove internal `EmptyEscapeParser` Polyfill used in `Reader` class |
| 26 |
- Remove PHP7.4 polyfill features in `Writer` class |
| 27 |
|
| 28 |
## [9.7.4] - 2021-11-30 |
| 29 |
|
| 30 |
### Added |
| 31 |
|
| 32 |
- None |
| 33 |
|
| 34 |
### Deprecated |
| 35 |
|
| 36 |
- None |
| 37 |
|
| 38 |
### Fixed |
| 39 |
|
| 40 |
- Bug fix `EscapeFormula` to follow OWASP latest recommendation [](https://github.com/thephpleague/csv/pull/452PR #452](https://github.com/thephpleague/csv/pull/452](https://github.com/thephpleague/csv/pull/452) |
| 41 |
thanks to [](https://github.com/robertfausk@robertfausk](https://github.com/robertfausk](https://github.com/robertfausk) and [](https://github.com/Lehmhub@Lehmub](https://github.com/Lehmhub](https://github.com/Lehmhub) |
| 42 |
|
| 43 |
### Removed |
| 44 |
|
| 45 |
- None |
| 46 |
|
| 47 |
## [9.7.3] - 2021-11-21 |
| 48 |
|
| 49 |
### Added |
| 50 |
|
| 51 |
- None |
| 52 |
|
| 53 |
### Deprecated |
| 54 |
|
| 55 |
- None |
| 56 |
|
| 57 |
### Fixed |
| 58 |
|
| 59 |
- Update PHPStan requirement for development |
| 60 |
- Improve Documentation generation thanks to [](https://github.com/pdelrepdelre](https://github.com/pdelre](https://github.com/pdelre) |
| 61 |
- PHP8.1 compliance: using `ReturnTypeWillChange` to avoid emitting a unnecessary deprecation notice. thanks to [](https://github.com/cedric-annecedric-anne](https://github.com/cedric-anne](https://github.com/cedric-anne) |
| 62 |
|
| 63 |
### Removed |
| 64 |
|
| 65 |
- None |
| 66 |
|
| 67 |
## [9.7.2] - 2021-10-05 |
| 68 |
|
| 69 |
### Added |
| 70 |
|
| 71 |
- None |
| 72 |
|
| 73 |
### Deprecated |
| 74 |
|
| 75 |
- None |
| 76 |
|
| 77 |
### Fixed |
| 78 |
|
| 79 |
- Update dependencies requirement for development |
| 80 |
- PHP8.1 compliance: replace `FILTER_SANITIZE_STRING` by `FILTER_UNSAFE_RAW` |
| 81 |
- PHP8.1 compliance: remove duplicated public properties declaration |
| 82 |
- PHP8.1 compliance: add support for fputcsv `$eol` argument |
| 83 |
|
| 84 |
### Removed |
| 85 |
|
| 86 |
- None |
| 87 |
|
| 88 |
## [9.7.1] - 2021-04-17 |
| 89 |
|
| 90 |
### Added |
| 91 |
|
| 92 |
- None |
| 93 |
|
| 94 |
### Deprecated |
| 95 |
|
| 96 |
- None |
| 97 |
|
| 98 |
### Fixed |
| 99 |
|
| 100 |
- fix writer filter [](https://github.com/thephpleague/csv/pull/421#421](https://github.com/thephpleague/csv/pull/421](https://github.com/thephpleague/csv/pull/421) by [](https://github.com/cpj555LosingBattle](https://github.com/cpj555](https://github.com/cpj555) |
| 101 |
|
| 102 |
### Removed |
| 103 |
|
| 104 |
- None |
| 105 |
|
| 106 |
## [9.7.0] - 2021-03-26 |
| 107 |
|
| 108 |
### Added |
| 109 |
|
| 110 |
- `League\Csv\SyntaxError::duplicateColumnNames` to expose column name duplicates during header usage |
| 111 |
- `League\Csv\UnableToProcessCsv` as the new Exception Marker Interface |
| 112 |
- `League\Csv\UnavailableStream` as the new Exception |
| 113 |
- `League\Csv\Info::getDelimiterStats` to replace the namespace function `delimiter_detect` |
| 114 |
- `League\Csv\Info::fetchBOMSequence` to replace the namespace function `bom_match` |
| 115 |
- `League\Csv\AbstractCsv::toString` to replace `League\Csv\AbstractCsv::getContent` and `League\Csv\AbstractCsv::__toString` |
| 116 |
- `League\Csv\XMLConverter::create` to replace `League\Csv\XMLConverter::__construct` |
| 117 |
- `League\Csv\HTMLConverter::create` to replace `League\Csv\HTMLConverter::__construct` |
| 118 |
- `League\Csv\AbstractCsv::supportsStreamFilterOnRead` and `League\Csv\AbstractCsv::supportsStreamFilterOnWrite` to replace `League\Csv\AbstractCsv::supportsStreamFilter` and `League\Csv\AbstractCsv::getStreamFilterMode` |
| 119 |
|
| 120 |
### Deprecated |
| 121 |
|
| 122 |
- `League\Csv\delimiter_detect` use `League\Csv\Info::getDelimiterStats` |
| 123 |
- `League\Csv\bom_match` use `League\Csv\Info::fetchBOMSequence` |
| 124 |
- `League\Csv\AbstractCsv::getContent` use `League\Csv\AbstractCsv::toString` |
| 125 |
- `League\Csv\AbstractCsv::getStreamFilterMode` use `League\Csv\AbstractCsv::supportsStreamFilterOnRead` or `League\Csv\AbstractCsv::supportsStreamFilterOnWrite` |
| 126 |
- `League\Csv\AbstractCsv::supportsStreamFilter` use `League\Csv\AbstractCsv::supportsStreamFilterOnRead` or `League\Csv\AbstractCsv::supportsStreamFilterOnWrite` |
| 127 |
- Calling exceptions constructor, use named constructors instead. |
| 128 |
- `League\Csv\XMLConverter::__construct` use `League\Csv\XMLConverter::create` |
| 129 |
- `League\Csv\HTMLConverter::__construct` use `League\Csv\HTMLConverter::create` |
| 130 |
|
| 131 |
### Fixed |
| 132 |
|
| 133 |
- Move tests into the `src` directory |
| 134 |
- Fixed encoder method resolver implementation |
| 135 |
- all classes marked as `@internal` are now final |
| 136 |
- `League\Csv\AbstractCsv::STREAM_FILTER_MODE` constant replaces `League\Csv\AbstractCsv::$stream_filter_mode` |
| 137 |
|
| 138 |
### Removed |
| 139 |
|
| 140 |
- PHP7.2 support |
| 141 |
- `League\Csv\AbstractCsv::$stream_filter_mode` |
| 142 |
|
| 143 |
## [9.6.2] - 2020-12-10 |
| 144 |
|
| 145 |
### Added |
| 146 |
|
| 147 |
- Using Github actions as development tools. |
| 148 |
|
| 149 |
### Deprecated |
| 150 |
|
| 151 |
- None |
| 152 |
|
| 153 |
### Fixed |
| 154 |
|
| 155 |
- Adding official support for PHP8 [](https://github.com/thephpleague/csv/pull/405#405](https://github.com/thephpleague/csv/pull/405](https://github.com/thephpleague/csv/pull/405) and [](https://github.com/thephpleague/csv/pull/406#406](https://github.com/thephpleague/csv/pull/406](https://github.com/thephpleague/csv/pull/406) by [](https://github.com/IonBazanIon Bazan](https://github.com/IonBazan](https://github.com/IonBazan) |
| 156 |
|
| 157 |
### Removed |
| 158 |
|
| 159 |
- Removing Travis and Scrutinizr as development tools |
| 160 |
|
| 161 |
## [9.6.1] - 2020-09-05 |
| 162 |
|
| 163 |
### Added |
| 164 |
|
| 165 |
- None |
| 166 |
|
| 167 |
### Deprecated |
| 168 |
|
| 169 |
- None |
| 170 |
|
| 171 |
### Fixed |
| 172 |
|
| 173 |
- BOM sequence processing fix [](https://github.com/thephpleague/csv/issues/394#394](https://github.com/thephpleague/csv/issues/394](https://github.com/thephpleague/csv/issues/394) |
| 174 |
|
| 175 |
### Removed |
| 176 |
|
| 177 |
- None |
| 178 |
|
| 179 |
## [9.6.0] - 2020-03-17 |
| 180 |
|
| 181 |
### Added |
| 182 |
|
| 183 |
- More return types and type parameters as supported in PHP7.2+ |
| 184 |
- `League\Csv\Statement::create` named constructor to ease constraint builder instantiation |
| 185 |
- `League\Csv\Statement` can now also process `League\Csv\ResultSet` instances. |
| 186 |
- `League\Csv\TabularDataReader` interface to represent how to read tabular data |
| 187 |
- `League\Csv\ResultSet::getRecords` has an optional `$header` second argument to make the method works like `League\Csv\Reader::getRecords` |
| 188 |
- `League\Csv\ResultSet::createFromTabularDataReader` create a new instance from `League\Csv\TabularDataReader` implementing class. |
| 189 |
|
| 190 |
### Deprecated |
| 191 |
|
| 192 |
- Nothing |
| 193 |
|
| 194 |
### Fixed |
| 195 |
|
| 196 |
- `League\Csv\Reader` no longer uses `__call` to implement `fetchOne`, `fetchPairs` and `fetchColumn` methods. |
| 197 |
|
| 198 |
### Removed |
| 199 |
|
| 200 |
- Internal polyfill for `is_iterable` |
| 201 |
- Internal polyfill for `is_nullable_int` |
| 202 |
- Support for PHP7.0 and PHP7.1 |
| 203 |
|
| 204 |
## [9.5.0] - 2019-12-15 |
| 205 |
|
| 206 |
### Added |
| 207 |
|
| 208 |
- Improve package exception throwing by adding new exceptions classes that extends |
| 209 |
the `League\Csv\Exception` exception marker class [](https://github.com/thephpleague/csv/issues/360#360](https://github.com/thephpleague/csv/issues/360](https://github.com/thephpleague/csv/issues/360), [](https://github.com/thephpleague/csv/issues/360#361](https://github.com/thephpleague/csv/issues/360](https://github.com/thephpleague/csv/issues/360) |
| 210 |
feature proposed and developed by [](https://github.com/dmlogicDarren Miller](https://github.com/dmlogic](https://github.com/dmlogic) |
| 211 |
- `League\Csv\UnavailableFeature` |
| 212 |
- `League\Csv\InvalidArgument` |
| 213 |
- `League\Csv\SyntaxError` |
| 214 |
|
| 215 |
### Deprecated |
| 216 |
|
| 217 |
- Nothing |
| 218 |
|
| 219 |
### Fixed |
| 220 |
|
| 221 |
- bug fix `bom_match` function see issue [](https://github.com/thephpleague/csv/issues/363#363](https://github.com/thephpleague/csv/issues/363](https://github.com/thephpleague/csv/issues/363) resolved based on PR from [](https://github.com/jmwebservicesJerry Martinez](https://github.com/jmwebservices](https://github.com/jmwebservices) |
| 222 |
- bug fix `delemiter_detect` function see issue [](https://github.com/thephpleague/csv/issues/366#366](https://github.com/thephpleague/csv/issues/366](https://github.com/thephpleague/csv/issues/366) |
| 223 |
|
| 224 |
### Removed |
| 225 |
|
| 226 |
- Nothing |
| 227 |
|
| 228 |
## [9.4.1] - 2019-10-17 |
| 229 |
|
| 230 |
### Added |
| 231 |
|
| 232 |
- Nothing |
| 233 |
|
| 234 |
### Deprecated |
| 235 |
|
| 236 |
- Nothing |
| 237 |
|
| 238 |
### Fixed |
| 239 |
|
| 240 |
- bug fix the escape mechanism polyfill [](https://github.com/thephpleague/csv/pull/358#358](https://github.com/thephpleague/csv/pull/358](https://github.com/thephpleague/csv/pull/358) fix provided by [](https://github.com/on2on2](https://github.com/on2](https://github.com/on2) |
| 241 |
|
| 242 |
### Removed |
| 243 |
|
| 244 |
- Nothing |
| 245 |
|
| 246 |
## [9.4.0] - 2019-10-02 |
| 247 |
|
| 248 |
### Added |
| 249 |
|
| 250 |
- Adding support for controlling empty record presence in `Reader::getRecords` return value. |
| 251 |
- `Reader::includeEmptyRecords` |
| 252 |
- `Reader::skipEmptyRecords` |
| 253 |
- `Reader::isEmptyRecordsIncluded` |
| 254 |
|
| 255 |
- Adding support for controlling Input BOM usage in the library: |
| 256 |
- `AbstractCsv::skipInputBOM` |
| 257 |
- `AbstractCsv::includeInputBOM` |
| 258 |
- `AbstractCsv::isInputBOMIncluded` |
| 259 |
|
| 260 |
### Deprecated |
| 261 |
|
| 262 |
- Nothing |
| 263 |
|
| 264 |
### Fixed |
| 265 |
|
| 266 |
- `EmptyEscapeParser::parse` no longer auto skip empty records |
| 267 |
|
| 268 |
### Removed |
| 269 |
|
| 270 |
- Nothing |
| 271 |
|
| 272 |
## [9.3.0] - 2019-07-30 |
| 273 |
|
| 274 |
### Added |
| 275 |
|
| 276 |
- `XMLConverter::import` see [](https://github.com/thephpleague/csv/pull/348#348](https://github.com/thephpleague/csv/pull/348](https://github.com/thephpleague/csv/pull/348) thanks [](https://github.com/kusabi@kusabi](https://github.com/kusabi](https://github.com/kusabi) |
| 277 |
- Support for `thead`, `tfoot` and `tbody` in `HTMLConverter::convert` via the addition of |
| 278 |
protected methods `HTMLConverter::addHTMLAttributes` and `HTMLConverter::appendHeaderSection` [](https://github.com/thephpleague/csv/pull/348#348](https://github.com/thephpleague/csv/pull/348](https://github.com/thephpleague/csv/pull/348) thanks [](https://github.com/kusabi@kusabi](https://github.com/kusabi](https://github.com/kusabi) |
| 279 |
|
| 280 |
### Deprecated |
| 281 |
|
| 282 |
- Nothing |
| 283 |
|
| 284 |
### Fixed |
| 285 |
|
| 286 |
- Internal improvement in `Reader` dockblock thanks [](https://github.com/ghobaty@ghobaty](https://github.com/ghobaty](https://github.com/ghobaty). |
| 287 |
- Improve strict comparison when using `preg_match`. |
| 288 |
- Improve CSV control in `Stream`. |
| 289 |
|
| 290 |
### Removed |
| 291 |
|
| 292 |
- Nothing |
| 293 |
|
| 294 |
## [9.2.1] - 2019-06-08 |
| 295 |
|
| 296 |
### Added |
| 297 |
|
| 298 |
- Nothing |
| 299 |
|
| 300 |
### Deprecated |
| 301 |
|
| 302 |
- Nothing |
| 303 |
|
| 304 |
### Fixed |
| 305 |
|
| 306 |
- `AbstractCSV::chunk` see [](https://github.com/thephpleague/csv/pull/325#325](https://github.com/thephpleague/csv/pull/325](https://github.com/thephpleague/csv/pull/325) remove CSV flags from the Stream class to avoid infinite loop. |
| 307 |
- Internal improve `HTMLConverter`. |
| 308 |
|
| 309 |
### Removed |
| 310 |
|
| 311 |
- Nothing |
| 312 |
|
| 313 |
## [9.2.0] - 2019-03-08 |
| 314 |
|
| 315 |
### Added |
| 316 |
|
| 317 |
- Supports for PHP7.4 empty string for the escape character |
| 318 |
- Supports for empty string for the escape character with a polyfill for PHP7.4- versions. |
| 319 |
- `AbstractCSV::getPathname` see [](https://github.com/thephpleague/csv/pull/321#321](https://github.com/thephpleague/csv/pull/321](https://github.com/thephpleague/csv/pull/321) thanks [](https://github.com/tomkyle@tomkyle](https://github.com/tomkyle](https://github.com/tomkyle) |
| 320 |
|
| 321 |
### Deprecated |
| 322 |
|
| 323 |
- `League\Csv\RFC4180Field` use `AbstractCSV::setEscape` method with an empty string instead. |
| 324 |
|
| 325 |
### Fixed |
| 326 |
|
| 327 |
- `AbstractCSV::__construct` correctly initializes properties |
| 328 |
- `AbstractCSV::createFromString` named constructor default argument is now the empty string |
| 329 |
- `AbstractCSV::setEscape` now accepts the empty string like `fputcsv` and `fgetcsv` |
| 330 |
- `Writer::insertOne` fixes throwing exception when record can not be inserted |
| 331 |
- `XMLConverter` convert to string the record value to avoid PHP warning on `null` value |
| 332 |
- Internal `Stream::createFromString` named constructor default argument is now the empty string |
| 333 |
- Internal `Stream::fwrite` improved |
| 334 |
- Internal `Stream::__destruct` no longer emit warning on invalid stream filter removal. |
| 335 |
- Internal `Stream::seek` returns `0` if the seeked position `0` is valid see [](https://github.com/thephpleague/csv/pull/332#321](https://github.com/thephpleague/csv/pull/332](https://github.com/thephpleague/csv/pull/332) thanks [](https://github.com/HaozhouChen@HaozhouChen](https://github.com/HaozhouChen](https://github.com/HaozhouChen) |
| 336 |
|
| 337 |
- `Reader:getHeader` when the record is an empty line. |
| 338 |
|
| 339 |
### Removed |
| 340 |
|
| 341 |
- Nothing |
| 342 |
|
| 343 |
## [9.1.4] - 2018-05-01 |
| 344 |
|
| 345 |
### Added |
| 346 |
|
| 347 |
- Nothing |
| 348 |
|
| 349 |
### Deprecated |
| 350 |
|
| 351 |
- Nothing |
| 352 |
|
| 353 |
### Fixed |
| 354 |
|
| 355 |
- `Writer::setFlushThreshold` should accept 1 as an argument [](https://github.com/thephpleague/csv/issue/289#289](https://github.com/thephpleague/csv/issue/289](https://github.com/thephpleague/csv/issue/289) |
| 356 |
- `CharsetConverter::convert` should not try to convert numeric value [](https://github.com/thephpleague/csv/issue/287#287](https://github.com/thephpleague/csv/issue/287](https://github.com/thephpleague/csv/issue/287) |
| 357 |
|
| 358 |
### Removed |
| 359 |
|
| 360 |
- Nothing |
| 361 |
|
| 362 |
## [9.1.3] - 2018-03-12 |
| 363 |
|
| 364 |
### Added |
| 365 |
|
| 366 |
- Nothing |
| 367 |
|
| 368 |
### Deprecated |
| 369 |
|
| 370 |
- Nothing |
| 371 |
|
| 372 |
### Fixed |
| 373 |
|
| 374 |
- `Writer::insertOne` allow empty array to be added to the CSV (allow inserting empty row) |
| 375 |
- Removed all return type from named constructor see [](https://github.com/thephpleague/csv/pull/285#285](https://github.com/thephpleague/csv/pull/285](https://github.com/thephpleague/csv/pull/285) |
| 376 |
- Added PHPStan for static code analysis |
| 377 |
|
| 378 |
### Removed |
| 379 |
|
| 380 |
- Nothing |
| 381 |
|
| 382 |
## [9.1.2] - 2018-02-05 |
| 383 |
|
| 384 |
### Added |
| 385 |
|
| 386 |
- Nothing |
| 387 |
|
| 388 |
### Deprecated |
| 389 |
|
| 390 |
- Nothing |
| 391 |
|
| 392 |
### Fixed |
| 393 |
|
| 394 |
- `is_iterable` polyfill for PHP7.0 |
| 395 |
- `Reader::getHeader` no longer throws exception because of a bug in PHP7.2+ [](https://github.com/thephpleague/csv/issues/279issue #279](https://github.com/thephpleague/csv/issues/279](https://github.com/thephpleague/csv/issues/279) |
| 396 |
|
| 397 |
### Removed |
| 398 |
|
| 399 |
- Nothing |
| 400 |
|
| 401 |
## [9.1.1] - 2017-11-28 |
| 402 |
|
| 403 |
### Added |
| 404 |
|
| 405 |
- Nothing |
| 406 |
|
| 407 |
### Deprecated |
| 408 |
|
| 409 |
- Nothing |
| 410 |
|
| 411 |
### Fixed |
| 412 |
|
| 413 |
- issue with `error_get_last` usage when using a modified PHP error handler see [](https://github.com/thephpleague/csv/issues/254#254](https://github.com/thephpleague/csv/issues/254](https://github.com/thephpleague/csv/issues/254) - fixed by [](https://github.com/csiszarattila@csiszarattila](https://github.com/csiszarattila](https://github.com/csiszarattila) |
| 414 |
|
| 415 |
- Removed seekable word from Stream exception messages. |
| 416 |
|
| 417 |
### Removed |
| 418 |
|
| 419 |
- Nothing |
| 420 |
|
| 421 |
## [9.1.0] - 2017-10-20 |
| 422 |
|
| 423 |
### Added |
| 424 |
|
| 425 |
- Support for non seekable stream. When seekable feature are required an exceptions will be thrown. |
| 426 |
- `League\Csv\EncloseField` to force enclosure insertion on every field. [](https://github.com/thephpleague/csv/pull/269#269](https://github.com/thephpleague/csv/pull/269](https://github.com/thephpleague/csv/pull/269) |
| 427 |
- `League\Csv\EscapeFormula` a League CSV formatter to prevent CSV Formula Injection in Spreadsheet programs. |
| 428 |
- `League\Csv\RFC4180Field::addTo` accept an option `$replace_whitespace` argument to improve RFC4180 compliance. |
| 429 |
- `League\Csv\Abstract::getContent` to replace `League\Csv\Abstract::__toString`. The `__toString` method may trigger a Fatal Error with non seekable stream, instead you are recommended to used the new `getContent` method which will trigger an exception instead. |
| 430 |
|
| 431 |
### Deprecated |
| 432 |
|
| 433 |
- `League\Csv\Abstract::__toString` use `League\Csv\Abstract::getContent` instead. the `__toString` triggers a Fatal Error when used on a non-seekable CSV document. use the `getContent` method instead which will trigger an exception instead. |
| 434 |
|
| 435 |
### Fixed |
| 436 |
|
| 437 |
- Bug fixes headers from AbstractCsv::output according to RFC6266 [](https://github.com/thephpleague/csv/issues/250#250](https://github.com/thephpleague/csv/issues/250](https://github.com/thephpleague/csv/issues/250) |
| 438 |
- Make sure the internal source still exists before closing it [](https://github.com/thephpleague/csv/issues/251#251](https://github.com/thephpleague/csv/issues/251](https://github.com/thephpleague/csv/issues/251) |
| 439 |
- Make sure the `Reader::createFromPath` default open mode is `r` see [](https://github.com/thephpleague/csv/pull/258#258](https://github.com/thephpleague/csv/pull/258](https://github.com/thephpleague/csv/pull/258) and [](https://github.com/thephpleague/csv/pull/266#266](https://github.com/thephpleague/csv/pull/266](https://github.com/thephpleague/csv/pull/266) |
| 440 |
|
| 441 |
### Removed |
| 442 |
|
| 443 |
- Nothing |
| 444 |
|
| 445 |
## [9.0.1] - 2017-08-21 |
| 446 |
|
| 447 |
### Added |
| 448 |
|
| 449 |
- Nothing |
| 450 |
|
| 451 |
### Deprecated |
| 452 |
|
| 453 |
- Nothing |
| 454 |
|
| 455 |
### Fixed |
| 456 |
|
| 457 |
- CSV controls not applied when calling Writer::insertOne |
| 458 |
|
| 459 |
### Removed |
| 460 |
|
| 461 |
- Nothing |
| 462 |
|
| 463 |
## [9.0.0] - 2017-08-18 |
| 464 |
|
| 465 |
### Added |
| 466 |
|
| 467 |
- Improved CSV Records selection |
| 468 |
- `League\Csv\Reader::getRecords` to access all CSV records |
| 469 |
- `League\Csv\Statement` provides a constraint builder to select CSV records. |
| 470 |
- `League\Csv\ResultSet` represents the result set of the selected CSV records. |
| 471 |
- `League\Csv\delimiter_detect` function to detect CSV delimiter character |
| 472 |
- Improved CSV document header selection. |
| 473 |
- `League\Csv\Reader::getHeader` |
| 474 |
- `League\Csv\Reader::getHeaderOffset` |
| 475 |
- `League\Csv\Reader::setHeaderOffset` |
| 476 |
- Improved CSV Records conversion |
| 477 |
- `League\Csv\CharsetConverter` converts CSV records charset. |
| 478 |
- `League\Csv\XMLConverter` converts CSV records into DOMDocument |
| 479 |
- `League\Csv\HTMLConverter` converts CSV records into HTML table. |
| 480 |
- Improved Exception handling |
| 481 |
- `League\Csv\Exception` the default exception |
| 482 |
- `League\Csv\CannotInsertRecord` |
| 483 |
- Improved CSV document output |
| 484 |
- `League\Csv\AbstractCsv::chunk` method to output the CSV document in chunk |
| 485 |
- `League\Csv\bom_match` function to detect BOM sequence in a given string |
| 486 |
- `League\Csv\ByteSequence` interface to decoupled BOM sequence from CSV documents |
| 487 |
- Improved CSV records column count consistency on insertion |
| 488 |
- `League\Csv\ColumnConsistency` |
| 489 |
- Improved CSV document flush mechanism on insertion |
| 490 |
- `League\Csv\Writer::setFlushThreshold` |
| 491 |
- `League\Csv\Writer::getFlushThreshold` |
| 492 |
- Improve RFC4180 compliance |
| 493 |
- `League\Csv\RFC4180Field` to format field according to RFC4180 rules |
| 494 |
|
| 495 |
### Deprecated |
| 496 |
|
| 497 |
- Nothing |
| 498 |
|
| 499 |
### Fixed |
| 500 |
|
| 501 |
- Improved CSV record insertion |
| 502 |
- `League\Csv\Writer::insertOne` only accepts an array and returns a integer |
| 503 |
- `League\Csv\Writer::insertAll` only accepts an iterable of array and returns an integer |
| 504 |
|
| 505 |
- Normalized CSV offset returned value |
| 506 |
- `League\Csv\Reader::fetchColumn` always returns the CSV document original offset. |
| 507 |
|
| 508 |
### Removed |
| 509 |
|
| 510 |
- `examples` directory |
| 511 |
- `PHP5` support |
| 512 |
- The following method is removed because The BOM API is simplified: |
| 513 |
- `League\Csv\AbstractCsv::stripBOM` |
| 514 |
- All conversion methods are removed in favor of the conversion classes: |
| 515 |
- `League\Csv\Writer::jsonSerialize` |
| 516 |
- `League\Csv\AbstractCsv::toHTML` |
| 517 |
- `League\Csv\AbstractCsv::toXML` |
| 518 |
- `League\Csv\AbstractCsv::setInputEncoding` |
| 519 |
- `League\Csv\AbstractCsv::getInputEncoding` |
| 520 |
- The following methods are removed because the PHP stream filter API is simplified: |
| 521 |
- `League\Csv\AbstractCsv::isActiveStreamFilter` |
| 522 |
- `League\Csv\AbstractCsv::setStreamFilterMode` |
| 523 |
- `League\Csv\AbstractCsv::appendStreamFilter` |
| 524 |
- `League\Csv\AbstractCsv::prependStreamFilter` |
| 525 |
- `League\Csv\AbstractCsv::removeStreamFilter` |
| 526 |
- `League\Csv\AbstractCsv::clearStreamFilters` |
| 527 |
- The following methods are removed because switching between connections is no longer possible: |
| 528 |
- `League\Csv\AbstractCsv::newReader` |
| 529 |
- `League\Csv\AbstractCsv::newWriter` |
| 530 |
- `League\Csv\Reader::getNewline` |
| 531 |
- `League\Csv\Reader::setNewline` |
| 532 |
- The Exception mechanism is improved thus the following class is removed: |
| 533 |
- `League\Csv\Exception\InvalidRowException`; |
| 534 |
- The CSV records filtering methods are removed in favor of the `League\Csv\Statement` class: |
| 535 |
- `League\Csv\AbstractCsv::addFilter`, |
| 536 |
- `League\Csv\AbstractCsv::addSortBy`, |
| 537 |
- `League\Csv\AbstractCsv::setOffset`, |
| 538 |
- `League\Csv\AbstractCsv::setLimit`; |
| 539 |
- CSV records selecting API methods is simplified: |
| 540 |
- `League\Csv\Reader::each` |
| 541 |
- `League\Csv\Reader::fetch` |
| 542 |
- `League\Csv\Reader::fetchAll` |
| 543 |
- `League\Csv\Reader::fetchAssoc` |
| 544 |
- `League\Csv\Reader::fetchPairsWithoutDuplicates` |
| 545 |
- Formatting and validating CSV records on insertion is simplified, the following methods are removed: |
| 546 |
- `League\Csv\Writer::hasFormatter` |
| 547 |
- `League\Csv\Writer::removeFormatter` |
| 548 |
- `League\Csv\Writer::clearFormatters` |
| 549 |
- `League\Csv\Writer::hasValidator` |
| 550 |
- `League\Csv\Writer::removeValidator` |
| 551 |
- `League\Csv\Writer::clearValidators` |
| 552 |
- `League\Csv\Writer::getIterator` |
| 553 |
- The following Formatters and Validators classes are removed from the package: |
| 554 |
- `League\Csv\Plugin\SkipNullValuesFormatter` |
| 555 |
- `League\Csv\Plugin\ForbiddenNullValuesValidator` |
| 556 |
- `League\Csv\Plugin\ColumnConsistencyValidator` *replace by `League\Csv\ColumnConsistency`* |
| 557 |
- `League\Csv\Writer` no longers implements the `IteratorAggregate` interface |
| 558 |
- `League\Csv\AbstractCsv::fetchDelimitersOccurrence` is removed *replace by `League\Csv\delimiter_detect` function* |
| 559 |
|
| 560 |
## 8.2.2 - 2017-07-12 |
| 561 |
|
| 562 |
### Added |
| 563 |
|
| 564 |
- None |
| 565 |
|
| 566 |
### Deprecated |
| 567 |
|
| 568 |
- None |
| 569 |
|
| 570 |
### Fixed |
| 571 |
|
| 572 |
- `Writer::insertOne` was silently failing when inserting record in a CSV document in non-writing mode. |
| 573 |
- bug fix docblock |
| 574 |
|
| 575 |
### Removed |
| 576 |
|
| 577 |
- None |
| 578 |
|
| 579 |
## 8.2.1 - 2017-02-22 |
| 580 |
|
| 581 |
### Added |
| 582 |
|
| 583 |
- Nothing |
| 584 |
|
| 585 |
### Deprecated |
| 586 |
|
| 587 |
- Nothing |
| 588 |
|
| 589 |
### Fixed |
| 590 |
|
| 591 |
- internal `Reader::getRow` when using a `StreamIterator` [](https://github.com/thephpleague/csv/issues/213issue #213](https://github.com/thephpleague/csv/issues/213](https://github.com/thephpleague/csv/issues/213) |
| 592 |
- Removed `@deprecated` from selected methods [](https://github.com/thephpleague/csv/issues/213issue #208](https://github.com/thephpleague/csv/issues/213](https://github.com/thephpleague/csv/issues/213) |
| 593 |
|
| 594 |
### Removed |
| 595 |
|
| 596 |
- Nothing |
| 597 |
|
| 598 |
## 8.2.0 - 2017-01-25 |
| 599 |
|
| 600 |
### Added |
| 601 |
|
| 602 |
- `AbstractCsv::createFromStream` to enable working with resource stream [](https://github.com/thephpleague/csv/issues/202issue #202](https://github.com/thephpleague/csv/issues/202](https://github.com/thephpleague/csv/issues/202) |
| 603 |
|
| 604 |
### Deprecated |
| 605 |
|
| 606 |
- `League\Csv\AbstractCsv::stripBom` |
| 607 |
- `League\Csv\Reader::getOffset` |
| 608 |
- `League\Csv\Reader::getLimit` |
| 609 |
- `League\Csv\Reader::getSortBy` |
| 610 |
- `League\Csv\Reader::getFilter` |
| 611 |
- `League\Csv\Reader::setOffset` |
| 612 |
- `League\Csv\Reader::setLimit` |
| 613 |
- `League\Csv\Reader::addSortBy` |
| 614 |
- `League\Csv\Reader::addFilter` |
| 615 |
- `League\Csv\Reader::fetch` |
| 616 |
- `League\Csv\Reader::each` |
| 617 |
- `League\Csv\Reader::fetchPairsWithoutDuplicates` |
| 618 |
- `League\Csv\Reader::fetchAssoc` |
| 619 |
- `League\Csv\Writer::removeFormatter` |
| 620 |
- `League\Csv\Writer::hasFormatter` |
| 621 |
- `League\Csv\Writer::clearFormatters` |
| 622 |
- `League\Csv\Writer::removeValidator` |
| 623 |
- `League\Csv\Writer::hasValidator` |
| 624 |
- `League\Csv\Writer::clearValidators` |
| 625 |
- `League\Csv\Writer::jsonSerialize` |
| 626 |
- `League\Csv\Writer::toHTML` |
| 627 |
- `League\Csv\Writer::toXML` |
| 628 |
|
| 629 |
### Fixed |
| 630 |
|
| 631 |
- Nothing |
| 632 |
|
| 633 |
### Removed |
| 634 |
|
| 635 |
- Nothing |
| 636 |
|
| 637 |
## 8.1.2 - 2016-10-27 |
| 638 |
|
| 639 |
### Added |
| 640 |
|
| 641 |
- Nothing |
| 642 |
|
| 643 |
### Deprecated |
| 644 |
|
| 645 |
- Nothing |
| 646 |
|
| 647 |
### Fixed |
| 648 |
|
| 649 |
- BOM filtering fix [](https://github.com/thephpleague/csv/issues/184issue #184](https://github.com/thephpleague/csv/issues/184](https://github.com/thephpleague/csv/issues/184) |
| 650 |
- `AbstractCsv::BOM_UTF32_LE` value fixed |
| 651 |
|
| 652 |
### Removed |
| 653 |
|
| 654 |
- Nothing |
| 655 |
|
| 656 |
## 8.1.1 - 2016-09-05 |
| 657 |
|
| 658 |
### Added |
| 659 |
|
| 660 |
- Nothing |
| 661 |
|
| 662 |
### Deprecated |
| 663 |
|
| 664 |
- Nothing |
| 665 |
|
| 666 |
### Fixed |
| 667 |
|
| 668 |
- `getInputBOM` method name is now consistent everywhere in the API [](https://github.com/thephpleague/csv/pull/171PR #171](https://github.com/thephpleague/csv/pull/171](https://github.com/thephpleague/csv/pull/171) |
| 669 |
- preserve fileObject CSV controls [](https://github.com/thephpleague/csv/commit/8a20c56144effa552a8cba5d8c626063222975b7commit #8a20c56](https://github.com/thephpleague/csv/commit/8a20c56144effa552a8cba5d8c626063222975b7](https://github.com/thephpleague/csv/commit/8a20c56144effa552a8cba5d8c626063222975b7) |
| 670 |
- Change `output` method header content-type value to `text/csv` [](https://github.com/thephpleague/csv/pull/175PR #175](https://github.com/thephpleague/csv/pull/175](https://github.com/thephpleague/csv/pull/175) |
| 671 |
|
| 672 |
### Removed |
| 673 |
|
| 674 |
- Nothing |
| 675 |
|
| 676 |
## 8.1.0 - 2016-05-31 |
| 677 |
|
| 678 |
### Added |
| 679 |
|
| 680 |
- The package now includes its own autoloader. |
| 681 |
- `Ouput::getInputEncoding` |
| 682 |
- `Ouput::setInputEncoding` |
| 683 |
|
| 684 |
### Deprecated |
| 685 |
|
| 686 |
- `Ouput::getEncodingFrom` replaced by `Ouput::getInputEncoding` |
| 687 |
- `Ouput::setEncodingFrom` replaced by `Ouput::setInputEncoding` |
| 688 |
|
| 689 |
### Fixed |
| 690 |
|
| 691 |
- Stream Filters are now url encoded before usage [](https://github.com/thephpleague/csv/issues/72issue #72](https://github.com/thephpleague/csv/issues/72](https://github.com/thephpleague/csv/issues/72) |
| 692 |
- All internal parameters are now using the snake case format |
| 693 |
|
| 694 |
### Removed |
| 695 |
|
| 696 |
- Nothing |
| 697 |
|
| 698 |
## 8.0.0 - 2015-12-11 |
| 699 |
|
| 700 |
### Added |
| 701 |
|
| 702 |
- `Reader::fetchPairs` |
| 703 |
- `Reader::fetchPairsWithoutDuplicates` |
| 704 |
|
| 705 |
### Deprecated |
| 706 |
|
| 707 |
- Nothing |
| 708 |
|
| 709 |
### Fixed |
| 710 |
|
| 711 |
- `Reader::fetchColumn` and `Reader::fetchAssoc` now return `Iterator` |
| 712 |
- `Reader::fetchAssoc` callable argument expects an indexed row using the submitted keys as its first argument |
| 713 |
- `Reader::fetchColumn` callable argument expects the selected column value as its first argument |
| 714 |
- Default value on `setOutputBOM` is removed |
| 715 |
- `AbstractCsv::getOutputBOM` always return a string |
| 716 |
- `AbstractCsv::getInputBOM` always return a string |
| 717 |
|
| 718 |
### Removed |
| 719 |
|
| 720 |
- `Controls::setFlags` |
| 721 |
- `Controls::getFlags` |
| 722 |
- `Controls::detectDelimiterList` |
| 723 |
- `QueryFilter::removeFilter` |
| 724 |
- `QueryFilter::removeSortBy` |
| 725 |
- `QueryFilter::hasFilter` |
| 726 |
- `QueryFilter::hasSortBy` |
| 727 |
- `QueryFilter::clearFilter` |
| 728 |
- `QueryFilter::clearSortBy` |
| 729 |
- `Reader::query` |
| 730 |
- The `$newline` argument from `AbstractCsv::createFromString` |
| 731 |
|
| 732 |
## 7.2.0 - 2015-11-02 |
| 733 |
|
| 734 |
### Added |
| 735 |
|
| 736 |
- `Reader::fetch` replaces `League\Csv\Reader::query` for naming consistency |
| 737 |
- `Controls::fetchDelimitersOccurrence` to replace `Controls::detectDelimiterList` the latter gives erronous results |
| 738 |
|
| 739 |
### Deprecated |
| 740 |
|
| 741 |
- `Controls::detectDelimiterList` |
| 742 |
- `Reader::query` |
| 743 |
- The `$newline` argument from `AbstractCsv::createFromString` |
| 744 |
|
| 745 |
### Fixed |
| 746 |
|
| 747 |
- Streamming feature no longer trim filter name argument [](https://github.com/thephpleague/csv/issues/122issue #122](https://github.com/thephpleague/csv/issues/122](https://github.com/thephpleague/csv/issues/122) |
| 748 |
- Fix default `SplFileObject` flags usage [](https://github.com/thephpleague/csv/pull/130PR #130](https://github.com/thephpleague/csv/pull/130](https://github.com/thephpleague/csv/pull/130) |
| 749 |
- `AbstractCsv::createFromString` no longer trim the submitted string [](https://github.com/thephpleague/csv/issues/132issue #132](https://github.com/thephpleague/csv/issues/132](https://github.com/thephpleague/csv/issues/132) |
| 750 |
|
| 751 |
### Removed |
| 752 |
|
| 753 |
- Nothing |
| 754 |
|
| 755 |
## 7.1.2 - 2015-06-10 |
| 756 |
|
| 757 |
### Added |
| 758 |
|
| 759 |
- Nothing |
| 760 |
|
| 761 |
### Deprecated |
| 762 |
|
| 763 |
- Nothing |
| 764 |
|
| 765 |
### Fixed |
| 766 |
|
| 767 |
- Enclosures should be removed when a BOM sequence is stripped [](http://github.com/thephpleague/csv/issues/99issue #102](http://github.com/thephpleague/csv/issues/99](http://github.com/thephpleague/csv/issues/99) |
| 768 |
|
| 769 |
### Removed |
| 770 |
|
| 771 |
- Nothing |
| 772 |
|
| 773 |
## 7.1.1 - 2015-05-20 |
| 774 |
|
| 775 |
### Added |
| 776 |
|
| 777 |
- Nothing |
| 778 |
|
| 779 |
### Deprecated |
| 780 |
|
| 781 |
- Nothing |
| 782 |
|
| 783 |
### Fixed |
| 784 |
|
| 785 |
- `SplFileObject` flags were not always applied using query filter [](http://github.com/thephpleague/csv/issues/99issue #99](http://github.com/thephpleague/csv/issues/99](http://github.com/thephpleague/csv/issues/99) |
| 786 |
|
| 787 |
### Removed |
| 788 |
|
| 789 |
- Nothing |
| 790 |
|
| 791 |
## 7.1.0 - 2015-05-06 |
| 792 |
|
| 793 |
### Added |
| 794 |
|
| 795 |
- `stripBOM` query filtering method to ease removing the BOM sequence when querying the CSV document. |
| 796 |
- All query filters are now accessible in the `Writer` class for conversion methods. |
| 797 |
|
| 798 |
### Deprecated |
| 799 |
|
| 800 |
- Nothing |
| 801 |
|
| 802 |
### Fixed |
| 803 |
|
| 804 |
- Internal code has been updated to take into account [](http://bugs.php.net/68479issue #68479](http://bugs.php.net/68479](http://bugs.php.net/68479) |
| 805 |
- `setFlags` on conversion methods SplFileObject default flags are `SplFileObject::READ_AHEAD|SplFileObject::SKIP_EMPTY` |
| 806 |
- `insertOne` now takes into account the escape character when modified after the first insert. |
| 807 |
|
| 808 |
### Removed |
| 809 |
|
| 810 |
- Nothing |
| 811 |
|
| 812 |
## 7.0.1 - 2015-03-23 |
| 813 |
|
| 814 |
### Added |
| 815 |
|
| 816 |
- Nothing |
| 817 |
|
| 818 |
### Deprecated |
| 819 |
|
| 820 |
- Nothing |
| 821 |
|
| 822 |
### Fixed |
| 823 |
|
| 824 |
- `setFlags`: `SplFileObject::DROP_NEW_LINE` can be remove using `setFlags` method. |
| 825 |
|
| 826 |
### Removed |
| 827 |
|
| 828 |
- Nothing |
| 829 |
|
| 830 |
## 7.0.0 - 2015-02-19 |
| 831 |
|
| 832 |
### Added |
| 833 |
|
| 834 |
- A new flexible mechanism to format and validate a row before its insertion by adding |
| 835 |
- `Writer::addFormatter` to add a formatter to the `Writer` object |
| 836 |
- `Writer::removeFormatter` to remove an already registered formatter |
| 837 |
- `Writer::hasFormatter` to detect the presence of a formatter |
| 838 |
- `Writer::clearFormatters` to clear all registered formatter |
| 839 |
- `Writer::addValidator` to add a validator to the `Writer` object |
| 840 |
- `Writer::removeValidator` to remove an already registered validator |
| 841 |
- `Writer::hasValidator` to detect the presence of a validator |
| 842 |
- `Writer::clearValidators` to clear all registered validator |
| 843 |
- `League\Csv\Exception\InvalidRowException` exception thrown when row validation failed |
| 844 |
- Classes to maintain removed features from the `Writer` class |
| 845 |
- `League\Csv\Plugin\ColumnConsistencyValidator` to validate column consistency on insertion |
| 846 |
- `League\Csv\Plugin\ForbiddenNullValuesValidator` to validate `null` value on insertion |
| 847 |
- `League\Csv\Plugin\SkipNullValuesFormatter` to format `null` value on insertion |
| 848 |
|
| 849 |
### Deprecated |
| 850 |
|
| 851 |
- Nothing |
| 852 |
|
| 853 |
### Fixed |
| 854 |
|
| 855 |
- `jsonSerialize`, `toXML` and `toHTML` output can be modified using `Reader` query options methods. |
| 856 |
- `AbstractCSV::detectDelimiterList` index keys now represents the occurrence of the found delimiter. |
| 857 |
- `getNewline` and `setNewline` are accessible on the `Reader` class too. |
| 858 |
- the named constructor `createFromString` now accepts the `$newline` sequence as a second argument to specify the last added new line character to better work with interoperability. |
| 859 |
- Default value on CSV controls setter methods `setDelimiter`, `setEnclosure` and `setEscape` are removed |
| 860 |
- Default `SplFileObject` flags value is now `SplFileObject::READ_CSV|SplFileObject::DROP_NEW_LINE` |
| 861 |
- All CSV properties are now copied when using `newReader` and `newWriter` methods |
| 862 |
- BOM addition on output improved by removing if found the existing BOM character |
| 863 |
- the `AbstractCSV::output` method now returns the number of bytes send to the output buffer |
| 864 |
- `Reader::fetchColumn` will automatically filter out non existing values from the return array |
| 865 |
|
| 866 |
### Removed |
| 867 |
|
| 868 |
- Setting `ini_set("auto_detect_line_endings", true);` is no longer set in the class constructor. Mac OS X users must explicitly set this ini options in their script. |
| 869 |
- `Writer` and `Reader` default constructor are removed from public API in favor of the named constructors. |
| 870 |
- All `Writer` methods and constant related to CSV data validation and formatting before insertion |
| 871 |
- `Writer::getNullHandlingMode` |
| 872 |
- `Writer::setNullHandlingMode` |
| 873 |
- `Writer::setColumnsCount` |
| 874 |
- `Writer::getColumnsCount` |
| 875 |
- `Writer::autodetectColumnsCount` |
| 876 |
- `Writer::NULL_AS_EXCEPTION` |
| 877 |
- `Writer::NULL_AS_EMPTY` |
| 878 |
- `Writer::NULL_AS_SKIP_CELL` |
| 879 |
|
| 880 |
## 6.3.0 - 2015-01-21 |
| 881 |
|
| 882 |
### Added |
| 883 |
|
| 884 |
- `AbstractCSV::setOutputBOM` |
| 885 |
- `AbstractCSV::getOutputBOM` |
| 886 |
- `AbstractCSV::getInputBOM` |
| 887 |
|
| 888 |
to manage BOM character with CSV. |
| 889 |
|
| 890 |
### Deprecated |
| 891 |
|
| 892 |
- Nothing |
| 893 |
|
| 894 |
### Fixed |
| 895 |
|
| 896 |
- Nothing |
| 897 |
|
| 898 |
### Removed |
| 899 |
|
| 900 |
- Nothing |
| 901 |
|
| 902 |
## 6.2.0 - 2014-12-12 |
| 903 |
|
| 904 |
### Added |
| 905 |
|
| 906 |
- `Writer::setNewline` , `Writer::getNewline` to control the newline sequence character added at the end of each CSV row. |
| 907 |
|
| 908 |
### Deprecated |
| 909 |
|
| 910 |
- Nothing |
| 911 |
|
| 912 |
### Fixed |
| 913 |
|
| 914 |
- Nothing |
| 915 |
|
| 916 |
### Removed |
| 917 |
|
| 918 |
- Nothing |
| 919 |
|
| 920 |
## 6.1.0 - 2014-12-08 |
| 921 |
|
| 922 |
### Added |
| 923 |
|
| 924 |
- `Reader::fetchAssoc` now also accepts an integer as first argument representing a row index. |
| 925 |
|
| 926 |
### Deprecated |
| 927 |
|
| 928 |
- Nothing |
| 929 |
|
| 930 |
### Fixed |
| 931 |
|
| 932 |
- Nothing |
| 933 |
|
| 934 |
### Removed |
| 935 |
|
| 936 |
- Nothing |
| 937 |
|
| 938 |
## 6.0.1 - 2014-11-12 |
| 939 |
|
| 940 |
### Added |
| 941 |
|
| 942 |
- Nothing |
| 943 |
|
| 944 |
### Deprecated |
| 945 |
|
| 946 |
- Nothing |
| 947 |
|
| 948 |
### Fixed |
| 949 |
|
| 950 |
- Bug Fixed `detectDelimiterList` |
| 951 |
|
| 952 |
### Removed |
| 953 |
|
| 954 |
- Nothing |
| 955 |
|
| 956 |
## 6.0.0 - 2014-08-28 |
| 957 |
|
| 958 |
### Added |
| 959 |
|
| 960 |
- Stream Filter API in `League\Csv\AbstractCsv` |
| 961 |
- named constructors `createFromPath` and `createFromFileObject` in `League\Csv\AbstractCsv` to ease CSV object instantiation |
| 962 |
- `detectDelimiterList` in `League\Csv\AbstractCsv` to replace and remove the use of `RuntimeException` in `detectDelimiter` |
| 963 |
- `setEncodingFrom` and `setDecodingFrom` in `League\Csv\AbstractCsv` to replace `setEncoding` and `getEncoding` for naming consistency |
| 964 |
- `newWriter` and `newReader` methods in `League\Csv\AbstractCsv` to replace `Writer::getReader` and `Reader::getWriter` |
| 965 |
|
| 966 |
### Deprecated |
| 967 |
|
| 968 |
- Nothing |
| 969 |
|
| 970 |
### Fixed |
| 971 |
|
| 972 |
- `League\Csv\Reader::each` more strict `$callable` MUST returns `true` |
| 973 |
|
| 974 |
### Remove |
| 975 |
|
| 976 |
- `League\Csv\AbstractCsv::detectDelimiter` |
| 977 |
- `League\Csv\AbstractCsv::setEncoding` and `League\Csv\AbstractCsv::getEncoding` |
| 978 |
- `League\Csv\Reader::setSortBy` |
| 979 |
- `League\Csv\Reader::setFilter` |
| 980 |
- `League\Csv\Reader::getWriter` |
| 981 |
- `League\Csv\Writer::getReader` |
| 982 |
- `League\Csv\Reader::fetchCol` |
| 983 |
|
| 984 |
## 5.4.0 - 2014-04-17 |
| 985 |
|
| 986 |
### Added |
| 987 |
|
| 988 |
- `League\Csv\Writer::setColumnsCount`, `League\Csv\Writer::getColumnsCount`, `League\Csv\Writer::autodetectColumnsCount` to enable column consistency in writer mode |
| 989 |
- `League\Csv\Reader::fetchColumn` replaces `League\Csv\Reader::fetchCol` for naming consistency |
| 990 |
|
| 991 |
### Deprecated |
| 992 |
|
| 993 |
- `League\Csv\Reader::fetchCol` |
| 994 |
|
| 995 |
### Fixed |
| 996 |
|
| 997 |
- Nothing |
| 998 |
|
| 999 |
### Removed |
| 1000 |
|
| 1001 |
- Nothing |
| 1002 |
|
| 1003 |
## 5.3.1 - 2014-04-09 |
| 1004 |
|
| 1005 |
### Added |
| 1006 |
|
| 1007 |
- Nothing |
| 1008 |
|
| 1009 |
### Deprecated |
| 1010 |
|
| 1011 |
- Nothing |
| 1012 |
|
| 1013 |
### Fixed |
| 1014 |
|
| 1015 |
- `$open_mode` default to `r+` in `League\Csv\AbstractCsv` constructors |
| 1016 |
|
| 1017 |
### Removed |
| 1018 |
|
| 1019 |
- Nothing |
| 1020 |
|
| 1021 |
## 5.3.0 - 2014-03-24 |
| 1022 |
|
| 1023 |
### Added |
| 1024 |
|
| 1025 |
- `League\Csv\Writer::setNullHandlingMode` and `League\Csv\Writer::getNullHandlingMode` to handle `null` value |
| 1026 |
|
| 1027 |
### Deprecated |
| 1028 |
|
| 1029 |
- Nothing |
| 1030 |
|
| 1031 |
### Fixed |
| 1032 |
|
| 1033 |
- `setting ini_set("auto_detect_line_endings", true);` no longer needed for Mac OS |
| 1034 |
|
| 1035 |
### Removed |
| 1036 |
|
| 1037 |
- Nothing |
| 1038 |
|
| 1039 |
## 5.2.0 - 2014-03-13 |
| 1040 |
|
| 1041 |
### Added |
| 1042 |
|
| 1043 |
- `League\Csv\Reader::addSortBy`, `League\Csv\Reader::removeSortBy`, `League\Csv\Reader::hasSortBy`, `League\Csv\Reader::clearSortBy` to improve sorting |
| 1044 |
- `League\Csv\Reader::clearFilter` to align extract filter capabilities to sorting capabilities |
| 1045 |
|
| 1046 |
### Deprecated |
| 1047 |
|
| 1048 |
- `League\Csv\Reader::setSortBy` replaced by a better implementation |
| 1049 |
|
| 1050 |
### Fixed |
| 1051 |
|
| 1052 |
- `League\Csv\Reader::setOffset` now default to 0; |
| 1053 |
- `League\Csv\Reader::setLimit` now default to -1; |
| 1054 |
- `detectDelimiter` bug fixes |
| 1055 |
|
| 1056 |
### Removed |
| 1057 |
|
| 1058 |
- Nothing |
| 1059 |
|
| 1060 |
## 5.1.0 - 2014-03-11 |
| 1061 |
|
| 1062 |
### Added |
| 1063 |
|
| 1064 |
- `League\Csv\Reader::each` to ease CSV import data |
| 1065 |
- `League\Csv\Reader::addFilter`, `League\Csv\Reader::removeFilter`, `League\Csv\Reader::hasFilter` to improve extract filter capabilities |
| 1066 |
- `detectDelimiter` method to `League\Csv\AbstractCsv` to sniff CSV delimiter character. |
| 1067 |
|
| 1068 |
### Deprecated |
| 1069 |
|
| 1070 |
- `League\Csv\Reader::setFilter` replaced by a better implementation |
| 1071 |
|
| 1072 |
### Fixed |
| 1073 |
|
| 1074 |
- Nothing |
| 1075 |
|
| 1076 |
### Removed |
| 1077 |
|
| 1078 |
- Nothing |
| 1079 |
|
| 1080 |
## 5.0.0 - 2014-02-28 |
| 1081 |
|
| 1082 |
### Added |
| 1083 |
|
| 1084 |
- Change namespace from `Bakame\Csv` to `League\Csv` |
| 1085 |
|
| 1086 |
### Deprecated |
| 1087 |
|
| 1088 |
- Nothing |
| 1089 |
|
| 1090 |
### Fixed |
| 1091 |
|
| 1092 |
- Nothing |
| 1093 |
|
| 1094 |
### Removed |
| 1095 |
|
| 1096 |
- Nothing |
| 1097 |
|
| 1098 |
## 4.2.1 - 2014-02-22 |
| 1099 |
|
| 1100 |
### Fixed |
| 1101 |
|
| 1102 |
- `$open_mode` validation is done by PHP internals directly |
| 1103 |
|
| 1104 |
### Removed |
| 1105 |
|
| 1106 |
- Nothing |
| 1107 |
|
| 1108 |
## 4.2.0 - 2014-02-17 |
| 1109 |
|
| 1110 |
### Added |
| 1111 |
|
| 1112 |
- `toXML` method to transcode the CSV into a XML in `Bakame\Csv\AbstractCsv` |
| 1113 |
|
| 1114 |
### Fixed |
| 1115 |
|
| 1116 |
- `toHTML` method bug in `Bakame\Csv\AbstractCsv` |
| 1117 |
- `output` method accepts an optional `$filename` argument |
| 1118 |
- `Bakame\Csv\Reader::fetchCol` default to `$columnIndex = 0` |
| 1119 |
- `Bakame\Csv\Reader::fetchOne` default to `$offset = 0` |
| 1120 |
|
| 1121 |
## 4.1.2 - 2014-02-14 |
| 1122 |
|
| 1123 |
### Added |
| 1124 |
|
| 1125 |
- Move from `PSR-0` to `PSR-4` to autoload the library |
| 1126 |
|
| 1127 |
## 4.1.1 - 2014-02-14 |
| 1128 |
|
| 1129 |
### Fixed |
| 1130 |
|
| 1131 |
- `Bakame\Csv\Reader` methods fixed |
| 1132 |
- `jsonSerialize` bug fixed |
| 1133 |
|
| 1134 |
## 4.1.0 - 2014-02-07 |
| 1135 |
|
| 1136 |
### Added |
| 1137 |
|
| 1138 |
- `getEncoding` and `setEncoding` methods to `Bakame\Csv\AbstractCsv` |
| 1139 |
|
| 1140 |
### Fixed |
| 1141 |
|
| 1142 |
- `Bakame\Csv\Writer::insertOne` takes into account CSV controls |
| 1143 |
- `toHTML` method takes into account encoding |
| 1144 |
|
| 1145 |
## 4.0.0 - 2014-02-05 |
| 1146 |
|
| 1147 |
### Added |
| 1148 |
|
| 1149 |
- `Bakame\Csv\Writer` |
| 1150 |
- `Bakame\Csv\Writer` and `Bakame\Csv\Reader` extend `Bakame\Csv\AbstractCsv` |
| 1151 |
|
| 1152 |
### Deprecated |
| 1153 |
|
| 1154 |
- Nothing |
| 1155 |
|
| 1156 |
### Fixed |
| 1157 |
|
| 1158 |
- `Bakame\Csv\Reader::fetchOne` is no longer deprecated |
| 1159 |
- `Bakame\Csv\Reader::fetchCol` no longer accepts a third parameter `$strict` |
| 1160 |
|
| 1161 |
### Removed |
| 1162 |
|
| 1163 |
- `Bakame\Csv\Codec` now the library is composer of 2 main classes |
| 1164 |
- `Bakame\Csv\Reader::getFile` |
| 1165 |
- `Bakame\Csv\Reader::fetchValue` |
| 1166 |
- `Bakame\Csv\Reader` no longer implements the `ArrayAccess` interface |
| 1167 |
|
| 1168 |
## 3.3.0 - 2014-01-28 |
| 1169 |
|
| 1170 |
### Added |
| 1171 |
|
| 1172 |
- `Bakame\Csv\Reader` implements `IteratorAggregate` Interface |
| 1173 |
- `Bakame\Csv\Reader::createFromString` to create a CSV object from a raw string |
| 1174 |
- `Bakame\Csv\Reader::query` accept an optional `$callable` parameter |
| 1175 |
|
| 1176 |
### Deprecated |
| 1177 |
|
| 1178 |
- `Bakame\Csv\Reader::getFile` in favor of `Bakame\Csv\Reader::getIterator` |
| 1179 |
|
| 1180 |
### Removed |
| 1181 |
|
| 1182 |
- `Bakame\Csv\ReaderInterface` useless interface |
| 1183 |
|
| 1184 |
### Fixed |
| 1185 |
|
| 1186 |
- `Bakame\Csv\Reader::fetch*` `$callable` parameter is normalized to accept an array |
| 1187 |
- `Bakame\Csv\Reader::fetchCol` accepts a third parameter `$strict` |
| 1188 |
|
| 1189 |
## 3.2.0 - 2014-01-16 |
| 1190 |
|
| 1191 |
### Added |
| 1192 |
|
| 1193 |
- `Bakame\Csv\Reader` implements the following interfaces `JsonSerializable` and `ArrayAccess` |
| 1194 |
- `Bakame\Csv\Reader::toHTML` to output the CSV as a HTML table |
| 1195 |
- `Bakame\Csv\Reader::setFilter`, `Bakame\Csv\Reader::setSortBy`, `Bakame\Csv\Reader::setOffset`, `Bakame\Csv\Reader::setLimit`, `Bakame\Csv\Reader::query` to perform SQL like queries on the CSV content. |
| 1196 |
- `Bakame\Csv\Codec::setFlags`, `Bakame\Csv\Codec::getFlags`, Bakame\Csv\Codec::__construct : add an optional `$flags` parameter to enable the use of `SplFileObject` constants flags |
| 1197 |
|
| 1198 |
### Deprecated |
| 1199 |
|
| 1200 |
- `Bakame\Csv\Reader::fetchOne` replaced by `Bakame\Csv\Reader::offsetGet` |
| 1201 |
- `Bakame\Csv\Reader::fetchValue` useless method |
| 1202 |
|
| 1203 |
## 3.1.0 - 2014-01-13 |
| 1204 |
|
| 1205 |
### Added |
| 1206 |
|
| 1207 |
- `Bakame\Csv\Reader::output` output the CSV data directly in the output buffer |
| 1208 |
- `Bakame\Csv\Reader::__toString` can be use to echo the raw CSV |
| 1209 |
|
| 1210 |
## 3.0.1 - 2014-01-10 |
| 1211 |
|
| 1212 |
### Fixed |
| 1213 |
|
| 1214 |
- `Bakame\Csv\Reader::fetchAssoc` when users keys and CSV row data don't have the same length |
| 1215 |
|
| 1216 |
## 3.0.0 - 2014-01-10 |
| 1217 |
|
| 1218 |
### Added |
| 1219 |
|
| 1220 |
- `Bakame\Csv\ReaderInterface` |
| 1221 |
- `Bakame\Csv\Reader` class |
| 1222 |
|
| 1223 |
### Fixed |
| 1224 |
|
| 1225 |
- `Bakame\Csv\Codec::loadString`returns a `Bakame\Csv\Reader` object |
| 1226 |
- `Bakame\Csv\Codec::loadFile` returns a `Bakame\Csv\Reader` object |
| 1227 |
- `Bakame\Csv\Codec::save` returns a `Bakame\Csv\Reader` object |
| 1228 |
|
| 1229 |
## 2.0.0 - 2014-01-09 |
| 1230 |
|
| 1231 |
### Added |
| 1232 |
|
| 1233 |
- `Bakame\Csv\CsvCodec` class renamed `Bakame\Csv\Codec` |
| 1234 |
|
| 1235 |
### Deprecated |
| 1236 |
|
| 1237 |
- Nothing |
| 1238 |
|
| 1239 |
### Fixed |
| 1240 |
|
| 1241 |
- Nothing |
| 1242 |
|
| 1243 |
### Removed |
| 1244 |
|
| 1245 |
- `Bakame\Csv\Codec::create` from public API |
| 1246 |
|
| 1247 |
## 1.0.0 - 2013-12-03 |
| 1248 |
|
| 1249 |
Initial Release of `Bakame\Csv` |
| 1250 |
|
| 1251 |
[Next]: https://github.com/thephpleague/csv/compare/9.8.0...master |
| 1252 |
[9.8.0]: https://github.com/thephpleague/csv/compare/9.7.4...9.8.0 |
| 1253 |
[9.7.4]: https://github.com/thephpleague/csv/compare/9.7.3...9.7.4 |
| 1254 |
[9.7.3]: https://github.com/thephpleague/csv/compare/9.7.2...9.7.3 |
| 1255 |
[9.7.2]: https://github.com/thephpleague/csv/compare/9.7.1...9.7.2 |
| 1256 |
[9.7.1]: https://github.com/thephpleague/csv/compare/9.7.0...9.7.1 |
| 1257 |
[9.7.0]: https://github.com/thephpleague/csv/compare/9.6.2...9.7.0 |
| 1258 |
[9.6.2]: https://github.com/thephpleague/csv/compare/9.6.1...9.6.2 |
| 1259 |
[9.6.1]: https://github.com/thephpleague/csv/compare/9.6.0...9.6.1 |
| 1260 |
[9.6.0]: https://github.com/thephpleague/csv/compare/9.5.0...9.6.0 |
| 1261 |
[9.5.0]: https://github.com/thephpleague/csv/compare/9.4.1...9.5.0 |
| 1262 |
[9.4.1]: https://github.com/thephpleague/csv/compare/9.4.0...9.4.1 |
| 1263 |
[9.4.0]: https://github.com/thephpleague/csv/compare/9.3.0...9.4.0 |
| 1264 |
[9.3.0]: https://github.com/thephpleague/csv/compare/9.2.1...9.3.0 |
| 1265 |
[9.2.1]: https://github.com/thephpleague/csv/compare/9.2.0...9.2.1 |
| 1266 |
[9.2.0]: https://github.com/thephpleague/csv/compare/9.1.4...9.2.0 |
| 1267 |
[9.1.4]: https://github.com/thephpleague/csv/compare/9.1.3...9.1.4 |
| 1268 |
[9.1.3]: https://github.com/thephpleague/csv/compare/9.1.2...9.1.3 |
| 1269 |
[9.1.2]: https://github.com/thephpleague/csv/compare/9.1.1...9.1.2 |
| 1270 |
[9.1.1]: https://github.com/thephpleague/csv/compare/9.1.0...9.1.1 |
| 1271 |
[9.1.0]: https://github.com/thephpleague/csv/compare/9.0.1...9.1.0 |
| 1272 |
[9.0.1]: https://github.com/thephpleague/csv/compare/9.0.0...9.0.1 |
| 1273 |
[9.0.0]: https://github.com/thephpleague/csv/compare/8.2.2...9.0.0 |
| 1274 |
|