Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -51,3 +51,7 @@ run-tests.log
/phpstan.neon
# PHPStan cache directory
/.phpstan.cache/

# Added by horde-components QC --fix-qc-issues
# Local PHP configuration files
**/*.local.php
3 changes: 1 addition & 2 deletions .horde.yml
Original file line number Diff line number Diff line change
Expand Up @@ -34,7 +34,7 @@ authors:
active: false
role: developer
version:
release: 3.0.0-beta3
release: 3.0.0-beta4
api: 3.0.0alpha1
state:
release: beta
Expand Down Expand Up @@ -87,7 +87,6 @@ dependencies:
horde/url: ^3
horde/util: ^3
horde/view: ^3
pear/pear: '*'
php81_bc/strftime: ^0.7
ext:
session: '*'
Expand Down
13 changes: 5 additions & 8 deletions composer.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"role": "developer"
}
],
"time": "2026-03-07",
"time": "2026-03-12",
"repositories": [],
"require": {
"horde/horde-installer-plugin": "dev-FRAMEWORK_6_0 || ^3 || ^2",
Expand Down Expand Up @@ -72,7 +72,6 @@
"horde/url": "^3 || dev-FRAMEWORK_6_0",
"horde/util": "^3 || dev-FRAMEWORK_6_0",
"horde/view": "^3 || dev-FRAMEWORK_6_0",
"pear/pear": "*",
"php81_bc/strftime": "^0.7",
"ext-session": "*"
},
Expand All @@ -83,6 +82,7 @@
"horde/vfs": "^3 || dev-FRAMEWORK_6_0"
},
"suggest": {
"mikepultz/netdns2": "For DNS resolver functionality (replaces pear/net_dns2)",
"pear/text_captcha": "*",
"pear/text_figlet": "*",
"ext-dom": "*",
Expand All @@ -104,14 +104,11 @@
}
},
"config": {
"allow-plugins": {
"horde/horde-installer-plugin": true
}
"allow-plugins": {}
},
"extra": {
"branch-alias": {
"dev-FRAMEWORK_6_0": "3.x-dev"
}
},
"minimum-stability": "dev"
}
}
}
27 changes: 27 additions & 0 deletions doc/changelog.yml
Original file line number Diff line number Diff line change
@@ -1,4 +1,31 @@
---
3.0.0-beta4:
api: 3.0.0-beta4
state:
release: beta
api: beta
date: 2026-03-12
license:
identifier: LGPL-2.1-only
uri: https://spdx.org/licenses/LGPL-2.1-only.html
notes: |-
fix(controller): inject PSR-7 factories instead of using service locator
feat(controller): ResponsiveControllerTrait and PSR-7 URI use
fix(activesync): update getSearchResults() to use Search_Params/Results objects and fix several bugs
fix(smartmobile): use clone instead of copy() to preserve base URL
refactor(activesync): unify search caching, flatten result structure (#57)
fix composer.json plugin settings
refactor(routes): migrate to modern PSR-4 Horde\Routes\Mapper
test(rampage): add routing unit and integration tests
fix(config): allow empty config array in State constructor
feat(smartmobile): accept string URLs for convenience
refactor(smartmobile): extend modern Horde\Url\Url directly
feat(registry): add resolve_hostnames setting to skip DNS lookups
fix(smartmobile): use clone instead of copy() to preserve base URL
feat: Move logger configuration to a single place for both PSR-3 and traditional logger. Allows step by step migration without breaking changes.
fix: responsive assets should be loaded from default theme if the user selected theme doesn't have them. Degrade to a sane default.
Merge pull request #55 from amulet1/activesync_search_mailbox
refactor(ActiveSync): clean up cache handling in getSearchResults
3.0.0-beta3:
api: 3.0.0-beta3
state:
Expand Down
12 changes: 2 additions & 10 deletions lib/Horde/Core/Bundle.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,20 +23,12 @@ abstract class Horde_Core_Bundle
*/
protected $_config;

/**
* Path to the PEAR configuration file.
*
* @var string
*/
protected $_pearconf;

/**
* Constructor.
*/
public function __construct(Horde_Core_Cli $cli, $pearconf = null)
public function __construct(Horde_Core_Cli $cli)
{
$this->_cli = $cli;
$this->_pearconf = $pearconf;
}

/**
Expand Down Expand Up @@ -95,7 +87,7 @@ public function migrateDb()
$this->_cli->writeln();
echo 'Creating and updating database tables...';

$migration = new Horde_Core_Db_Migration(null, $this->_pearconf);
$migration = new Horde_Core_Db_Migration();

// Try twice to work around unresolved migration dependencies.
for ($i = 0; $i < 2; $i++) {
Expand Down
29 changes: 1 addition & 28 deletions lib/Horde/Core/Db/Migration.php
Original file line number Diff line number Diff line change
Expand Up @@ -47,9 +47,8 @@ class Horde_Core_Db_Migration
* directories and builds lists of migrateable modules and directories.
*
* @param string $basedir Base directory of all Git checkouts.
* @param string $pearconf Path to a PEAR configuration file.
*/
public function __construct($basedir = null, $pearconf = null)
public function __construct($basedir = null)
{
// Loop through all applications.
foreach ($GLOBALS['registry']->listAllApps() as $app) {
Expand All @@ -61,11 +60,6 @@ public function __construct($basedir = null, $pearconf = null)
}
}

// Silence PEAR errors.
$old_error_reporting = error_reporting();
error_reporting($old_error_reporting & ~E_DEPRECATED);
$pear = new PEAR_Config($pearconf);

// Detect and handle the Composer use case
if (class_exists('Composer\Autoload\ClassLoader', false)) {
/*
Expand Down Expand Up @@ -134,27 +128,6 @@ public function __construct($basedir = null, $pearconf = null)
$this->dirs[] = realpath($dir);
}
}

// Loop through installed PEAR packages.
$registry = $pear->getRegistry();
foreach (glob($pear->get('data_dir') . '/*/migration') as $dir) {
$package = $registry->getPackage(
basename(dirname($dir)),
'pear.horde.org'
);
if ($package == false) {
Horde::log("Ignoring package in directory $dir", Horde_Log::WARN);
continue;
}

$app = $package->getName();
if (!in_array($app, $this->apps)) {
$this->apps[] = $app;
$this->_lower[] = Horde_String::lower($app);
$this->dirs[] = realpath($dir);
}
}
error_reporting($old_error_reporting);
}

/**
Expand Down
103 changes: 0 additions & 103 deletions lib/Horde/Core/Factory/DbPear.php

This file was deleted.

9 changes: 6 additions & 3 deletions lib/Horde/Core/Factory/Dns.php
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
<?php

use NetDNS2\Resolver;
use NetDNS2\Exception as DnsException;

/**
* @category Horde
* @package Core
Expand All @@ -8,7 +11,7 @@ class Horde_Core_Factory_Dns extends Horde_Core_Factory_Injector
{
public function create(Horde_Injector $injector)
{
if (!class_exists('Net_DNS2_Resolver')) {
if (!class_exists('NetDNS2\Resolver')) {
return null;
}

Expand All @@ -22,12 +25,12 @@ public function create(Horde_Injector $injector)
$config = [];
}

$resolver = new Net_DNS2_Resolver($config);
$resolver = new Resolver($config);

if (is_readable('/etc/resolv.conf')) {
try {
$resolver->setServers('/etc/resolv.conf');
} catch (Net_DNS2_Exception $e) {
} catch (DnsException $e) {
}
}

Expand Down
Loading