diff options
author | Maxence Lange <maxence@nextcloud.com> | 2017-06-10 02:45:33 +0300 |
---|---|---|
committer | Maxence Lange <maxence@nextcloud.com> | 2017-06-10 02:45:33 +0300 |
commit | fa4c5d492e8db657257d254efde13a9fd9269a8d (patch) | |
tree | 84db59965cc84889589fed01ef314f10387c6d75 | |
parent | 63cb8860929e0ff5077537a5d33017d9c08d2481 (diff) |
update circles & settings
Signed-off-by: Maxence Lange <maxence@nextcloud.com>
-rw-r--r-- | appinfo/routes.php | 4 | ||||
-rw-r--r-- | js/circles.app.actions.js | 10 | ||||
-rw-r--r-- | js/circles.app.elements.js | 4 | ||||
-rw-r--r-- | js/circles.app.settings.js | 7 | ||||
-rw-r--r-- | js/circles.v1.js | 14 | ||||
-rw-r--r-- | lib/Api/v1/Circles.php | 19 | ||||
-rw-r--r-- | lib/AppInfo/Application.php | 6 | ||||
-rw-r--r-- | lib/Controller/CirclesController.php | 23 | ||||
-rw-r--r-- | lib/Db/CirclesRequest.php | 10 | ||||
-rw-r--r-- | lib/Db/CirclesRequestBuilder.php | 47 | ||||
-rw-r--r-- | lib/Service/CirclesService.php | 37 |
11 files changed, 164 insertions, 17 deletions
diff --git a/appinfo/routes.php b/appinfo/routes.php index 3d6a5ae0..f07d97bc 100644 --- a/appinfo/routes.php +++ b/appinfo/routes.php @@ -38,6 +38,10 @@ return [ 'requirements' => ['id' => '\d+'], ], [ + 'name' => 'Circles#settings', 'url' => '/v1/circles/{id}/settings', 'verb' => 'POST', + 'requirements' => ['id' => '\d+'], + ], + [ 'name' => 'Circles#destroy', 'url' => '/v1/circles/{id}', 'verb' => 'DELETE', 'requirements' => ['id' => '\d+'], ], diff --git a/js/circles.app.actions.js b/js/circles.app.actions.js index 0e3b474f..8546ac87 100644 --- a/js/circles.app.actions.js +++ b/js/circles.app.actions.js @@ -76,6 +76,16 @@ var actions = { }, + saveSettings: function () { + data = { + allow_links: (elements.settingsLink.is(":checked")), + allow_links_auto: (elements.settingsLinkAuto.is(":checked")), + allow_links_files: (elements.settingsLinkFiles.is(":checked")) + }; + + api.settingsCircle(curr.circle, data, settings.saveSettingsResult); + }, + /** * * @param search diff --git a/js/circles.app.elements.js b/js/circles.app.elements.js index f029a38d..f8cfb89d 100644 --- a/js/circles.app.elements.js +++ b/js/circles.app.elements.js @@ -253,6 +253,10 @@ var elements = { }); + elements.settingsSave.on('click', function () { + actions.saveSettings(); + } + ); }, diff --git a/js/circles.app.settings.js b/js/circles.app.settings.js index 0115d310..af7e8392 100644 --- a/js/circles.app.settings.js +++ b/js/circles.app.settings.js @@ -65,9 +65,12 @@ var settings = { // elements.settingsEntryLinkAuto.fadeTo(0, 1).fadeTo(2000, 0.3); // elements.settingsEntryLinkFiles.fadeTo(0, 1).fadeTo(2000, 0.3); - } + }, -} + saveSettingsResult: function (result) { + console.log(result); + } +}; diff --git a/js/circles.v1.js b/js/circles.v1.js index 368137a2..511f63cf 100644 --- a/js/circles.v1.js +++ b/js/circles.v1.js @@ -163,6 +163,20 @@ }; + this.settingsCircle = function (circleId, settings, callback) { + var result = {status: -1}; + $.ajax({ + method: 'POST', + url: OC.generateUrl('/apps/circles/v1/circles/' + circleId + '/settings'), + data: {settings: settings} + }).done(function (res) { + self.onCallback(callback, res); + }).fail(function () { + self.onCallback(callback, result); + }); + }; + + this.leaveCircle = function (circleId, callback) { var result = {status: -1}; $.ajax({ diff --git a/lib/Api/v1/Circles.php b/lib/Api/v1/Circles.php index 06c63e68..45aee400 100644 --- a/lib/Api/v1/Circles.php +++ b/lib/Api/v1/Circles.php @@ -160,6 +160,25 @@ class Circles { } + + /** + * Circles::settingsCircle(); + * + * Save the settings. Settings is an array and current user need to be an admin + * + * @param $circleId + * @param array $settings + * + * @return Circle + */ + public static function settingsCircle($circleId, array $settings) { + $c = self::getContainer(); + + return $c->query('CirclesService') + ->settingsCircle($circleId, $settings); + } + + /** * Circles::destroyCircle(); * diff --git a/lib/AppInfo/Application.php b/lib/AppInfo/Application.php index 5e7114c1..9ce769c7 100644 --- a/lib/AppInfo/Application.php +++ b/lib/AppInfo/Application.php @@ -118,7 +118,8 @@ class Application extends App { 'CirclesService', function(IAppContainer $c) { return new CirclesService( $c->query('UserId'), $c->query('L10N'), $c->query('ConfigService'), - $c->query('DatabaseService'), $c->query('EventsService'), $c->query('MiscService') + $c->query('CirclesRequest'), $c->query('DatabaseService'), + $c->query('EventsService'), $c->query('MiscService') ); } ); @@ -127,7 +128,8 @@ class Application extends App { 'MembersService', function(IAppContainer $c) { return new MembersService( $c->query('UserId'), $c->query('L10N'), $c->query('UserManager'), - $c->query('ConfigService'), $c->query('DatabaseService'), $c->query('EventsService'), $c->query('MiscService') + $c->query('ConfigService'), $c->query('DatabaseService'), + $c->query('EventsService'), $c->query('MiscService') ); } ); diff --git a/lib/Controller/CirclesController.php b/lib/Controller/CirclesController.php index 8dabbd6d..81efcdbc 100644 --- a/lib/Controller/CirclesController.php +++ b/lib/Controller/CirclesController.php @@ -117,6 +117,29 @@ class CirclesController extends BaseController { * @internal param string $name * */ + public function settings($id, $settings) { + try { + $data = $this->circlesService->settingsCircle($id, $settings); + + return $this->success(['circle_id' => $id, 'details' => $data]); + } catch (\Exception $e) { + + return $this->fail(['circle_id' => $id, 'error' => $e->getMessage()]); + } + + } + + + /** + * @NoAdminRequired + * @NoSubAdminRequired + * + * @param $id + * + * @return DataResponse + * @internal param string $name + * + */ public function join($id) { try { $data = $this->circlesService->joinCircle($id); diff --git a/lib/Db/CirclesRequest.php b/lib/Db/CirclesRequest.php index 5ceaba11..539ee134 100644 --- a/lib/Db/CirclesRequest.php +++ b/lib/Db/CirclesRequest.php @@ -120,6 +120,16 @@ class CirclesRequest extends CirclesRequestBuilder { } + public function updateCircle(Circle $circle) { + $qb = $this->getCirclesUpdateSql($circle->getId()); + $qb->set('name', $qb->createNamedParameter($circle->getName())) + ->set('description', $qb->createNamedParameter($circle->getDescription())) + ->set('settings', $qb->createNamedParameter($circle->getSettings(true))); + + $qb->execute(); + } + + /** * @param string $uniqueId * diff --git a/lib/Db/CirclesRequestBuilder.php b/lib/Db/CirclesRequestBuilder.php index be625f6c..c8246ab8 100644 --- a/lib/Db/CirclesRequestBuilder.php +++ b/lib/Db/CirclesRequestBuilder.php @@ -73,9 +73,9 @@ class CirclesRequestBuilder { */ protected function limitToCircleId(IQueryBuilder & $qb, $circleId) { $expr = $qb->expr(); - $pf = ($qb->getType() === QueryBuilder::SELECT) ? $this->default_select_alias.'.' : ''; + $pf = ($qb->getType() === QueryBuilder::SELECT) ? $this->default_select_alias . '.' : ''; - $qb->andWhere($expr->eq($pf.'circle_id', $qb->createNamedParameter($circleId))); + $qb->andWhere($expr->eq($pf . 'circle_id', $qb->createNamedParameter($circleId))); } @@ -87,9 +87,9 @@ class CirclesRequestBuilder { */ protected function limitToId(IQueryBuilder & $qb, $id) { $expr = $qb->expr(); - $pf = ($qb->getType() === QueryBuilder::SELECT) ? $this->default_select_alias.'.' : ''; + $pf = ($qb->getType() === QueryBuilder::SELECT) ? $this->default_select_alias . '.' : ''; - $qb->andWhere($expr->eq($pf.'id', $qb->createNamedParameter($id))); + $qb->andWhere($expr->eq($pf . 'id', $qb->createNamedParameter($id))); } @@ -101,9 +101,9 @@ class CirclesRequestBuilder { */ protected function limitToUniqueId(IQueryBuilder & $qb, $uniqueId) { $expr = $qb->expr(); - $pf = ($qb->getType() === QueryBuilder::SELECT) ? $this->default_select_alias.'.' : ''; + $pf = ($qb->getType() === QueryBuilder::SELECT) ? $this->default_select_alias . '.' : ''; - $qb->andWhere($expr->eq($pf.'unique_id', $qb->createNamedParameter($uniqueId))); + $qb->andWhere($expr->eq($pf . 'unique_id', $qb->createNamedParameter($uniqueId))); } @@ -115,9 +115,9 @@ class CirclesRequestBuilder { */ protected function limitToToken(IQueryBuilder & $qb, $token) { $expr = $qb->expr(); - $pf = ($qb->getType() === QueryBuilder::SELECT) ? $this->default_select_alias.'.' : ''; + $pf = ($qb->getType() === QueryBuilder::SELECT) ? $this->default_select_alias . '.' : ''; - $qb->andWhere($expr->eq($pf.'token', $qb->createNamedParameter($token))); + $qb->andWhere($expr->eq($pf . 'token', $qb->createNamedParameter($token))); } @@ -149,13 +149,13 @@ class CirclesRequestBuilder { } $expr = $qb->expr(); - $pf = $this->default_select_alias.'.'; + $pf = $this->default_select_alias . '.'; $qb->selectAlias('u.level', 'user_level'); $qb->leftJoin( $this->default_select_alias, MembersMapper::TABLENAME, 'u', $expr->andX( - $expr->eq($pf.'id', 'u.circle_id'), + $expr->eq($pf . 'id', 'u.circle_id'), $expr->eq('u.user_id', $qb->createNamedParameter($userId)) ) ); @@ -174,12 +174,12 @@ class CirclesRequestBuilder { } $expr = $qb->expr(); - $pf = $this->default_select_alias.'.'; + $pf = $this->default_select_alias . '.'; $qb->leftJoin( $this->default_select_alias, MembersMapper::TABLENAME, 'o', $expr->andX( - $expr->eq($pf.'id', 'o.circle_id'), + $expr->eq($pf . 'id', 'o.circle_id'), $expr->eq('o.level', $qb->createNamedParameter(Member::LEVEL_OWNER)) ) ); @@ -256,6 +256,25 @@ class CirclesRequestBuilder { /** + * Base of the Sql Update request for Shares + * + * @param int $circleId + * + * @return IQueryBuilder + */ + protected function getCirclesUpdateSql($circleId) { + $qb = $this->dbConnection->getQueryBuilder(); + $qb->update('circles_circles') + ->where( + $qb->expr() + ->eq('id', $qb->createNamedParameter($circleId)) + ); + + return $qb; + } + + + /** * @return IQueryBuilder */ protected function getMembersSelectSql() { @@ -276,7 +295,9 @@ class CirclesRequestBuilder { protected function getCirclesSelectSql() { $qb = $this->dbConnection->getQueryBuilder(); - $qb->select('c.id', 'c.unique_id', 'c.name', 'c.description', 'c.settings', 'c.type', 'c.creation') + $qb->select( + 'c.id', 'c.unique_id', 'c.name', 'c.description', 'c.settings', 'c.type', 'c.creation' + ) ->from('circles_circles', 'c'); $this->default_select_alias = 'c'; diff --git a/lib/Service/CirclesService.php b/lib/Service/CirclesService.php index 916fd821..1dfe4b77 100644 --- a/lib/Service/CirclesService.php +++ b/lib/Service/CirclesService.php @@ -28,6 +28,7 @@ namespace OCA\Circles\Service; use OCA\Circles\Db\CirclesMapper; +use OCA\Circles\Db\CirclesRequest; use OCA\Circles\Db\MembersMapper; use OCA\Circles\Exceptions\CircleTypeDisabledException; use OCA\Circles\Exceptions\MemberDoesNotExistException; @@ -47,6 +48,9 @@ class CirclesService { /** @var ConfigService */ private $configService; + /** @var CirclesRequest */ + private $circlesRequest; + /** @var CirclesMapper */ private $dbCircles; @@ -66,6 +70,7 @@ class CirclesService { * @param $userId * @param IL10N $l10n * @param ConfigService $configService + * @param CirclesRequest $circlesRequest * @param DatabaseService $databaseService * @param EventsService $eventsService * @param MiscService $miscService @@ -74,6 +79,7 @@ class CirclesService { $userId, IL10N $l10n, ConfigService $configService, + CirclesRequest $circlesRequest, DatabaseService $databaseService, EventsService $eventsService, MiscService $miscService @@ -81,6 +87,7 @@ class CirclesService { $this->userId = $userId; $this->l10n = $l10n; $this->configService = $configService; + $this->circlesRequest = $circlesRequest; $this->eventsService = $eventsService; $this->miscService = $miscService; @@ -194,6 +201,36 @@ class CirclesService { return $circle; } + /** + * save new settings if current user is admin. + * + * @param $circleId + * @param array $settings + * + * @return Circle + * @throws \Exception + */ + public function settingsCircle($circleId, $settings) { + + $this->miscService->log("____"); + try { + $circle = $this->dbCircles->getDetailsFromCircle($circleId, $this->userId); + $circle->getUser() + ->hasToBeAdmin(); + + $ak = array_keys($settings); + foreach ($ak AS $k) { + $circle->setSetting($k, $settings[$k]); + } + + $this->circlesRequest->updateCircle($circle); + } catch (\Exception $e) { + throw $e; + } + + return $circle; + } + /** * Join a circle. |