Skip to content
Snippets Groups Projects
Commit 5da54118 authored by Guillaume Heurtier's avatar Guillaume Heurtier
Browse files

FEAT #11405 TIME 1:30 follow/un-follow resources

parent 21866673
No related branches found
No related tags found
No related merge requests found
......@@ -358,6 +358,9 @@ $app->put('/res/externalInfos', \Resource\controllers\ResController::class . ':u
$app->get('/categories', \Resource\controllers\ResController::class . ':getCategories');
$app->get('/resources/{resId}/users/{userId}/isDestinationChanging', \Action\controllers\PreProcessActionController::class . ':isDestinationChanging');
$app->get('/resources/{resId}/users/{userId}/groups/{groupId}/baskets/{basketId}/processingData', \Resource\controllers\ResController::class . ':getProcessingData');
$app->put('/resources/{resId}/follow', \Resource\controllers\UsersFollowedResourcesController::class . ':follow');
$app->delete('/resources/{resId}/unfollow', \Resource\controllers\UsersFollowedResourcesController::class . ':unFollow');
$app->get('/followedResources', \Resource\controllers\UsersFollowedResourcesController::class . ':getFollowedResources');
//ResourcesList
$app->get('/resourcesList/users/{userId}/groups/{groupId}/baskets/{basketId}', \Resource\controllers\ResourceListController::class . ':get');
......
......@@ -42,6 +42,7 @@ use Note\models\NoteModel;
use Priority\models\PriorityModel;
use Resource\models\ResModel;
use Resource\models\ResourceContactModel;
use Resource\models\UsersFollowedResourcesModel;
use Respect\Validation\Validator;
use setasign\Fpdi\Tcpdf\Fpdi;
use Slim\Http\Request;
......@@ -223,6 +224,12 @@ class ResController
$attachments = AttachmentModel::get(['select' => ['count(1)'], 'where' => ['res_id_master = ?', 'status in (?)'], 'data' => [$args['resId'], ['TRA', 'A_TRA', 'FRZ']]]);
$formattedData['attachments'] = $attachments[0]['count'];
$followed = UsersFollowedResourcesModel::get([
'userId' => $GLOBALS['id'],
'resId' => $args['resId']
]);
$formattedData['followed'] = !empty($followed);
return $response->withJson($formattedData);
}
......@@ -726,6 +733,16 @@ class ResController
if ($user['user_id'] == 'superadmin') {
return true;
}
$followed = UsersFollowedResourcesModel::get([
'where' => ['user_id = ?', 'res_id in (?)'],
'data' => [$args['userId'], $resources]
]);
if (!empty($followed)) {
return true;
}
$groups = UserModel::getGroupsByLogin(['login' => $user['user_id']]);
$groupsClause = '';
foreach ($groups as $key => $group) {
......
<?php
/**
* Copyright Maarch since 2008 under licence GPLv3.
* See LICENCE.txt file at the root folder for more details.
* This file is part of Maarch software.
*
*/
/**
* @brief Users Followed Resources Controller
* @author dev@maarch.org
*/
namespace Resource\controllers;
use Resource\models\UsersFollowedResourcesModel;
use Slim\Http\Request;
use Slim\Http\Response;
class UsersFollowedResourcesController
{
public function follow(Request $request, Response $response, array $args)
{
UsersFollowedResourcesModel::create([
'userId' => $GLOBALS['id'],
'resId' => $args['resId']
]);
return $response->withStatus(204);
}
public function unFollow(Request $request, Response $response, array $args)
{
UsersFollowedResourcesModel::delete([
'userId' => $GLOBALS['id'],
'resId' => $args['resId']
]);
return $response->withStatus(204);
}
public function getFollowedResources(Request $request, Response $response, array $args)
{
$followed = UsersFollowedResourcesModel::get([
'where' => ['user_id = ?'],
'data' => [$GLOBALS['id']]
]);
return $response->withJson($followed);
}
}
<?php
/**
* Copyright Maarch since 2008 under licence GPLv3.
* See LICENCE.txt file at the root folder for more details.
* This file is part of Maarch software.
*
*/
/**
* @brief Users Followed Resources Model
* @author dev@maarch.org
*/
namespace Resource\models;
use SrcCore\models\DatabaseModel;
use SrcCore\models\ValidatorModel;
class UsersFollowedResourcesModel
{
public static function get(array $args = [])
{
ValidatorModel::arrayType($args, ['select', 'where', 'data', 'orderBy']);
ValidatorModel::intType($args, ['limit']);
$followedResources = DatabaseModel::select([
'select' => empty($args['select']) ? ['*'] : $args['select'],
'table' => ['users_followed_resources'],
'where' => empty($args['where']) ? [] : $args['where'],
'data' => empty($args['data']) ? [] : $args['data'],
'order_by' => empty($args['orderBy']) ? [] : $args['orderBy'],
'limit' => empty($args['limit']) ? 0 : $args['limit']
]);
return $followedResources;
}
public static function getByUserId(array $args)
{
ValidatorModel::notEmpty($args, ['userId']);
ValidatorModel::intVal($args, ['userId']);
ValidatorModel::arrayType($args, ['select']);
$followedResources = DatabaseModel::select([
'select' => empty($args['select']) ? ['*'] : $args['select'],
'table' => ['users_followed_resources'],
'where' => ['user_id = ?'],
'data' => [$args['userId']]
]);
return $followedResources;
}
public static function create(array $args)
{
ValidatorModel::notEmpty($args, ['resId', 'userId']);
ValidatorModel::intVal($args, ['resId', 'userId']);
DatabaseModel::insert([
'table' => 'users_followed_resources',
'columnsValues' => [
'res_id' => $args['resId'],
'user_id' => $args['userId'],
]
]);
return true;
}
public static function update(array $args)
{
ValidatorModel::notEmpty($args, ['set', 'where', 'data']);
ValidatorModel::arrayType($args, ['set', 'where', 'data']);
DatabaseModel::update([
'table' => 'users_followed_resources',
'set' => $args['set'],
'where' => $args['where'],
'data' => $args['data']
]);
return true;
}
public static function delete(array $args)
{
ValidatorModel::notEmpty($args, ['resId', 'userId']);
ValidatorModel::intVal($args, ['resId', 'userId']);
DatabaseModel::delete([
'table' => 'users_followed_resources',
'where' => ['user_id = ?', 'res_id = ?'],
'data' => [$args['userId'], $args['resId']]
]);
return true;
}
}
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment