Joomla! Platform 12.3

Joomla 平台 12.3 版本(“好奇心”) 于 2012 年 12 月 20 日进行了标记并发布。这是 12.x 系列的第三个版本。除了大量错误修复、文档更新之外,它还带来了新功能,主要功能如下:

  • 平台手册从 DocBook 转换为 Markdown,以提高可读性和增强贡献。
  • 平台文档的广泛补充。
  • 使用 JDatabaseQuery::format 更轻松地构建查询。
  • JTable 中复合键的支持。
  • JGithub API 的改进。
  • 围绕 JLog 围绕为 syslog 排除类别和功能的改进。
  • 改进的 Windows 支持用于测试和构建。
  • PHPMailer 更新至 5.2.2

完整的提交列表可在此处获取 https://github.com/joomla/joomla-platform/commits/12.3 ,API 文档可在此处获取 https://api.joomla.net.cn。Joomla! 平台手册可在 http://joomla.github.com/joomla-platform/ 获取。

项目大小

  • 类:305(平台 12.2 中为 300)
  • 方法:2187(平台 12.2 中为 2136)

代码质量摘要

  • 代码风格检查:123 个警告(平台 12.2 中为 124 个)
  • 测试覆盖率:39.4%(平台 12.2 中为 38.16%)。

文档

新功能

向后不兼容

风格

测试

问题修复

重构

更新库

JavaScript

弃用

