Welcome to mirror list, hosted at ThFree Co, Russian Federation.

github.com/nextcloud/groupfolders.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--appinfo/database.xml89
-rw-r--r--appinfo/info.xml2
-rw-r--r--lib/Folder/FolderManager.php12
-rw-r--r--lib/Migration/Version102020Date20180806161449.php65
-rw-r--r--lib/Migration/Version103000Date20180806161724.php96
-rw-r--r--tests/Folder/FolderManagerTest.php2
6 files changed, 169 insertions, 97 deletions
diff --git a/appinfo/database.xml b/appinfo/database.xml
deleted file mode 100644
index 3579e014..00000000
--- a/appinfo/database.xml
+++ /dev/null
@@ -1,89 +0,0 @@
-<database>
- <name>*dbname*</name>
- <create>true</create>
- <overwrite>false</overwrite>
- <charset>utf8</charset>
- <table>
- <name>*dbprefix*group_folders</name>
- <declaration>
- <field>
- <name>folder_id</name>
- <type>integer</type>
- <default>0</default>
- <notnull>true</notnull>
- <autoincrement>1</autoincrement>
- <length>6</length>
- </field>
- <field>
- <name>mount_point</name>
- <type>text</type>
- <length>128</length>
- <notnull>true</notnull>
- </field>
- <field>
- <name>quota</name>
- <type>integer</type>
- <notnull>true</notnull>
- <length>6</length>
- <default>-3</default>
- </field>
- </declaration>
- </table>
- <table>
- <name>*dbprefix*group_folders_applicable</name>
- <declaration>
- <field>
- <name>applicable_id</name>
- <type>integer</type>
- <default>0</default>
- <notnull>true</notnull>
- <autoincrement>1</autoincrement>
- <length>6</length>
- </field>
- <field>
- <name>folder_id</name>
- <type>integer</type>
- <notnull>true</notnull>
- <length>6</length>
- </field>
- <field>
- <name>permissions</name>
- <type>integer</type>
- <length>4</length>
- <notnull>true</notnull>
- </field>
- <field>
- <name>group_id</name>
- <type>text</type>
- <length>64</length>
- </field>
-
- <index>
- <name>applicable_folder</name>
- <field>
- <name>folder_id</name>
- <sorting>ascending</sorting>
- </field>
- </index>
- <index>
- <name>applicable_folder_value</name>
- <field>
- <name>group_id</name>
- <sorting>ascending</sorting>
- </field>
- </index>
- <index>
- <name>applicable_folder_group</name>
- <unique>true</unique>
- <field>
- <name>folder_id</name>
- <sorting>ascending</sorting>
- </field>
- <field>
- <name>group_id</name>
- <sorting>ascending</sorting>
- </field>
- </index>
- </declaration>
- </table>
-</database>
diff --git a/appinfo/info.xml b/appinfo/info.xml
index 338d0709..fef1b5d7 100644
--- a/appinfo/info.xml
+++ b/appinfo/info.xml
@@ -10,7 +10,7 @@ Folders can be configured from *Group folders* in the admin settings.
After a folder is created, the admin can give access to the folder to one or more groups, control their write/sharing permissions and assign a quota for the folder.
Note: encrypting the contents of group folders is currently not supported.]]></description>
- <version>1.2.2</version>
+ <version>1.3.0</version>
<licence>agpl</licence>
<author>Robin Appelman</author>
<namespace>GroupFolders</namespace>
diff --git a/lib/Folder/FolderManager.php b/lib/Folder/FolderManager.php
index 9325d1ce..a6a779ac 100644
--- a/lib/Folder/FolderManager.php
+++ b/lib/Folder/FolderManager.php
@@ -122,7 +122,7 @@ class FolderManager {
$query = $this->connection->getQueryBuilder();
$query->select('folder_id', 'group_id', 'permissions')
- ->from('group_folders_applicable');
+ ->from('group_folders_groups');
$rows = $query->execute()->fetchAll();
@@ -149,7 +149,7 @@ class FolderManager {
->from('group_folders', 'f')
->innerJoin(
'f',
- 'group_folders_applicable',
+ 'group_folders_groups',
'a',
$query->expr()->eq('f.folder_id', 'a.folder_id')
)
@@ -190,7 +190,7 @@ class FolderManager {
public function addApplicableGroup($folderId, $groupId) {
$query = $this->connection->getQueryBuilder();
- $query->insert('group_folders_applicable')
+ $query->insert('group_folders_groups')
->values([
'folder_id' => $query->createNamedParameter($folderId, IQueryBuilder::PARAM_INT),
'group_id' => $query->createNamedParameter($groupId),
@@ -202,7 +202,7 @@ class FolderManager {
public function removeApplicableGroup($folderId, $groupId) {
$query = $this->connection->getQueryBuilder();
- $query->delete('group_folders_applicable')
+ $query->delete('group_folders_groups')
->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId, IQueryBuilder::PARAM_INT)))
->andWhere($query->expr()->eq('group_id', $query->createNamedParameter($groupId)));
$query->execute();
@@ -211,7 +211,7 @@ class FolderManager {
public function setGroupPermissions($folderId, $groupId, $permissions) {
$query = $this->connection->getQueryBuilder();
- $query->update('group_folders_applicable')
+ $query->update('group_folders_groups')
->set('permissions', $query->createNamedParameter($permissions, IQueryBuilder::PARAM_INT))
->where($query->expr()->eq('folder_id', $query->createNamedParameter($folderId, IQueryBuilder::PARAM_INT)))
->andWhere($query->expr()->eq('group_id', $query->createNamedParameter($groupId)));
@@ -248,7 +248,7 @@ class FolderManager {
public function deleteGroup($groupId) {
$query = $this->connection->getQueryBuilder();
- $query->delete('group_folders_applicable')
+ $query->delete('group_folders_groups')
->where($query->expr()->eq('group_id', $query->createNamedParameter($groupId)));
$query->execute();
}
diff --git a/lib/Migration/Version102020Date20180806161449.php b/lib/Migration/Version102020Date20180806161449.php
new file mode 100644
index 00000000..a7fda82d
--- /dev/null
+++ b/lib/Migration/Version102020Date20180806161449.php
@@ -0,0 +1,65 @@
+<?php
+namespace OCA\GroupFolders\Migration;
+
+use OCP\DB\ISchemaWrapper;
+use OCP\Migration\SimpleMigrationStep;
+use OCP\Migration\IOutput;
+
+class Version102020Date20180806161449 extends SimpleMigrationStep {
+ /**
+ * @param IOutput $output
+ * @param \Closure $schemaClosure The `\Closure` returns a `ISchemaWrapper`
+ * @param array $options
+ * @return null|ISchemaWrapper
+ * @since 13.0.0
+ */
+ public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) {
+ /** @var ISchemaWrapper $schema */
+ $schema = $schemaClosure();
+
+ if (!$schema->hasTable('group_folders')) {
+ $table = $schema->createTable('group_folders');
+ $table->addColumn('folder_id', 'bigint', [
+ 'autoincrement' => true,
+ 'notnull' => true,
+ 'length' => 6,
+ ]);
+ $table->addColumn('mount_point', 'string', [
+ 'notnull' => true,
+ 'length' => 128,
+ ]);
+ $table->addColumn('quota', 'bigint', [
+ 'notnull' => true,
+ 'length' => 6,
+ 'default' => -3,
+ ]);
+ $table->setPrimaryKey(['folder_id']);
+ }
+
+ if (!$schema->hasTable('group_folders_groups')) {
+ $table = $schema->createTable('group_folders_groups');
+ $table->addColumn('applicable_id', 'bigint', [
+ 'autoincrement' => true,
+ 'notnull' => true,
+ 'length' => 6,
+ ]);
+ $table->addColumn('folder_id', 'bigint', [
+ 'notnull' => true,
+ 'length' => 6,
+ ]);
+ $table->addColumn('permissions', 'integer', [
+ 'notnull' => true,
+ 'length' => 4,
+ ]);
+ $table->addColumn('group_id', 'string', [
+ 'notnull' => false,
+ 'length' => 64,
+ ]);
+ $table->setPrimaryKey(['applicable_id']);
+ $table->addIndex(['folder_id'], 'group_folder');
+ $table->addIndex(['group_id'], 'group_folder_value');
+ $table->addUniqueIndex(['folder_id', 'group_id'], 'groups_folder_group');
+ }
+ return $schema;
+ }
+}
diff --git a/lib/Migration/Version103000Date20180806161724.php b/lib/Migration/Version103000Date20180806161724.php
new file mode 100644
index 00000000..d0e7e650
--- /dev/null
+++ b/lib/Migration/Version103000Date20180806161724.php
@@ -0,0 +1,96 @@
+<?php
+namespace OCA\GroupFolders\Migration;
+
+use OCP\DB\ISchemaWrapper;
+use OCP\IDBConnection;
+use OCP\Migration\SimpleMigrationStep;
+use OCP\Migration\IOutput;
+
+class Version103000Date20180806161724 extends SimpleMigrationStep {
+ /** @var IDBConnection */
+ private $connection;
+
+ private $applicableData = [];
+
+ public function __construct(IDBConnection $connection) {
+ $this->connection = $connection;
+ }
+
+ public function name(): string {
+ return 'rename "group_folders_applicable" to "group_folders_groups"';
+ }
+
+ public function description(): string {
+ return 'rename "group_folders_applicable" to fit within oracle limitations';
+ }
+
+ public function preSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) {
+ /** @var ISchemaWrapper $schema */
+ $schema = $schemaClosure();
+
+ // copy data
+ if ($schema->hasTable('group_folders_applicable')) {
+ $query = $this->connection->getQueryBuilder();
+ $query->select(['folder_id', 'permissions', 'group_id'])
+ ->from('group_folders_applicable');
+ $result = $query->execute();
+ $this->applicableData = $result->fetchAll(\PDO::FETCH_ASSOC);
+ }
+ }
+
+ public function changeSchema(IOutput $output, \Closure $schemaClosure, array $options) {
+ /** @var ISchemaWrapper $schema */
+ $schema = $schemaClosure();
+
+ if (!$schema->hasTable('group_folders_groups')) {
+ $table = $schema->createTable('group_folders_groups');
+ $table->addColumn('applicable_id', 'bigint', [
+ 'autoincrement' => true,
+ 'notnull' => true,
+ 'length' => 6,
+ ]);
+ $table->addColumn('folder_id', 'bigint', [
+ 'notnull' => true,
+ 'length' => 6,
+ ]);
+ $table->addColumn('permissions', 'integer', [
+ 'notnull' => true,
+ 'length' => 4,
+ ]);
+ $table->addColumn('group_id', 'string', [
+ 'notnull' => false,
+ 'length' => 64,
+ ]);
+ $table->setPrimaryKey(['applicable_id']);
+ $table->addIndex(['folder_id'], 'groups_folder');
+ $table->addIndex(['group_id'], 'groups_folder_value');
+ $table->addUniqueIndex(['folder_id', 'group_id'], 'groups_folder_group');
+ }
+
+ if ($schema->hasTable('group_folders_applicable')) {
+ $schema->dropTable('group_folders_applicable');
+ }
+
+ return $schema;
+ }
+
+ public function postSchemaChange(IOutput $output, \Closure $schemaClosure, array $options) {
+ if (count($this->applicableData)) {
+ $query = $this->connection->getQueryBuilder();
+ $query->insert('group_folders_groups')
+ ->values([
+ 'folder_id' => $query->createParameter('folder'),
+ 'group_id' => $query->createParameter('group'),
+ 'permissions' => $query->createParameter('permissions')
+ ]);
+
+ foreach($this->applicableData as $data) {
+ $query->setParameter('folder', $data['folder_id']);
+ $query->setParameter('group', $data['group_id']);
+ $query->setParameter('permissions', $data['permissions']);
+
+ $query->execute();
+ }
+ }
+ }
+}
diff --git a/tests/Folder/FolderManagerTest.php b/tests/Folder/FolderManagerTest.php
index cb453c26..8ceb9f7d 100644
--- a/tests/Folder/FolderManagerTest.php
+++ b/tests/Folder/FolderManagerTest.php
@@ -44,7 +44,7 @@ class FolderManagerTest extends TestCase {
$query->delete('group_folders')->execute();
$query = \OC::$server->getDatabaseConnection()->getQueryBuilder();
- $query->delete('group_folders_applicable')->execute();
+ $query->delete('group_folders_groups')->execute();
}
private function assertHasFolders($folders) {