Skip to content
Snippets Groups Projects
HomeController.php 7.56 KiB
Newer Older
  • Learn to ignore specific revisions
  • Damien's avatar
    Damien committed
    <?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;
    
    Damien's avatar
    Damien committed
    use Basket\models\RedirectBasketModel;
    use Group\models\GroupModel;
    
    Damien's avatar
    Damien committed
    use Resource\models\ResModel;
    
    Damien's avatar
    Damien committed
    use Slim\Http\Request;
    use Slim\Http\Response;
    
    use SrcCore\models\CoreConfigModel;
    use SrcCore\models\CurlModel;
    
    Damien's avatar
    Damien committed
    use User\models\UserModel;
    
    use Parameter\models\ParameterModel;
    
    Damien's avatar
    Damien committed
    
    class HomeController
    {
        public function get(Request $request, Response $response)
        {
            $regroupedBaskets = [];
    
    
    Damien's avatar
    Damien committed
            $user = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['id']]);
    
            $homeMessage = ParameterModel::getById(['select' => ['param_value_string'], 'id'=> 'homepage_message']);
    
            $homeMessage = trim($homeMessage['param_value_string']);
    
    Damien's avatar
    Damien committed
    
    
    Damien's avatar
    Damien committed
            $redirectedBaskets = RedirectBasketModel::getRedirectedBasketsByUserId(['userId' => $user['id']]);
    
    Damien's avatar
    Damien committed
            $groups = UserModel::getGroupsByUserId(['userId' => $GLOBALS['userId']]);
            foreach ($groups as $group) {
                $baskets = BasketModel::getAvailableBasketsByGroupUser([
    
                    'select'        => ['baskets.id', 'baskets.basket_id', 'baskets.basket_name', 'baskets.basket_desc', 'baskets.basket_clause', 'baskets.color', 'users_baskets_preferences.color as pcolor'],
    
    Damien's avatar
    Damien committed
                    'userSerialId'  => $user['id'],
                    'groupId'       => $group['group_id'],
                    'groupSerialId' => $group['id']
                ]);
    
                foreach ($baskets as $kBasket => $basket) {
    
                    $baskets[$kBasket]['owner_user_id'] = $user['id'];
    
    Damien's avatar
    Damien committed
                    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'];
                        }
                    }
    
    
    Damien's avatar
    Damien committed
                    $baskets[$kBasket]['resourceNumber'] = BasketModel::getResourceNumberByClause(['userId' => $user['id'], 'clause' => $basket['basket_clause']]);
    
    Damien's avatar
    Damien committed
    
                    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
                    ];
                }
            }
    
    
    Damien's avatar
    Damien committed
            $assignedBaskets = RedirectBasketModel::getAssignedBasketsByUserId(['userId' => $user['id']]);
    
    Damien's avatar
    Damien committed
            foreach ($assignedBaskets as $key => $assignedBasket) {
    
    Damien's avatar
    Damien committed
                $basket = BasketModel::getByBasketId(['select' => ['id', 'basket_clause'], 'basketId' => $assignedBasket['basket_id']]);
                $assignedBaskets[$key]['id'] = $basket['id'];
    
    Damien's avatar
    Damien committed
                $assignedBaskets[$key]['resourceNumber'] = BasketModel::getResourceNumberByClause(['userId' => $assignedBasket['owner_user_id'], 'clause' => $basket['basket_clause']]);
                $assignedBaskets[$key]['uselessGroupId'] = GroupModel::getById(['id' => $assignedBasket['group_id'], 'select' => ['group_id']])['group_id'];
                $assignedBaskets[$key]['ownerLogin'] = UserModel::getById(['id' => $assignedBasket['owner_user_id'], 'select' => ['user_id']])['user_id'];
    
    Damien's avatar
    Damien committed
            }
    
    
            $isMaarchParapheurConnected = false;
            $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'modules/visa/xml/remoteSignatoryBooks.xml']);
            if (!empty($loadedXml)) {
                foreach ($loadedXml->signatoryBook as $value) {
                    if ($value->id == "maarchParapheur") {
                        if (!empty($value->url) && !empty($value->userId) && !empty($value->password)) {
                            $isMaarchParapheurConnected = true;
                        }
                        break;
                    }
                }
            }
    
    
            return $response->withJson([
    
                'regroupedBaskets'              => $regroupedBaskets,
                'assignedBaskets'               => $assignedBaskets,
                'homeMessage'                   => $homeMessage,
                'isMaarchParapheurConnected'    => $isMaarchParapheurConnected
    
            ]);
        }
    
        public function getLastRessources(Request $request, Response $response)
        {
    
    Damien's avatar
    Damien committed
            $lastResources = ResModel::getLastResources([
    
                'select'    => [
    
                    'mlb.alt_identifier',
                    'mlb.closing_date',
    
                    'r.creation_date',
                    'priorities.color as priority_color',
    
                    'r.res_id',
                    'status.img_filename as status_icon',
                    'status.label_status as status_label',
                    'status.id as status_id',
                    'r.subject',
                ],
    
                'limit'     => 5,
                'userId'    => $GLOBALS['userId']
    
    Damien's avatar
    Damien committed
            return $response->withJson([
                'lastResources'     => $lastResources,
            ]);
    
    Damien's avatar
    Damien committed
        }
    
    
        public function getMaarchParapheurDocuments(Request $request, Response $response)
        {
            $user = UserModel::getByLogin(['login' => $GLOBALS['userId'], 'select' => ['external_id']]);
    
            $externalId = json_decode($user['external_id'], true);
            if (empty($externalId['maarchParapheur'])) {
                return $response->withStatus(400)->withJson(['errors' => 'User is not linked to Maarch Parapheur']);
            }
    
            $loadedXml = CoreConfigModel::getXmlLoaded(['path' => 'modules/visa/xml/remoteSignatoryBooks.xml']);
            if (empty($loadedXml)) {
                return $response->withStatus(400)->withJson(['errors' => 'SignatoryBooks configuration file missing']);
            }
    
            $url      = '';
            $userId   = '';
            $password = '';
            foreach ($loadedXml->signatoryBook as $value) {
                if ($value->id == "maarchParapheur") {
                    $url      = $value->url;
                    $userId   = $value->userId;
                    $password = $value->password;
                    break;
                }
            }
    
            if (empty($url)) {
                return $response->withStatus(400)->withJson(['errors' => 'Maarch Parapheur configuration missing']);
            }
    
            $curlResponse = CurlModel::execSimple([
                'url'           => rtrim($url, '/') . '/rest/documents',
                'basicAuth'     => ['user' => $userId, 'password' => $password],
                'headers'       => ['content-type:application/json'],
                'method'        => 'GET',
                'queryParams'   => ['userId' => $externalId['maarchParapheur'], 'limit' => 10]
            ]);
    
            if ($curlResponse['code'] != '200') {
                if (!empty($curlResponse['response']['errors'])) {
                    $errors =  $curlResponse['response']['errors'];
                } else {
                    $errors =  $curlResponse['errors'];
                }
                if (empty($errors)) {
                    $errors = 'An error occured. Please check your configuration file.';
                }
                return $response->withStatus(400)->withJson(['errors' => $errors]);
            }
    
            return $response->withJson($curlResponse['response']);
        }
    
    Damien's avatar
    Damien committed
    }