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