以下由社区贡献者提交的拉取请求已合并

  1. [#1767] 更新 12.3 的文档 (pasamio)

    此拉取请求更新了 12.3 版本的文档。

  2. [#1556] 添加 JArrayHelper::invert (pasamio)

    这为 JArrayHelper 添加了一个名为“invert”的新方法。“invert”方法提供了一种将关联数组数组作为输入并将其值作为键,并将输入关联数组的键作为这些条目的值的能力。

    因此,如果我们使用以下代码: php $input = array( 'New' => array('1000', '1500', '1750'), 'Used' => array('3000', '4000', '5000', '6000') ); $output = JArrayHelper::invert($input);

    输出的结果将等于: php $output = array( '1000' => 'New', '1500' => 'New', '1750' => 'New', '3000' => 'Used', '4000' => 'Used', '5000' => 'Used', '6000' => 'Used' );

    这提供了一种快速的方法来实现功能更强大的“array_flip”方法,其中涉及多个值。

  3. [#1563] 添加已删除和必需的 _unix2DOSTime 方法 (phproberto)

    _unix2DOSTime 方法在 Platform 11.1 中存在,但实际上不存在。

    由 _addToZIPFile 方法需要。

        // Get the hex time.
        $dtime = dechex($this->_unix2DosTime($ftime)); 
    

    是否故意删除?如果是,替换是什么?

    我们必须重新添加该方法或替换其调用。

  4. [#1570] 代码样式修复,使代码(更)易读。 (ianmacl)

    只是稍微清理了一下代码。

  5. [#1573] 使用 render 方法设置要加载的文件的参数 (mbabker)

    对 JApplicationWeb::render() 的此更改允许下游用户使用与模板和参数值设置相同的方法设置要加载的文件。例如,在 CMS 中,我们必须覆盖此方法才能使用 tmpl=component URL 参数。现在,它只是另一个要设置的参数。

  6. [#1574] 修复注释中的错别字 (elinw)
  7. [#1589] JLoader 的命名空间支持 (florianv)
  8. [#1603] 更多 JModelLegacyTests (dongilbert)

    我为 JModelLegacy 添加了更多测试。具体来说,我添加了所有尚未测试的方法并将其标记为不完整,完成了 __construct 测试,并进一步提高了现有测试的代码覆盖率。一些方法的某些行没有被测试,所以我认为我应该开始清理这些行。

  9. [#1612] 引导/导入文件修复,并在测试运行期间禁用 GC。 (LouisLandry)

    清理引导/导入文件,并向 PHPUnit 引导文件添加 gc_disable() 以减少在长时间运行的测试套件期间发生由 PHP 引发的段错误的可能性。

  10. [#1631] 使基于时间的测试更加宽容。 (ianmacl)
  11. [#1634] 修复了 JApplicationWeb 中的一个问题,该问题会导致 Web 应用程序生成包含两个斜杠的媒体 URI。 (robschley)
  12. [#1636] 将 PHPCS 标准更改为使用子模块。 (LouisLandry)
  13. [#1639] 更新/编辑嵌入式文档中的一些代码标准详细信息 (elinw)
  14. [#1641] 修复了剩余的 OAuth 测试时间问题。 (ianmacl)

    这些适应在秒边界运行的测试。

  15. [#1642] 更新编码标准。 (ianmacl)

    将编码标准更新到仓库 HEAD。

  16. [#1643] 向 JCryptPassword 添加 defaultType 属性 (elinw)

    向 JCryptPassword 添加默认哈希类型属性,并在 JCryptPasswordSimple 中实现它。

    以前,默认值始终是 $2a$(Blowfish),但现在应用程序可以设置(和获取)默认值。在没有设置默认值的情况下,将使用 Blowfish。

    此拉取请求还清理了类中测试时出现的其他一些小问题,并使接口和实现中的参数名称保持一致,以提高可读性。

  17. [#1644] 代码样式修复 (elinw)
  18. [#1645] 代码样式修复。 (ianmacl)
  19. [#1646] 测试树中的代码样式问题 (elinw)
  20. [#1647] 从 JGithubHttp 中移除 patch 方法 (mbabker)

    patch 方法已添加到父 JHttp 类中,导致子类 JGithubHttp 中的方法不再必要。此外,由于方法的声明不同,这会导致 E_STRICT 错误。

    由于该方法仅在 GitHub 包中使用,因此我选择完全删除该方法,而不是将其弃用。本质上,这使得目前不需要子类,但我暂时保留了它。

  21. [#1650] 更新 libraries/joomla/database/driver/sqlsrv.php (MDunkleSr)

    将 transactionStart 更改为正确的 MS SQL 语法。问题 #1649。

  22. [#1651] 更新 libraries/joomla/database/driver/sqlsrv.php (MDunkleSr)

    修改 JDatabaseSQLSrv->insertObject 以排除 null 字段,从而与 JDatabase->insertObject 的行为保持一致。问题 #1648。

  23. [#1653] 清理传统单元测试树 (dongilbert)

    此 PR 完成了使传统单元测试树符合 Joomla 编码标准的漫长任务。

    请参阅此处的相应组讨论 - https://groups.google.com/forum/?fromgroups=#!topic/joomla-dev-platform/cLK-x6UY1yA

  24. [#1655] 不正确的块大小计算。修复问题 #1562 (dongilbert)
  25. [#1656] 修复用户代理字符串中的代码样式行长度 (dongilbert)

    在继续清理单元测试树中的代码样式时,我遇到了 WebClient 测试中这段相当大的 UA 字符串。它们都(显然)根据行长度未能通过代码样式检查,因此我尽可能逻辑地将它们分解,同时没有过多地延长文件长度。如果这种方法可以接受,我会在出现行长度代码样式错误时继续这样做 - 但我想先获得反馈以确保。

  26. [#1657] 测试树中的代码样式工作 (elinw)

    清理测试树中的各种内容,包括处理基本代码嗅探合规性、仅在需要时使用 setUp 和 tearDown 以及对文档块和代码质量进行一些工作。

  27. [#1658] 测试树中更多代码清理 (elinw)
  28. [#1663] 修复语法 (elinw)
  29. [#1672] 清理 JPathway 测试的结构 (dongilbert)

    将 JPathwayTest 更改为使用夹具。当前,每个方法都会创建一个新的JPathwayInspector 实例,因此我将该实例抽象到了setUp()方法中。还将检查器类移到了自己的文件中。

  30. [#1674] database/query.php 中的 CS 修复 (dongilbert)
  31. [#1677] 更新 libraries/legacy/updater/adapters/extension.php (Bakual)

    辅助函数“getClientInfo”接受两个参数,搜索“$id”和“$byName”,它们决定是按 ID 还是按名称搜索。在本例中,我们要按名称搜索,因此应将其设置为“1”。否则,如果在更新程序 xml 中设置了客户端标签而不是 client_id,该函数将返回 null 并中断所有扩展更新。

  32. [#1678] 将手册转换为 Markdown。 (ianmacl)

    这是由 Louis 生成的 Markdown 手册的基础。我认为我们丢失了一些更改,因此可能需要将它们合并或采取其他措施。

  33. [#1680] 将菜单添加到主仓库。 (ianmacl)
  34. [#1681] 将菜单移至主仓库的拉取请求。 (ianmacl)
  35. [#1685] 在测试后修复加载程序。 (LouisLandry)
  36. [#1686] 修复 JRoute::_() 的文档块 (mbabker)

    如文档所示,`JRoute::_()` 的文档注释没有按预期工作。注释中提到的使用当前方案的 0 值,在未修改的文件第 76 行的 `if ((int) $ssl)` 检查中始终无法通过。如文档所示,唯一期望的有效整数是代表 SSL 方案的 1,因此对于非 SSL 方案,参数将接受任何其他整数。我们也可以考虑让 0 值对第三个参数生效,但从文档中看,代码永远不会考虑这种情况。

  37. [#1688] 修复 JLog 调用错误(修复 #1687) (elkuku)

    一些额外的 SOME_ERROR_CODEs

  38. [#1689] 添加 Phar 打包的文档部分。 (eddieajau)

    在文档介绍部分添加了关于使用 Joomla Platform 作为 phar 文件的内容。

  39. [#1702] 添加了 Google 和 Keychain 包文档的缺失菜单链接。 (eddieajau)
  40. [#1704] 由于对 J... 的修改,JDatabaseDriverNosql 进行了兼容性更改 (okonomiyaki3000)

    ...DatabaseDriver

  41. [#1705] 清除任何空白字符或制表符 (mariopro)

    在翻译元素后的清单源格式化过程中可能产生的制表符

    COM_COMPONENT_SUBMENUNAME

    会导致隐藏的错误,因为翻译元素会带有制表符/空白字符保存到 `#__menu` 表中。翻译不会进行,系统会使用别名来构建菜单或子菜单。由于空白字符和制表符在数据库中不可见,因此很难调试。建议在 `_buildAdminMenus` 方法中对 `$menuElement` 和 `$child` 进行修剪,以避免此问题。

  42. [#1709] 添加了 JProfiler 类的文档。 (eddieajau)
  43. [#1714] 修复拼写错误 (elinw)
  44. [#1720] 除非传递了正确数量的参数,否则 sprintf 会报错 (okonomiyaki3000)

    有两个地方向 `JText::sprintf` 传递了一个未定义的变量。这个问题在一段时间之前已经修复了,在一个地方它被替换了,而在另一个地方它被省略了。由于 `sprintf` 在格式使用编号参数但传递给函数的参数不足时会抛出警告...我们需要传递一些东西。幸运的是,已经有一个合适的字符串:`JLIB_APPLICATION_ERROR_COMPONENT_NOT_FOUND`

  45. [#1723] 在 JData 中实现 Countable 和各种修复 (florianv)

    在 JData 中实现 Countable 删除未使用的变量 将 instanceOf 更改为 instanceof 在 JDataDumpable 中将深度设为 3,与 JData 和 JDataSet 相同

  46. [#1724] 修复拼写错误 (Yehonal)
  47. [#1728] 修复一些语法错误。 (elinw)
  48. [#1736] 添加一些新的测试,清理一些其他的测试。 (elinw)

    这将测试添加到多个类中,并对一些测试进行重新组织,使其更有用(例如,将测试分离到单独的测试中,以便所有断言都经过测试,而不管其他断言是否失败),包括 JFactory、JApplicationBase、JSession 和 JUserHelper。

  49. [#1740] 改善文档注释,添加类型提示,并将 JSession::getInst... 的默认值设为 null (elinw)

    ...ance.

  50. [#1743] 修复了 JUser Bind 中未正确检查值的错误 (fanno)

    还添加了 userbind 测试?不确定这是否有效,因为这是我第一次...做这个。我需要一个了解测试环境的人来尝试它。

    希望你理解

    - 谢谢

  51. [#1747] 修复文档注释中的错别字 (elinw)
  52. [#1748] 修复 Windows 系统的测试 (fanno)

    此拉取请求尚未完成,我仍在处理测试方面的一些问题

    21) JFormTest::testAddRulePath 行:142 库规则路径应默认包含在内。断言 false 为 true 失败。

    C:\Users\fanno\data\Projects\workspaces\phpstorm\joomla-platform\tests\suites\unit\joomla\form\JFormTest.php:143

    现在问题是这样的..

    $valid = JPATH_PLATFORM . '/joomla/form/rules';

    $valid 为 (C:\Users\fanno\data\Projects\workspaces\phpstorm\joomla-platform\libraries/joomla/form/rules)

    而 $paths 中的路径为

    C:\Users\fanno\data\Projects\workspaces\phpstorm\joomla-platform\libraries\joomla\form/rules

    这来自 https://github.com/fanno/joomla-platform/blob/staging/libraries/joomla/form/helper.php#L302

    我清楚地知道不再需要使用 DS,但是它使测试变得复杂

    可以通过以下方法解决

    $valid = realpath(JPATH_PLATFORM . '/joomla/form').'/rules';

    但是我认为这很丑陋,如果它有效,那就有效...

    测试应该这样编写吗?或者你想要如何处理它?

  53. [#1753] JImage 文档 (dongilbert)

    添加 `JImage` 包的文档。包括方法参数、代码示例等...

  54. [#1761] 将 PHPMailer 更新到 5.2.2 (mbabker)
  55. [#1763] 清理 JImage 文档中的格式 (dongilbert)

    这修复了 JImage 文档中的一些格式问题

  56. [#1756] 修复 PHP 5.4 的单元测试 (elkuku)

    目前,在 PHP 5.4 中使用其标准选项运行单元测试时,测试会失败,并试图教我们如何编写更好的代码:`PHPUnit_Framework_Error_Warning : Creating default object from empty value`。这修复了这些讨厌的错误信息。

  57. [#1752] 在 README 中添加平台手册链接 (dongilbert)

    我还更新了贡献指南的链接。

  58. [#1701] 添加 `destroy()` 方法到 JImage (dongilbert)

    目前,没有办法释放与 `JImage::$handle` 资源相关的内存。在处理图像时,通常使用 `imagedestroy($handle)` 来释放内存,但由于资源存储在 JImage 对象实例中,因此我们无法访问它来销毁并释放内存。这通过允许你显式地销毁图像句柄来修复了这个问题。

  59. [#1744] 在仓库中添加 CONTRIBUTING 文件 (mbabker)

    GitHub 允许你在仓库中添加 CONTRIBUTING 文件,当文件存在时,会在新问题和拉取请求的输入区域上方添加一个通知,链接到该文件,并包含一些贡献指南(参见 https://github.com/joomla/joomla-cms/issues/new,了解此示例)。

  60. [#1739] 将 registerPrefix 和 registerNamespace 更改为 LIFO (dongilbert)

    注册前缀或命名空间时,最后注册的路径应该是第一个搜索的路径。这将使覆盖类变得容易得多。

  61. [#1730] 修复 `JDataSet` 在 foreach 循环中取消设置时的错误。 (eddieajau)

    在 foreach 循环中对当前迭代器点使用 `offsetUnset` 会导致不可预测的结果。如果当前指针被取消设置,则指针会向前回退一个,除非它是数组的第一个元素,在这种情况下指针会被设置为 false。然后 `next` 方法会检查 `false` 的特殊情况,并滚动到数组的“第一个”元素(如果未取消设置偏移量,它将是“下一个”元素)。

    此 PR 还添加了一个新的 `clear` 方法来重置集合的内容,以及一个与 `array_keys` 函数类似的 `keys` 方法。

    测试和文档已相应更新。`JData::count` 的测试也已合并。

  62. [#1718] 允许 JDatabaseDriver::quote 接受字符串数组。 (eddieajau)

    如果提供字符串数组,quote 方法将返回一个已引用字符串的数组。如果既没有传递字符串也没有传递数组给 quote 方法,则会抛出异常。为 escape 和 quote 方法添加了文档。更新了单元测试。

    这避免了每次需要处理数组时都需要执行以下操作

    php $db = JFactory::getDbo(); $q = $db->getQuery(true); $closure = function (&$v, $k) use ($q) { $v = $q->q($v); }; array_walk($strings, $closure);

  63. [#1731] 改善 JInputFiles 类的文档。 (eddieajau)
  64. [#1716] 更新 libraries/joomla/document/feed/renderer/rss.php (jan7923)

    修复:当网站元描述中存在“&”或其他可转义字符时,RSS 提要会损坏

    错误报告地址:http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_id=8103&tracker_item_id=29731

  65. [#1722] 将重复代码检查合并到 isSupported() 方法中 (dongilbert)

    在每个 `JImageFilter*` 类中,`execute` 方法中重复了 8 行代码来确定 `imagefilter` 函数是否存在。我觉得这有点荒谬,因此我将检查合并到自己的 `isSupported()` 方法中,并改为调用它。

  66. [#1712] 新的数据包 (eddieajau)

    概述

    此拉取请求添加了一个数据包,其中包含两个新类:`JData` 和 `JDataSet`。

    虽然与熟悉的 `JObject` 类相似,但 `get` 和 `set` 方法被删除,取而代之的是使用直接属性访问器 ( `$object->key` ),它们由魔术方法控制。属性保存在类中的私有数组中,与实际的类属性完全分开。`setProperties` 方法被 `bind` 方法替换,`bind` 方法在其他地方使用(参见 JTable->bind)。“转储”允许你获取数据对象的 `stdClass` 表示。这也用于使该类实现 `JsonSerializable` 接口。

    `JData` 也可以充当数组迭代器,允许你在 `foreach` 结构中使用它。

    `JDataSet` 类提供了一种方便的方式来处理 `JData` 对象的列表。除了常规的迭代器功能外,魔术 get 方法类似于对整个列表的“获取列”操作,而魔术 set 方法类似于对整个列表的“设置列”操作。魔术 call 方法允许你在列表中的每个对象上调用方法(如果有)。有关更多信息,请参阅文档。

    在文档中可以找到更多说明和评论。

    此 PR 替代了 #1673(以及 #1703),这两个 PR 旨在改进现有的 JObject 类。经过审查,发现将提出的新功能和架构整合到一个新包中是合理的,这样就可以在将来的某个时间点弃用 JObject(它是 PHP 4 和 PHP 5 之间桥接工作的产物)。(此项工作不属于此拉取请求的一部分,将留待其他人继续进行。)

    文档

    拉取请求中提供了文档。

    https://github.com/eBaySF/joomla-platform/blob/data-package/docs/manual/en-US/chapters/packages/data.md

    还提供了有关 JObject 的一些历史信息

    https://github.com/eBaySF/joomla-platform/blob/data-package/docs/manual/en-US/chapters/packages/object.md

    商业案例

    在尝试将域逻辑与值对象或数据对象模式合并时, JObject 类存在严重限制。这可以在 JTable 之类的类(尤其是 JUser 类)中看到,在这些类中,需要执行一些代码体操才能避免在保存到数据库时出现列不匹配的情况。为此,我们需要一个更好的方法 [针对 eBay 应用程序] 来与值对象本身进行交互,并且还可以与数据映射器模式(作为 JTable 方式的长期替代/替换)进行交互,以便值对象可以独立于数据源(不像 JTable,它是一个与特定数据源紧密耦合的值对象)。

    JData 和 JDataSet 为处理结构化、半结构化和非结构化数据提供了一种便捷的方式。

  67. [#1719] 修复命名空间单元测试失败 (dongilbert)

    我在 JLoader 命名空间功能中发现了一个问题 - 如果一个类已经加载,自动加载器会再次包含该文件。

    我下载了平台的最新 zip 文件,以确保我在本地没有破坏它,并且得到了相同的错误。此 PR 通过在 loadByNamespace* 方法中添加 class_exists($class) 检查来修复此问题。

  68. [#1708] 修复 JUser 中的一些文档块问题 (elinw)
  69. [#1640] 处理嵌套事务 (okonomiyaki3000)

    事务需要支持“嵌套”(实际上是保存点),这样才能避免类似于以下情况的错误。

    ```php $db->transactionStart();

    // 执行操作

    SomeFunction();

    // 糟糕,由于某种原因需要回滚 $db->transactionRollback(); // 哦,不!它已经被提交了,因为

    /****** 其他地方... ********/ function SomeFunction() { // 我不知道我们是否已经启动了一个事务,所以我将尝试启动一个。 $db->transactionStart();
    // 嗯,看起来没问题。执行操作。

    // All good, let's commit. I think I'm just committing my stuff because I don't know anything!
    $db->transactionCommit(); 
    

    } ```

    我确信这种情况在 Joomla 中不会发生,但让我们确保它永远不会发生。

    就像这样:```php $db->transactionStart(true); // 如果当前没有事务,此操作与以往一样有效。

    // 执行操作

    SomeFunction();

    // 糟糕,由于某种原因需要回滚 $db->transactionRollback(true); // 没问题,因为

    /****** 其他地方... ********/ function SomeFunction() { // 我不知道我们是否已经启动了一个事务,所以我将尝试使用保存点标志启动一个事务,以防万一。 $db->transactionStart(true);
    // 嗯,看起来没问题。执行操作。

    // All good, let's commit. I'll commit with the savepoint flag so as to not step on any transactions that may be 'enclosing' this one.
    $db->transactionCommit(true); 
    

    } ```

  70. [#1696] libraries/joomla/html/behavior.php 中的新字符串 (infograf768)

    此补丁针对 CMS http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=29669

    让我们获得一条包含相关必填字段名称的友好消息(如果未正确填写),而不是毫无意义的 js Alert。

    为此,我们需要在 behavior.php 中添加一个字符串。

  71. [#1591] JLoader 的命名空间支持 (florianv)

    此拉取请求添加了基于命名空间的类加载和自动加载支持。

    如果您的类位于: BASE_PATH/Chess/Piece/Pawn.php 

    ```php <?php namespace Chess\Piece;

    class Pawn {} ```

    您可以通过注册 ROOT 命名空间 ChessJLoader::registerNamespace('Chess', BASE_PATH . '/Chess'); 将其注册到自动加载器。

    所有符合给定命名空间中的命名约定规则的类: namespace Folder\SubFolder; 用于位于 BASE_PATH/Folder/SubFolder/ 中的类,都将被自动加载。

    如果您有小写目录名和类名 BASE_PATH/folder/subfolder/,您可以使用小写或驼峰式命名法声明命名空间,它也能正常工作。

    但请注意,JLoader::registerNamespace 的第一个参数区分大小写,必须与命名空间声明的大小写匹配。

    示例: namespace Chess; JLoader::registerNamespace('Chess', PATH_TO_CHESS);

    namespace chess; JLoader::registerNamespace('chess', PATH_TO_CHESS);

    您还可以为给定命名空间(如前缀)注册多个查找路径。

  72. [#1695] 修复代码风格问题 (elinw)
  73. [#1693] 在重构后将编码标准添加到菜单中 (elkuku)

    如 #1680 中所述,此 PR 将代码风格部分添加到左侧菜单中。

  74. [#1683] 在平台文档中添加指向主存储库的链接 (javigomez)

    简单的改进,将文档链接到主 Github 存储库。这有助于人们在外部链接(例如:http://joomla.github.com/joomla-platform/)中阅读平台文档时,快速找到主存储库。

  75. [#1682] 更新文档中的历史记录页面。 (eddieajau)

    添加了 12.2 的条目。添加了指向发行说明的链接。

  76. [#1679] 修复从 DocBook 到 Markdown 的剩余手册转换。 (LouisLandry)
  77. [#1671] 在测试中使用 PHP_EOL 而不是 \n (okonomiyaki3000)

    实际函数使用 PHP_EOL ,因此测试也应该使用它们。

  78. [#1675] 向遗留类添加弃用标签。 (LouisLandry)

    大多数这些类已被标记为将在 13.3 中删除。这意味着它们将在遗留树中保留大约一年。我怀疑大多数(如果不是全部)这些类最终会被 CMS 项目接管并维护,比 2013 年第三季度的时间要长得多。

  79. [#1676] Checkstyle 修复。 (ianmacl)

    修复了导致构建中断的问题。

  80. [#1667] 添加 JRequest 测试 (dongilbert)

    JRequestTest 类只包含针对与$_SERVER['REQUEST_METHOD'] 无关的方法的测试。

    我分别将针对 $_POST 和 $_GET 的测试分解到自己的类中,分别为JRequestPostMethodTest 和 JRequestGetMethodTest 。

  81. [#1568] Keychain 包 (eddieajau)

    概述

    Keychain 提供了一种安全存储敏感信息(如访问凭据或任何其他数据)的方式。此拉取请求包含一个名为 JKeychain 的新类,它扩展了 JRegistry ,并支持使用公钥和私钥对数据进行加密和解密。它还提供了必要的命令行实用程序(本身就是一个 Joomla 平台应用程序)来生成密钥文件。

    文档

    拉取请求中提供了文档。可阅读版本可在以下地址获取。

    https://github.com/eBaySF/joomla-platform/wiki/Keychain

    商业案例

    在 eBay,我们需要一种方法能够将敏感凭据(服务器/数据库登录名等)存储在我们的 SCM 存储库中,以加密形式存储,而无需通过电子邮件或其他电子方式共享这些凭据。Keychain 包的开发是为了让我们能够将加密数据存储在源代码存储库中(将明文凭据存储在半公共(尽管是内部)源代码存储库中的安全问题应该是显而易见的)。工程师和部署服务器只需要手动获取“共享密钥”,但只需一次。如果凭据发生变化,只需更新存储库中的加密数据文件,所有工程师和服务器都可以在下次构建时访问新信息。

  82. [#1665] 修复 JTableNested 中别名字段不存在时的一些方法。 (elinw)

    别名属性始终存在于 JTableNested 中(它在类定义中是显式的),因此 property_exists 测试将始终返回 true。(相比之下,path 和 title 属性仅在表包含这些字段时才存在。)如果别名字段不存在,这将导致在按名称引用它时(如 getRootId() 中的查询)出现错误。此更改改为检查是否存在名为 alias 的字段。

  83. [#1669] 修复 JTable::_getAssetParentId() 中子方法声明的 E_STRICT 错误 (mbabker)

    解决 E_STRICT 错误:JTableCategory::_getAssetParentId() 的声明应与 JTable::_getAssetParentId() 的声明兼容。

  84. [#1670] JForm::findFieldsByFieldset (okonomiyaki3000)

    不要选择嵌套在其他元素中的元素。

  85. [#1606] 向 JTable 添加复合主键支持。 (ianmacl)
  86. [#1554] 修复 mysqli 错误消息 (obsidev)

    在调用 mysqli_ping(它会清除错误)之前存储错误消息和错误编号。

  87. [#1604] 新函数:JDatabaseQuery:format() (okonomiyaki3000)

    一个类似 sprintf 的函数,用于构建查询或查询片段。

    用法: php $query->format('SELECT %1$n FROM %2$n WHERE %3$n = %4$a', 'foo', '#__foo', 'bar', 1); 返回: php 'SELECT `foo` FROM `#__foo` WHERE `bar` = 1'

    也许更常见的用法是将类似于以下内容的内容: php $query = $db->getQuery(true); $query->select($query->qn('extension_id')) ->from($query->qn('#__extensions')) ->where($query->qn('type') . ' = ' . $query->q('file')) ->where($query->qn('element') . ' = ' . $query->q($element)); 变成类似于以下内容的内容:php $query = $db->getQuery(true); $query->select($query->qn('extension_id')) ->from($query->qn('#__extensions')) ->where($query->format('%1$n = %2$q', 'type', 'file')) ->where($query->format('%1$n = %2$q', 'element', $element));

  88. [#1608] 修复 insert 函数的文档(感谢 foxession) (oc666)

    修复 insert 函数的文档。用法示例包含语法错误。

  89. [#1632] 修复流传输 http 层 CMS#29565 的错误 (oc666)

    一些服务器将标头放在元数据包装数据的包装数据中,而不是放在包装数据本身中。感谢 SiteGround 的 Daniel K. 报告了这个问题。

  90. [#1662] 符合新的“WhiteSpaceBefore”标准 (dongilbert)

    这 终于 完成了对遗留树的代码风格修复,只要以后不再添加更多标准。:p

  91. [#1661] 代码风格行长修复 (dongilbert)

    此 PR 替换了 #1659 - 那有点失控,因为我无法弄清楚该怎么做。

  92. [#1638] 支持 JLogLoggerSyslog 的可配置功能 (pasamio)

    目前,JLogLoggerSyslog 被硬编码为使用“用户”日志工具。对于 Windows,这是 PHP syslog 命令可用的唯一日志工具,但是对于其他所有具有标准 syslog 支持的系统,还有其他选择。

    此更改允许通过 sys_facility 选项指定其他 syslog 工具。支持的工具列于此处:http://us1.php.net/manual/en/function.openlog.php

    使用此功能的代码示例可能如下所示:php // 设置 syslog JLog::addLogger( array( 'logger' => 'syslog', 'sys_ident' => 'jplatform_app', 'sys_facility' => LOG_LOCAL7 ), JLog::ERROR, array('databasequery') );

    该示例将任何数据库查询错误记录到 LOCAL7,并使用自定义标识符。

  93. [#1637] 调整 PDO isSupported 检查 (pasamio)

    目前,在检查 PDO 是否支持之前会完成一些工作。此更改将一些代码重新排列,将检查移至文件更上层。

  94. [#1431] 当请求的 URI 不存在时,HttpTransport 中的处理 (elinw)

    当请求的 URI 的域完全不存在时,传输当前无法很好地处理它。此时,它们的处理方式有些不同(例如,流会静默消息,然后抛出异常,类似于我在这里为套接字提出的建议)。与其使用通用异常消息,不如使用 php 和 curl 错误提供有关问题所在更详细的信息。

  95. [#1633] 添加 JMail::IsHTML 并使其返回 $this 以进行链式调用。包括测试。 (dongilbert)

    使用 JMail 的当前实现,您无法执行以下操作

    JFactory::getMailer() ->addRecipient($to) ->setSubject($subject) ->setBody($body) ->addAttachment($attachment) ->IsHTML(true) ->Send();

    因为 PHPMailer::IsHTML 不支持对对象进行方法链式调用。此 PR 修复了此问题。

  96. [#1635] 修复代码风格 (elkuku)

    这将只添加一些空行;)

  97. [#1627] 更正类名 JLoggerCallback => JLogLoggerCallback (elkuku)

    我认为类名错误。

  98. [#1626] 修复因 NULL 约束导致的 Postgresql 中模块安装失败问题 (vietvh)

    在 Postgresql 中,如果我们有一个列(TEXT NOT NULL)并且我们在 INSERT 中未指定该列,Postgresql 会假设该列的值为 NULL,而 MySQL 会将其视为空字符串 ''

  99. [#1623] 替换对已删除的 getActions 方法的使用 (mbabker)

    JAccess::getActions() 已在 12.3 清理中删除,但它仍在一些地方使用。这纠正了这种使用。

  100. [#1620] 修复存储和检索工厂状态方法。 (ianmacl)

    这将修复遗留单元测试中导致构建失败的问题。

  101. [#1619] 将安装程序和更新程序包移动到遗留目录。 (LouisLandry)
  102. [#1615] 添加 JGithubAccount 对象 (mbabker)

    这将向 GitHub 包添加一个帐户对象,其中包含用于与 OAuth 授权 API (http://developer.github.com/v3/oauth/) 和速率限制端点 (http://developer.github.com/v3/#rate-limiting) 交互的方法。

  103. [#1609] 修复 JTable::addIncludePath - 包括测试 (dongilbert)

    当传递已存在于 $_includePaths 数组中的路径时,JTable::addIncludePath 会错误地重新添加它们。这是因为在 !in_array($path, self::$_includePaths) 运行之前,$path 被转换为数组。这是为了方便将路径数组或路径字符串传递给该方法。但是,这也导致 in_array 函数将 $_includePaths 作为多维数组进行检查,而它实际上始终是单维数组。此代码修复了该行为。我还添加了测试。

  104. [#1548] 向 JInputFilter 添加 cleanRecursive 方法,向 Jinput 添加 getAll 方法 (florianv)

    有些人直接将 $_POST 中包含的所有数据注入到他们的模型中。

    以前可以使用 JRequest 从全局变量检索所有数据,但不能使用 JInput,所以我添加了 getAll 方法。

    我还为“隐藏”属性添加了文档注释,这样编辑器就不会报错。

  105. [#1614] 添加了用于 Github 状态 API 的对象连接器。 (ianmacl)
  106. [#1613] 替换对不存在的 loadResultArray 的使用(修复 #1611) (mbabker)
  107. [#1599] 完善 Github 类别的测试覆盖率。 (ianmacl)
  108. [#1601] JGithublabels 管理 (nprasath002)

    使用单元测试的 JGithublabels 管理

  109. [#1454] 防止单元测试在数据库不可用时出现致命错误。 (aaronschmitz)

    如果没有这些更改,当 phpunit 尝试调用空对象上的方法时,所有单元测试都会崩溃。

  110. [#1465] 重构安装程序清单类以减少重复代码。 (realityking)

    还为新类添加单元测试。抽象基类的测试仍然需要编写。

  111. [#1508] 改善 docblocks 并添加更多类型提示。 (realityking)
  112. [#1518] 使 JFormRule 子类可自动加载。 (realityking)
  113. [#1519] 拼写错误:self::getJSObject 为 JHtml::getJSObject (hieblmedia)

    修复 https://github.com/joomla/joomla-platform/pull/1475#discussion_r1555684 和 https://github.com/joomla/joomla-platform/pull/1475#discussion_r1555688 中的问题

  114. [#1520] 弃用 JTableSession 和 JDocumentHtml::countModules() 中的表达式 (realityking)

    还要避免在 JDocumentHtml::countModules() 中的非弃用情况下使用 eval。

  115. [#1521] 更正误导性的 docblock 和日志消息 (elinw)
  116. [#1522] 修复在较新 phpcs 版本中出现的其他错误。 (realityking)
  117. [#1525] 减少 phpmd 警告。 (realityking)
  118. [#1528] 修复失败的单元测试。 (realityking)

    这本身不是错误,但它会破坏依赖于将模拟模型注入 JViewLegacy 的单元测试。

  119. [#1531] 修复 JPagination 中可能出现的问题 (mahagr)

    通过在 for 语句中设置 $i=0 可能导致无限循环。尽管代码极有可能没有任何效果(我认为它始终设置 $i = $i),但即使如此,它可能也是一个拼写错误,如果 if 语句在某个时候发生更改,它会导致问题。

    另请参见:http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=29197

  120. [#1532] 修复 JModelLegacy::_getListCount() 中的性能问题 (mahagr)

    JModelLegacy::_getListCount() 中的当前代码强制数据库引擎获取所有项,而不是只进行计数。如果有数十万甚至数百万行,即使没有实际获取结果,查询也会变得非常低效。

    将 JDatabaseQuery 对象克隆并修改为 COUNT(*) 允许数据库引擎进行优化,即使对于非常简单的查询,这也会显着提高代码速度,例如

    SELECT * FROM jos_users
    

    如果有数十万用户。

  121. [#1533] 修复 JInstallerFile::uninstall() 中的致命错误 (mahagr)

    如果在解析清单中的卸载 SQL 时出现错误,则 $db->stderr(true) 会在定义 $db 之前运行。

  122. [#1535] 为构建文件添加 Windows 支持 (hieblmedia)

    Windows 上的 jdk 运行时正在查找 .exe 文件而不是 .bat 文件。因此,需要添加后缀。

  123. [#1536] 修复 PHPCS 错误 (pasamio)

    此拉取请求解决了我合并期间遗漏的 PHPCS 错误。

  124. [#1592] 一致地使用 XML 值表示字段“readonly”和“disabled” (benjaminpick)

    正如我在 #1188 中所说,这应该在所有字段实现中实施(包括 joomla-cms)。

  125. [#1598] 对 JCryptPasswordSimple 类进行简单修复 (diegovarussa)

    修复错误:致命错误:在 /var/www/jplatform/libraries/joomla/crypt/password/simple.php 第 102 行调用未定义的方法 JCrypt::getRandomBytes()

  126. [#1594] 修复 HTML 选项卡 (obsidev)

    删除 HTML 选项卡中的引号以消除 javascript 错误。

  127. [#1595] 添加了 JGithubMilestones (ianmacl)

    用于操作 Github 存储库中里程碑的对象。

  128. [#1587] 可以添加排除特定类别的记录器 (okonomiyaki3000)

    此外,还添加了用于将记录器添加到排除特定类别的单元测试

    假设您希望按类别区分日志。到目前为止,只有在您知道所有可能的类别名称(您不知道)的情况下才能做到这一点。所以现在,假设您希望将弃用日志放在一个地方,将查询日志放在另一个地方,将所有其他日志放在另一个地方。那么您只需执行以下操作

    php // 正常日志文件 JLog::addLogger(array('text_file' => 'deprecated'), JLog::ALL, 'deprecated'); JLog::addLogger(array('text_file' => 'databasequery'), JLog::ALL, 'databasequery'); // 排除类别 JLog::addLogger(array('text_file' => 'others'), JLog::ALL, array('deprecated', 'databasequery'), true);

  129. [#1588] 完成 JModelLegacy 的测试 (dongilbert)

    以下是 JModelLegacy 的完整测试。

  130. [#1585] 为提高可读性,JHTMLBehavior::_calendartranslation 重写 (okonomiyaki3000)

    更改测试以反映 '/' 现在由 json_encode 转义

  131. [#1500] 修复 JModelLegacy __construct 方法以确定选项 (dongilbert)

    JModelLegacy 的第 216 行会在您的模型类以 model 结尾时错误地解析您的模型类名。我遇到过这种情况,当时我为客户构建了一个自动管理器,其中一个模型名为 AutosModelModel。当前的正则表达式解析了类名,认为选项是 com_autosmodel,因为它没有考虑模型类可能以 model 结尾的可能性。

    此拉取请求解决了问题 #1499

    注意:此修复可能破坏向后兼容性,因为以前正则表达式使用 /i 修饰符,搜索不区分大小写的字符串。此新实现使用区分大小写的 strpos。确保您的类名正确使用驼峰命名法。(https://docs.joomla.org/Coding_style_and_standards#Classes)

  132. [#1067] 修复问题 183 - 允许 JFolder 中的额外字符 (aaronschmitz)

    允许的字符基于 http://en.wikipedia.org/wiki/Filename#Reserved_characters_and_words

    JFolder 名称中允许的额外字符:()[]{}#$^+.'~`!@&=;, 不允许 JFolder 名称中使用 :

  133. [#1356] 如果会话没有 JUser 对象,JFactory::getUser(0) 返回 null (mahagr)

    我们收到了一些类似这样的错误报告

    Fatal Error: Call to a member function authorisedLevels() on a non-object
    

    运行以下代码后

    $user = JFactory::getUser($userid);
    $accesslevels = (array) $user->authorisedLevels();
    

    可以在此处找到有关错误的更多详细信息:http://www.kunena.org/forum/K-2-0-Support/123824-500-Internal-Server-Error

    经过一番检查,我发现当 $id = 0 且 $instance = NULL 时,该函数确实返回 NULL。请查看下面代码中的注释

    ```php public static function getUser($id = null) // 假设 $id = 0 { $instance = self::getSession()->get('user'); // 假设 $instance = null

        if (is_null($id))                               // (is_null(0)) === false
        {
            if (!($instance instanceof JUser))
            {
                $instance = JUser::getInstance();
            }
        }
        elseif ($instance->id != $id)                   // Notice: Trying to get property of non-object
                                                        // (NULL != 0) === false
        {
            $instance = JUser::getInstance($id);
        }
    
        return $instance;                               // $instance === null
    }
    

    ``` 我知道如果会话中断,可能会发生这种情况,但如果会话有效,例如用户注销时,这会发生在核心代码中吗?

  134. [#1582] 更多将 null 更改为 array() 的更改 (elinw)
  135. [#1583] 修复 checkstyle 错误。 (eddieajau)
  136. [#1584] 修复 checkstyle 警告。 (eddieajau)
  137. [#1581] 修复测试文件夹中的代码风格 (elkuku)

    更多风格清理。

    ``` phpcs -np --standard=build/phpcs/Joomla tests/suites/unit/joomla/ ............................................................ 60 / 308 ............................................................ 120 / 308 ............................................................ 180 / 308 ............................................................ 240 / 308 ............................................................ 300 / 308 ........

    时间:32 秒,内存:16.50Mb ```

    :)

  138. [#1580] 修复行尾问题。 (LouisLandry)
  139. [#1579] 初始 12.3 清理 (LouisLandry)

    只是一些秋季清理。删除了在 12.3 中被弃用的代码,修复了代码库中的一些 CRLF 行尾,修复了测试树中的一些代码风格问题等。

    此外,JPlatform 类已修改为表明我们处于 12.3 开发状态。

  140. [#1576] 修复两个使用 null 而不是 array() 的地方 (elinw)
  141. [#1572] 替换 JComponentHelper::_load 中对未定义的 $error 的使用 (mbabker)
  142. [#1566] 改进 getJSObject (okonomiyaki3000)

    资源被忽略,对象键和字符串使用 json_encode 编码如果输入数组包含(php)对象,它们的 value 用于递归,而不是对象本身(该函数接受数组,而不是对象)更少的字符串连接,更多数组内爆

  143. [#1408] [IMP] 插件获取可覆盖的布局 (phproberto)

    辅助函数,根据 JModuleHelper getLayoutPath 函数简化插件布局覆盖。例如,插件内容 - 分页导航将在以下位置搜索其覆盖。

    template/YOUR_TEMPLATE/html/plg_content_pagenavigation

    默认布局将为

    plugins/content/pagenavigation/tmpl

    plugins/content/pagenavigation/tmpl

  144. [#1413] 添加更复杂的截断方法 (elinw)

    此方法允许在截断时指定嵌入在无限长度 HTML 中的给定长度的纯文本。这提供了一个比截断方法更复杂的选择,截断方法允许指定纯文本或 html+plaintext 的总长度(字符数)。

    它还修正了 string.truncate 方法中的一些小问题。

  145. [#1510] 修正 mysqli 和 pdo 中的 docblocks。 (stefanneculai)

    正如 PHP 文档所说,mysqli 和 PDO 并不总是返回整数。-mysqli::$insert_id:由上一个查询更新的 AUTO_INCREMENT 字段的值。如果连接上没有上一个查询或查询没有更新 AUTO_INCREMENT 值,则返回零。注意:如果数字大于最大 int 值,mysqli_insert_id() 将返回字符串。- PDO::lastInsertId:如果未为 name 参数指定序列名称,则 PDO::lastInsertId() 返回一个字符串,表示插入数据库的最后一行的行 ID。如果为 name 参数指定了序列名称,则 PDO::lastInsertId() 返回一个字符串,表示从指定的序列对象检索到的最后一个值。

    我已经检查了来自其他数据库驱动程序的 insertid,它们返回整数。

  146. [#1559] 添加对安装程序助手重定向的支持 (oc666)

    这是错误 #29374 的修复。

  147. [#1564] sendMail 自动将发件人添加为回复地址 (phproberto)

    参考跟踪器 ID:http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=29417

    如果接受,请告诉我是否要将相同的修复应用于 CMS。

  148. [#1565] 修复构建脚本,以便夜间构建再次正常工作,并且目标可以单独运行。(ianmacl)

    几周前进行了一项更改,导致 ant 脚本在调用单个目标(即 phpunit 或 phpcs)时失败。此拉取请求通过在解析脚本时设置添加的属性来解决此问题,而不是在特定任务中设置。

  149. [#1557] JCrypt 中出现除以 0 错误 (elinw)

    我们收到了一份关于第 210 行出现除以 0 错误的报告 [#29372](https://github.com/joomla/joomla-platform/blob/staging/libraries/joomla/crypt/crypt.php#L210)。查看代码表明,当 $microStart 和 $microEnd 相同(并且满足达到该点的所有条件,这并不典型)时,您将获得 $duration == 0。

  150. [#1534] [IMP] 确保发布不接收空 ID 数组 (phproberto)

    尝试禁用 Joomla CMS 中的默认项目会导致 JModelAdmin::publish 使用空 ID 数组。

    http://awesomescreenshot.com/09ag6vbe3

    我将继续修复 CMS 以确保我们不会使用空数组调用此方法。

    Joomlacode 跟踪器问题:http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=28990

  151. [#1541] 更新 libraries/html/grid.php。修复使用查询字符串作为 URI 的组件的 grid.sort。(tholoksh)

    除非 javascript onclick 返回 false,否则某些浏览器将跟随 JHTML 的 grid.sort 命令生成的“#”超链接。这将导致 URL 类似于“index.php?option=com_example”的组件重定向到“index.php#”,从而有效地破坏排序功能。该提交在 onclick 中将“return false;”添加到生成的 javascript 中。这至少会影响 Joomla! 2.5.x 中使用此功能的前端功能。

  152. [#1550] 更新 JRegistry::def 以支持非字符串默认值。 (pasamio)

    这更新了 JRegistry::def 的行为,使其不会将默认值类型转换为字符串,而是将其保持不变,这与 JRegistry::set 的行为一致。这允许您指定使用数组或对象的默认值。

  153. [#1558] CMS [#25663] 修复在(重新)安装组件时构建管理员菜单项错误。(pjwiseman)

    http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=25663

153 个拉取请求

  1. elinw:22
  2. dongilbert:20
  3. ianmacl:15
  4. eddieajau:11
  5. mbabker:10
  6. okonomiyaki3000:9
  7. LouisLandry:8
  8. realityking:7
  9. elkuku:6
  10. pasamio:6
  11. mahagr:4
  12. phproberto:4
  13. florianv:4
  14. oc666:3
  15. obsidev:2
  16. aaronschmitz:2
  17. hieblmedia:2
  18. fanno:2
  19. MDunkleSr:2
  20. benjaminpick:1
  21. robschley:1
  22. diegovarussa:1
  23. stefanneculai:1
  24. pjwiseman:1
  25. tholoksh:1
  26. Bakual:1
  27. jan7923:1
  28. javigomez:1
  29. Yehonal:1
  30. vietvh:1
  31. mariopro:1
  32. nprasath002:1
  33. infograf768:1

合并者

  1. LouisLandry:73
  2. pasamio:38
  3. ianmacl:25
  4. eddieajau:14
  5. realityking:2
  6. florianv:1