The mount options are now passed to the UI and stored in a hidden field.
The ext storage controllers and services also know how to load/save them
from the legacy config.
* @param string $mountPoint storage mount point
* @param string $backendClass backend class name
* @param array $backendOptions backend-specific options
+ * @param array $mountOptions mount-specific options
* @param array $applicableUsers users for which to mount the storage
* @param array $applicableGroups groups for which to mount the storage
* @param int $priority priority
$mountPoint,
$backendClass,
$backendOptions,
+ $mountOptions,
$applicableUsers,
$applicableGroups,
$priority
$newStorage->setMountPoint($mountPoint);
$newStorage->setBackendClass($backendClass);
$newStorage->setBackendOptions($backendOptions);
+ $newStorage->setMountOptions($mountOptions);
$newStorage->setApplicableUsers($applicableUsers);
$newStorage->setApplicableGroups($applicableGroups);
$newStorage->setPriority($priority);
* @param string $mountPoint storage mount point
* @param string $backendClass backend class name
* @param array $backendOptions backend-specific options
+ * @param array $mountOptions mount-specific options
* @param array $applicableUsers users for which to mount the storage
* @param array $applicableGroups groups for which to mount the storage
* @param int $priority priority
$mountPoint,
$backendClass,
$backendOptions,
+ $mountOptions,
$applicableUsers,
$applicableGroups,
$priority
$storage->setMountPoint($mountPoint);
$storage->setBackendClass($backendClass);
$storage->setBackendOptions($backendOptions);
+ $storage->setMountOptions($mountOptions);
$storage->setApplicableUsers($applicableUsers);
$storage->setApplicableGroups($applicableGroups);
$storage->setPriority($priority);
* @param string $mountPoint storage mount point
* @param string $backendClass backend class name
* @param array $backendOptions backend-specific options
+ * @param array $mountOptions backend-specific mount options
*
* @return DataResponse
*
public function create(
$mountPoint,
$backendClass,
- $backendOptions
+ $backendOptions,
+ $mountOptions
) {
$newStorage = new StorageConfig();
$newStorage->setMountPoint($mountPoint);
$newStorage->setBackendClass($backendClass);
$newStorage->setBackendOptions($backendOptions);
+ $newStorage->setMountOptions($mountOptions);
$response = $this->validate($newStorage);
if (!empty($response)) {
* @param string $mountPoint storage mount point
* @param string $backendClass backend class name
* @param array $backendOptions backend-specific options
+ * @param array $mountOptions backend-specific mount options
*
* @return DataResponse
*/
$id,
$mountPoint,
$backendClass,
- $backendOptions
+ $backendOptions,
+ $mountOptions
) {
$storage = new StorageConfig($id);
$storage->setMountPoint($mountPoint);
$storage->setBackendClass($backendClass);
$storage->setBackendOptions($backendOptions);
+ $storage->setMountOptions($mountOptions);
$response = $this->validate($storage);
if (!empty($response)) {
*/
backendOptions: null,
+ /**
+ * Mount-specific options
+ *
+ * @type Object.<string,object>
+ */
+ mountOptions: null,
+
/**
* Creates or saves the storage.
*
if (this.id) {
data.id = this.id;
}
+ if (this.mountOptions) {
+ data.mountOptions = this.mountOptions;
+ }
return data;
},
storage.priority = $tr.find('input.priority').val();
}
+ var mountOptions = $tr.find('input.mountOptions').val();
+ if (mountOptions) {
+ storage.mountOptions = JSON.parse(mountOptions);
+ }
+
return storage;
},
'applicable' => array('groups' => array($group), 'users' => array()),
'status' => self::getBackendStatus($mount['class'], $mount['options'], false)
);
+ if (isset($mount['mountOptions'])) {
+ $config['mountOptions'] = $mount['mountOptions'];
+ }
$hash = self::makeConfigHash($config);
// If an existing config exists (with same class, mountpoint and options)
if (isset($system[$hash])) {
'applicable' => array('groups' => array(), 'users' => array($user)),
'status' => self::getBackendStatus($mount['class'], $mount['options'], false)
);
+ if (isset($mount['mountOptions'])) {
+ $config['mountOptions'] = $mount['mountOptions'];
+ }
$hash = self::makeConfigHash($config);
// If an existing config exists (with same class, mountpoint and options)
if (isset($system[$hash])) {
$mount['class'] = '\OC\Files\Storage\\' . substr($mount['class'], 15);
}
$mount['options'] = self::decryptPasswords($mount['options']);
- $personal[] = array(
+ $config = array(
'id' => (int) $mount['id'],
'storage_id' => (int) $mount['storage_id'],
'class' => $mount['class'],
'options' => $mount['options'],
'status' => self::getBackendStatus($mount['class'], $mount['options'], true)
);
+ if (isset($mount['mountOptions'])) {
+ $config['mountOptions'] = $mount['mountOptions'];
+ }
+ $personal[] = $config;
}
}
return $personal;
*/
private $applicableGroups = [];
+ /**
+ * @var array
+ */
+ private $mountOptions = [];
+
/**
* @param int|null $id config id or null for a new config
*/
$this->applicableGroups = $applicableGroups;
}
+ /**
+ * Returns the mount-specific options
+ *
+ * @return array mount specific options
+ */
+ public function getMountOptions() {
+ return $this->mountOptions;
+ }
+
+ /**
+ * Sets the mount-specific options
+ *
+ * @param array applicable groups
+ */
+ public function setMountOptions($mountOptions) {
+ if (is_null($mountOptions)) {
+ $mountOptions = [];
+ }
+ $this->mountOptions = $mountOptions;
+ }
+
/**
* Sets the storage status, whether the config worked last time
*
if (!empty($this->applicableGroups)) {
$result['applicableGroups'] = $this->applicableGroups;
}
+ if (!empty($this->mountOptions)) {
+ $result['mountOptions'] = $this->mountOptions;
+ }
if (!is_null($this->status)) {
$result['status'] = $this->status;
}
* - "priority": storage priority
* - "backend": backend class name
* - "options": backend-specific options
+ * - "mountOptions": mount-specific options (ex: disable previews, scanner, etc)
*/
// group by storage id
$currentStorage->setBackendClass($storageOptions['class']);
$currentStorage->setBackendOptions($storageOptions['options']);
+ if (isset($storageOptions['mountOptions'])) {
+ $currentStorage->setMountOptions($storageOptions['mountOptions']);
+ }
if (isset($storageOptions['priority'])) {
$currentStorage->setPriority($storageOptions['priority']);
}
if (!is_null($storageConfig->getPriority())) {
$options['priority'] = $storageConfig->getPriority();
}
+ if (!empty($storageConfig->getMountOptions())) {
+ $options['mountOptions'] = $storageConfig->getMountOptions();
+ }
$mountPoints[$mountType][$applicable][$rootMountPoint] = $options;
}
<?php OCP\Util::addScript('files_external', $_['backends'][$mount['class']]['custom']); ?>
<?php endif; ?>
<?php endif; ?>
+ <?php if (isset($mount['mountOptions'])): ?>
+ <input type="hidden" class="mountOptions" value="<?php p(json_encode($mount['mountOptions'])) ?>" />
+ <?php endif; ?>
+ <?php if ($_['isAdminPage']): ?>
+ <?php if (isset($mount['priority'])): ?>
+ <input type="hidden" class="priority" value="<?php p($mount['priority']) ?>" />
+ <?php endif; ?>
+ <?php endif; ?>
</td>
<?php if ($_['isAdminPage']): ?>
<td class="applicable"
print_unescaped(json_encode($mount['applicable']['users'])); ?>'>
<input type="hidden" class="applicableUsers" style="width:20em;" value=""/>
</td>
- <?php if (isset($mount['priority'])): ?>
- <input type="hidden" class="priority" value="<?php p($mount['priority']) ?>" />
- <?php endif; ?>
<?php endif; ?>
<td <?php if (isset($mount['mountpoint'])): ?>class="remove"
<?php else: ?>style="visibility:hidden;"
array(),
[],
[],
+ [],
null
);
array(),
[],
[],
+ [],
null
);
array(),
[],
[],
+ [],
null
);
array(),
[],
[],
+ [],
null
);
array(),
[],
[],
+ [],
null
);
array(),
[],
[],
+ [],
null
);
array(),
[],
[],
+ [],
null
);
$storageConfig->setMountPoint('test');
$storageConfig->setBackendClass('\OC\Files\Storage\SMB');
$storageConfig->setBackendOptions(['user' => 'test', 'password', 'password123']);
+ $storageConfig->setMountOptions(['priority' => false]);
$this->service->expects($this->once())
->method('getStorage')
array(),
[],
[],
+ [],
null
);
array(),
[],
[],
+ [],
null
);
'applicableUsers' => [],
'applicableGroups' => [],
'priority' => 15,
+ 'mountOptions' => [
+ 'preview' => false,
+ ]
]);
}
$this->assertEquals(1, $mountPointOptions['id']);
$this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
$this->assertEquals(15, $mountPointOptions['priority']);
+ $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
$backendOptions = $mountPointOptions['options'];
$this->assertEquals('value1', $backendOptions['option1']);
$this->assertEquals(1, $mountPointOptions['id']);
$this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
$this->assertEquals(15, $mountPointOptions['priority']);
+ $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
$backendOptions = $mountPointOptions['options'];
$this->assertEquals('value1', $backendOptions['option1']);
$this->assertEquals(1, $mountPointOptions['id']);
$this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
$this->assertEquals(15, $mountPointOptions['priority']);
+ $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
$backendOptions = $mountPointOptions['options'];
$this->assertEquals('value1', $backendOptions['option1']);
if (isset($data['priority'])) {
$storage->setPriority($data['priority']);
}
+ if (isset($data['mountOptions'])) {
+ $storage->setMountOptions($data['mountOptions']);
+ }
return $storage;
}
'option2' => 'value2',
'password' => 'testPassword',
],
+ 'mountOptions' => [
+ 'preview' => false,
+ ]
]);
}
$mountPointOptions = current($mountPointData);
$this->assertEquals(1, $mountPointOptions['id']);
$this->assertEquals('\OC\Files\Storage\SMB', $mountPointOptions['class']);
+ $this->assertEquals(false, $mountPointOptions['mountOptions']['preview']);
$backendOptions = $mountPointOptions['options'];
$this->assertEquals('value1', $backendOptions['option1']);
$storageConfig->setPriority(128);
$storageConfig->setApplicableUsers(['user1', 'user2']);
$storageConfig->setApplicableGroups(['group1', 'group2']);
+ $storageConfig->setMountOptions(['preview' => false]);
$json = $storageConfig->jsonSerialize();
$this->assertEquals(128, $json['priority']);
$this->assertEquals(['user1', 'user2'], $json['applicableUsers']);
$this->assertEquals(['group1', 'group2'], $json['applicableGroups']);
+ $this->assertEquals(['preview' => false], $json['mountOptions']);
}
}