Merge branch 'master' into calendar_repeat

This commit is contained in:
Georg Ehrke 2012-06-12 15:58:01 +02:00
commit 71573f7934
20 changed files with 4559 additions and 721 deletions

3
.gitignore vendored
View file

@ -40,6 +40,9 @@ nbproject
# Cloud9IDE # Cloud9IDE
.settings.xml .settings.xml
# vim ex mode
.vimrc
# Mac OS # Mac OS
.DS_Store .DS_Store

View file

@ -3,7 +3,7 @@
<name>*dbname*</name> <name>*dbname*</name>
<create>true</create> <create>true</create>
<overwrite>false</overwrite> <overwrite>false</overwrite>
<charset>latin1</charset> <charset>utf8</charset>
<table> <table>
<name>*dbprefix*bookmarks</name> <name>*dbprefix*bookmarks</name>
<declaration> <declaration>

View file

@ -131,7 +131,7 @@ class OC_Contacts_VCard{
foreach($property->parameters as $key=>&$parameter){ foreach($property->parameters as $key=>&$parameter){
if(strtoupper($parameter->name) == 'ENCODING') { if(strtoupper($parameter->name) == 'ENCODING') {
if(strtoupper($parameter->value) == 'QUOTED-PRINTABLE') { // what kind of other encodings could be used? if(strtoupper($parameter->value) == 'QUOTED-PRINTABLE') { // what kind of other encodings could be used?
$property->value = str_replace("\r\n", "\n", mb_convert_encoding(quoted_printable_decode($property->value), 'utf-8', 'auto')); $property->value = quoted_printable_decode($property->value);
unset($property->parameters[$key]); unset($property->parameters[$key]);
} }
} elseif(strtoupper($parameter->name) == 'CHARSET') { } elseif(strtoupper($parameter->name) == 'CHARSET') {
@ -188,6 +188,7 @@ class OC_Contacts_VCard{
if($upgrade && in_array($property->name, $stringprops)) { if($upgrade && in_array($property->name, $stringprops)) {
self::decodeProperty($property); self::decodeProperty($property);
} }
$property->value = str_replace("\r\n", "\n", iconv(mb_detect_encoding($property->value, 'UTF-8, ISO-8859-1'), 'utf-8', $property->value));
if(in_array($property->name, $stringprops)) { if(in_array($property->name, $stringprops)) {
$property->value = strip_tags($property->value); $property->value = strip_tags($property->value);
} }

View file

@ -71,7 +71,7 @@ FileActions={
} }
var html='<a href="#" class="action" style="display:none">'; var html='<a href="#" class="action" style="display:none">';
if(img) { html+='<img src="'+img+'"/> '; } if(img) { html+='<img src="'+img+'"/> '; }
html += name+'</a>'; html += t('files', name) +'</a>';
var element=$(html); var element=$(html);
element.data('action',name); element.data('action',name);
element.click(function(event){ element.click(function(event){
@ -91,7 +91,7 @@ FileActions={
if(img.call){ if(img.call){
img=img(file); img=img(file);
} }
var html='<a href="#" original-title="Delete" class="action delete" style="display:none" />'; var html='<a href="#" original-title="' + t('files', 'Delete') + '" class="action delete" style="display:none" />';
var element=$(html); var element=$(html);
if(img){ if(img){
element.append($('<img src="'+img+'"/>')); element.append($('<img src="'+img+'"/>'));

View file

@ -452,7 +452,7 @@ $(document).ready(function() {
input.focus(); input.focus();
input.change(function(){ input.change(function(){
var name=$(this).val(); var name=$(this).val();
if(name.indexOf('/')!=-1){ if(type != 'web' && name.indexOf('/')!=-1){
$('#notification').text(t('files','Invalid name, \'/\' is not allowed.')); $('#notification').text(t('files','Invalid name, \'/\' is not allowed.'));
$('#notification').fadeIn(); $('#notification').fadeIn();
return; return;

View file

@ -3,5 +3,6 @@
OCP\Util::addscript( 'files_pdfviewer', 'viewer'); OCP\Util::addscript( 'files_pdfviewer', 'viewer');
OCP\Util::addStyle( 'files_pdfviewer', 'viewer'); OCP\Util::addStyle( 'files_pdfviewer', 'viewer');
OCP\Util::addscript( 'files_pdfviewer', 'pdfjs/build/pdf'); OCP\Util::addscript( 'files_pdfviewer', 'pdfjs/build/pdf');
OCP\Util::addscript( 'files_pdfviewer', 'pdfview'); OCP\Util::addscript( 'files_pdfviewer', 'pdfjs/compatibility');
OCP\Util::addscript( 'files_pdfviewer', 'pdfjs/viewer');
?> ?>

View file

@ -4,7 +4,7 @@
<name>PDF Viewer</name> <name>PDF Viewer</name>
<description>Inline PDF viewer (pdfjs-based)</description> <description>Inline PDF viewer (pdfjs-based)</description>
<licence>GPL</licence> <licence>GPL</licence>
<author>Joan Creus</author> <author>Joan Creus, Thomas Müller</author>
<require>4</require> <require>4</require>
<shipped>true</shipped> <shipped>true</shipped>
<default_enable/> <default_enable/>

View file

@ -2,7 +2,6 @@
/* vim: set shiftwidth=4 tabstop=8 autoindent cindent expandtab: */ /* vim: set shiftwidth=4 tabstop=8 autoindent cindent expandtab: */
#viewer { #viewer {
background-color: #929292;
font-family: 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif; font-family: 'Lucida Grande', 'Lucida Sans Unicode', Helvetica, Arial, Verdana, sans-serif;
/*margin: 0px;*/ /*margin: 0px;*/
padding: 0px; padding: 0px;

File diff suppressed because it is too large Load diff

View file

@ -0,0 +1,340 @@
/* -*- Mode: Java; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */
/* vim: set shiftwidth=2 tabstop=2 autoindent cindent expandtab: */
'use strict';
// Checking if the typed arrays are supported
(function checkTypedArrayCompatibility() {
if (typeof Uint8Array !== 'undefined') {
// some mobile version might not support Float64Array
if (typeof Float64Array === 'undefined')
window.Float64Array = Float32Array;
return;
}
function subarray(start, end) {
return new TypedArray(this.slice(start, end));
}
function setArrayOffset(array, offset) {
if (arguments.length < 2)
offset = 0;
for (var i = 0, n = array.length; i < n; ++i, ++offset)
this[offset] = array[i] & 0xFF;
}
function TypedArray(arg1) {
var result;
if (typeof arg1 === 'number') {
result = [];
for (var i = 0; i < arg1; ++i)
result[i] = 0;
} else
result = arg1.slice(0);
result.subarray = subarray;
result.buffer = result;
result.byteLength = result.length;
result.set = setArrayOffset;
if (typeof arg1 === 'object' && arg1.buffer)
result.buffer = arg1.buffer;
return result;
}
window.Uint8Array = TypedArray;
// we don't need support for set, byteLength for 32-bit array
// so we can use the TypedArray as well
window.Uint32Array = TypedArray;
window.Int32Array = TypedArray;
window.Uint16Array = TypedArray;
window.Float32Array = TypedArray;
window.Float64Array = TypedArray;
})();
// Object.create() ?
(function checkObjectCreateCompatibility() {
if (typeof Object.create !== 'undefined')
return;
Object.create = function objectCreate(proto) {
var constructor = function objectCreateConstructor() {};
constructor.prototype = proto;
return new constructor();
};
})();
// Object.defineProperty() ?
(function checkObjectDefinePropertyCompatibility() {
if (typeof Object.defineProperty !== 'undefined')
return;
Object.defineProperty = function objectDefineProperty(obj, name, def) {
delete obj[name];
if ('get' in def)
obj.__defineGetter__(name, def['get']);
if ('set' in def)
obj.__defineSetter__(name, def['set']);
if ('value' in def) {
obj.__defineSetter__(name, function objectDefinePropertySetter(value) {
this.__defineGetter__(name, function objectDefinePropertyGetter() {
return value;
});
return value;
});
obj[name] = def.value;
}
};
})();
// Object.keys() ?
(function checkObjectKeysCompatibility() {
if (typeof Object.keys !== 'undefined')
return;
Object.keys = function objectKeys(obj) {
var result = [];
for (var i in obj) {
if (obj.hasOwnProperty(i))
result.push(i);
}
return result;
};
})();
// No XMLHttpRequest.response ?
(function checkXMLHttpRequestResponseCompatibility() {
var xhrPrototype = XMLHttpRequest.prototype;
if ('response' in xhrPrototype ||
'mozResponseArrayBuffer' in xhrPrototype ||
'mozResponse' in xhrPrototype ||
'responseArrayBuffer' in xhrPrototype)
return;
// IE ?
if (typeof VBArray !== 'undefined') {
Object.defineProperty(xhrPrototype, 'response', {
get: function xmlHttpRequestResponseGet() {
return new Uint8Array(new VBArray(this.responseBody).toArray());
}
});
Object.defineProperty(xhrPrototype, 'overrideMimeType', {
value: function xmlHttpRequestOverrideMimeType(mimeType) {}
});
return;
}
// other browsers
function responseTypeSetter() {
// will be only called to set "arraybuffer"
this.overrideMimeType('text/plain; charset=x-user-defined');
}
if (typeof xhrPrototype.overrideMimeType === 'function') {
Object.defineProperty(xhrPrototype, 'responseType',
{ set: responseTypeSetter });
}
function responseGetter() {
var text = this.responseText;
var i, n = text.length;
var result = new Uint8Array(n);
for (i = 0; i < n; ++i)
result[i] = text.charCodeAt(i) & 0xFF;
return result;
}
Object.defineProperty(xhrPrototype, 'response', { get: responseGetter });
})();
// window.btoa (base64 encode function) ?
(function checkWindowBtoaCompatibility() {
if ('btoa' in window)
return;
var digits =
'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';
window.btoa = function windowBtoa(chars) {
var buffer = '';
var i, n;
for (i = 0, n = chars.length; i < n; i += 3) {
var b1 = chars.charCodeAt(i) & 0xFF;
var b2 = chars.charCodeAt(i + 1) & 0xFF;
var b3 = chars.charCodeAt(i + 2) & 0xFF;
var d1 = b1 >> 2, d2 = ((b1 & 3) << 4) | (b2 >> 4);
var d3 = i + 1 < n ? ((b2 & 0xF) << 2) | (b3 >> 6) : 64;
var d4 = i + 2 < n ? (b3 & 0x3F) : 64;
buffer += (digits.charAt(d1) + digits.charAt(d2) +
digits.charAt(d3) + digits.charAt(d4));
}
return buffer;
};
})();
// Function.prototype.bind ?
(function checkFunctionPrototypeBindCompatibility() {
if (typeof Function.prototype.bind !== 'undefined')
return;
Function.prototype.bind = function functionPrototypeBind(obj) {
var fn = this, headArgs = Array.prototype.slice.call(arguments, 1);
var bound = function functionPrototypeBindBound() {
var args = Array.prototype.concat.apply(headArgs, arguments);
return fn.apply(obj, args);
};
return bound;
};
})();
// IE9 text/html data URI
(function checkDocumentDocumentModeCompatibility() {
if (!('documentMode' in document) || document.documentMode !== 9)
return;
// overriding the src property
var originalSrcDescriptor = Object.getOwnPropertyDescriptor(
HTMLIFrameElement.prototype, 'src');
Object.defineProperty(HTMLIFrameElement.prototype, 'src', {
get: function htmlIFrameElementPrototypeSrcGet() { return this.$src; },
set: function htmlIFrameElementPrototypeSrcSet(src) {
this.$src = src;
if (src.substr(0, 14) != 'data:text/html') {
originalSrcDescriptor.set.call(this, src);
return;
}
// for text/html, using blank document and then
// document's open, write, and close operations
originalSrcDescriptor.set.call(this, 'about:blank');
setTimeout((function htmlIFrameElementPrototypeSrcOpenWriteClose() {
var doc = this.contentDocument;
doc.open('text/html');
doc.write(src.substr(src.indexOf(',') + 1));
doc.close();
}).bind(this), 0);
},
enumerable: true
});
})();
// HTMLElement dataset property
(function checkDatasetProperty() {
var div = document.createElement('div');
if ('dataset' in div)
return; // dataset property exists
Object.defineProperty(HTMLElement.prototype, 'dataset', {
get: function() {
if (this._dataset)
return this._dataset;
var dataset = {};
for (var j = 0, jj = this.attributes.length; j < jj; j++) {
var attribute = this.attributes[j];
if (attribute.name.substring(0, 5) != 'data-')
continue;
var key = attribute.name.substring(5).replace(/\-([a-z])/g,
function(all, ch) { return ch.toUpperCase(); });
dataset[key] = attribute.value;
}
Object.defineProperty(this, '_dataset', {
value: dataset,
writable: false,
enumerable: false
});
return dataset;
},
enumerable: true
});
})();
// HTMLElement classList property
(function checkClassListProperty() {
var div = document.createElement('div');
if ('classList' in div)
return; // classList property exists
function changeList(element, itemName, add, remove) {
var s = element.className || '';
var list = s.split(/\s+/g);
if (list[0] == '') list.shift();
var index = list.indexOf(itemName);
if (index < 0 && add)
list.push(itemName);
if (index >= 0 && remove)
list.splice(index, 1);
element.className = list.join(' ');
}
var classListPrototype = {
add: function(name) {
changeList(this.element, name, true, false);
},
remove: function(name) {
changeList(this.element, name, false, true);
},
toggle: function(name) {
changeList(this.element, name, true, true);
}
};
Object.defineProperty(HTMLElement.prototype, 'classList', {
get: function() {
if (this._classList)
return this._classList;
var classList = Object.create(classListPrototype, {
element: {
value: this,
writable: false,
enumerable: true
}
});
Object.defineProperty(this, '_classList', {
value: classList,
writable: false,
enumerable: false
});
return classList;
},
enumerable: true
});
})();
// Check console compatability
(function checkConsoleCompatibility() {
if (typeof console == 'undefined') {
console = {log: function() {}};
}
})();
// Check onclick compatibility in Opera
(function checkOnClickCompatibility() {
// workaround for reported Opera bug DSK-354448:
// onclick fires on disabled buttons with opaque content
function ignoreIfTargetDisabled(event) {
if (isDisabled(event.target)) {
event.stopPropagation();
}
}
function isDisabled(node) {
return node.disabled || (node.parentNode && isDisabled(node.parentNode));
}
if (navigator.userAgent.indexOf('Opera') != -1) {
// use browser detection since we cannot feature-check this bug
document.addEventListener('click', ignoreIfTargetDisabled, true);
}
})();
// Checks if navigator.language is supported
(function checkNavigatorLanguage() {
if ('language' in navigator)
return;
Object.defineProperty(navigator, 'language', {
get: function navigatorLanguage() {
var language = navigator.userLanguage || 'en-US';
return language.substring(0, 2).toLowerCase() +
language.substring(2).toUpperCase();
},
enumerable: true
});
})();

View file

@ -1,3 +1,6 @@
cd build cd build
rm pdf.js rm pdf.js
wget http://mozilla.github.com/pdf.js/build/pdf.js wget http://mozilla.github.com/pdf.js/build/pdf.js
wget http://mozilla.github.com/pdf.js/web/compatibility.js
wget http://mozilla.github.com/pdf.js/web/viewer.js

File diff suppressed because it is too large Load diff

View file

@ -24,21 +24,9 @@ function showPDFviewer(dir,filename){
var oldcontent = $("#content").html(); var oldcontent = $("#content").html();
$("#content").html(oldcontent+'<div id="loading">Loading... 0%</div><div id="viewer"></div>'); $("#content").html(oldcontent+'<div id="loading">Loading... 0%</div><div id="viewer"></div>');
showPDFviewer.lastTitle = document.title; showPDFviewer.lastTitle = document.title;
if(!showPDFviewer.loaded){ PDFView.Ptitle = filename;
OC.addScript( 'files_pdfviewer', 'pdfjs/build/pdf',function(){ PDFView.open(url,1.00);
OC.addScript( 'files_pdfviewer', 'pdfview',function(){ PDFView.active=true;
showPDFviewer.loaded=true;
PDFJS.workerSrc = OC.filePath('files_pdfviewer','js','pdfjs/build/pdf.js');
PDFView.Ptitle = filename;
PDFView.open(url,1.00);
PDFView.active=true;
});
});
}else{
PDFView.Ptitle = filename;
PDFView.open(url,1.00);
PDFView.active=true;
}
$("#pageWidthOption").attr("selected","selected"); $("#pageWidthOption").attr("selected","selected");
showPDFviewer.shown = true; showPDFviewer.shown = true;
} }
@ -46,7 +34,6 @@ function showPDFviewer(dir,filename){
showPDFviewer.shown=false; showPDFviewer.shown=false;
showPDFviewer.oldCode=''; showPDFviewer.oldCode='';
showPDFviewer.lastTitle=''; showPDFviewer.lastTitle='';
showPDFviewer.loaded=false;
$(document).ready(function(){ $(document).ready(function(){
if(!$.browser.msie){//doesnt work on IE if(!$.browser.msie){//doesnt work on IE

View file

@ -3,7 +3,7 @@
<name>*dbname*</name> <name>*dbname*</name>
<create>true</create> <create>true</create>
<overwrite>false</overwrite> <overwrite>false</overwrite>
<charset>latin1</charset> <charset>utf8</charset>
<table> <table>
<name>*dbprefix*sharing</name> <name>*dbprefix*sharing</name>
<declaration> <declaration>

View file

@ -3,7 +3,7 @@
<name>*dbname*</name> <name>*dbname*</name>
<create>true</create> <create>true</create>
<overwrite>false</overwrite> <overwrite>false</overwrite>
<charset>latin1</charset> <charset>utf8</charset>
<table> <table>
<name>*dbprefix*pictures_images_cache</name> <name>*dbprefix*pictures_images_cache</name>
<declaration> <declaration>

View file

@ -5,7 +5,7 @@
<create>true</create> <create>true</create>
<overwrite>false</overwrite> <overwrite>false</overwrite>
<charset>latin1</charset> <charset>utf8</charset>
<table> <table>

View file

@ -3,7 +3,7 @@
<name>*dbname*</name> <name>*dbname*</name>
<create>true</create> <create>true</create>
<overwrite>false</overwrite> <overwrite>false</overwrite>
<charset>latin1</charset> <charset>utf8</charset>
<table> <table>
<name>*dbprefix*authtoken</name> <name>*dbprefix*authtoken</name>
<declaration> <declaration>

View file

@ -34,8 +34,8 @@ li.selected { background-color:#ddd; }
#content>table:not(.nostyle) { margin-top:3em; } #content>table:not(.nostyle) { margin-top:3em; }
table:not(.nostyle) { width:100%; } table:not(.nostyle) { width:100%; }
#rightcontent { padding-left: 1em; } #rightcontent { padding-left: 1em; }
td.quota { position:relative; }
div.quota { float:right; display:block; position:absolute; right:25em; top:0; } div.quota { float:right; display:block; position:absolute; right:25em; top:0; }
div.quota-select-wrapper { position: relative; }
select.quota { position:absolute; left:0; top:0; width:10em; } select.quota { position:absolute; left:0; top:0; width:10em; }
select.quota-user { position:relative; left:0; top:0; width:10em; } select.quota-user { position:relative; left:0; top:0; width:10em; }
input.quota-other { display:none; position:absolute; left:0.1em; top:0.1em; width:7em; border:none; -webkit-box-shadow: none -mox-box-shadow:none ; box-shadow:none; } input.quota-other { display:none; position:absolute; left:0.1em; top:0.1em; width:7em; border:none; -webkit-box-shadow: none -mox-box-shadow:none ; box-shadow:none; }

View file

@ -95,9 +95,9 @@ $(document).ready(function(){
$(this).children('img').click(); $(this).children('img').click();
}); });
$('select.quota').live('change',function(){ $('select.quota, select.quota-user').live('change',function(){
var select=$(this); var select=$(this);
var uid=$(this).parent().parent().data('uid'); var uid=$(this).parent().parent().parent().data('uid');
var quota=$(this).val(); var quota=$(this).val();
var other=$(this).next(); var other=$(this).next();
if(quota!='other'){ if(quota!='other'){
@ -110,7 +110,7 @@ $(document).ready(function(){
other.focus(); other.focus();
} }
}); });
$('select.quota').each(function(i,select){ $('select.quota, select.quota-user').each(function(i,select){
$(select).data('previous',$(select).val()); $(select).data('previous',$(select).val());
}) })
@ -207,9 +207,9 @@ $(document).ready(function(){
applyMultiplySelect(select); applyMultiplySelect(select);
$('#content table tbody').last().append(tr); $('#content table tbody').last().append(tr);
tr.find('select.quota option').attr('selected',null); tr.find('select.quota-user option').attr('selected',null);
tr.find('select.quota option').first().attr('selected','selected'); tr.find('select.quota-user option').first().attr('selected','selected');
tr.find('select.quota').data('previous','default'); tr.find('select.quota-user').data('previous','default');
} }
} }
); );

View file

@ -12,29 +12,43 @@ foreach($_["groups"] as $group) {
<div id="controls"> <div id="controls">
<form id="newuser"> <form id="newuser">
<input id="newusername" placeholder="<?php echo $l->t('Name')?>" /> <input id="newusername" placeholder="<?php echo $l->t('Name')?>" /> <input
<input type="password" id="newuserpassword" placeholder="<?php echo $l->t('Password')?>" /> type="password" id="newuserpassword"
<select id="newusergroups" data-placeholder="groups" title="<?php echo $l->t('Groups')?>" multiple="multiple"> placeholder="<?php echo $l->t('Password')?>" /> <select
<?php foreach($_["groups"] as $group): ?> id="newusergroups" data-placeholder="groups"
<option value="<?php echo $group['name'];?>"><?php echo $group['name'];?></option> title="<?php echo $l->t('Groups')?>" multiple="multiple">
<?php endforeach;?> <?php foreach($_["groups"] as $group): ?>
</select> <option value="<?php echo $group['name'];?>">
<input type="submit" value="<?php echo $l->t('Create')?>" /> <?php echo $group['name'];?>
</option>
<?php endforeach;?>
</select> <input type="submit" value="<?php echo $l->t('Create')?>" />
</form> </form>
<div class="quota"> <div class="quota">
<span><?php echo $l->t('Default Quota');?>:</span> <span><?php echo $l->t('Default Quota');?>:</span>
<select class='quota'> <div class="quota-select-wrapper">
<?php foreach($_['quota_preset'] as $preset):?> <select class='quota'>
<?php foreach($_['quota_preset'] as $preset):?>
<?php if($preset!='default'):?> <?php if($preset!='default'):?>
<option <?php if($_['default_quota']==$preset) echo 'selected="selected"';?> value='<?php echo $preset;?>'><?php echo $preset;?></option> <option
<?php if($_['default_quota']==$preset) echo 'selected="selected"';?>
value='<?php echo $preset;?>'>
<?php echo $preset;?>
</option>
<?php endif;?> <?php endif;?>
<?php endforeach;?> <?php endforeach;?>
<?php if(array_search($_['default_quota'],$_['quota_preset'])===false):?> <?php if(array_search($_['default_quota'],$_['quota_preset'])===false):?>
<option selected="selected" value='<?php echo $_['default_quota'];?>'><?php echo $_['default_quota'];?></option> <option selected="selected"
<?php endif;?> value='<?php echo $_['default_quota'];?>'>
<option value='other'><?php echo $l->t('Other');?>...</option> <?php echo $_['default_quota'];?>
</select> </option>
<input class='quota-other'></input> <?php endif;?>
<option value='other'>
<?php echo $l->t('Other');?>
...
</option>
</select> <input class='quota-other'></input>
</div>
</div> </div>
</div> </div>
@ -49,38 +63,52 @@ foreach($_["groups"] as $group) {
</tr> </tr>
</thead> </thead>
<tbody> <tbody>
<?php foreach($_["users"] as $user): ?> <?php foreach($_["users"] as $user): ?>
<tr data-uid="<?php echo $user["name"] ?>"> <tr data-uid="<?php echo $user["name"] ?>">
<td class="name"><?php echo $user["name"]; ?></td> <td class="name"><?php echo $user["name"]; ?></td>
<td class="password"> <td class="password"><span>●●●●●●●</span> <img class="svg action"
<span>●●●●●●●</span> src="<?php echo image_path('core','actions/rename.svg')?>"
<img class="svg action" src="<?php echo image_path('core','actions/rename.svg')?>" alt="set new password" title="set new password" /> alt="set new password" title="set new password" />
</td> </td>
<td class="groups"> <td class="groups"><select
<select data-username="<?php echo $user['name'] ;?>" data-user-groups="<?php echo $user['groups'] ;?>" data-placeholder="groups" title="<?php echo $l->t('Groups')?>" multiple="multiple"> data-username="<?php echo $user['name'] ;?>"
data-user-groups="<?php echo $user['groups'] ;?>"
data-placeholder="groups" title="<?php echo $l->t('Groups')?>"
multiple="multiple">
<?php foreach($_["groups"] as $group): ?> <?php foreach($_["groups"] as $group): ?>
<option value="<?php echo $group['name'];?>"><?php echo $group['name'];?></option> <option value="<?php echo $group['name'];?>">
<?php echo $group['name'];?>
</option>
<?php endforeach;?> <?php endforeach;?>
</select> </select>
</td> </td>
<td class="quota"> <td class="quota">
<select class='quota-user'> <div class="quota-select-wrapper">
<?php foreach($_['quota_preset'] as $preset):?> <select class='quota-user'>
<option <?php if($user['quota']==$preset) echo 'selected="selected"';?> value='<?php echo $preset;?>'><?php echo $preset;?></option> <?php foreach($_['quota_preset'] as $preset):?>
<?php endforeach;?> <option
<?php if(array_search($user['quota'],$_['quota_preset'])===false):?> <?php if($user['quota']==$preset) echo 'selected="selected"';?>
<option selected="selected" value='<?php echo $user['quota'];?>'><?php echo $user['quota'];?></option> value='<?php echo $preset;?>'>
<?php endif;?> <?php echo $preset;?>
<option value='other'><?php echo $l->t('Other');?>...</option> </option>
</select> <?php endforeach;?>
<input class='quota-other'></input> <?php if(array_search($user['quota'],$_['quota_preset'])===false):?>
<option selected="selected" value='<?php echo $user['quota'];?>'>
<?php echo $user['quota'];?>
</option>
<?php endif;?>
<option value='other'>
<?php echo $l->t('Other');?>
...
</option>
</select> <input class='quota-other'></input>
</div>
</td> </td>
<td class="remove"> <td class="remove"><?php if($user['name']!=OC_User::getUser()):?> <img
<?php if($user['name']!=OC_User::getUser()):?> alt="Delete" title="<?php echo $l->t('Delete')?>" class="svg action"
<img alt="Delete" title="<?php echo $l->t('Delete')?>" class="svg action" src="<?php echo image_path('core','actions/delete.svg') ?>" /> src="<?php echo image_path('core','actions/delete.svg') ?>" /> <?php endif;?>
<?php endif;?>
</td> </td>
</tr> </tr>
<?php endforeach; ?> <?php endforeach; ?>
</tbody> </tbody>
</table> </table>