Joomla! Platform 12.2

Joomla 平台 12.2 版本(“尼尔·阿姆斯特朗”) 已于 2012 年 9 月 21 日打标签并发布。这是 12.x 系列的第二个版本。Joomla 平台 12.2 也包含在 Joomla CMS 3.0 版本中。除了大量的错误修复之外,它还带来了新功能,主要包括

  • 新的(通用) Web 应用程序路由器
  • 新的密码哈希接口和基本实现
  • 基本 PHARchive 支持
  • 新的 JInputJSON 类
  • 允许覆盖 xx-XX.localise.php
  • Composer 支持

通过在本版本中添加 Composer 和 PHARchive 支持,Joomla 平台扩展了其可用的分发渠道和格式。

完整的提交列表可在以下地址获得 https://github.com/joomla/joomla-platform/commits/12.2 以及 API 文档 https://api.joomla.net.cn

项目规模

  • 类:300(平台 12.1 中为 309)
  • 方法:2136(平台 12.1 中为 2122)

代码质量摘要

  • 代码风格检查:124 个警告(平台 12.1 中为 142)
  • 重复代码:27 个警告(平台 12.1 中为 27)
  • 编程混乱检测器 (PMD):801 个警告(平台 12.1 中为 702)
  • 测试覆盖率: 38.16%(平台 12.1 中为 39.70%)。

新功能

已修复问题

重构

更新库。

测试

风格

文档

弃用

