Merge branch 'master' into no-css-js-delivery-via-php
Conflicts: config/config.sample.php
|
@ -4,7 +4,7 @@ OCP\JSON::checkAppEnabled('files_external');
|
|||
OCP\JSON::callCheck();
|
||||
|
||||
if ( ! ($filename = $_FILES['rootcert_import']['name']) ) {
|
||||
header("Location: settings/personal.php");
|
||||
header('Location:' . OCP\Util::linkToRoute( "settings_personal" ));
|
||||
exit;
|
||||
}
|
||||
|
||||
|
|
|
@ -352,9 +352,8 @@ class OC_Mount_Config {
|
|||
$phpFile = OC_User::getHome(OCP\User::getUser()).'/mount.php';
|
||||
$jsonFile = OC_User::getHome(OCP\User::getUser()).'/mount.json';
|
||||
} else {
|
||||
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
|
||||
$phpFile = OC::$SERVERROOT.'/config/mount.php';
|
||||
$jsonFile = $datadir . '/mount.json';
|
||||
$jsonFile = \OC_Config::getValue("mount_file", \OC::$SERVERROOT . "/data/mount.json");
|
||||
}
|
||||
if (is_file($jsonFile)) {
|
||||
$mountPoints = json_decode(file_get_contents($jsonFile), true);
|
||||
|
@ -380,8 +379,7 @@ class OC_Mount_Config {
|
|||
if ($isPersonal) {
|
||||
$file = OC_User::getHome(OCP\User::getUser()).'/mount.json';
|
||||
} else {
|
||||
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
|
||||
$file = $datadir . '/mount.json';
|
||||
$file = \OC_Config::getValue("mount_file", \OC::$SERVERROOT . "/data/mount.json");
|
||||
}
|
||||
$content = json_encode($data);
|
||||
@file_put_contents($file, $content);
|
||||
|
|
|
@ -118,10 +118,16 @@ class Helper {
|
|||
return false;
|
||||
}
|
||||
|
||||
$saveOtherConfigurations = '';
|
||||
if(empty($prefix)) {
|
||||
$saveOtherConfigurations = 'AND `Configkey` NOT LIKE \'s%\'';
|
||||
}
|
||||
|
||||
$query = \OCP\DB::prepare('
|
||||
DELETE
|
||||
FROM `*PREFIX*appconfig`
|
||||
WHERE `configkey` LIKE ?
|
||||
'.$saveOtherConfigurations.'
|
||||
AND `appid` = \'user_ldap\'
|
||||
AND `configkey` NOT IN (\'enabled\', \'installed_version\', \'types\', \'bgjUpdateGroupsLastRun\')
|
||||
');
|
||||
|
|
|
@ -0,0 +1,71 @@
|
|||
<?php
|
||||
/**
|
||||
* ownCloud
|
||||
*
|
||||
* @author Arthur Schiwon
|
||||
* @copyright 2013 Arthur Schiwon blizzz@owncloud.com
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU AFFERO GENERAL PUBLIC LICENSE
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 3 of the License, or any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU AFFERO GENERAL PUBLIC LICENSE for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Affero General Public
|
||||
* License along with this library. If not, see <http://www.gnu.org/licenses/>.
|
||||
*
|
||||
*/
|
||||
|
||||
namespace OCA\user_ldap\tests;
|
||||
|
||||
use \OCA\user_ldap\lib\Access;
|
||||
use \OCA\user_ldap\lib\Connection;
|
||||
use \OCA\user_ldap\lib\ILDAPWrapper;
|
||||
|
||||
class Test_Access extends \PHPUnit_Framework_TestCase {
|
||||
private function getConnecterAndLdapMock() {
|
||||
static $conMethods;
|
||||
static $accMethods;
|
||||
|
||||
if(is_null($conMethods) || is_null($accMethods)) {
|
||||
$conMethods = get_class_methods('\OCA\user_ldap\lib\Connection');
|
||||
$accMethods = get_class_methods('\OCA\user_ldap\lib\Access');
|
||||
}
|
||||
$lw = $this->getMock('\OCA\user_ldap\lib\ILDAPWrapper');
|
||||
$connector = $this->getMock('\OCA\user_ldap\lib\Connection',
|
||||
$conMethods,
|
||||
array($lw, null, null));
|
||||
|
||||
return array($lw, $connector);
|
||||
}
|
||||
|
||||
public function testEscapeFilterPartValidChars() {
|
||||
list($lw, $con) = $this->getConnecterAndLdapMock();
|
||||
$access = new Access($con, $lw);
|
||||
|
||||
$input = 'okay';
|
||||
$this->assertTrue($input === $access->escapeFilterPart($input));
|
||||
}
|
||||
|
||||
public function testEscapeFilterPartEscapeWildcard() {
|
||||
list($lw, $con) = $this->getConnecterAndLdapMock();
|
||||
$access = new Access($con, $lw);
|
||||
|
||||
$input = '*';
|
||||
$expected = '\\\\*';
|
||||
$this->assertTrue($expected === $access->escapeFilterPart($input));
|
||||
}
|
||||
|
||||
public function testEscapeFilterPartEscapeWildcard2() {
|
||||
list($lw, $con) = $this->getConnecterAndLdapMock();
|
||||
$access = new Access($con, $lw);
|
||||
|
||||
$input = 'foo*bar';
|
||||
$expected = 'foo\\\\*bar';
|
||||
$this->assertTrue($expected === $access->escapeFilterPart($input));
|
||||
}
|
||||
}
|
|
@ -83,6 +83,12 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
|
|||
* @return void
|
||||
*/
|
||||
private function prepareAccessForCheckPassword(&$access) {
|
||||
$access->expects($this->once())
|
||||
->method('escapeFilterPart')
|
||||
->will($this->returnCallback(function($uid) {
|
||||
return $uid;
|
||||
}));
|
||||
|
||||
$access->connection->expects($this->any())
|
||||
->method('__get')
|
||||
->will($this->returnCallback(function($name) {
|
||||
|
@ -116,17 +122,34 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
|
|||
}));
|
||||
}
|
||||
|
||||
public function testCheckPassword() {
|
||||
public function testCheckPasswordUidReturn() {
|
||||
$access = $this->getAccessMock();
|
||||
|
||||
$this->prepareAccessForCheckPassword($access);
|
||||
$backend = new UserLDAP($access);
|
||||
\OC_User::useBackend($backend);
|
||||
|
||||
$result = $backend->checkPassword('roland', 'dt19');
|
||||
$this->assertEquals('gunslinger', $result);
|
||||
}
|
||||
|
||||
public function testCheckPasswordWrongPassword() {
|
||||
$access = $this->getAccessMock();
|
||||
|
||||
$this->prepareAccessForCheckPassword($access);
|
||||
$backend = new UserLDAP($access);
|
||||
\OC_User::useBackend($backend);
|
||||
|
||||
$result = $backend->checkPassword('roland', 'wrong');
|
||||
$this->assertFalse($result);
|
||||
}
|
||||
|
||||
public function testCheckPasswordWrongUser() {
|
||||
$access = $this->getAccessMock();
|
||||
|
||||
$this->prepareAccessForCheckPassword($access);
|
||||
$backend = new UserLDAP($access);
|
||||
\OC_User::useBackend($backend);
|
||||
|
||||
$result = $backend->checkPassword('mallory', 'evil');
|
||||
$this->assertFalse($result);
|
||||
|
@ -140,9 +163,23 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
|
|||
|
||||
$result = \OCP\User::checkPassword('roland', 'dt19');
|
||||
$this->assertEquals('gunslinger', $result);
|
||||
}
|
||||
|
||||
public function testCheckPasswordPublicAPIWrongPassword() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForCheckPassword($access);
|
||||
$backend = new UserLDAP($access);
|
||||
\OC_User::useBackend($backend);
|
||||
|
||||
$result = \OCP\User::checkPassword('roland', 'wrong');
|
||||
$this->assertFalse($result);
|
||||
}
|
||||
|
||||
public function testCheckPasswordPublicAPIWrongUser() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForCheckPassword($access);
|
||||
$backend = new UserLDAP($access);
|
||||
\OC_User::useBackend($backend);
|
||||
|
||||
$result = \OCP\User::checkPassword('mallory', 'evil');
|
||||
$this->assertFalse($result);
|
||||
|
@ -154,6 +191,12 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
|
|||
* @return void
|
||||
*/
|
||||
private function prepareAccessForGetUsers(&$access) {
|
||||
$access->expects($this->once())
|
||||
->method('escapeFilterPart')
|
||||
->will($this->returnCallback(function($search) {
|
||||
return $search;
|
||||
}));
|
||||
|
||||
$access->expects($this->any())
|
||||
->method('getFilterPartForUserSearch')
|
||||
->will($this->returnCallback(function($search) {
|
||||
|
@ -191,28 +234,52 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
|
|||
->will($this->returnArgument(0));
|
||||
}
|
||||
|
||||
public function testGetUsers() {
|
||||
public function testGetUsersNoParam() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForGetUsers($access);
|
||||
$backend = new UserLDAP($access);
|
||||
|
||||
$result = $backend->getUsers();
|
||||
$this->assertEquals(3, count($result));
|
||||
}
|
||||
|
||||
public function testGetUsersLimitOffset() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForGetUsers($access);
|
||||
$backend = new UserLDAP($access);
|
||||
|
||||
$result = $backend->getUsers('', 1, 2);
|
||||
$this->assertEquals(1, count($result));
|
||||
}
|
||||
|
||||
public function testGetUsersLimitOffset2() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForGetUsers($access);
|
||||
$backend = new UserLDAP($access);
|
||||
|
||||
$result = $backend->getUsers('', 2, 1);
|
||||
$this->assertEquals(2, count($result));
|
||||
}
|
||||
|
||||
public function testGetUsersSearchWithResult() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForGetUsers($access);
|
||||
$backend = new UserLDAP($access);
|
||||
|
||||
$result = $backend->getUsers('yo');
|
||||
$this->assertEquals(2, count($result));
|
||||
}
|
||||
|
||||
public function testGetUsersSearchEmptyResult() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForGetUsers($access);
|
||||
$backend = new UserLDAP($access);
|
||||
|
||||
$result = $backend->getUsers('nix');
|
||||
$this->assertEquals(0, count($result));
|
||||
}
|
||||
|
||||
public function testGetUsersViaAPI() {
|
||||
public function testGetUsersViaAPINoParam() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForGetUsers($access);
|
||||
$backend = new UserLDAP($access);
|
||||
|
@ -220,15 +287,43 @@ class Test_User_Ldap_Direct extends \PHPUnit_Framework_TestCase {
|
|||
|
||||
$result = \OCP\User::getUsers();
|
||||
$this->assertEquals(3, count($result));
|
||||
}
|
||||
|
||||
public function testGetUsersViaAPILimitOffset() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForGetUsers($access);
|
||||
$backend = new UserLDAP($access);
|
||||
\OC_User::useBackend($backend);
|
||||
|
||||
$result = \OCP\User::getUsers('', 1, 2);
|
||||
$this->assertEquals(1, count($result));
|
||||
}
|
||||
|
||||
public function testGetUsersViaAPILimitOffset2() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForGetUsers($access);
|
||||
$backend = new UserLDAP($access);
|
||||
\OC_User::useBackend($backend);
|
||||
|
||||
$result = \OCP\User::getUsers('', 2, 1);
|
||||
$this->assertEquals(2, count($result));
|
||||
}
|
||||
|
||||
public function testGetUsersViaAPISearchWithResult() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForGetUsers($access);
|
||||
$backend = new UserLDAP($access);
|
||||
\OC_User::useBackend($backend);
|
||||
|
||||
$result = \OCP\User::getUsers('yo');
|
||||
$this->assertEquals(2, count($result));
|
||||
}
|
||||
|
||||
public function testGetUsersViaAPISearchEmptyResult() {
|
||||
$access = $this->getAccessMock();
|
||||
$this->prepareAccessForGetUsers($access);
|
||||
$backend = new UserLDAP($access);
|
||||
\OC_User::useBackend($backend);
|
||||
|
||||
$result = \OCP\User::getUsers('nix');
|
||||
$this->assertEquals(0, count($result));
|
||||
|
|
|
@ -266,4 +266,7 @@ $CONFIG = array(
|
|||
|
||||
/* all css and js files will be served by the web server statically in one js file and ons css file*/
|
||||
'asset-pipeline.enabled' => false,
|
||||
|
||||
/* where mount.json file should be stored, defaults to data/mount.json */
|
||||
'mount_file' => '',
|
||||
);
|
||||
|
|
|
@ -54,11 +54,6 @@
|
|||
background-color: #1B314D;
|
||||
}
|
||||
|
||||
/* in IE9 the nav bar on the left side is too narrow and leave a white area - original width is 80px */
|
||||
.ie9 #navigation {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
/* IE8 isn't able to display transparent background. So it is specified using a gradient */
|
||||
.ie8 #nojavascript {
|
||||
filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorstr='#4c320000', endColorstr='#4c320000'); /* IE */
|
||||
|
|
|
@ -48,7 +48,7 @@ ul.multiselectoptions > li input[type='checkbox']:checked+label {
|
|||
font-weight: bold;
|
||||
}
|
||||
|
||||
div.multiselect {
|
||||
div.multiselect, select.multiselect {
|
||||
display: inline-block;
|
||||
max-width: 400px;
|
||||
min-width: 150px;
|
||||
|
@ -58,6 +58,12 @@ div.multiselect {
|
|||
vertical-align: bottom;
|
||||
}
|
||||
|
||||
/* To make a select look like a multiselect until it's initialized */
|
||||
select.multiselect {
|
||||
height: 30px;
|
||||
min-width: 113px;
|
||||
}
|
||||
|
||||
div.multiselect.active {
|
||||
background-color: #fff;
|
||||
position: relative;
|
||||
|
|
|
@ -74,6 +74,19 @@ body { background:#fefefe; font:normal .8em/1.6em "Helvetica Neue",Helvetica,Ari
|
|||
color: #aaa;
|
||||
}
|
||||
|
||||
#header .logo {
|
||||
background-image: url(../img/logo.svg);
|
||||
width: 250px;
|
||||
height: 118px;
|
||||
margin: 0 auto;
|
||||
}
|
||||
|
||||
#header .logo-wide {
|
||||
background-image: url(../img/logo-wide.svg);
|
||||
width: 147px;
|
||||
height: 32px;
|
||||
}
|
||||
|
||||
/* INPUTS */
|
||||
input[type="text"],
|
||||
input[type="password"],
|
||||
|
@ -933,3 +946,20 @@ div.crumb:active {
|
|||
opacity:.7;
|
||||
}
|
||||
|
||||
.appear {
|
||||
opacity: 1;
|
||||
transition: opacity 500ms ease 0s;
|
||||
-moz-transition: opacity 500ms ease 0s;
|
||||
-ms-transition: opacity 500ms ease 0s;
|
||||
-o-transition: opacity 500ms ease 0s;
|
||||
-webkit-transition: opacity 500ms ease 0s;
|
||||
}
|
||||
.appear.transparent {
|
||||
opacity: 0;
|
||||
}
|
||||
|
||||
/* for IE10 */
|
||||
@-ms-viewport {
|
||||
width: device-width;
|
||||
}
|
||||
|
||||
|
|
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 12 KiB After Width: | Height: | Size: 12 KiB |
Before Width: | Height: | Size: 880 B After Width: | Height: | Size: 880 B |
Before Width: | Height: | Size: 5.0 KiB After Width: | Height: | Size: 5.0 KiB |
Before Width: | Height: | Size: 1.2 KiB After Width: | Height: | Size: 1.2 KiB |
Before Width: | Height: | Size: 6.7 KiB After Width: | Height: | Size: 6.7 KiB |
|
@ -24,6 +24,7 @@ foreach(OC_App::getEnabledApps() as $app) {
|
|||
|
||||
$array = array(
|
||||
"oc_debug" => (defined('DEBUG') && DEBUG) ? 'true' : 'false',
|
||||
"oc_isadmin" => OC_User::isAdminUser(OC_User::getUser()) ? 'true' : 'false',
|
||||
"oc_webroot" => "\"".OC::$WEBROOT."\"",
|
||||
"oc_appswebroots" => str_replace('\\/', '/', json_encode($apps_paths)), // Ugly unescape slashes waiting for better solution
|
||||
"datepickerFormatDate" => json_encode($l->l('jsdate', 'jsdate')),
|
||||
|
|
|
@ -36,7 +36,7 @@
|
|||
<body id="body-login">
|
||||
<div class="wrapper"><!-- for sticky footer -->
|
||||
<header><div id="header">
|
||||
<img src="<?php print_unescaped(image_path('', 'logo.svg')); ?>" class="svg" alt="<?php p($theme->getName()); ?>" />
|
||||
<div class='logo'></div>
|
||||
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
|
||||
</div></header>
|
||||
|
||||
|
|
|
@ -45,8 +45,9 @@
|
|||
<?php endif; ?>
|
||||
</div>
|
||||
<header><div id="header">
|
||||
<a href="<?php print_unescaped(link_to('', 'index.php')); ?>" title="" id="owncloud"><img class="svg"
|
||||
src="<?php print_unescaped(image_path('', 'logo-wide.svg')); ?>" alt="<?php p($theme->getName()); ?>" /></a>
|
||||
<a href="<?php print_unescaped(link_to('', 'index.php')); ?>" title="" id="owncloud">
|
||||
<div class='logo-wide'></div>
|
||||
</a>
|
||||
<div id="logo-claim" style="display:none;"><?php p($theme->getLogoClaim()); ?></div>
|
||||
<div id="settings" class="svg">
|
||||
<span id="expand" tabindex="0" role="link">
|
||||
|
|
|
@ -320,16 +320,16 @@ class Filesystem {
|
|||
else {
|
||||
self::mount('\OC\Files\Storage\Local', array('datadir' => $root), $user);
|
||||
}
|
||||
$datadir = \OC_Config::getValue("datadirectory", \OC::$SERVERROOT . "/data");
|
||||
$mount_file = \OC_Config::getValue("mount_file", \OC::$SERVERROOT . "/data/mount.json");
|
||||
|
||||
//move config file to it's new position
|
||||
if (is_file(\OC::$SERVERROOT . '/config/mount.json')) {
|
||||
rename(\OC::$SERVERROOT . '/config/mount.json', $datadir . '/mount.json');
|
||||
rename(\OC::$SERVERROOT . '/config/mount.json', $mount_file);
|
||||
}
|
||||
// Load system mount points
|
||||
if (is_file(\OC::$SERVERROOT . '/config/mount.php') or is_file($datadir . '/mount.json')) {
|
||||
if (is_file($datadir . '/mount.json')) {
|
||||
$mountConfig = json_decode(file_get_contents($datadir . '/mount.json'), true);
|
||||
if (is_file(\OC::$SERVERROOT . '/config/mount.php') or is_file($mount_file)) {
|
||||
if (is_file($mount_file)) {
|
||||
$mountConfig = json_decode(file_get_contents($mount_file), true);
|
||||
} elseif (is_file(\OC::$SERVERROOT . '/config/mount.php')) {
|
||||
$mountConfig = $parser->parsePHP(file_get_contents(\OC::$SERVERROOT . '/config/mount.php'));
|
||||
}
|
||||
|
|
|
@ -15,12 +15,18 @@ class Quota extends Wrapper {
|
|||
*/
|
||||
protected $quota;
|
||||
|
||||
/**
|
||||
* @var string $sizeRoot
|
||||
*/
|
||||
protected $sizeRoot;
|
||||
|
||||
/**
|
||||
* @param array $parameters
|
||||
*/
|
||||
public function __construct($parameters) {
|
||||
$this->storage = $parameters['storage'];
|
||||
$this->quota = $parameters['quota'];
|
||||
$this->sizeRoot = isset($parameters['root']) ? $parameters['root'] : '';
|
||||
}
|
||||
|
||||
/**
|
||||
|
@ -46,7 +52,7 @@ class Quota extends Wrapper {
|
|||
if ($this->quota < 0) {
|
||||
return $this->storage->free_space($path);
|
||||
} else {
|
||||
$used = $this->getSize('');
|
||||
$used = $this->getSize($this->sizeRoot);
|
||||
if ($used < 0) {
|
||||
return \OC\Files\SPACE_NOT_COMPUTED;
|
||||
} else {
|
||||
|
|
|
@ -152,7 +152,32 @@ class OC_Helper {
|
|||
public static function mimetypeIcon($mimetype) {
|
||||
$alias = array(
|
||||
'application/octet-stream' => 'file', // use file icon as fallback
|
||||
'application/xml' => 'code/xml',
|
||||
|
||||
'application/illustrator' => 'image',
|
||||
'application/coreldraw' => 'image',
|
||||
'application/x-gimp' => 'image',
|
||||
'application/x-photoshop' => 'image',
|
||||
|
||||
'application/x-font-ttf' => 'font',
|
||||
'application/font-woff' => 'font',
|
||||
'application/vnd.ms-fontobject' => 'font',
|
||||
|
||||
'application/json' => 'text/code',
|
||||
'application/x-perl' => 'text/code',
|
||||
'application/x-php' => 'text/code',
|
||||
'text/x-shellscript' => 'text/code',
|
||||
'application/xml' => 'text/html',
|
||||
'text/css' => 'text/code',
|
||||
'application/x-tex' => 'text',
|
||||
|
||||
'application/x-compressed' => 'package/x-generic',
|
||||
'application/x-7z-compressed' => 'package/x-generic',
|
||||
'application/x-deb' => 'package/x-generic',
|
||||
'application/x-gzip' => 'package/x-generic',
|
||||
'application/x-rar-compressed' => 'package/x-generic',
|
||||
'application/x-tar' => 'package/x-generic',
|
||||
'application/zip' => 'package/x-generic',
|
||||
|
||||
'application/msword' => 'x-office/document',
|
||||
'application/vnd.openxmlformats-officedocument.wordprocessingml.document' => 'x-office/document',
|
||||
'application/vnd.openxmlformats-officedocument.wordprocessingml.template' => 'x-office/document',
|
||||
|
@ -162,6 +187,7 @@ class OC_Helper {
|
|||
'application/vnd.oasis.opendocument.text-template' => 'x-office/document',
|
||||
'application/vnd.oasis.opendocument.text-web' => 'x-office/document',
|
||||
'application/vnd.oasis.opendocument.text-master' => 'x-office/document',
|
||||
|
||||
'application/mspowerpoint' => 'x-office/presentation',
|
||||
'application/vnd.ms-powerpoint' => 'x-office/presentation',
|
||||
'application/vnd.openxmlformats-officedocument.presentationml.presentation' => 'x-office/presentation',
|
||||
|
@ -173,6 +199,7 @@ class OC_Helper {
|
|||
'application/vnd.ms-powerpoint.slideshow.macroEnabled.12' => 'x-office/presentation',
|
||||
'application/vnd.oasis.opendocument.presentation' => 'x-office/presentation',
|
||||
'application/vnd.oasis.opendocument.presentation-template' => 'x-office/presentation',
|
||||
|
||||
'application/msexcel' => 'x-office/spreadsheet',
|
||||
'application/vnd.ms-excel' => 'x-office/spreadsheet',
|
||||
'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' => 'x-office/spreadsheet',
|
||||
|
@ -183,6 +210,8 @@ class OC_Helper {
|
|||
'application/vnd.ms-excel.sheet.binary.macroEnabled.12' => 'x-office/spreadsheet',
|
||||
'application/vnd.oasis.opendocument.spreadsheet' => 'x-office/spreadsheet',
|
||||
'application/vnd.oasis.opendocument.spreadsheet-template' => 'x-office/spreadsheet',
|
||||
'text/csv' => 'x-office/spreadsheet',
|
||||
|
||||
'application/msaccess' => 'database',
|
||||
);
|
||||
|
||||
|
|
|
@ -231,7 +231,7 @@ class OC_Image {
|
|||
}
|
||||
|
||||
/**
|
||||
* @returns Returns the image resource in any.
|
||||
* @returns resource Returns the image resource in any.
|
||||
*/
|
||||
public function resource() {
|
||||
return $this->resource;
|
||||
|
|
|
@ -24,11 +24,13 @@
|
|||
* Array mapping file extensions to mimetypes (in alphabetical order).
|
||||
*/
|
||||
return array(
|
||||
'7z' => 'application/x-7z-compressed',
|
||||
'accdb' => 'application/msaccess',
|
||||
'ai' => 'application/illustrator',
|
||||
'avi' => 'video/x-msvideo',
|
||||
'bash' => 'text/x-shellscript',
|
||||
'blend' => 'application/x-blender',
|
||||
'bin' => 'application/x-bin',
|
||||
'cb7' => 'application/x-cbr',
|
||||
'cba' => 'application/x-cbr',
|
||||
'cbr' => 'application/x-cbr',
|
||||
|
@ -39,14 +41,17 @@ return array(
|
|||
'cdr' => 'application/coreldraw',
|
||||
'cpp' => 'text/x-c++src',
|
||||
'css' => 'text/css',
|
||||
'csv' => 'text/csv',
|
||||
'cvbdl' => 'application/x-cbr',
|
||||
'c' => 'text/x-c',
|
||||
'c++' => 'text/x-c++src',
|
||||
'deb' => 'application/x-deb',
|
||||
'doc' => 'application/msword',
|
||||
'docx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
||||
'dot' => 'application/msword',
|
||||
'dotx' => 'application/vnd.openxmlformats-officedocument.wordprocessingml.template',
|
||||
'dv' => 'video/dv',
|
||||
'eot' => 'application/vnd.ms-fontobject',
|
||||
'epub' => 'application/epub+zip',
|
||||
'exe' => 'application/x-ms-dos-executable',
|
||||
'flac' => 'audio/flac',
|
||||
|
@ -61,6 +66,7 @@ return array(
|
|||
'jpeg' => 'image/jpeg',
|
||||
'jpg' => 'image/jpeg',
|
||||
'js' => 'application/javascript',
|
||||
'json' => 'application/json',
|
||||
'keynote' => 'application/x-iwork-keynote-sffkey',
|
||||
'kra' => 'application/x-krita',
|
||||
'm2t' => 'video/mp2t',
|
||||
|
@ -85,30 +91,36 @@ return array(
|
|||
'oga' => 'audio/ogg',
|
||||
'ogg' => 'audio/ogg',
|
||||
'ogv' => 'video/ogg',
|
||||
'otf' => 'font/opentype',
|
||||
'pages' => 'application/x-iwork-pages-sffpages',
|
||||
'pdf' => 'application/pdf',
|
||||
'php' => 'application/x-php',
|
||||
'pl'=>'application/x-pearl',
|
||||
'pl' => 'application/x-perl',
|
||||
'png' => 'image/png',
|
||||
'ppt' => 'application/mspowerpoint',
|
||||
'pptx' => 'application/vnd.openxmlformats-officedocument.presentationml.presentation',
|
||||
'psd' => 'application/x-photoshop',
|
||||
'py'=>'text/x-script.python',
|
||||
'py' => 'text/x-python',
|
||||
'rar' => 'application/x-rar-compressed',
|
||||
'reveal' => 'text/reveal',
|
||||
'sgf' => 'application/sgf',
|
||||
'sh-lib' => 'text/x-shellscript',
|
||||
'sh' => 'text/x-shellscript',
|
||||
'svg' => 'image/svg+xml',
|
||||
'swf' => 'application/x-shockwave-flash',
|
||||
'tar' => 'application/x-tar',
|
||||
'tar.gz' => 'application/x-compressed',
|
||||
'tex' => 'application/x-tex',
|
||||
'tgz' => 'application/x-compressed',
|
||||
'tiff' => 'image/tiff',
|
||||
'tif' => 'image/tiff',
|
||||
'ttf' => 'application/x-font-ttf',
|
||||
'txt' => 'text/plain',
|
||||
'vcard' => 'text/vcard',
|
||||
'vcf' => 'text/vcard',
|
||||
'wav' => 'audio/wav',
|
||||
'webm' => 'video/webm',
|
||||
'woff' => 'application/font-woff',
|
||||
'wmv' => 'video/x-ms-asf',
|
||||
'xcf' => 'application/x-gimp',
|
||||
'xls' => 'application/msexcel',
|
||||
|
|
|
@ -147,6 +147,7 @@ class URLGenerator implements IURLGenerator {
|
|||
* @return string the absolute version of the url
|
||||
*/
|
||||
public function getAbsoluteURL($url) {
|
||||
return \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost() . $url;
|
||||
$separator = $url[0] === '/' ? '' : '/';
|
||||
return \OC_Request::serverProtocol() . '://' . \OC_Request::serverHost() . $separator . $url;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -246,7 +246,6 @@ class OC_User {
|
|||
OC_Hook::emit( "OC_User", "pre_login", array( "run" => &$run, "uid" => $uid ));
|
||||
|
||||
if($uid) {
|
||||
session_regenerate_id(true);
|
||||
self::setUserId($uid);
|
||||
self::setDisplayName($uid);
|
||||
self::getUserSession()->setLoginName($uid);
|
||||
|
|
|
@ -157,6 +157,7 @@ class Session implements Emitter, \OCP\IUserSession {
|
|||
if($user !== false) {
|
||||
if (!is_null($user)) {
|
||||
if ($user->isEnabled()) {
|
||||
session_regenerate_id(true);
|
||||
$this->setUser($user);
|
||||
$this->setLoginName($uid);
|
||||
$this->manager->emit('\OC\User', 'postLogin', array($user, $password));
|
||||
|
|
|
@ -63,7 +63,7 @@ class OC_Util {
|
|||
$user = $storage->getUser()->getUID();
|
||||
$quota = OC_Util::getUserQuota($user);
|
||||
if ($quota !== \OC\Files\SPACE_UNLIMITED) {
|
||||
return new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => $quota));
|
||||
return new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => $quota, 'root' => 'files'));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -32,11 +32,7 @@ try {
|
|||
default:
|
||||
OC_Util::checkAppEnabled($app);
|
||||
OC_App::loadApp($app);
|
||||
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
|
||||
$file = OC_App::getAppPath($app) .'/'. $parts[1];
|
||||
}else{
|
||||
$file = '/' . OC_App::getAppPath($app) .'/'. $parts[1];
|
||||
}
|
||||
break;
|
||||
}
|
||||
$baseuri = OC::$WEBROOT . '/remote.php/'.$service.'/';
|
||||
|
|
|
@ -1,20 +0,0 @@
|
|||
<?php
|
||||
/**
|
||||
* Copyright (c) 2013 Lukas Reschke <lukas@statuscode.ch>
|
||||
* This file is licensed under the Affero General Public License version 3 or
|
||||
* later.
|
||||
* See the COPYING-README file.
|
||||
*/
|
||||
|
||||
// Set the content type to Javascript
|
||||
header("Content-type: text/javascript");
|
||||
|
||||
// Disallow caching
|
||||
header("Cache-Control: no-cache, must-revalidate");
|
||||
header("Expires: Sat, 26 Jul 1997 05:00:00 GMT");
|
||||
|
||||
if (OC_User::isAdminUser(OC_User::getUser())) {
|
||||
echo("var isadmin = true;");
|
||||
} else {
|
||||
echo("var isadmin = false;");
|
||||
}
|
|
@ -85,19 +85,24 @@ var UserList = {
|
|||
|
||||
add: function (username, displayname, groups, subadmin, quota, sort) {
|
||||
var tr = $('tbody tr').first().clone();
|
||||
if (tr.find('div.avatardiv')){
|
||||
var subadminsEl;
|
||||
var subadminSelect;
|
||||
var groupsSelect;
|
||||
if (tr.find('div.avatardiv').length){
|
||||
$('div.avatardiv', tr).avatar(username, 32);
|
||||
}
|
||||
tr.attr('data-uid', username);
|
||||
tr.attr('data-displayName', displayname);
|
||||
tr.find('td.name').text(username);
|
||||
tr.find('td.displayName > span').text(displayname);
|
||||
var groupsSelect = $('<select multiple="multiple" class="groupsselect" data-placehoder="Groups" title="' + t('settings', 'Groups') + '"></select>')
|
||||
|
||||
// make them look like the multiselect buttons
|
||||
// until they get time to really get initialized
|
||||
groupsSelect = $('<select multiple="multiple" class="groupsselect multiselect button" data-placehoder="Groups" title="' + t('settings', 'Groups') + '"></select>')
|
||||
.attr('data-username', username)
|
||||
.data('user-groups', groups);
|
||||
tr.find('td.groups').empty();
|
||||
if (tr.find('td.subadmins').length > 0) {
|
||||
var subadminSelect = $('<select multiple="multiple" class="subadminsselect" data-placehoder="subadmins" title="' + t('settings', 'Group Admin') + '">')
|
||||
subadminSelect = $('<select multiple="multiple" class="subadminsselect multiselect button" data-placehoder="subadmins" title="' + t('settings', 'Group Admin') + '">')
|
||||
.attr('data-username', username)
|
||||
.data('user-groups', groups)
|
||||
.data('subadmin', subadmin);
|
||||
|
@ -109,11 +114,10 @@ var UserList = {
|
|||
subadminSelect.append($('<option value="' + escapeHTML(group) + '">' + escapeHTML(group) + '</option>'));
|
||||
}
|
||||
});
|
||||
tr.find('td.groups').append(groupsSelect);
|
||||
UserList.applyMultiplySelect(groupsSelect);
|
||||
if (tr.find('td.subadmins').length > 0) {
|
||||
tr.find('td.subadmins').append(subadminSelect);
|
||||
UserList.applyMultiplySelect(subadminSelect);
|
||||
tr.find('td.groups').empty().append(groupsSelect);
|
||||
subadminsEl = tr.find('td.subadmins');
|
||||
if (subadminsEl.length > 0) {
|
||||
subadminsEl.append(subadminSelect);
|
||||
}
|
||||
if (tr.find('td.remove img').length === 0 && OC.currentUser !== username) {
|
||||
var rm_img = $('<img class="svg action">').attr({
|
||||
|
@ -139,11 +143,11 @@ var UserList = {
|
|||
}
|
||||
}
|
||||
$(tr).appendTo('tbody');
|
||||
|
||||
if (sort) {
|
||||
UserList.doSort();
|
||||
}
|
||||
|
||||
quotaSelect.singleSelect();
|
||||
quotaSelect.on('change', function () {
|
||||
var uid = $(this).parent().parent().attr('data-uid');
|
||||
var quota = $(this).val();
|
||||
|
@ -153,6 +157,16 @@ var UserList = {
|
|||
}
|
||||
});
|
||||
});
|
||||
|
||||
// defer init so the user first sees the list appear more quickly
|
||||
window.setTimeout(function(){
|
||||
quotaSelect.singleSelect();
|
||||
UserList.applyMultiplySelect(groupsSelect);
|
||||
if (subadminSelect) {
|
||||
UserList.applyMultiplySelect(subadminSelect);
|
||||
}
|
||||
}, 0);
|
||||
return tr;
|
||||
},
|
||||
// From http://my.opera.com/GreyWyvern/blog/show.dml/1671288
|
||||
alphanum: function(a, b) {
|
||||
|
@ -209,28 +223,39 @@ var UserList = {
|
|||
if (UserList.updating) {
|
||||
return;
|
||||
}
|
||||
$('table+.loading').css('visibility', 'visible');
|
||||
UserList.updating = true;
|
||||
$.get(OC.Router.generate('settings_ajax_userlist', { offset: UserList.offset, limit: UserList.usersToLoad }), function (result) {
|
||||
var loadedUsers = 0;
|
||||
var trs = [];
|
||||
if (result.status === 'success') {
|
||||
//The offset does not mirror the amount of users available,
|
||||
//because it is backend-dependent. For correct retrieval,
|
||||
//always the limit(requested amount of users) needs to be added.
|
||||
UserList.offset += UserList.usersToLoad;
|
||||
$.each(result.data, function (index, user) {
|
||||
if($('tr[data-uid="' + user.name + '"]').length > 0) {
|
||||
return true;
|
||||
}
|
||||
var tr = UserList.add(user.name, user.displayname, user.groups, user.subadmin, user.quota, false);
|
||||
if (index === 9) {
|
||||
$(tr).bind('inview', function (event, isInView, visiblePartX, visiblePartY) {
|
||||
$(this).unbind(event);
|
||||
UserList.update();
|
||||
});
|
||||
}
|
||||
tr.addClass('appear transparent');
|
||||
trs.push(tr);
|
||||
loadedUsers++;
|
||||
});
|
||||
if (result.data.length > 0) {
|
||||
UserList.doSort();
|
||||
$('table+.loading').css('visibility', 'hidden');
|
||||
}
|
||||
else {
|
||||
UserList.noMoreEntries = true;
|
||||
$('table+.loading').remove();
|
||||
}
|
||||
UserList.offset += loadedUsers;
|
||||
// animate
|
||||
setTimeout(function() {
|
||||
for (var i = 0; i < trs.length; i++) {
|
||||
trs[i].removeClass('transparent');
|
||||
}
|
||||
}, 0);
|
||||
}
|
||||
UserList.updating = false;
|
||||
});
|
||||
|
@ -239,7 +264,7 @@ var UserList = {
|
|||
applyMultiplySelect: function (element) {
|
||||
var checked = [];
|
||||
var user = element.attr('data-username');
|
||||
if ($(element).attr('class') === 'groupsselect') {
|
||||
if ($(element).hasClass('groupsselect')) {
|
||||
if (element.data('userGroups')) {
|
||||
checked = element.data('userGroups');
|
||||
}
|
||||
|
@ -248,7 +273,7 @@ var UserList = {
|
|||
if (user === OC.currentUser && group === 'admin') {
|
||||
return false;
|
||||
}
|
||||
if (!isadmin && checked.length === 1 && checked[0] === group) {
|
||||
if (!oc_isadmin && checked.length === 1 && checked[0] === group) {
|
||||
return false;
|
||||
}
|
||||
$.post(
|
||||
|
@ -280,7 +305,7 @@ var UserList = {
|
|||
});
|
||||
};
|
||||
var label;
|
||||
if (isadmin) {
|
||||
if (oc_isadmin) {
|
||||
label = t('settings', 'add group');
|
||||
} else {
|
||||
label = null;
|
||||
|
@ -295,7 +320,7 @@ var UserList = {
|
|||
minWidth: 100
|
||||
});
|
||||
}
|
||||
if ($(element).attr('class') === 'subadminsselect') {
|
||||
if ($(element).hasClass('subadminsselect')) {
|
||||
if (element.data('subadmin')) {
|
||||
checked = element.data('subadmin');
|
||||
}
|
||||
|
@ -330,18 +355,26 @@ var UserList = {
|
|||
minWidth: 100
|
||||
});
|
||||
}
|
||||
},
|
||||
|
||||
_onScroll: function(e) {
|
||||
if (!!UserList.noMoreEntries) {
|
||||
return;
|
||||
}
|
||||
if ($(window).scrollTop() + $(window).height() > $(document).height() - 500) {
|
||||
UserList.update(true);
|
||||
}
|
||||
},
|
||||
};
|
||||
|
||||
$(document).ready(function () {
|
||||
|
||||
UserList.doSort();
|
||||
UserList.availableGroups = $('#content table').data('groups');
|
||||
$('tbody tr:last').bind('inview', function (event, isInView, visiblePartX, visiblePartY) {
|
||||
OC.Router.registerLoadedCallback(function() {
|
||||
UserList.update();
|
||||
});
|
||||
$(window).scroll(function(e) {UserList._onScroll(e);});
|
||||
});
|
||||
$('table').after($('<div class="loading" style="height: 200px; visibility: hidden;"></div>'));
|
||||
|
||||
$('select[multiple]').each(function (index, element) {
|
||||
UserList.applyMultiplySelect($(element));
|
||||
|
|
|
@ -72,5 +72,3 @@ $this->create('settings_ajax_setloglevel', '/settings/ajax/setloglevel.php')
|
|||
->actionInclude('settings/ajax/setloglevel.php');
|
||||
$this->create('settings_ajax_setsecurity', '/settings/ajax/setsecurity.php')
|
||||
->actionInclude('settings/ajax/setsecurity.php');
|
||||
$this->create('isadmin', '/settings/js/isadmin.js')
|
||||
->actionInclude('settings/js/isadmin.php');
|
||||
|
|
|
@ -14,8 +14,6 @@ unset($items['admin']);
|
|||
$_['subadmingroups'] = array_flip($items);
|
||||
?>
|
||||
|
||||
<script type="text/javascript" src="<?php print_unescaped(OC_Helper::linkToRoute('isadmin'));?>"></script>
|
||||
|
||||
<div id="controls">
|
||||
<form id="newuser" autocomplete="off">
|
||||
<input id="newusername" type="text" placeholder="<?php p($l->t('Login Name'))?>" /> <input
|
||||
|
|
|
@ -102,4 +102,23 @@ class Quota extends \Test\Files\Storage\Storage {
|
|||
$this->assertEquals('user-space', $meta['wrapper_type']);
|
||||
fclose($stream);
|
||||
}
|
||||
|
||||
public function testSpaceRoot() {
|
||||
$storage = $this->getMockBuilder('\OC\Files\Storage\Local')->disableOriginalConstructor()->getMock();
|
||||
$cache = $this->getMockBuilder('\OC\Files\Cache\Cache')->disableOriginalConstructor()->getMock();
|
||||
$storage->expects($this->once())
|
||||
->method('getCache')
|
||||
->will($this->returnValue($cache));
|
||||
$storage->expects($this->once())
|
||||
->method('free_space')
|
||||
->will($this->returnValue(2048));
|
||||
$cache->expects($this->once())
|
||||
->method('get')
|
||||
->with('files')
|
||||
->will($this->returnValue(array('size' => 50)));
|
||||
|
||||
$instance = new \OC\Files\Storage\Wrapper\Quota(array('storage' => $storage, 'quota' => 1024, 'root' => 'files'));
|
||||
|
||||
$this->assertEquals(1024 - 50, $instance->free_space(''));
|
||||
}
|
||||
}
|
||||
|
|