diff --git a/htdocs/caldav.php b/htdocs/caldav.php
index eebe7e59..1c80318e 100644
--- a/htdocs/caldav.php
+++ b/htdocs/caldav.php
@@ -8,7 +8,7 @@
* @copyright Catalyst .Net Ltd
* @license http://gnu.org/copyleft/gpl.html GNU GPL v2
*/
-require_once("always.php");
+require_once("../inc/always.php");
dbg_error_log( "caldav", " User agent: %s", ((isset($_SERVER['HTTP_USER_AGENT']) ? $_SERVER['HTTP_USER_AGENT'] : "Unfortunately Mulberry and Chandler don't send a 'User-agent' header with their requests :-(")) );
require_once("BasicAuthSession.php");
diff --git a/htdocs/collection.php b/htdocs/collection.php
index 439df0cb..1df23c99 100644
--- a/htdocs/collection.php
+++ b/htdocs/collection.php
@@ -1,5 +1,5 @@
LoginRequired();
diff --git a/htdocs/freebusy.php b/htdocs/freebusy.php
index 6ff4a65e..247fa8d8 100644
--- a/htdocs/freebusy.php
+++ b/htdocs/freebusy.php
@@ -1,5 +1,5 @@
LoginRequired();
diff --git a/htdocs/ics.php b/htdocs/ics.php
index 2a8dc97d..32e939a0 100644
--- a/htdocs/ics.php
+++ b/htdocs/ics.php
@@ -1,5 +1,5 @@
LoginRequired();
diff --git a/htdocs/relationship_types.php b/htdocs/relationship_types.php
index 1e6a930c..17609c56 100644
--- a/htdocs/relationship_types.php
+++ b/htdocs/relationship_types.php
@@ -1,5 +1,5 @@
LoginRequired();
@@ -8,7 +8,7 @@ require_once("interactive-page.php");
require_once("DataEntry.php");
require_once("DataUpdate.php");
require_once("classBrowser.php");
- $c->stylesheets[] = "css/browse.css";
+ $c->stylesheets[] = "$c->base_url/css/browse.css";
$confirmation_required = false;
if ( ($session->AllowedTo("Admin") || $session->AllowedTo("Support")) &&
@@ -60,7 +60,7 @@ require_once("interactive-page.php");
$browser->AddColumn( 'rt_isgroup', translate('To Group?'), '', '', "CASE WHEN rt_isgroup THEN 'Yes' ELSE 'No' END" );
$browser->AddColumn( 'confers', translate('Rights') );
$browser->AddColumn( 'prefix_match', translate("Prefix") );
- $browser->AddColumn( 'action', translate("Action"), "", "", "'".translate("Delete")."'" );
+ $browser->AddColumn( 'action', translate("Action"), "", "", "'base_url/relationship_types.php?action=delete&rt_id=' || rt_id || '\">".translate("Delete")."'" );
$browser->SetJoins( 'relationship_type' );
@@ -98,7 +98,7 @@ require_once("interactive-page.php");
'action' => ''
) );
- $active_menu_pattern = "#^/relationship#";
+ $active_menu_pattern = "#^$c->base_url/relationship#";
include("page-header.php");
diff --git a/htdocs/roles.php b/htdocs/roles.php
index aaaf950d..628a7104 100644
--- a/htdocs/roles.php
+++ b/htdocs/roles.php
@@ -1,5 +1,5 @@
LoginRequired();
diff --git a/htdocs/user.php b/htdocs/user.php
index 28a8e0e2..1da57ff4 100644
--- a/htdocs/user.php
+++ b/htdocs/user.php
@@ -1,5 +1,5 @@
AllowedTo("Admin") )
- $user_menu->AddOption(translate("New User"),"/user.php?create",translate("Add a new user"), false, 10);
+ $user_menu->AddOption(translate("New User"),"$c->base_url/user.php?create",translate("Add a new user"), false, 10);
if ( $user->user_no > 0 && $user->AllowedTo('update') ) {
- $user_menu->AddOption(translate("View"),"/user.php?user_no=$user->user_no",translate("View this user record") );
- $user_menu->AddOption(translate("Edit"),"/user.php?edit=1&user_no=$user->user_no",translate("Edit this user record"), $user->EditMode );
+ $user_menu->AddOption(translate("View"),"$c->base_url/user.php?user_no=$user->user_no",translate("View this user record") );
+ $user_menu->AddOption(translate("Edit"),"$c->base_url/user.php?edit=1&user_no=$user->user_no",translate("Edit this user record"), $user->EditMode );
}
include("page-header.php");
diff --git a/htdocs/users.php b/htdocs/users.php
index fb6a92e2..d0e5ceaa 100644
--- a/htdocs/users.php
+++ b/htdocs/users.php
@@ -1,5 +1,5 @@
LoginRequired();
@@ -14,7 +14,7 @@ require_once("interactive-page.php");
$browser->AddColumn( 'user_no', translate('No.'), 'right', '##user_link##' );
$browser->AddColumn( 'username', translate('Name') );
- $browser->AddHidden( 'user_link', "'' || user_no || ''" );
+ $browser->AddHidden( 'user_link', "'base_url/user.php?user_no=' || user_no || '\">' || user_no || ''" );
$browser->AddColumn( 'fullname', translate('Full Name') );
$browser->AddColumn( 'email', translate('EMail') );
@@ -37,9 +37,9 @@ require_once("interactive-page.php");
$c->page_title = translate("Calendar Users");
if ( $session->AllowedTo("Admin") )
- $user_menu->AddOption(translate("New User"),"/user.php?create",translate("Add a new user"), false, 10);
+ $user_menu->AddOption(translate("New User"),"$c->base_url/user.php?create",translate("Add a new user"), false, 10);
- $active_menu_pattern = "#^/user#";
+ $active_menu_pattern = "#^$c->base_url/user#";
include("page-header.php");
diff --git a/inc/RSCDSUser.php b/inc/RSCDSUser.php
index 4b7cfa6b..397625f3 100644
--- a/inc/RSCDSUser.php
+++ b/inc/RSCDSUser.php
@@ -12,8 +12,8 @@
require_once("User.php");
require_once("classBrowser.php");
-$c->stylesheets[] = "css/browse.css";
-$c->scripts[] = "js/browse.js";
+$c->stylesheets[] = "$c->base_url/css/browse.css";
+$c->scripts[] = "$c->base_url/js/browse.js";
/**
* A class for viewing and maintaining RSCDS User records
@@ -87,14 +87,14 @@ class RSCDSUser extends User
$browser = new Browser("");
- $browser->AddHidden( 'user_link', "'' || fullname || ''" );
+ $browser->AddHidden( 'user_link', "'base_url/user.php?user_no=' || user_no || '\">' || fullname || ''" );
$browser->AddColumn( 'rt_name', translate('Relationship') );
$browser->AddColumn( 'fullname', translate('Linked To'), 'left', '##user_link##' );
// $browser->AddColumn( 'is_group', 'Group?', 'centre', '', "CASE WHEN rt_isgroup THEN 'Yes' ELSE 'No' END" );
$browser->AddHidden( 'confers' );
$browser->AddColumn( 'email', translate('EMail') );
if ( $ef->EditMode ) { // && $session->AllowedTo("MaintainRelationships") ) {
- $browser->AddColumn( 'delete', translate('Delete'), 'centre', '', "'user_no&action=delete_relationship&to_user=' || user_no || '\">Delete'" );
+ $browser->AddColumn( 'delete', translate('Delete'), 'centre', '', "'base_url/user.php?edit=1&user_no=$this->user_no&action=delete_relationship&to_user=' || user_no || '\">Delete'" );
}
$browser->SetJoins( 'relationship NATURAL JOIN relationship_type rt LEFT JOIN usr ON (to_user = user_no)' );
@@ -172,7 +172,7 @@ EOSQL;
if ( $title == null ) $title = i18n("Relationships to this user");
$browser = new Browser("");
- $browser->AddHidden( 'user_link', "'' || fullname || ''" );
+ $browser->AddHidden( 'user_link', "'base_url/user.php?user_no=' || user_no || '\">' || fullname || ''" );
$browser->AddColumn( 'fullname', translate('Linked From'), 'left', '##user_link##' );
$browser->AddColumn( 'rt_name', translate('Relationship') );
$browser->AddColumn( 'is_group', translate('Group?'), 'centre', '', "CASE WHEN rt_isgroup THEN 'Yes' ELSE 'No' END" );
@@ -211,7 +211,7 @@ EOSQL;
if ( $title == null ) $title = i18n("This user's collections");
$browser = new Browser("");
- $browser->AddHidden( 'collection_link', "'' || dav_name || ''" );
+ $browser->AddHidden( 'collection_link', "'base_url/collection.php?user_no=' || user_no || '&dav_name=' || dav_name || '\">' || dav_name || ''" );
$browser->AddColumn( 'dav_name', translate('Collection Path'), 'left', '##collection_link##' );
$browser->AddColumn( 'is_calendar', translate('Is a Calendar?'), 'centre', '', "CASE WHEN is_calendar THEN 'Yes' ELSE 'No' END" );
$browser->AddColumn( 'created', translate('Created On') );
diff --git a/inc/always.php b/inc/always.php
index dfaf6179..d8b17f25 100644
--- a/inc/always.php
+++ b/inc/always.php
@@ -16,13 +16,17 @@ $c->system_name = "Really Simple CalDAV Store";
$c->domain_name = $_SERVER['SERVER_NAME'];
$c->images = "/images";
$c->save_time_zone_defs = true;
-$c->stylesheets = array( "/rscds.css" );
$c->collections_always_exist = true;
$c->enable_row_linking = true;
// $c->default_locale = array('es_MX', 'es_MX.UTF-8', 'es');
// $c->local_tzid = 'Pacific/Auckland'; // Perhaps we should read from /etc/timezone - I wonder how standard that is?
$c->default_locale = "en_NZ";
+$c->base_url = preg_replace("#/[^/]+\.php.*$#", "", $_SERVER['SCRIPT_NAME']);
$c->base_directory = preg_replace("#/[^/]*$#", "", $_SERVER['DOCUMENT_ROOT']);
+$c->stylesheets = array( $c->base_url."/rscds.css" );
+
+// Ensure that ../inc is in our included paths as early as possible
+set_include_path( '../inc'. PATH_SEPARATOR. get_include_path());
// Kind of private configuration values
$c->total_query_time = 0;
@@ -44,7 +48,7 @@ $c->protocol_server_port_script = sprintf( "%s://%s%s%s", (isset($_SERVER['HTTPS
),
$_SERVER['SCRIPT_NAME'] );
-dbg_error_log( "LOG", "==========> method =%s= =%s= =%s=", $_SERVER['REQUEST_METHOD'], $c->protocol_server_port_script, $_SERVER['PATH_INFO']);
+dbg_error_log( "LOG", "==========> method =%s= =%s= =%s= =%s=", $_SERVER['REQUEST_METHOD'], $c->protocol_server_port_script, $_SERVER['PATH_INFO'], $c->base_url );
init_gettext( 'rscds', $c->base_directory.'/locale' );
diff --git a/inc/interactive-page.php b/inc/interactive-page.php
index 9b744e8b..1e49db65 100644
--- a/inc/interactive-page.php
+++ b/inc/interactive-page.php
@@ -1,16 +1,16 @@
AddOption(translate("Home"),"/",translate("Browse all users"), false, 3900 );
-$page_menu->AddOption(translate("Help"),"/help.php",translate("Help on something or other"), false, 4500 );
-$page_menu->AddOption(translate("Logout"),"/?logout",translate("Log out of the").$c->system_name, false, 5400 );
+$page_menu->AddOption(translate("Home"),"$c->base_url/",translate("Browse all users"), false, 3900 );
+$page_menu->AddOption(translate("Help"),"$c->base_url/help.php",translate("Help on something or other"), false, 4500 );
+$page_menu->AddOption(translate("Logout"),"$c->base_url/?logout",translate("Log out of the").$c->system_name, false, 5400 );
$page_menu->AddOption(translate("Report Bug"),"http://sourceforge.net/tracker/?func=add&group_id=179845&atid=890785",translate("Report a bug in the system"), false, 9000 );
$relationship_menu = new MenuSet('submenu', 'submenu', 'submenu_active');
$user_menu = new MenuSet('submenu', 'submenu', 'submenu_active');
// $role_menu = new MenuSet('submenu', 'submenu', 'submenu_active');
-$user_menu->AddOption(translate("My Details"),"/user.php?user_no=$session->user_no",translate("View my own user record"), false, 700);
+$user_menu->AddOption(translate("My Details"),"$c->base_url/user.php?user_no=$session->user_no",translate("View my own user record"), false, 700);
-$active_menu_pattern = '#^/(index.*)?$#'
+$active_menu_pattern = "#^$c->base_url/(index.*)?$#";
?>
\ No newline at end of file
diff --git a/inc/page-header.php b/inc/page-header.php
index b99509bf..a9409a0c 100644
--- a/inc/page-header.php
+++ b/inc/page-header.php
@@ -6,6 +6,8 @@ if ( !isset($c->title) ) {
function make_help_link($matches)
{
+ global $c;
+
// as usual: $matches[0] is the complete match
// $matches[1] the match for the first subpattern
// enclosed in '##...##' and so on
@@ -21,7 +23,7 @@ function make_help_link($matches)
else {
$display_url = "help";
}
- return " [$display_url] ";
+ return " base_url/help.php?h=$help_topic\" title=\"".translate("Show help on")." '$help_topic'\" target=\"_new\">[$display_url] ";
}
@@ -66,8 +68,8 @@ EOHDR;
if ( isset($page_menu) && is_object($page_menu) ) {
$page_menu->AddSubMenu( $relationship_menu, translate("Relationships"),
- "/relationship_types.php", translate("Browse all relationship types"), false, 4050 );
- $page_menu->AddSubMenu( $user_menu, translate("Users"), "/users.php", translate("Browse all users"), false, 4100 );
+ "$c->base_url/relationship_types.php", translate("Browse all relationship types"), false, 4050 );
+ $page_menu->AddSubMenu( $user_menu, translate("Users"), "$c->base_url/users.php", translate("Browse all users"), false, 4100 );
// $page_menu->AddSubMenu( $role_menu, "Roles", "/roles.php", "Browse all roles", false, 4300 );
$page_menu->MakeSomethingActive($active_menu_pattern);
echo $page_menu->Render();
diff --git a/testing/tests/regression-suite/107-Evo-REPORT-1.result b/testing/tests/regression-suite/107-Evo-REPORT-1.result
new file mode 100644
index 00000000..f7092495
--- /dev/null
+++ b/testing/tests/regression-suite/107-Evo-REPORT-1.result
@@ -0,0 +1,28 @@
+HTTP/1.1 207 Multi-Status
+Date: Dow, 01 Jan 2000 00:00:00 GMT
+Server: Apache/2.2.3 (Debian) DAV/2
+ETag: "daca68be14cb0969dd84f1410a2764ed"
+Content-Length: 560
+Content-Type: text/xml; charset="utf-8"
+
+
+
+
+ http://mycaldav/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics
+
+
+ "2c32a2f8aba853654eb17fe037a4db4d"
+
+ HTTP/1.1 200 OK
+
+
+
+ http://mycaldav/user1/home/20061101T073004Z.ics
+
+
+ "c3658901fd4689d4a1e1d6f08601ef4f"
+
+ HTTP/1.1 200 OK
+
+
+
diff --git a/testing/tests/regression-suite/107-Evo-REPORT-1.test b/testing/tests/regression-suite/107-Evo-REPORT-1.test
new file mode 100644
index 00000000..a9323010
--- /dev/null
+++ b/testing/tests/regression-suite/107-Evo-REPORT-1.test
@@ -0,0 +1,10 @@
+#
+# Do a REPORT request (test RewriteRule support)
+#
+TYPE=REPORT
+URL=http://mycaldav/user1/home/
+HEAD
+HEADER=Depth: 1
+HEADER=User-Agent: Evolution/1.8.1
+HEADER=Content-Type: text/xml
+DATA=105-Evo-REPORT-1
diff --git a/testing/tests/regression-suite/108-Evo-REPORT-1.result b/testing/tests/regression-suite/108-Evo-REPORT-1.result
new file mode 100644
index 00000000..c81f5141
--- /dev/null
+++ b/testing/tests/regression-suite/108-Evo-REPORT-1.result
@@ -0,0 +1,28 @@
+HTTP/1.1 207 Multi-Status
+Date: Dow, 01 Jan 2000 00:00:00 GMT
+Server: Apache/2.2.3 (Debian) DAV/2
+ETag: "5940fad8fc254eb229f36f3176385154"
+Content-Length: 596
+Content-Type: text/xml; charset="utf-8"
+
+
+
+
+ http://myapms/calendar/caldav.php/user1/home/3F4CF6227300FD062D9EF3CDFB30D32D-0.ics
+
+
+ "2c32a2f8aba853654eb17fe037a4db4d"
+
+ HTTP/1.1 200 OK
+
+
+
+ http://myapms/calendar/caldav.php/user1/home/20061101T073004Z.ics
+
+
+ "c3658901fd4689d4a1e1d6f08601ef4f"
+
+ HTTP/1.1 200 OK
+
+
+
diff --git a/testing/tests/regression-suite/108-Evo-REPORT-1.test b/testing/tests/regression-suite/108-Evo-REPORT-1.test
new file mode 100644
index 00000000..1a96e706
--- /dev/null
+++ b/testing/tests/regression-suite/108-Evo-REPORT-1.test
@@ -0,0 +1,10 @@
+#
+# Do a REPORT request (test operation in subdirectory of unrelated site)
+#
+TYPE=REPORT
+URL=http://myapms/calendar/caldav.php/user1/home/
+HEAD
+HEADER=Depth: 1
+HEADER=User-Agent: Evolution/1.8.1
+HEADER=Content-Type: text/xml
+DATA=105-Evo-REPORT-1