diff --git a/apps/calendar/templates/part.import.php b/apps/calendar/templates/part.import.php index c1beb49a7f7..37493674371 100644 --- a/apps/calendar/templates/part.import.php +++ b/apps/calendar/templates/part.import.php @@ -58,13 +58,18 @@ function importcal(importtype){ var file = $("#filename").val(); if(importtype == "existing"){ var calid = $("input:radio[name='calendar']:checked").val(); - $.getJSON(OC.filePath('calendar', '', 'import.php') + "?import=existing&calid=" + calid + "&path=" + path + "&file=" + file); + $.getJSON(OC.filePath('calendar', '', 'import.php') + "?import=existing&calid=" + calid + "&path=" + path + "&file=" + file, function(){ + $("#importdialog").dialog('destroy').remove(); + $("#importdialogholder").remove(); + }); } if(importtype == "new"){ var calname = $("#displayname").val(); var description = $("#description").val(); - $.post(OC.filePath('calendar', '', 'import.php'), {'import':'new', 'calname':calname, 'description':description, 'path':path, 'file':file}); + $.post(OC.filePath('calendar', '', 'import.php'), {'import':'new', 'calname':calname, 'description':description, 'path':path, 'file':file}, function(){ + $("#importdialog").dialog('destroy').remove(); + $("#importdialogholder").remove(); + }); } - window.location = oc_webroot + "/apps/calendar/"; } \ No newline at end of file diff --git a/apps/calendar/templates/settings.php b/apps/calendar/templates/settings.php index 44fbb230a43..3bfda702e9b 100644 --- a/apps/calendar/templates/settings.php +++ b/apps/calendar/templates/settings.php @@ -11,8 +11,8 @@ OC_UTIL::addStyle('', 'jquery.multiselect'); ?>
- - '.$city.''; endif; endforeach;?> -    - -
- -
- -
- - t("Minutes");?> -
+ + + + + + + + + + + + + + + t("Minutes");?> + + t('Calendar CalDAV syncing address:');?>
diff --git a/apps/media/css/music.css b/apps/media/css/music.css index c4db4e05855..8575e6334a5 100644 --- a/apps/media/css/music.css +++ b/apps/media/css/music.css @@ -18,7 +18,7 @@ a.jp-mute,a.jp-unmute { left:24em; } div.jp-volume-bar { position:absolute; overflow:hidden; background:#eee; width:4em; height:0.4em; cursor:pointer; top:1.3em; left:27em; } div.jp-volume-bar-value { background:#ccc; width:0; height:0.4em; } -#collection { padding-top:1em; position:relative; width:70em; float:left; } +#collection { padding-top:1em; position:relative; width:100%; float:left; } #collection li.album,#collection li.song { margin-left:3em; } #leftcontent img.remove { display:none; float:right; cursor:pointer; } #leftcontent li:hover img.remove { display:inline; } diff --git a/apps/remoteStorage/appinfo/app.php b/apps/remoteStorage/appinfo/app.php new file mode 100644 index 00000000000..ac1ecde5082 --- /dev/null +++ b/apps/remoteStorage/appinfo/app.php @@ -0,0 +1,5 @@ + 10, + 'id' => 'remoteStorage', + 'name' => 'remoteStorage compatibility' )); diff --git a/apps/unhosted/appinfo/database.xml b/apps/remoteStorage/appinfo/database.xml similarity index 96% rename from apps/unhosted/appinfo/database.xml rename to apps/remoteStorage/appinfo/database.xml index db25657085b..b4e1ac7d8af 100644 --- a/apps/unhosted/appinfo/database.xml +++ b/apps/remoteStorage/appinfo/database.xml @@ -43,7 +43,7 @@ 64 - a_app_unhostedweb_user + a_app_remotestorage_user true user diff --git a/apps/remoteStorage/appinfo/info.xml b/apps/remoteStorage/appinfo/info.xml new file mode 100644 index 00000000000..a20c6ff4cd4 --- /dev/null +++ b/apps/remoteStorage/appinfo/info.xml @@ -0,0 +1,10 @@ + + + remoteStorage + remoteStorage compatibility + Enables your users to use ownCloud as their remote storage for unhosted applications. + 0.1 + AGPL + Michiel de Jong + 2 + diff --git a/apps/unhosted/compat.php b/apps/remoteStorage/compat.php similarity index 81% rename from apps/unhosted/compat.php rename to apps/remoteStorage/compat.php index a514018f71a..d383e879510 100644 --- a/apps/unhosted/compat.php +++ b/apps/remoteStorage/compat.php @@ -30,16 +30,16 @@ $RUNTIME_NOSETUPFS = true; require_once('../../lib/base.php'); -OC_Util::checkAppEnabled('unhosted'); +OC_Util::checkAppEnabled('remoteStorage'); require_once('Sabre/autoload.php'); -require_once('lib_unhosted.php'); +require_once('lib_remoteStorage.php'); require_once('oauth_ro_auth.php'); ini_set('default_charset', 'UTF-8'); #ini_set('error_reporting', ''); @ob_clean(); -//allow use as unhosted storage for other websites +//allow use as remote storage for other websites if(isset($_SERVER['HTTP_ORIGIN'])) { header('Access-Control-Allow-Origin: ' . $_SERVER['HTTP_ORIGIN']); header('Access-Control-Max-Age: 3600'); @@ -53,12 +53,12 @@ $path = substr($_SERVER["REQUEST_URI"], strlen($_SERVER["SCRIPT_NAME"])); $pathParts = explode('/', $path); // for webdav: // 0/ 1 / 2 / 3 / 4 / 5 / 6 / 7 -// /$ownCloudUser/unhosted/webdav/$userHost/$userName/$dataScope/$key +// /$ownCloudUser/remoteStorage/webdav/$userHost/$userName/$dataScope/$key // for oauth: // 0/ 1 / 2 / 3 / 4 -// /$ownCloudUser/unhosted/oauth/auth +// /$ownCloudUser/remoteStorage/oauth/auth -if(count($pathParts) >= 8 && $pathParts[0] == '' && $pathParts[2] == 'unhosted' && $pathParts[3] == 'webdav') { +if(count($pathParts) >= 8 && $pathParts[0] == '' && $pathParts[2] == 'remoteStorage' && $pathParts[3] == 'webdav') { list($dummy0, $ownCloudUser, $dummy2, $dummy3, $userHost, $userName, $dataScope) = $pathParts; OC_Util::setupFS($ownCloudUser); @@ -68,10 +68,10 @@ if(count($pathParts) >= 8 && $pathParts[0] == '' && $pathParts[2] == 'unhosted' $server = new Sabre_DAV_Server($publicDir); // Path to our script - $server->setBaseUri(OC::$WEBROOT."/apps/unhosted/compat.php/$ownCloudUser"); + $server->setBaseUri(OC::$WEBROOT."/apps/remoteStorage/compat.php/$ownCloudUser"); // Auth backend - $authBackend = new OC_Connector_Sabre_Auth_ro_oauth(OC_UnhostedWeb::getValidTokens($ownCloudUser, $userName.'@'.$userHost, $dataScope)); + $authBackend = new OC_Connector_Sabre_Auth_ro_oauth(OC_remoteStorage::getValidTokens($ownCloudUser, $userName.'@'.$userHost, $dataScope)); $authPlugin = new Sabre_DAV_Auth_Plugin($authBackend,'ownCloud');//should use $validTokens here $server->addPlugin($authPlugin); @@ -83,7 +83,7 @@ if(count($pathParts) >= 8 && $pathParts[0] == '' && $pathParts[2] == 'unhosted' // And off we go! $server->exec(); -} else if(count($pathParts) >= 4 && $pathParts[0] == '' && $pathParts[2] == 'unhosted' && $pathParts[3] == 'oauth2' && $pathParts[4] = 'auth') { +} else if(count($pathParts) >= 4 && $pathParts[0] == '' && $pathParts[2] == 'remoteStorage' && $pathParts[3] == 'oauth2' && $pathParts[4] = 'auth') { if(isset($_POST['allow'])) { //TODO: input checking. these explodes may fail to produces the desired arrays: $ownCloudUser = $pathParts[1]; @@ -98,8 +98,8 @@ if(count($pathParts) >= 8 && $pathParts[0] == '' && $pathParts[2] == 'unhosted' } if(OC_User::getUser() == $ownCloudUser) { //TODO: check if this can be faked by editing the cookie in firebug! - $token=OC_UnhostedWeb::createDataScope($appUrl, $userAddress, $dataScope); - header('Location: '.$_GET['redirect_uri'].'#access_token='.$token.'&token_type=unhosted'); + $token=OC_remoteStorage::createDataScope($appUrl, $userAddress, $dataScope); + header('Location: '.$_GET['redirect_uri'].'#access_token='.$token.'&token_type=remoteStorage'); } else { if($_SERVER['HTTPS']){ $url = "https://"; @@ -107,7 +107,7 @@ if(count($pathParts) >= 8 && $pathParts[0] == '' && $pathParts[2] == 'unhosted' $url = "http://"; } $url .= $_SERVER['SERVER_NAME']; - $url .= substr($_SERVER['SCRIPT_NAME'], 0, -strlen('apps/unhosted/compat.php')); + $url .= substr($_SERVER['SCRIPT_NAME'], 0, -strlen('apps/remoteStorage/compat.php')); die('Please ' .'execute(array($user,$userAddress,$dataScope)); @@ -66,7 +66,7 @@ class OC_UnhostedWeb { //TODO: input checking on $userAddress and $dataScope list($userName, $userHost) = explode('@', $userAddress); OC_Util::setupFS(OC_User::getUser()); - $scopePathParts = array('unhosted', 'webdav', $userHost, $userName, $dataScope); + $scopePathParts = array('remoteStorage', 'webdav', $userHost, $userName, $dataScope); for($i=0;$i<=count($scopePathParts);$i++){ $thisPath = '/'.implode('/', array_slice($scopePathParts, 0, $i)); if(!OC_Filesystem::file_exists($thisPath)) { diff --git a/apps/unhosted/oauth_ro_auth.php b/apps/remoteStorage/oauth_ro_auth.php similarity index 100% rename from apps/unhosted/oauth_ro_auth.php rename to apps/remoteStorage/oauth_ro_auth.php diff --git a/apps/unhosted/appinfo/app.php b/apps/unhosted/appinfo/app.php deleted file mode 100644 index 84e07304534..00000000000 --- a/apps/unhosted/appinfo/app.php +++ /dev/null @@ -1,5 +0,0 @@ - 10, - 'id' => 'unhosted', - 'name' => 'Unhosted Web' )); diff --git a/apps/unhosted/appinfo/info.xml b/apps/unhosted/appinfo/info.xml deleted file mode 100644 index 359620f4578..00000000000 --- a/apps/unhosted/appinfo/info.xml +++ /dev/null @@ -1,10 +0,0 @@ - - - unhosted - Unhosted Web - On websites that allow unhosted accounts, use your owncloud as the storage for your user data - 0.1 - AGPL - Michiel de Jong - 2 - diff --git a/apps/user_webfinger/activate.php b/apps/user_webfinger/activate.php index 547c8e54d32..50257232ae4 100644 --- a/apps/user_webfinger/activate.php +++ b/apps/user_webfinger/activate.php @@ -1,11 +1,4 @@ user_webfinger Webfinger - Provide webfinger for all users, so that they can use their ownCloud account as their remote storage on the web. If you don't run owncloud in the root of your domain, for instance if you run it on http://example.com/owncloud/, then makes sure you link http://example.com/.well-known/ to http://example.com/owncloud/apps/user_webfinger/ - for instance by running something like "ln -s /var/www/owncloud/apps/user_webfinger /var/www/.well-known". Only enable this app if you run this owncloud installation on a public web address, not if you run it on an intranet or on localhost. + Provide WebFinger for all users so they get a user address like user@owncloudinstance which can be used for unhosted applications. If you don't run ownCloud in the root of your domain, for instance if you run it on example.com/owncloud/, then make sure you link example.com/.well-known/ to example.com/owncloud/apps/user_webfinger/ - by running something like "ln -s /var/www/owncloud/apps/user_webfinger /var/www/.well-known". Only enable this app if you run this ownCloud installation on a public web address, not if you run it on an intranet or on localhost. 0.1 AGPL Michiel de Jong diff --git a/apps/user_webfinger/webfinger.php b/apps/user_webfinger/webfinger.php index 269bb4758ed..afb53689682 100644 --- a/apps/user_webfinger/webfinger.php +++ b/apps/user_webfinger/webfinger.php @@ -20,5 +20,5 @@ echo "<"; ?xml version="1.0" encoding="UTF-8"?> - + diff --git a/core/css/styles.css b/core/css/styles.css index 8f309333318..84a024f95b9 100644 --- a/core/css/styles.css +++ b/core/css/styles.css @@ -15,9 +15,9 @@ body { background:#fefefe; font:normal .8em/1.6em "Lucida Grande", Arial, Verdan /* HEADERS */ -#body-user #header, #body-settings #header { position:fixed; top:0; z-index:100; width:100%; height:2.5em; padding:.5em; background:#1d2d44; -moz-box-shadow:0 0 10px #000, inset 0 -2px 10px #222; -webkit-box-shadow:0 0 10px #000, inset 0 -2px 10px #222; box-shadow:0 0 10px #000, inset 0 -2px 10px #222; } +#body-user #header, #body-settings #header { position:fixed; top:0; z-index:100; width:100%; height:2.5em; padding:.5em; background:#1d2d44; -moz-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; -webkit-box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; box-shadow:0 0 10px rgba(0, 0, 0, .5), inset 0 -2px 10px #222; } #body-login #header { margin: -2em auto 0; text-align:center; height:10em; - -moz-box-shadow:0 0 1em #000; -webkit-box-shadow:0 0 1em #000; box-shadow:0 0 1em #000; + -moz-box-shadow:0 0 1em rgba(0, 0, 0, .5); -webkit-box-shadow:0 0 1em rgba(0, 0, 0, .5); box-shadow:0 0 1em rgba(0, 0, 0, .5); background: #1d2d44; /* Old browsers */ background: -moz-linear-gradient(top, #35537a 0%, #1d2d42 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#35537a), color-stop(100%,#1d2d42)); /* Chrome,Safari4+ */ @@ -53,7 +53,7 @@ input[type="submit"].highlight{ background:#ffc100; border:1px solid #db0; text- #controls { width:100%; top:3.5em; height:2.8em; margin:0; background:#f7f7f7; border-bottom:1px solid #eee; position:fixed; z-index:50; -moz-box-shadow:0 -3px 7px #000; -webkit-box-shadow:0 -3px 7px #000; box-shadow:0 -3px 7px #000; } #controls .button { display:inline-block; } #content { margin:3.5em 0 0 12.5em; } -#leftcontent, .leftcontent { position:absolute; top:6.4em; width:20em; background:#f8f8f8; height:100%; border-right:1px solid #ddd; } +#leftcontent, .leftcontent { position:fixed; overflow: auto; top:6.4em; width:20em; background:#f8f8f8; border-right:1px solid #ddd; } #leftcontent li, .leftcontent li { padding:.3em .8em; white-space:nowrap; overflow:hidden; text-overflow:ellipsis; -webkit-transition:background-color 500ms; -moz-transition:background-color 500ms; -o-transition:background-color 500ms; transition:background-color 500ms; } #leftcontent li:hover, #leftcontent li:active, #leftcontent li.active, .leftcontent li:hover, .leftcontent li:active, .leftcontent li.active { background:#eee; } #rightcontent, .rightcontent { position:absolute; top:6.4em; left:33em; } @@ -69,7 +69,7 @@ input[type="submit"].highlight{ background:#ffc100; border:1px solid #db0; text- #login form { width:22em; margin:2em auto 2em; padding:0; } #login form fieldset { background:0; border:0; margin-bottom:2em; padding:0; } #login form fieldset legend { font-weight:bold; } -#login form label { margin:.8em .8em; color:#666; } +#login form label { margin:.9em .8em .7em;; color:#666; } /* NEEDED FOR INFIELD LABELS */ p.infield { position: relative; } label.infield { cursor: text !important; } @@ -98,13 +98,14 @@ label.infield { cursor: text !important; } /* VARIOUS REUSABLE SELECTORS */ .hidden { display:none; } +.bold { font-weight: bold; } #notification { z-index:101; cursor:pointer; background-color:#fc4; border:0; padding:0 .7em .3em; display:none; position:fixed; left:50%; top:0; -moz-border-radius-bottomleft:1em; -webkit-border-bottom-left-radius:1em; border-bottom-left-radius:1em; -moz-border-radius-bottomright:1em; -webkit-border-bottom-right-radius:1em; border-bottom-right-radius:1em; } .action, .selectedActions a, #logout { opacity:.3; -webkit-transition:opacity 500ms; -moz-transition:opacity 500ms; -o-transition:opacity 500ms; transition:opacity 500ms; } .action:hover, .selectedActions a:hover, #logout:hover { opacity:1; } -table tr { -webkit-transition:background-color 500ms; -moz-transition:background-color 500ms; -o-transition:background-color 500ms; transition:background-color 500ms; } +table:not(.nostyle) tr { -webkit-transition:background-color 500ms; -moz-transition:background-color 500ms; -o-transition:background-color 500ms; transition:background-color 500ms; } tbody tr:hover, tr:active { background-color:#f8f8f8; } #body-settings .personalblock, #body-settings .helpblock { padding:.5em 1em; margin:1em; background:#f8f8f8; color:#555; text-shadow:#fff 0 1px 0; -moz-border-radius:.5em; -webkit-border-radius:.5em; border-radius:.5em; } diff --git a/core/js/js.js b/core/js/js.js index 61a60c52485..9e814ca0729 100644 --- a/core/js/js.js +++ b/core/js/js.js @@ -244,7 +244,36 @@ function object(o) { return new F(); } + +/** + * Fills height of window. (more precise than height: 100%;) + */ +function fillHeight(selector) { + var height = parseFloat($(window).height())-parseFloat(selector.css('top')); + selector.css('height', height + 'px'); + if(selector.outerHeight() > selector.height()) + selector.css('height', height-(selector.outerHeight()-selector.height()) + 'px'); +} + +/** + * Fills height and width of window. (more precise than height: 100%; or width: 100%;) + */ +function fillWindow(selector) { + fillHeight(selector); + var width = parseFloat($(window).width())-parseFloat(selector.css('left')); + selector.css('width', width + 'px'); + if(selector.outerWidth() > selector.width()) + selector.css('width', width-(selector.outerWidth()-selector.width()) + 'px'); +} + $(document).ready(function(){ + + $(window).resize(function () { + fillHeight($('#leftcontent')); + fillWindow($('#rightcontent')); + }); + $(window).trigger('resize'); + if(!SVGSupport()){//replace all svg images with png images for browser that dont support svg replaceSVG(); }else{ diff --git a/core/templates/login.php b/core/templates/login.php index aff0afac203..6c0a7a12227 100644 --- a/core/templates/login.php +++ b/core/templates/login.php @@ -1,5 +1,6 @@
+ '; } ?> t('Lost your password?'); ?> diff --git a/index.php b/index.php index fb8d1922dd4..2e55827a62a 100644 --- a/index.php +++ b/index.php @@ -68,6 +68,9 @@ else { OC_User::setUserId($_COOKIE['oc_username']); OC_Util::redirectToDefaultPage(); } + else { + OC_User::unsetMagicInCookie(); + } } // Someone wants to log in : @@ -90,5 +93,5 @@ else { } } - OC_Template::printGuestPage('', 'login', array('error' => $error )); + OC_Template::printGuestPage('', 'login', array('error' => $error, 'redirect' => isset($_REQUEST['redirect_url'])?$_REQUEST['redirect_url']:'' )); } diff --git a/lib/helper.php b/lib/helper.php index b6332b54aea..9c2b5fc33ce 100644 --- a/lib/helper.php +++ b/lib/helper.php @@ -61,7 +61,7 @@ class OC_Helper { } if($redirect_url) - return $urlLinkTo.'?redirect_url='.$redirect_url; + return $urlLinkTo.'?redirect_url='.urlencode($_SERVER["REQUEST_URI"]); else return $urlLinkTo; diff --git a/lib/util.php b/lib/util.php index 5d03c56f18e..f8748e868c1 100644 --- a/lib/util.php +++ b/lib/util.php @@ -321,7 +321,11 @@ class OC_Util { * Redirect to the user default page */ public static function redirectToDefaultPage(){ - header( 'Location: '.OC::$WEBROOT.'/'.OC_Appconfig::getValue('core', 'defaultpage', 'files/index.php')); + if(isset($_REQUEST['redirect_url'])) { + header( 'Location: '.$_REQUEST['redirect_url']); + } else { + header( 'Location: '.OC::$WEBROOT.'/'.OC_Appconfig::getValue('core', 'defaultpage', 'files/index.php')); + } exit(); } } diff --git a/settings/css/settings.css b/settings/css/settings.css index 4b5bc06b218..8d89cee6ec0 100644 --- a/settings/css/settings.css +++ b/settings/css/settings.css @@ -9,11 +9,13 @@ input#identity { width:20em; } .msg.success{ color:#fff; background-color:#0f0; padding:3px; text-shadow:1px 1px #000; } .msg.error{ color:#fff; background-color:#f00; padding:3px; text-shadow:1px 1px #000; } +table.nostyle label { margin-right: 2em; } +table.nostyle td { padding: 0.2em 0; } /* USERS */ form { display:inline; } -table th { height:2em; color:#999; } -table th, table td { border-bottom:1px solid #ddd; padding:0 .5em; padding-left:.8em; text-align:left; font-weight:normal; } +table:not(.nostyle) th { height:2em; color:#999; } +table:not(.nostyle) th, table:not(.nostyle) td { border-bottom:1px solid #ddd; padding:0 .5em; padding-left:.8em; text-align:left; font-weight:normal; } td.name, td.password { padding-left:.8em; } td.password>img, td.remove>img, td.quota>img { visibility:hidden; } td.password, td.quota { width:12em; cursor:pointer; } @@ -24,8 +26,8 @@ tr:hover>td.password>span { margin:0; cursor:pointer; } tr:hover>td.remove>img, tr:hover>td.password>img, tr:hover>td.quota>img { visibility:visible; cursor:pointer; } tr:hover>td.remove>img { float:right; } li.selected { background-color:#ddd; } -#content>table { margin-top:6.5em; } -table { width:100%; } +#content>table:not(.nostyle) { margin-top:6.5em; } +table:not(.nostyle) { width:100%; } /* APPS */