向后不兼容

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

  1. [#874] 新的 JLogger 类型:JLoggerCallback(问题 #866) (okonomiyaki3000)

    这添加了一个新的 JLogger 类型,它只是将日志条目传递给用户定义的回调函数。回调可以是 PHP 通常使用的任何回调格式,包括 lambda(自 PHP 5.3 起可用)。

    为了正确支持 lambda 函数(闭包对象),需要对 JLog 进行一些小的修改。

  2. [#829] 问题 #27946 的修复 (jamesmoey)
  3. [#1025] 在 JRegistry 中实现 JsonSerializable 接口 (realityking)

    这将是第一个使用新的 PHP 5.4 功能的例子,但它保持与 PHP 5.3 的兼容性。

    如何使用

    $a = new JRegistry(); $a->set('foo', 'bar'); echo json_encode($a);

    这目前没有用,因为 PHP 5.4 现在还很少见,但构建自定义应用程序的人可能会欣赏它。

  4. [#1099] 问题 #1094 的修复 (aaronschmitz)

    让 JStream 真正地沿着字符串进行迭代,而不是重复开头。

  5. [#1184] 使日志包完全可自动加载。 (realityking)
  6. [#1224] 将 mooRainbow 更新到 1.4 版本。 (realityking)
  7. [#1226] 修复 JPath::clean() 以支持 UNC 风格的路径。 [#1220] (LouisLandry)

    这将关闭 #1220。

    这还应该解决旧的 JoomlaCode 跟踪器项:http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=25337

    修复代码附带单元测试,以帮助确保我们不再遇到此问题。

  8. [#1245] 在 php 5.4 上运行测试 (chdemko)

    PHP 5.4 无法成功运行测试。

    • E_STRICT 成为 E_ALL 的一部分(在 PHP 5.4 中)。
    • 将数组转换为字符串现在会生成一个通知。
    • 包含抽象方法的类必须是抽象的。

    以及一些其他问题。

  9. [#1463] 从 string.php 中删除奇怪的异常处理。 (aaronschmitz)

    此处理可能会导致 JArrayHelper::sortObjects 中出现问题,因为 https://bugs.php.net/bug.php?id=50688。

    如果存在非法字符,无论是否设置了 ignore,Iconv 都会抛出一个通知,因此此处理毫无意义(实际上是错误的,因为它始终会回退到 IGNORE 而不是 TRANSLIT)。另外,//TRANSLIT,IGNORE 而不是 //TRANSLIT//IGNORE 将正确地进行转译和忽略。

    另见:https://github.com/joomla/joomla-cms/issues/179#issuecomment-7835266

  10. [#1481] 使 Joomla 平台能够作为 Composer 的依赖项加载。 (eirslett)

    添加文件“composer.json”将允许 Composer(https://getcomposer.org.cn/)将 Joomla 平台作为依赖项导入。它现在暂时在 Packagist.org 中定义为一个包:https://packagist.org.cn/packages/joomla/joomla-platform,指向我的 fork,如果接受这个 pull request,可以更改它。

  11. [#1180] JSession 仍然使用 JRequest (florianv)

    在实例化 JSession 时会导致致命错误,因为 _start() 仍然使用 JRequest。我不知道你是否想使用这种结构。

  12. [#1187] 向媒体字段添加新的参数:preview_width / preview_height (benjaminpick)

    #1105 的改进:允许全尺寸预览。

  13. [#1193] JFactory::getConfig 中的命名空间支持 (florianv)
  14. [#1194] 使用 JPATH_THEMES 常量在 JApplicationWeb::render() 中设置主题目录(mbabker)

    JPATH_THEMES 常量在 CMS、单元测试以及我所看到的某些示例应用程序中被设置,以定义主题(模板)所在的路径。此常量允许主题目录设置为此常量(例如,允许 CMS 在应用程序重构时继续使用“templates”目录,如果需要的话),并保留当前的回退 __DIR__ . '/themes'

  15. [#1195] 修复 PHP 错误:访问未声明的静态属性 (mbabker)

    使用当前平台,JComponentHelper 无法使用,因为 $_components 属性声明带下了划线,但在类中的所有使用都没有使用下划线。这使其再次可用。

  16. [#1196] 自动加载 JMenu 和 JRouter 子类 (mbabker)

    按照 JPathway::getInstance() 中的示例,我修改了 JMenu 和 JRouter 的 getInstance 方法,以允许自动加载子类。如果无法首先找到该类,那么它将在硬编码的 includes/<file>.php 位置中查找该类。

  17. [#1197] 对模拟应用程序类进行添加。 (eddieajau)

    添加了基本的 TestMockApplicationCli 类。添加了对 TestMockApplicationWeb 的模拟响应主体支持。

  18. [#1199] $lang 在适配器 JInstallerTemplate::discover_install() 中未初始化 (Denitz)
  19. [#1200] 复制编辑/代码风格注释 (elinw)
  20. [#1201] 按引用传递输入数组 (chdemko)

    JInput 构造函数没有按引用接收其参数。这会导致意外行为。

    JFactory::getApplication()->input->set('foo', 'bar');
    

    这将使 $_REQUEST['foo'] 等于 'bar'(因为 https://github.com/joomla/joomla-platform/blob/staging/libraries/joomla/input/input.php#L89: 变量按引用设置)。

    JFactory::getApplication()->input->post->set('foo', 'bar');
    

    这将不使 $_POST['foo'] 等于 'bar'(因为 https://github.com/joomla/joomla-platform/blob/staging/libraries/joomla/input/input.php#L76,参数没有按引用接收)。

  21. [#1202] 允许 JApplicationWeb::render() 接收主题参数 (mbabker)

    类似于 JApplication::render() 和 CMS 的应用程序类,如果在配置中设置了主题参数,则此操作会设置这些参数。

  22. [#1203] 删除重复行 (vietvh)
  23. [#1204] 修复问题 #1190 (ramalama)

    仅修复 addRecipient

  24. [#1205] 恢复 1201 (eddieajau)

    此拉取请求是为了恢复 1201 中的更改。由于某种原因,它改变了内部数据持久化的方式(导致一些独立测试失败)。但仔细观察,我认为我们应该更进一步,不允许 JInput 修改源输入(例如,它应该获取 $_REQUEST 的副本,而不是引用,以便该输入变量可以进行更改,而不会影响应用程序的其余部分)。

  25. [#1208] 为数据库引号方法添加注释以避免 IDE 错误 (florianv)
  26. [#1209] 更新数据库会话代码以避免重复会话 ID (garyamort)

    参见 https://github.com/joomla/joomla-platform/pull/454 以获取原始请求。存储库重组删除了旧的修复程序,因此这里有一个新的、更新的修复程序。

  27. [#1210] 允许 JArrayHelper::getColumn 处理关联数组(数组/对象) (piotr-cz)

    目前 JArrayHelper::getColumn 无法在非关联数组上工作。不知道为什么使用 for 循环而不是 foreach...

  28. [#1213] 修复 docblocks 中的魔术方法声明 (elkuku)

    这些 IDE 每天都在变得越来越聪明....

  29. [#1214] 为 JUser 添加更多测试 (realityking)
  30. [#1215] 修复了 component.php 文件中的错误,该错误来自旧的更改。 (gpongelli)

    在 PostgreSQL 的驱动程序中添加了 sqlValue 方法,并在 insertObject 和 updateObject 中添加了它的使用。添加了 sqlValue 的测试。

  31. [#1216] 删除针对旧版 WebKit 版本的解决方法。 (realityking)

    这将稍微提高当前 WebKit 版本(以及降低旧版本性能)用户的(感知)性能。由于大多数 WebKit 用户使用 Chrome 并快速更新,因此这应该是一个净收益。

  32. [#1217] 更改 JApplication 以使用 JCrypt,而不是 JSimpleCrypt。+ 一些清理 (realityking)
  33. [#1219] 改进 JSession 包。 (realityking)

    第一批更改以重新设计会话包。这主要是非常安全的,唯一的问题是删除了 JObject。

  34. [#1221] Curl request() 无论 Content-type 标头如何都会对 $data 进行编码。 (dianaprajescu)

    要使用 curl 发布文件,必须使用文件完整路径的“@”前缀。从 PHP 5.2.0 开始,如果使用此前缀,则 CURLOPT_POSTFIELDS 选项必须是数组。这意味着如果 Content-type 标头是 multipart/form-data,则 request() 方法的 $data 参数不得编码。

  35. [#1223] 修复语法错误。 (realityking)
  36. [#1225] 修复 #1204 中的代码样式。 (LouisLandry)
  37. [#1227] JHtml::date 格式参数文档不正确 (ramalama)

    JHtml::date 在文档中说 $format 参数是与 strftime 一起使用的。这是不正确的:底层函数 JDate::format 和 JDate::calendar 使用 php 日期格式。

    更新了参数提示。

  38. [#1228] 减少对 JFolder 的依赖 (realityking)

    缓存包仍然依赖于文件系统,但 JCache 本身不依赖。JLanguage 仅依赖于字符串包,此后依赖于 JXMLElement。会话包不再依赖于文件系统包。

    注意:删除 JLanguage::parseXMLLanguageFiles() 导致了 B/C 问题。由于 JLanguage::parseLanguageFiles() 中的 RecusiveDirectoryIterator,它不再需要了。

  39. [#1229] 将 JObserver 和 JObservable 移至 legacy。 (realityking)
  40. [#1230] 将 JPagination 移至其自己的包中。 (realityking)
  41. [#1233] 更新了关于测试的文档章节(TestReflection) (florianv)
  42. [#1234] 为 JApplicationWeb media.uri 属性添加了斜杠规范化。 (robschley)
  43. [#1235] 删除已移至 CMS 树的 JFormFields。 (realityking)
  44. [#1236] 修复了 JSession 中的一个致命错误,并为延迟会话奠定了基础。 (realityking)
  45. [#1237] JHtml 不需要依赖于 JDatabase。 (realityking)
  46. [#1238] 尽可能使用 PHP 5.3 const 语法。 (realityking)

    这主要用于与类常量保持一致。请注意,这仅适用于非条件常量,并且它们仅接受简单值,而不是表达式的结果。由于它们是编译时而不是运行时,因此它们使用 opcode 缓存更有效地缓存(虽然改进可以忽略不计)。

  47. [#1239] 弃用 JFactory 中的以下方法:getACL()、getUri() 和 getXML()。 (realityking)
  48. [#1240] 修复了 JLog 自动加载的一些问题。 (realityking)
  49. [#1241] 修复代码样式错误。 (realityking)
  50. [#1242] JPaginationObject 不需要扩展 JObject。 (realityking)

    还为 JPagination 添加了类型提示。

  51. [#1243] 修复 JAccess 中的致命错误 + docblock 修复。 (realityking)

    还修复了会话包中导致 JDepend 不匹配的 docblock。

  52. [#1244] 将 JEditor 移至 legacy 文件夹。 (realityking)
  53. [#1246] 修正创建分叉的响应代码 (mbabker)

    GitHub API 在成功完成分叉存储库后发送 202 响应,而不是 201。这修复了这一点,以及类中的一些 docblock 行。

  54. [#1247] 修复失败的单元测试。 (realityking)
  55. [#1248] 修复了向 JUser::getInstance 提供零 ID 的问题 (pasamio)

    此拉取请求解决了两个对 JUser::getInstance(以及扩展的 JFactory::getUser)的请求将返回具有不同 ID 的用户的边缘情况。当使用 0 的用户 ID 调用时,将在 JUser::getInstance 中创建和缓存用户对象,然后返回。如果此 JUser 对象随后被持久化到数据库,它将被更新为具有新的用户 ID。但是,如果再次对 JUser::getInstance 进行用户 ID 为零的另一个调用,将返回具有新用户 ID 的现有对象。

    这通过确保当 ID 为零时返回新 JUser 对象而不是将其缓存来解决这种情况。

  56. [#1249] 更改了 PostgreSQL 的最低版本。 (gpongelli)

    此拉取请求仅包含 PostgreSQL 数据库所需的最低版本的更改。

    测试类已运行,并在以下 PostgreSQL 版本下返回相同的结果: - 8.3.18 - 8.4.11 - 9.0.7 - 9.1.3

    此拉取请求包含“insertObject”测试中的更改,因为 8.3 版本不支持“RESTART IDENTITY”子句,因此切换到旧式序列重启。

  57. [#1250] Oracle 驱动程序、Oracle 查询和 PDO 驱动程序的修复 (pasamio)

    此拉取请求引入了 Oracle 驱动程序、Oracle 查询类和 PDO 驱动程序的各种修复。

    总结更改

    • 将双引号添加为 Oracle 名称引号以正确处理名称引号。
    • 添加了对提供要执行的查询的支持,以验证连接是否处于活动状态。
    • 覆盖 Oracle 的默认连接验证查询以支持“dual”习语。
    • 更新 getTableColumns() 以支持在 Oracle 上重写前缀。
    • 修复 getTableColumns() 以返回与其他驱动程序一致的结果。
    • 在 Oracle 驱动程序中添加 replacePrefix() 以忽略双引号项(它作为名称引号字符)。
    • 修复 PDO 驱动程序的 getEscaped(),使其不会自动在其结果中添加引号,以与其他驱动程序保持一致。
    • 在尝试运行保持活动状态的查询(这会清除先前值)之前,在 PDO execute() 中存储错误消息的副本。
    • 抑制 lastInsertId() 中的错误消息,以避免 PDO 警告您给定的数据库平台不支持它。
    • 当尝试在已尝试检查连接时检查连接是否处于活动状态时,添加突然死亡,以防止无限循环。
    • 更新 Oracle 查询,仅在适用时为限制和偏移量修改查询,否则将未修改的查询传递。
  58. [#1255] 为 JArchive 包编写单元测试。 (aaronschmitz)

    添加了一些单元测试... 还有更多待添加。

  59. [#1256] Joomla CMS [#27267] 使用 formattedtext 时,多个记录器失败 (chdemko)

    参见 http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=27267 和 http://groups.google.com/group/joomla-dev-cms/browse_thread/thread/5513070c2c2ca6db

  60. [#1260] 错误修复:发现模板安装 (rdeutz)

    使用了 lang 但未设置,因此模板安装失败,并且未创建模板的样式

  61. [#1262] 将 yes/no 更改为 true/false,因为将在 joomla-cms 中提交 (benjaminpick)

    如 http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=28176 中所决定,为了保持一致性,应使用 true/false 而不是 yes/no。

  62. [#1264] 删除注释代码和相关注释。 (elinw)
  63. [#1267] 启用多个颜色字段 (infograf768)

    表单中只能存在一个 JFormFieldColor 字段(功能上)。请参见:http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=28426

    整个 mooRainbow.css 被包含进来,因为它编码错误。

  64. [#1268] 复选框修复和测试 (elinw)

    这修复了复选框字段中的一些问题并添加了详细的测试。1. 以前,该字段在渲染时没有检查存储的数据,因此始终使用字段定义中的信息。现在,如果不存在现有值,则会跳转到字段定义。2. 以前,选择多个要选中(预设)的项目不起作用,因为选定值的数组没有正确创建。复选框仍然具有以下限制:它无法区分故意保存为空的字段和从未保存的字段,因此,如果使用了已选元素,则在重新打开表单时,该元素始终会呈现出选中的项目。这是复选框字段类型结构固有的特性,因此开发人员应注意这一点,谨慎使用 checked 属性,或者考虑使用“以上都不是”选项强制保存一个值。

  65. [#1270] 为 JFormFieldCheckbox 添加测试并修复字段中的问题。 (elinw)
  66. [#1271] 添加新的 JInputJSON 类 (pasamio)

    此拉取请求引入了一个新的 JInputJSON 类,它允许处理包含 JSON 主体的请求,并自动从请求中的 JSON 中填充自身。

  67. [#1273] 表格包中的文档块样式修复。 (elinw)
  68. [#1274] 重命名测试以使其能够运行 (elinw)

    重命名 JFormRulesUrl 和 JFormRulesColor 测试,使其能够运行。修复 JFormRulesUrlTest 揭示的 JString 中的问题。为 JStringTest 添加针对该问题的测试。

  69. [#1277] 仅在调试打开时运行部分代码。 (realityking)
  70. [#1282] 修复解析错误 (elkuku)

    结果证明,一个解析错误被提交,Jenkins 先生让它静默通过(几乎),将其推送到主分支。

    在将来,最好实现对 PHP lint 的调用,以防止此类“意外”。

  71. [#1283] 将更多类移动到 legacy。 (realityking)

    legacy 的单元测试运行良好,

  72. [#1284] 为 equals 规则添加一个异常。 (elinw)
  73. [#1294] 强制更新后重新加载缓存的 CSS/JavaScript (chdemko)

    当网站上的 css/js/images 更新时,它们不会在使用缓存的浏览器上重新加载。此拉取请求将时间戳添加到由 JHtml 库加载的文件中,以强制重新加载缓存的文件。

  74. [#1293] Joomla CMS [#28535] Joomla 2.5.4 时区被加倍 (chdemko)

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

  75. [#1292] 修复问题 #1266 (dianaprajescu)

    我创建了 add 函数,以避免重复代码,因为 addRecipient、addCC、addBCC 和 addReplyTo 几乎相同。#1266

  76. [#1289] 标准化所有传输中的默认 Content-Type 处理。 (piotr-cz)

    根据 IETF(http://www.ietf.org/rfc/rfc2616.txt)和 W3C(http://www.w3.org/Protocols/rfc2616/rfc2616-sec4.html#sec4.2),它们不区分大小写,但在两个文档中都使用驼峰式命名法。

  77. [#1288] Joomla CMS [#28411] 删除正在使用的备用样式时网站崩溃 (chdemko)

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

  78. [#1287] 修复文档块样式和措辞 (elinw)
  79. [#1297] 修复 bind() 中的一个问题,当 load() 直接从数据库加载时,articletext 为 ""。(elinw)
  80. [#1299] 停止对工具栏按钮中 href 的默认处理 (rvsjoen)

    我参考了 https://github.com/joomla/joomla-cms/pull/189 和 http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=28404

    有人建议针对平台完成此拉取请求。

  81. [#1300] 减少 JBrowser 的使用。 (realityking)

    注意,JHtml 仍然依赖于 JBrowser,我们需要在将 JBrowser 移动到 legacy 之前修复它。

    Legacy 单元测试在我的本地机器上运行良好。

  82. [#1301] 重命名旧的 MVC 类,以使其名称与新的类不冲突。 (realityking)

    这也会导致在同一个应用程序中混合使用两个 MVC。

    Legacy 单元测试在本地运行良好。

  83. [#1302] 尽可能使用本机会话处理程序。 (realityking)

    我无法测试这些,因为我没有 memcache 也没有 Windows 服务器,但我没有理由认为 PHP 处理程序不应该起作用。

  84. [#1304] 在尝试使用 $client->id 之前检查它是否已设置。 (elinw)
  85. [#1305] 在授权时导入插件,而不是加载 (ShMaunder)

    *如果操作不当,请道歉 - 这是我第一次提交拉取请求。

    我认为 authorise 方法应该调用 importPlugin() - 我看不出使用 getPlugin() 的任何意义,因为它会返回插件数据(这些数据不会被捕获),并且不会将它们导入调度器。

    此外,在调用 authorise 方法时,必须手动导入两个插件组,这似乎毫无意义:JPluginHelper::importPlugin('user'); JPluginHelper::importPlugin('authentication'); $authorisations = JAuthentication::authorise($response, $options);

  86. [#1306] 修复 PHP 提示和 Checkstyle 错误。 (realityking)
  87. [#1308] 少用 JFactory::getXML() 和 JXMLElement。 (realityking)
  88. [#1310] Jhtmltest 中的代码风格,以及修复导致错误的文件创建两次的地方 (elinw)

    有许多测试的单元测试结果已损坏,因为 JHtmlTest 在 testStylesheet 中出现问题,因为它试图创建与之前创建的文件同名的文件。

  89. [#1311] 统一平台检查。 (realityking)

    这将所有内容标准化到 IS_WIN/IS_MAC/IS_UNIX 常量上。JApplication::isWinOS() 仅因 legacy 目的而被弃用。

  90. [#1312] 处理几个地方的异常。 (realityking)
  91. [#1313] Joomla CMS [#28741] E_STRICT: JArrayHelper::pivot 应声明为静态(chdemko)

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

  92. [#1315] 更新文档 (elinw)
  93. [#1317] 将 JGrid 移动到它自己的包中,并允许 JHtml 再次使用自动加载程序。 (realityking)

    这是 CMS 所需的,因为它依赖于 JHtml 类的自动加载程序。

  94. [#1319] 修复问题 #1309 (dianaprajescu)

    用 $this->_input 替换 $this->input。

  95. [#1320] 检查 $wpoption['modulemode'] == 1,而不仅仅是它是否已设置。 (okonomiyaki3000)

    这是针对以下错误的修复程序:http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=28676

  96. [#1322] 支持没有 JMenu 的应用程序。 (realityking)

    弃用自动加载程序不再需要的部分代码。

  97. [#1324] 删除不存在的“class”属性的 getter (sybrek)

    删除不存在的“class”属性的 getter(我们使用 class 作为元素的一部分)。

  98. [#1325] 不要使用已弃用的 API。 (realityking)
  99. [#1326] 删除 PHP 5.2 的部分痕迹。 (realityking)
  100. [#1327] 修复两个解析错误 (elkuku)

    是的,我知道 PHP lint 需要很长时间,但是...

  101. [#1328] 修复缓存中的几个问题。 (realityking)
  102. [#1329] JSession: 删除重复代码,代码风格 (piotr-cz)

    不影响功能的微小修复

  103. [#1330] Joomla! 使用有效的 xml 字符串抛出错误 (bembelimen)

    测试

    $xml = JFactory::getXML('<foo />');

    预期结果

    没有 JError 警告

    实际结果

    Joomla! 调用“JLIB_UTIL_ERROR_XML_LOAD”JError 警告

    解决方案

    不要检查“empty()”,而是使用 === false。

  104. [#1332] 替换 JRequest 的使用 (mbabker)
  105. [#1333] PDO 不支持序列化 (stefanneculai)

    PDO 不支持序列化,因此我认为它不应该被序列化。添加 __sleep 方法可以防止序列化 PDO 实例的属性。

    连接会在 __wakeup 时重新建立。

  106. [#1334] 修复 JControllerLegacy 中的 PHP 提示。 (realityking)
  107. [#1336] 从 Joomla 2.5.5 导入代码更改。 (realityking)
  108. [#1338] 正确使用 setLocation (mbabker)

    由于 JTableNested::setLocation 的 API 更改为不返回布尔值,因此需要在组件安装适配器中更正其使用。 由于使用了旧的 API,因此组件菜单项不会被创建。

  109. [#1339] 移除 JHtmlBatch 和 JHtmlCategory,因为它们已移至 CMS。 (realityking)
  110. [#1340] 不要让 JFactory 依赖于 SimplePie,并将与之相关的代码移至 legacy。(realityking)

    SimplePie 已过时,并引发了太多 E_STRICT 错误。 这些更改使我们最终能够将其移除。 @deprecated 标记的不同版本是为了向后兼容 CMS。 CMS 可以使用 JSimplepieFactory,但我们需要在 JFactory 中使用该方法以进行下一轮循环。

  111. [#1341] Joomla CMS [#28633] JUserHelper getProfile 方法应为静态的 (ShMaunder)

    这绝不是一个重大问题; 在使用 JUserHelper::getProfile 时注意到它未被声明为静态的

    public static function getProfile($userId = 0)

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

    我认为不存在向后兼容性问题。

  112. [#1343] 在适配器卸载中处理 msg 对象 (mbabker)

    1) 目前,在插件卸载期间会抛出 PHP Notice "ob_end_clean(): failed to delete buffer. No buffer to delete in /libraries/joomla/installer/adapters/plugin.php on line 638",因为在发出 ob_start() 命令之前创建了 $msg 对象。 由于在自定义卸载方法之后,对象在正确的时间被设置,因此此实例不是必需的。

    2) 在文件、模块和包适配器中,$msg 对象未注册到 extension_message,这与组件和插件适配器的行为相矛盾。 这已得到纠正。

  113. [#1344] 保存重定向期间发生的错误会错误地重定向到页面,从而导致创建新记录。(Octobit)

    参见 Joomla 跟踪器问题 #28770

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

  114. [#1345] 处理文件扩展名的 scriptfile (mbabker)

    目前,文件扩展类型脚本文件在安装期间不会被复制,使其在卸载例程中不可用。 此更改将脚本文件设置为以类似于包的方式安装。

  115. [#1346] 更新暂存 (infograf768)

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

    这解决了修改日期的显示问题

  116. [#1347] 将 JXMLElement 移至 legacy。 (realityking)
  117. [#1348] 修复 JInstaller 中的致命错误并进行一些清理。 (realityking)
  118. [#1351] 进一步清理 legacy MVC。 (realityking)

    主要弃用了一些东西或为弃用的东西添加了日志消息。 还向 JControllerLegacy 添加了一个 $input 成员以保存一个 JInput 对象。 这使得旧的 JController 更像新的 JController。

  119. [#1352] 从 legacy 中移除/弃用更多代码。 (realityking)
  120. [#1357] 更新 Oracle 驱动程序以设置时间戳格式和日期格式 (pasamio)

    此拉取请求更新了 Oracle 驱动程序以设置时间戳格式以匹配日期格式,这是 Joomla!的标准。 这意味着,时间戳字段将使用 Joomla!的首选日期格式返回,而不是 Oracle 的默认时间戳格式。

  121. [#1509] 修复 JViewLegacy::getName 模型名称发现 (dongilbert)

    JViewLegacy 中当前用于自动发现模型名称的正则表达式实现阻止开发人员在类名中使用“view”的子字符串,而不会产生后果。 因此,需要针对这种情况创建自定义错误。 (请参见差异的第 466 行:https://github.com/joomla/joomla-platform/pull/1509/files#L0L466)。 此拉取请求修复了该问题。

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

    我使用以下方法进行了测试 - https://gist.github.com/3563618

  122. [#1363] [CMS #28823] 重新添加 isError 到 JError legacy 类中 (ShMaunder)

    我不确定在 J3.0 Alpha 1 中从 JError legacy 类中移除 isError() 的原因 - https://github.com/joomla/joomla-platform/pull/802 ?

    我知道它很旧,“instanceof Exception” 是更好的方法... 但它只是看起来像此移除可能会破坏任何使用它的扩展(包括我的旧代码)。

    如果我们有一个 legacy 类,那么我们可以保留所有内容。

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

  123. [#1362] JUpdate 从 XML 加载表单 - 已修复空响应数据 (juliopontes)

    您好,

    Joomla 更新从 Http 获取空响应,因为它使用 $response->data 而不是 $response->body。

  124. [#1364] 让会话在启动后触发事件,并使用它用一些默认对象填充会话。 (realityking)

    这是 #1349 的另一种方法,它不会导致 JSession 依赖于 JUser 和 JRegistry。

  125. [#1365] 将旧类名的别名移至 legacy 文件夹。 (realityking)

    还要修复单元测试,使其不再依赖于这些 legacy 名称。

  126. [#1366] 没有理由不允许空白文章正文。 (elinw)

    如 CMS 列表中所述,没有理由存在此烦人的要求,尽管过去可能存在过。 https://groups.google.com/forum/?fromgroups#!topic/joomla-dev-cms/994z5Pnzvms

  127. [#1368] 更新 JTableContent 中的单元测试 (elinw)
  128. [#1370] 移除 JProfiler::getMemory() 中当 memory_get_usage() 不可用时的解决方法。 (realityking)

    根据 PHP 文档,memory_get_usage() 自 5.2.1 以来始终可用。 https://php.ac.cn/manual/de/function.memory-get-usage.php

  129. [#1371] 让 mysqli 成为 mysql 的基类,而不是反过来。 (realityking)

    这是最终摆脱 mysql 的必要第一步。

  130. [#1372] 扩展更新适配器的修复程序 (mbabker)

    更新适配器目前在 CMS master 存储库中失败。 这些更改使它再次可以工作。

  131. [#1373] 必填和验证元素的错误消息不可翻译(回归)。(infograf768)

    必填和验证元素的错误消息不可翻译(回归)。 + 前端的错误显示不正确。 请参见 http://joomlacode.org/gf/project/joomla/tracker/?action=TrackerItemEdit&tracker_item_id=28827

  132. [#1374] [IMP] JImage->toFile() 返回布尔值 (phproberto)

    向 JImage 库中的 toFile 方法添加返回值。

  133. [#1375] [IMP] 添加自动计算裁剪偏移量 (phproberto)

    修改裁剪函数以在收到空值时自动生成居中的左、上偏移量。

  134. [#1376] 修复文档块 (elinw)
  135. [#1377] 修复现有的文章无法保存为空白的问题。 (elinw)
  136. [#1378] 移除不可到达的代码(无用代码) (pborreli)
  137. [#1379] 移除更多属于 CMS 的表单字段。 (realityking)

    已移除以下类:JFormFieldContentLanguage JFormFieldEditor JFormFieldMedia JFormFieldMenuitem

  138. [#1380] 移除我们自定义的会话 ID 生成代码,支持使用 session_regenerate_id()。(realityking)

    注意,第 624 行上有一个 session_id() 的非可选使用。 我不太确定它的作用,所以现在还没有碰它。

    我确认 CMS 使用此更改可以正常工作(测试了管理登录/注销)。 会话 ID 在注销时会更改。 (它在登录时不会更改,因为我们似乎没有在登录时派生会话)

  139. [#1383] 移除使用 intval() 和 floatval(),转而使用强制类型转换。 (realityking)

    我们主要使用强制类型转换语法,但有时我们使用 intval() 和 floatval(),此拉取请求使操作更加一致。

  140. [#1385] 使 JImageFilter 子类可自动加载 (mbabker)

    这应该可以解决 #1384

  141. [#1386] 安装适配器的改进 (mbabker)
    • 根据 @pasamio 在 https://github.com/joomla/joomla-platform/pull/1343#issuecomment-6798887 处的评论,将预检方法还原到插件卸载。
    • 在包适配器安装方法中添加检查,以确定是使用安装还是更新路由; 随后更改后面的 JInstaller::install 触发器以使用路由信息
    • 在模板适配器中记录类变量
    • 移除 JInstallerHelper::detectType() 中对安装根标签的检查
    • 弃用 JInstallerHelper::splitSql(),转而使用 JDatabaseDriver::splitSql()(弃用的方法已代理到该方法)
    • 根据 @infograf768 在 https://github.com/joomla/joomla-platform/pull/953#issuecomment-4316832 处的建议,移除过时的代码
  142. [#1387] 修复 #1352 中的单元测试失败。 (realityking)
  143. [#1388] 改进 mysql 数据库处理。 (realityking)

    此拉取请求包含两个更改: -JDatabaseQueryMysql 现在扩展 JDatabaseQueryMysqli,而不是反过来,这使得最终移除 mysql 版本变得更加容易。 -对字符集的处理已更改为遵循 PHP 最佳实践

  144. [#1389] JFactory::createDocument 始终创建 HTML 文档。 (Bakual)

    修复“format” URL 参数。当弃用的“no_html”被移除时,引入此错误。现在无法再使用“&format=raw”创建其他文档类型。此 PR 恢复了此功能,但没有重新引入“no_html”参数。

  145. [#1391] [IMP] 从当前图像创建缩略图的功能 (phproberto)

    在之前对 JImage 进行必要的修改之后,我提交了优化的 createThumbs 函数,以便快速从当前图像创建缩略图。

    示例。创建两个带裁剪的缩略图:jimport('joomla.image.image'); $imagen = new JImage(JPATH_SITE . DIRECTORY_SEPARATOR . 'images' . DIRECTORY_SEPARATOR . 'powered_by.png'); $thumbSizes = array('50x50', '250x100'); $imagen->createThumbs($thumbSizes, 4);

  146. [#1392] 移除 JRouter、JMenu 和 JPathway 对 JObject 的依赖关系。 (realityking)
  147. [#1393] 提升 JRoute::_() 的速度 (realityking)

    JRoute::_() 在一个复杂的站点上可能会执行数百次,因此即使是微小的优化也可以衡量。

  148. [#1398] 优化图像以减少其文件大小。 (realityking)
  149. [#1399] 避免使用已弃用的 API 并从 JModuleHelper 中移除更多已弃用的代码。(realityking)
  150. [#1402] 移除 JPagination 对 JObject 的依赖关系。 (realityking)

    为了向后兼容,我们将保留 get() 和 set() 方法。

  151. [#1404] 纠正必填消息和验证消息之间的混淆 (infograf768)

    当一个字段同时包含必填元素和验证元素时,我们会对错误消息产生混淆。此补丁将元素['message'] 从必填条件中移除,因为在这种情况下,标签或名称可以用于错误。(此补丁也适用于带有字段和字符串更改的 CMS)

  152. [#1405] 添加基本 PHARchive 支持。 (LouisLandry)

    添加基本的包定义文件,用于使用 https://github.com/LouisLandry/packager 打包平台 PHAR 或平台 + 测试库 PHAR。此外,这里还有一些小的修复,以允许平台作为 PHAR 运行。

  153. [#1406] 修复 JLoader 前缀问题 (rvsjoen)

    当注册一个包含多个大写字母的自定义前缀时,JLoader 会搜索错误的路径。例如,注册

    php JLoader::registerPrefix('Jcms', JPATH_PLATFORM . '/cms');

    会导致它搜索 libraries/cms/cms/view/html.php 中的 JcmsViewHtml,因为前缀中的“cms”部分被错误地解释为路径段。

    此补丁将确保 CamelCasedWord 的第一个段全部用作加载器前缀。

  154. [#1411] 自动加载清理 (ianmacl)

    移动 JHtml 文件,以便可以自动加载它们。这允许更易读的代码,因为您现在可以使用例如 JHtmlSelect::radiolist($params) 而不是使用 _。

  155. [#1416] 当存在无效或缺失的资产或父级为根时,对 JAccess 进行修正。(elinw)

    尽管在对注释和 docblocks 的 JAccess 的措辞审查方面存在一些混淆,但如果存在对根资产的父级关系或存在无效的资产,则应使用根资产的规则。由于各种原因,这在当前类中实际上并未起作用。这给希望从根资产父级资产的开发人员带来了问题。此外,这纠正了由于资产 ID 被私有管理,无法使用该类纠正损坏的资产 ID 的情况。

    解决此问题的方法涉及几个步骤。首先,更改代码,以便始终使用 API 获取根资产的 ID,而不是假设父 ID 为 0 或 ID 为 1。这解决了在资产表数据在 Joomla 之外创建和导入时出现的问题,可能根不是作为第一条记录。

    其次,当没有可用的规则时,例如当找不到资产时,无论规则是否被视为递归,都将使用根资产规则。这对于许多原因很重要,至少它提供超级用户权限(如果可用)。以前在这种情况下,超级用户没有特殊的超级用户权限。

    第三,当 getActions/getActionsFromFile/getActionsFromData 不包含与资产匹配的部分(即最终资产被父级为根资产,中间没有类似组件的东西)时,会有一些复杂情况。在这种情况下,此类资产现在将回退到根资产以获取其规则,除非提供了其他内容。

    第四,JRules 和 JAccess 的许多测试都具有错误的预期结果。这些已经修正。

  156. [#1417] 允许覆盖 xx-XX.localise.php (infograf768)

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

    此补丁允许在 language/overrides/ 文件夹中添加 xx-XX.localise.php 文件,从而覆盖 localise.php 文件中的设置,而无需更改核心语言文件夹中的原始文件。例如,允许搜索的最大字符数。

  157. [#1419] 为 JPaginationObject 添加 active 标志,并将 coverage-legacy 添加到 build/.gitignore (mbabker)

    这在 JPaginationObject 中添加了一个标志,以便可以将项目报告为分页中的活动页面。

    此外,我将旧版单元报告覆盖范围添加到 .gitignore 中,因为它之前不存在。

  158. [#1420] 允许模板覆盖系统消息 (vietvh)

    之前的 pull:https://github.com/joomla/joomla-platform/pull/1381

    此 pull 将允许模板开发人员通过在模板的 html 文件夹中放置一个名为“message.php”的文件来覆盖系统消息。如果找不到消息模板文件,则将使用默认(当前)标记。

  159. [#1421] 为 JHttp 添加 patch() 方法。 (dianaprajescu)
  160. [#1426] 修复 strcasecmp 和 strcmp 中对 UTF-8 编码的错误检测。 (elinw)

    是否为 UTF-8 的测试是错误的,因为它缺少“utf8”字符串,该字符串通常是获取 locale0 时返回的字符串中存在的。

  161. [#1428] [#28817] 在进行更改时缓存未自动清除 (dextercowley)
  162. [#1429] 从 CMS 添加更多单元测试。 (realityking)
  163. [#1430] 网格排序中缺少括号 (dextercowley)

    这会导致 CMS 管理员屏幕中的排序列无法正常工作。例如,desc 图标始终显示。

  164. [#1433] 导入来自 CMS 的更多测试。 (realityking)

    还修复了测试中发现的 JLanguage 中的两个小错误。

  165. [#1435] 修复 JsonSerializable 的代码风格。 (realityking)

    由于某些奇怪的原因,CMS 风格检查器检测到了这一点,而我们的风格检查器没有检测到。

  166. [#1439] 使 mysqli 成为默认驱动程序,并在 JDatabaseDriverPdo 中使用异常链接 (realityking)
  167. [#1438] 修复 cURL 在未收到响应时触发的警告。 (pasamio)

    此拉取请求解决了在未收到服务器响应时,cURL 传输会抛出 PHP 警告的情况。相反,会缓解触发警告的代码,此外还会添加一个检查,以查看是否接收到任何响应数据,以验证是否确实接收到响应或抛出异常。

  168. [#1440] 进一步减少对 JObject 和文件系统包的依赖关系 (realityking)

    在我的测试中,对 JLanguage 的更改在语言调试开启的情况下节省了 0.2 MB 内存。

  169. [#1443] 正则表达式过滤器适合 (Radek-Suski)

    修改了语言调试器中的正则表达式,以包含句点符号作为有效的 KEY 字符,并允许在值(右侧)中包含转义的双引号。

  170. [#1444] 修复由于错误的提交 83eb8fae 导致的缓存错误 (dextercowley)

    我对之前的拉取请求搞砸了。这应该可以解决它。谢谢。

  171. [#1446] 移除 JToolbar 和 JHelp。 (realityking)

    它们已被移动到 CMS。

  172. [#1447] 添加 stripIframe 方法 (elinw)

    在处理一些 feed 工作时,我注意到我们有 stripImage,但我们没有办法删除 iFrame,而 iFrame 会带来与图像类似或更严重的问题。单独的方法是有意义的,因为有时从 feed 中获取图像非常合理,但不想承担与 iFrame 相关的风险。

  173. [#1448] [#28912] 启用调试语言时浏览器无响应 (pjwiseman)

    简化正则表达式以防止在长字符串上发生堆栈溢出。

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

  174. [#1449] 在 JInput 中实现 Countable。 (realityking)

    我们需要它在 CMS 中移除一些 JRequest 的使用。

  175. [#1450] 移除无意义的注释。 (realityking)

    我在今天坐火车时感到无聊,就想着清理一下;)

    这删除了所有“初始化变量”注释的出现,因为代码绝对是自解释的。

  176. [#1451] 在“extract()”中添加缺少的 return (jms2win)

    这应用了在 issue https://github.com/joomla/joomla-platform/issues/1437#issuecomment-7539014 中报告的修复。

  177. [#1452] 修复 Oracle 时间戳问题 (pasamio)

    此拉取请求修复了在更改为将 NLS_TIMESTAMP_FORMAT 添加到集合后,Oracle NLS_DATE_FORMAT 未正确设置的问题。代码应该复制execute() 子句,但实际上没有这样做,这意味着 NLS_TIMESTAMP_FORMAT 已更新,导致时间戳字段以正确的格式显示,但 NLS_DATE_FORMAT 设置不正确,导致现有的日期字段使用错误的格式。

  178. [#1453] 允许数据库查询始终被计数 (eddieajau)

    此更改将查询计数移出调试条件,以便始终计算驱动程序执行的查询数量(这意味着 JDatabaseDriver::getCount 始终可用)。额外的开销可以忽略不计,但允许永久访问有用的统计信息,而无需考虑调试设置,但不会存储所有查询的开销。

  179. [#1455] 为单元测试的 tmp 文件夹添加 .gitignore。 (aaronschmitz)

    忽略:/tests/tmp/cache/.php /tests/tmp/cache/_testing /tests/tmp/media /tests/tmp/themes /tests/tmp/error。

  180. [#1457] 修复 JApplicationCli 中的 JInput 加载 (elkuku)

    自动加载程序对大小写非常敏感 ;)

  181. [#1458] 修复 JString::parse_url 中导致 urlencoded 字符串被解码的错误 (aaronschmitz)

    将 JString::parse_url 更改为在失败时返回 false,如其文档块中所指定。JString::parse_url 现在与 ascii 字符串的 parse_url 相同。

  182. [#1461] 删除跟随重定向。 (dianaprajescu)

    我已经删除了自动跟随重定向的选项,原因在拉取请求 #1432 中说明。

  183. [#1462] 减少对 JFile 的依赖。弃用 JFile::read() 和 JFile::getName()。 (realityking)
  184. [#1464] 如果语言环境不可用,则跳过单元测试,以防止它们失败。 (aaronschmitz)
  185. [#1466] 添加额外的单元测试。 (realityking)

    另外修复了测试中发现的 JStream 的错误。

  186. [#1471] 将 name.min.ext 文件格式添加到调试检查 (mbabker)

    改进 JHtml::includeRelativeFiles() 调试模式检查,我添加了将 name.min.ext 格式的文件(例如 jQuery 文件使用此格式)加载到未压缩格式中的可能性,方法是在调试模式下从文件名中删除 .min 部分,而不是附加 -uncompressed。

    示例用例:在我的一些代码(https://github.com/mbabker/Podcast-Manager/blob/master/plg_content_podcastmanager/player.php#L283)中,我目前手动检查 JDEBUG 并更改文件名。使用此补丁,我的代码中不再需要围绕 JDEBUG 的条件语句。

  187. [#1472] 添加密码哈希接口和基本实现。 (ianmacl)

    这将提供使用简单易用的接口的基本密码哈希功能。

    使用起来很简单:$hasher = new JCryptPasswordSimple();

    $hash = $hasher->create('MyPasswordHere', JCryptPassword::BLOWFISH);


    $isPasswordCorrect = $hasher->verify('MyPasswordHere', $hash);

    基本实现支持 BLOWFISH、MD5 和传统的 Joomla 密码格式。对于更复杂的要求,可以提供和使用接口的替代实现。

  188. [#1473] 修复评论中的语法错误 (elinw)
  189. [#1474] 在 JUser 中加载后正确设置 guest (stefanneculai)

    这是针对问题 #1427 的修复。

  190. [#1475] 将 JHtmlBehavior::_getJSObject() 移动到 JHtml::getJSObject()。 (realityking)

    减少了相当多的代码重复。

  191. [#1476] 为删除 mysql 驱动程序做更多准备。 (realityking)

    我希望这是最后一步,至少我再也找不到对 mysql 的依赖项了。

  192. [#1477] 处理 PDO 类不可用。 (realityking)

    使用 PDO 的数据库驱动程序在调用 isSupported() 时会抛出致命错误,而 PDO 类不存在。

  193. [#1478] 修复了 JHttpTransportStream 中的致命错误。 (robschley)
  194. [#1482] 更新版本历史记录 (elinw)
  195. [#1483] 使 Joomla 平台能够作为 Composer 的依赖项加载 (2) (eirslett)

    查看此讨论:https://github.com/joomla/joomla-platform/pull/1481#issuecomment-7914023

  196. [#1484] 确保在使用 JFolder 的文件中导入 JFolder。 (realityking)

    由于越来越少地使用 JFolder,因此仅依赖于 JFolder 已经加载的类现在会出错。此拉取请求添加了所有丢失的 jimport,以防止这种情况发生。

  197. [#1485] 在大多数情况下,TODO 不应包含在存储库中 (elinw)
  198. [#1486] 验证 key 参数是否为字符串 (pasamio)

    此拉取请求验证提供给该函数的$key 参数在尝试使用它之前实际上是一个字符串。我在尝试修改 JTable 以能够以某种透明的方式支持多个主键时遇到了这个问题。默认情况下,JTable 将其键传递到数据库的insertObject 和updateObject 函数中,这对于单个键来说效果很好,但对于insertObject 来说效果不佳,因为$key 是一个数组。

  199. [#1487] 修复 Oracle DB Unit 中的问题 (pasamio)

    此提交为 Oracle DB Unit 基本情况提供了一些额外的功能和修复。它修复了 URI 解析中的一个问题,其中前导斜杠包含在数据库名称中,这会导致错误,并且它还支持传入自定义 Oracle 数据库模式和表前缀。它还修复了字符集中的一个错误,以便使用正确的字段而不是之前使用的主机字段。

  200. [#1493] 删除 JViewBase 和 JViewHtml 中对 JController 的文档引用 (dongilbert)

    当提出新的 MVC 时,原始的 JViewBase 和 JViewHtml 类接受一个必需的第二个参数,即 JController 对象。现在不再是这种情况。此拉取请求更新了文档以反映代码。

  201. [#1495] 修复测试覆盖范围中的一些小漏洞。 (realityking)
  202. [#1496] 减少对 JFolder 和 JFile 的依赖。 (realityking)
  203. [#1498] 弃用 IS_MAC,转而使用 IS_UNIX (dongilbert)
  204. [#1501] 进一步改进测试覆盖范围。 (realityking)
  205. [#1503] 为 JComponentHelper::isEnabled 带来一些理智 (realityking)

    JComponentHelper::isEnabled 是一个相当令人困惑的 API 部分,这应该让它按预期工作。

    请不要在获得 CMS 的认可之前拉取此内容,因为这会造成 B/C 问题,并且是 CMS 特定的 API 部分!

  206. [#1505] 删除 JEditor,因为它已移至 CMS。 (realityking)
  207. [#1506] 修复 #1504 中引入的错误。 (realityking)
  208. [#1504] 减少 phpmd 警告。使用 phpmd 覆盖所有输出文件夹。 (realityking)
  209. [#1513] 在 build.xml 中添加 lint 目标,并修复其中发现的错误。 (realityking)
  210. [#1397] 由于 memory_get_usage() 现在始终可用,因此做了一些额外的更改。 (realityking)

    没有添加到已弃用的日志中,因为我觉得 JProfiler 应该保持没有对其他类的依赖性。

  211. [#1360] 路由查询字符串修复和原始路由 (pasamio)

    此拉取请求修复了一个问题,如果查询字符串包含冒号(例如?filters=content_id:20),则 PHP 的 parse_url 函数将感到困惑。这意味着它将无法正确处理路径,导致第一个路径段被错误地截断,并且找不到路由匹配。此拉取请求预先处理路由,在 parse_url 函数之前删除查询字符串,以便它能够可靠地工作。

    第二个更改是将原始路由推送到输入中。这是为了允许控制器直接访问路由段,如果它希望根据路由段做出进一步的决策。一个用例是多个硬编码映射,其中最后一个段不是变量,但可能对各个控制器有意义(例如,存在有限的选项,可以合理地详细说明)。

  212. [#1395] 我们必须优先使用主库而不是旧库。 (realityking)

    否则我们将会陷入自动加载器地狱。

    这会破坏 CMS 上的当前平台。

  213. [#1394] 各种小清理。 (realityking)

    -修复包标签。-删除一个无用的文件。-为 JFactory::getXML() 添加单元测试。-尽量不要使用函数别名。-防止支持的情况下出现弃用警告。

  214. [#1358] 将 JURI 移动到其自己的包中。停止使用 JFactory::getUri()。 (realityking)
  215. [#1361] 构建对 JDatabaseDriver::updateObject 的多键更新支持。 (pasamio)

    此拉取请求为向 JDatabaseDriver::updateObject 方法提供数组作为键提供了支持。这允许更新对象,其中给定表有多个键。JDatabaseDriver::insertObject 不需要这样做,因为它可以直接插入,而无需担心提供更新语句正常工作所需的 where 子句。此更改向后兼容,如果提供字符串,它会将$key 从字符串映射到数组。它还支持将对象重新映射到数组,以便使用对象作为键。

  216. [#1353] 修复会话可能启动两次的错误,以及对 JSession 的其他改进。 (realityking)
  217. [#1321] 三个错误修复 (robschley)

    修复了 JCacheStorageMemcached 中的致命错误。修复了 JHttpTransportCurl 无法遵循重定向的问题。修复了 JInput 中的未定义偏移量通知。

  218. [#1314] 修复 cURL 与 100 继续标头混淆的问题。 (pasamio)

    cURL 在处理 100 继续标头时存在问题。它发送了对 100 继续的期望,但是当它收到 100 继续标头时,它使用该标头并将该标头填充为没有标头信息,然后将预期的标头与主体一起放入。这显然使处理标头或对主体的任何内容做出任何假设变得非常困难。

  219. [#1291] 添加机器人检测 (stefanneculai)

    修复问题 #1254。

    包含代码和测试。

  220. [#1290] POST 请求中的方法 - RESTful Web 应用程序的路由器 (stefanneculai)

    大多数 RESTful Web 应用程序允许在 POST 请求中将方法作为参数传递,因为并非所有客户端都支持 PUT 或 DELETE 等高级方法。

    我在 JApplicationWebRouterRest 中添加了一个名为 methodInPostRequest 的变量,该变量允许或不允许此类请求。

    新代码也有测试。

  221. [#1276] 从 JApplicationBase 中删除对 JObject 的依赖。 (realityking)

    会导致 CMS 中的一些小问题,但总的来说仍然是个好主意。

    针对 @LouisLandry 的特殊拉取请求

  222. [#1281] 创建一个遗留包。 (realityking)

    这对文档和 JDepend 有优势。

  223. [#1259] 新的(通用的)Web 应用程序路由器。 (LouisLandry)

    我仍然需要编写一些文档,但希望代码足够简单和干净,以便清楚地理解。有三个新类: JApplicationWebRouter、 JApplicationWebRouterBase 和 JApplicationWebRouterRest。这些不是为了适合所有情况而设计的。它们的目的是为希望涵盖大多数 URL 路由用例的方案提供坚实的基础。

    JApplicationWebRouter

    基础 Web 路由器类是抽象的。该类的前提是将某种路由字符串传递到 execute 方法中,该字符串将在 parseRoute() 方法中解析以确定要执行的适当控制器的名称,然后调用 fetchController() 来实际实例化控制器对象并返回它。完成后,控制器就会被简单地执行。

    我故意没有在基类中提供 parseRoute() 的实现,因为检查路由以确定如何继续的方法有无限多种。该类的其他功能包括在给出空路由时设置默认控制器名称的能力,以及设置将在从 parseRoute() 返回的任何控制器名称前添加的控制器类前缀的能力。

    JApplicationWebRouterBase

    对 JApplicationWebRouter 的基本具体实现提供了一种非常简单的算法来解析基于 pattern => controller 映射的路由。前提是,如果传入的路由与给定的模式匹配,则将返回相关的控制器并最终执行该控制器。重要的是要注意,对于此实现,模式不是正则表达式。路由和模式被分解成分割在 / 上的段,并逐个段进行评估。所有段必须完全匹配才能构成匹配模式的路由。

    例如,如果我们有模式 continents/europe

    • 路由 continents/europe 是匹配项。[每个段都匹配]
    • 路由 continents/asia 是 不匹配 的。[第二个段 asia 不匹配 europe]
    • 路由 continents/europe/germany 也是 不匹配 的。[最后一段 germany 不在模式中]

    变量

    除了路由段的标准字符串比较之外,模式还可以通过在段前添加 : 来包含变量。继续我们之前的示例,让我们将实际的大陆设置为变量。

    新模式是 continents/:continent

    • 路由 continents/europe 是匹配项。[每个段都匹配,因为 europe 位于变量段中]
    • 路由 continents/asia 也是 匹配项。[同样,asia 位于变量段中]
    • 路由 continents/europe/germany 是 不匹配 的。[最后一段 germany 仍然不在模式中,即使 europe 段有效,因为它位于变量段中]

    副作用

    • 使用变量的副作用是,变量名(除开头的 : 之外的段中的所有内容)将添加到应用程序输入对象中,其中包含在成功的路由匹配中找到的值。使用与上面相同的示例;模式 continents/:continent
    • 路由 continents/europe 匹配,应用程序输入对象将为输入变量 continent 设置 europe

    路由 continents/asia 匹配,应用程序输入对象将为输入变量 continent 设置 asia

    注意:如果你需要让模式的某个段以 : 开头,并且不想将该段视为变量,只需转义冒号,如 \:

    通配符

    除了标准的每个段变量之外,还可以使用星号 * 符号来指示跨段的匹配。例如,模式 continents/*/berlin 将匹配路由 continents/europe/germany/berlin。它将不匹配路由 continents/europe/germany/frankfurt ,因为它正在寻找最后一个段为 berlin

    如果你想捕获与通配符匹配的路由部分,只需命名该段即可。例如,模式 continents/*cont_nation/berlin 仍然会匹配路由 continents/europe/germany/berlin ,但是这次输入对象将为输入变量 cont_nation 设置 europe/germany

    你也可以混合匹配通配符和变量,例如模式 continents/*/:city。这将匹配路由 continents/europe/germany/berlin ,并且 berlin 将是输入变量 city 的值。

    注意:与变量类似,如果你需要让模式的某个段以 * 开头,并且不想将该段视为通配符,只需转义星号,如 \*

    JApplicationWebRouterRest

    • 通用 RESTful 路由器扩展 JApplicationWebRouterBase 并继承了上面讨论的相同的模式匹配,其中包含变量。唯一的添加是 JApplicationWebRouterRest 还维护着一个 HTTP 方法[GET、POST、PUT 等]到控制器类后缀的映射。这用于使你能够根据对资源执行的操作类型对控制器进行命名空间。例如,如果我们有一个管理名为“文章”的资源的应用程序,我们只需要两个模式规则:一个用于包含文章 ID,另一个用于不包含文章 ID。
    • articles => articles - 如果没有 ID。

    articles/:article_id => articles - 如果有文章 ID。

    让我们还将控制器前缀设置为 MyController ,因为恰好是我的应用程序用于查找控制器的前缀。

    • 现在我们只需要以下类,因为 JApplicationWebRouterRest 路由器将为我们处理 HTTP 方法映射。
    • MyControllerArticlesCreate - POST /articles - 创建一篇新文章。
    • MyControllerArticlesDelete - DELETE /articles/42 - 删除文章 42。
    • MyControllerArticlesGet -GET /articles/7` - 获取文章 7。
  224. MyControllerArticlesUpdate - PUT /articles/7 - 保存对文章 7 的更新。

    [#1278] 添加对连接到 Oracle 时更改默认模式的支持。 (pasamio)

  225. 此拉取请求添加了对连接到 Oracle 数据库时更改默认模式的支持。当连接的用户与存储 Oracle 表的所需模式不同时,这很有用。这在 Oracle 支持的选项中添加了一个新的 schema 选项。模式类似于其他系统中的数据库名称,但是 Oracle 在连接时以不同的方式处理数据库名称,因此这是一个不同的选项。
  226. [#1269] 减少对 JObject 的依赖。 (realityking)

    [#1275] 删除对 zend.ze1_compatibility_mode 的引用。 (realityking)

  227. 它已在 PHP 5.3 中删除。
  228. [#1212] 修复 JInstaller 中的拼写错误。 (realityking)

    [#1211] 修复控制器包的子包标签。 (realityking)

使依赖关系图更有用。

  1. 228 个拉取请求
  2. realityking:91
  3. elinw:22
  4. mbabker:14
  5. pasamio:12
  6. chdemko:7
  7. aaronschmitz:6
  8. infograf768:5
  9. dianaprajescu:5
  10. stefanneculai:4
  11. elkuku:4
  12. LouisLandry:4
  13. florianv:4
  14. phproberto:3
  15. robschley:3
  16. piotr-cz:3
  17. dextercowley:3
  18. ShMaunder:3
  19. eddieajau:3
  20. dongilbert:3
  21. rvsjoen:2
  22. benjaminpick:2
  23. ianmacl:2
  24. okonomiyaki3000:2
  25. eirslett:2
  26. ramalama:2
  27. vietvh:2
  28. gpongelli:2
  29. pborreli:1
  30. jms2win:1
  31. Bakual:1
  32. pjwiseman:1
  33. Radek-Suski:1
  34. jamesmoey:1
  35. garyamort:1
  36. Denitz:1
  37. rdeutz:1
  38. sybrek:1
  39. Octobit:1
  40. bembelimen:1

juliopontes:1

  1. 合并者
  2. LouisLandry:95
  3. chdemko:46
  4. realityking:41
  5. ianmacl:22
  6. pasamio:17
  7. eddieajau:4
  8. robschley:2