diff --git a/composer.json b/composer.json index 21ca9dc49c9159472f035b5f0903283183ebc0be..d480f1ffa7ff85e1eafc65467b2e613ca1d63585 100755 --- a/composer.json +++ b/composer.json @@ -13,6 +13,7 @@ "Folder\\" : "src/app/folder/", "Group\\" : "src/app/group/", "History\\" : "src/app/history/", + "Home\\" : "src/app/home/", "Link\\" : "src/app/link/", "Note\\" : "src/app/note/", "Notification\\" : "src/app/notification/", diff --git a/package.json b/package.json index 3fc2029f9621f5aa77e8cf718a12917f6809664c..b22418630a56f2bdbbd41b5d594aae32df2e1663 100755 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "@angular-devkit/build-angular": "^0.6.8", "@angular/animations": "^6.1.0", "@angular/cdk": "^6.4.1", - "@angular/cli": "^6.1.0", + "@angular/cli": "^6.1.1", "@angular/common": "^6.1.0", "@angular/compiler": "^6.1.0", "@angular/compiler-cli": "^6.1.0", diff --git a/rest/index.php b/rest/index.php index 056c8b421ccb20deba13ed320b36828b7d4d7e22..921f8a4705d98ccd419554ce6f8e88986acb71e7 100755 --- a/rest/index.php +++ b/rest/index.php @@ -156,6 +156,9 @@ $app->put('/groups/{id}/reassign/{newGroupId}', \Group\controllers\GroupControll $app->get('/histories', \History\controllers\HistoryController::class . ':get'); $app->get('/histories/users/{userSerialId}', \History\controllers\HistoryController::class . ':getByUserId'); +//Home +$app->get('/home', \Home\controllers\HomeController::class . ':get'); + //Jnlp $app->post('/jnlp', \ContentManagement\controllers\JnlpController::class . ':generateJnlp'); $app->get('/jnlp', \ContentManagement\controllers\JnlpController::class . ':renderJnlp'); diff --git a/src/app/basket/models/BasketModelAbstract.php b/src/app/basket/models/BasketModelAbstract.php index 3318e2c351c88d3cfb25e0afe57262bfc23696d6..d6164f42637993fc8a8f787aacfb9dabd7a487f6 100644 --- a/src/app/basket/models/BasketModelAbstract.php +++ b/src/app/basket/models/BasketModelAbstract.php @@ -388,13 +388,13 @@ abstract class BasketModelAbstract return $aBaskets; } - public static function getAbsBasketsByUserId(array $aArgs = []) + public static function getAbsBasketsByUserId(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['userId']); ValidatorModel::stringType($aArgs, ['userId']); $aBaskets = DatabaseModel::select([ - 'select' => ['ba.basket_id', 'ba.basket_name', 'ua.user_abs', 'ua.basket_owner', 'ua.is_virtual'], + 'select' => ['ba.basket_id', 'ba.basket_name', 'ba.basket_desc', 'ua.user_abs', 'ua.basket_owner', 'ua.is_virtual'], 'table' => ['baskets ba, user_abs ua'], 'where' => ['ua.new_user = ?', 'ua.basket_id = ba.basket_id'], 'data' => [$aArgs['userId']], @@ -492,28 +492,21 @@ abstract class BasketModelAbstract $groups = UserModel::getGroupsByUserId(['userId' => $aArgs['userId']]); foreach ($groups as $group) { - $baskets = DatabaseModel::select([ - 'select' => ['baskets.basket_id', 'baskets.basket_name', 'baskets.color'], - 'table' => ['groupbasket, baskets'], - 'where' => ['groupbasket.basket_id = baskets.basket_id', 'groupbasket.group_id = ?', 'baskets.is_visible = ?', 'baskets.basket_id != ?'], - 'data' => [$group['group_id'], 'Y', 'IndexingBasket'], - 'order_by' => ['baskets.basket_order', 'baskets.basket_name'] - ]); - $coloredBaskets = UserBasketPreferenceModel::get([ - 'select' => ['basket_id', 'color'], - 'where' => ['user_serial_id = ?', 'group_serial_id = ?', 'color is not null'], - 'data' => [$user['id'], $group['id']] + $baskets = BasketModel::getAvailableBasketsByGroupUser([ + 'select' => ['baskets.basket_id', 'baskets.basket_name', 'baskets.basket_desc', 'baskets.color', 'users_baskets_preferences.color as pcolor'], + 'userSerialId' => $user['id'], + 'groupId' => $group['group_id'], + 'groupSerialId' => $group['id'] ]); foreach ($baskets as $kBasket => $basket) { - foreach ($coloredBaskets as $coloredBasket) { - if ($basket['basket_id'] == $coloredBasket['basket_id']) { - $baskets[$kBasket]['color'] = $coloredBasket['color']; - } + if (!empty($basket['pcolor'])) { + $baskets[$kBasket]['color'] = $basket['pcolor']; } if (empty($baskets[$kBasket]['color'])) { $baskets[$kBasket]['color'] = '#666666'; } + unset($baskets[$kBasket]['pcolor']); } $regroupedBaskets[] = [ @@ -527,6 +520,32 @@ abstract class BasketModelAbstract return $regroupedBaskets; } + public static function getAvailableBasketsByGroupUser(array $aArgs) + { + ValidatorModel::notEmpty($aArgs, ['userSerialId', 'groupId', 'groupSerialId', 'select']); + ValidatorModel::intVal($aArgs, ['userSerialId', 'groupSerialId']); + ValidatorModel::stringType($aArgs, ['groupId']); + ValidatorModel::arrayType($aArgs, ['select']); + + $baskets = DatabaseModel::select([ + 'select' => $aArgs['select'], + 'table' => ['groupbasket, baskets, users_baskets_preferences'], + 'where' => [ + 'groupbasket.basket_id = baskets.basket_id', + 'baskets.basket_id = users_baskets_preferences.basket_id', + 'groupbasket.group_id = ?', + 'users_baskets_preferences.group_serial_id = ?', + 'users_baskets_preferences.user_serial_id = ?', + 'baskets.is_visible = ?', + 'baskets.basket_id != ?' + ], + 'data' => [$aArgs['groupId'], $aArgs['groupSerialId'], $aArgs['userSerialId'], 'Y', 'IndexingBasket'], + 'order_by' => ['baskets.basket_order', 'baskets.basket_name'] + ]); + + return $baskets; + } + public static function getBasketPages(array $aArgs = []) { ValidatorModel::arrayType($aArgs, ['unneeded']); @@ -549,7 +568,7 @@ abstract class BasketModelAbstract return $basketPages; } - public static function getDefaultActionIdByBasketId(array $aArgs = []) + public static function getDefaultActionIdByBasketId(array $aArgs) { ValidatorModel::notEmpty($aArgs, ['basketId', 'groupId']); ValidatorModel::stringType($aArgs, ['basketId', 'groupId']); @@ -569,4 +588,21 @@ abstract class BasketModelAbstract return $aAction[0]['id_action']; } + + public static function getResourceNumberByClause(array $aArgs) + { + ValidatorModel::notEmpty($aArgs, ['userId', 'clause']); + ValidatorModel::stringType($aArgs, ['userId', 'clause']); + + $count = ResModel::getOnView([ + 'select' => ['COUNT(1)'], + 'where' => [PreparedClauseController::getPreparedClause(['userId' => $aArgs['userId'], 'clause' => $aArgs['clause']])] + ]); + + if (empty($count[0]['count'])) { + return 0; + } + + return $count[0]['count']; + } } diff --git a/src/app/home/controllers/HomeController.php b/src/app/home/controllers/HomeController.php new file mode 100644 index 0000000000000000000000000000000000000000..6867aa52ac8c629f0d52874a5db9b4cff2c931f0 --- /dev/null +++ b/src/app/home/controllers/HomeController.php @@ -0,0 +1,79 @@ +<?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 Home Controller + * @author dev@maarch.org + */ + +namespace Home\controllers; + +use Basket\models\BasketModel; +use Slim\Http\Request; +use Slim\Http\Response; +use User\models\UserModel; + +class HomeController +{ + public function get(Request $request, Response $response) + { + $regroupedBaskets = []; + + $user = UserModel::getByUserId(['userId' => $GLOBALS['userId'], 'select' => ['id']]); + + $redirectedBaskets = BasketModel::getRedirectedBasketsByUserId(['userId' => $GLOBALS['userId']]); + $groups = UserModel::getGroupsByUserId(['userId' => $GLOBALS['userId']]); + foreach ($groups as $group) { + $baskets = BasketModel::getAvailableBasketsByGroupUser([ + 'select' => ['baskets.basket_id', 'baskets.basket_name', 'baskets.basket_desc', 'baskets.basket_clause', 'baskets.color', 'users_baskets_preferences.color as pcolor'], + 'userSerialId' => $user['id'], + 'groupId' => $group['group_id'], + 'groupSerialId' => $group['id'] + ]); + + foreach ($baskets as $kBasket => $basket) { + if (!empty($basket['pcolor'])) { + $baskets[$kBasket]['color'] = $basket['pcolor']; + } + if (empty($baskets[$kBasket]['color'])) { + $baskets[$kBasket]['color'] = '#666666'; + } + + $baskets[$kBasket]['redirected'] = false; + foreach ($redirectedBaskets as $redirectedBasket) { + if ($redirectedBasket['basket_id'] == $basket['basket_id']) { + $baskets[$kBasket]['redirected'] = true; + $baskets[$kBasket]['redirectedUser'] = $redirectedBasket['userToDisplay']; + } + } + + $baskets[$kBasket]['resourceNumber'] = BasketModel::getResourceNumberByClause(['userId' => $GLOBALS['userId'], 'clause' => $basket['basket_clause']]); + + unset($baskets[$kBasket]['pcolor'], $baskets[$kBasket]['basket_clause']); + } + + if (!empty($baskets)) { + $regroupedBaskets[] = [ + 'groupSerialId' => $group['id'], + 'groupId' => $group['group_id'], + 'groupDesc' => $group['group_desc'], + 'baskets' => $baskets + ]; + } + } + + $assignedBaskets = BasketModel::getAbsBasketsByUserId(['userId' => $GLOBALS['userId']]); + foreach ($assignedBaskets as $key => $assignedBasket) { + $basket = BasketModel::getById(['select' => ['basket_clause'], 'id' => $assignedBasket['basket_id']]); + $assignedBaskets[$key]['resourceNumber'] = BasketModel::getResourceNumberByClause(['userId' => $assignedBasket['user_abs'], 'clause' => $basket['basket_clause']]); + } + + return $response->withJson(['regroupedBaskets' => $regroupedBaskets, 'assignedBaskets' => $assignedBaskets]); + } +} diff --git a/src/app/resource/models/ResModelAbstract.php b/src/app/resource/models/ResModelAbstract.php index 15268416915fbb9313c618daa3f3418167a895fe..a4d9d5b85cd303ac35a326f1d3e5a1ae605bd074 100644 --- a/src/app/resource/models/ResModelAbstract.php +++ b/src/app/resource/models/ResModelAbstract.php @@ -29,10 +29,10 @@ abstract class ResModelAbstract $aResources = DatabaseModel::select([ 'select' => $aArgs['select'], 'table' => ['res_view_letterbox'], - 'where' => $aArgs['where'], - 'data' => $aArgs['data'], - 'order_by' => $aArgs['orderBy'], - 'limit' => $aArgs['limit'] + 'where' => empty($aArgs['where']) ? [] : $aArgs['where'], + 'data' => empty($aArgs['data']) ? [] : $aArgs['data'], + 'order_by' => empty($aArgs['orderBy']) ? [] : $aArgs['orderBy'], + 'limit' => empty($aArgs['limit']) ? 0 : $aArgs['limit'] ]); return $aResources; diff --git a/vendor/composer/autoload_psr4.php b/vendor/composer/autoload_psr4.php index b9035104607b8576c3c87febf92c4ea6d4825626..9ac8e1c45caf2bc7c23e24cfb4892bf8041b7679 100644 --- a/vendor/composer/autoload_psr4.php +++ b/vendor/composer/autoload_psr4.php @@ -37,6 +37,7 @@ return array( 'Http\\Client\\Common\\' => array($vendorDir . '/php-http/client-common/src'), 'Http\\Client\\' => array($vendorDir . '/php-http/httplug/src'), 'Http\\Adapter\\Guzzle6\\' => array($vendorDir . '/php-http/guzzle6-adapter/src'), + 'Home\\' => array($baseDir . '/src/app/home'), 'History\\' => array($baseDir . '/src/app/history'), 'GuzzleHttp\\Psr7\\' => array($vendorDir . '/guzzlehttp/psr7/src'), 'GuzzleHttp\\Promise\\' => array($vendorDir . '/guzzlehttp/promises/src'), diff --git a/vendor/composer/autoload_static.php b/vendor/composer/autoload_static.php index b125ed14c7c052f3e4612ec7580e7aa30c24b18c..c3c880fcee5ef899a41988ac08ed213e3a2344ac 100644 --- a/vendor/composer/autoload_static.php +++ b/vendor/composer/autoload_static.php @@ -83,6 +83,7 @@ class ComposerStaticInitf21aebccfa6df888200dcb099aa69fbd 'Http\\Client\\Common\\' => 19, 'Http\\Client\\' => 12, 'Http\\Adapter\\Guzzle6\\' => 21, + 'Home\\' => 5, 'History\\' => 8, ), 'G' => @@ -251,6 +252,10 @@ class ComposerStaticInitf21aebccfa6df888200dcb099aa69fbd array ( 0 => __DIR__ . '/..' . '/php-http/guzzle6-adapter/src', ), + 'Home\\' => + array ( + 0 => __DIR__ . '/../..' . '/src/app/home', + ), 'History\\' => array ( 0 => __DIR__ . '/../..' . '/src/app/history',