From 463e7b54139035eaa614a1bf27c21d8d23c3d3f9 Mon Sep 17 00:00:00 2001 From: Denis Flaven Date: Fri, 10 Sep 2010 10:10:57 +0000 Subject: [PATCH] - Enhancement (Trac#189) first version of a (simple) End-Users portal. - Fix for the appUserPreferences class SVN:trunk[806] --- application/loginwebpage.class.inc.php | 14 +++++++++- application/user.preferences.class.inc.php | 4 +-- core/userrights.class.inc.php | 2 ++ dictionaries/dictionary.itop.ui.php | 29 +++++++++++++++++++-- dictionaries/fr.dictionary.itop.ui.php | 24 +++++++++++++++++ images/back.png | Bin 0 -> 3704 bytes images/logoff.png | Bin 0 -> 2067 bytes images/password.png | Bin 0 -> 3286 bytes images/refresh.png | Bin 0 -> 3381 bytes pages/ajax.render.php | 2 +- pages/logoff.php | 11 +++++++- 11 files changed, 79 insertions(+), 7 deletions(-) create mode 100644 images/back.png create mode 100644 images/logoff.png create mode 100644 images/password.png create mode 100644 images/refresh.png diff --git a/application/loginwebpage.class.inc.php b/application/loginwebpage.class.inc.php index 23c48eb54..e7119189f 100644 --- a/application/loginwebpage.class.inc.php +++ b/application/loginwebpage.class.inc.php @@ -329,7 +329,14 @@ EOF } } - static function DoLogin($bMustBeAdmin = false) + /** + * Check if the user is already authentified, if yes, then performs some additional validations: + * - if $bMustBeAdmin is true, then the user must be an administrator, otherwise an error is displayed + * - if $bIsAllowedToPortalUsers is false and the user has only access to the portal, then the user is redirected to the portal + * @param bool $bMustBeAdmin Whether or not the user must be an admin to access the current page + * @param bool $bIsAllowedToPortalUsers Whether or not the current page is considered as part of the portal + */ + static function DoLogin($bMustBeAdmin = false, $bIsAllowedToPortalUsers = false) { $operation = utils::ReadParam('loginop', ''); session_start(); @@ -392,6 +399,11 @@ EOF $oP->output(); exit; } + elseif ( (!$bIsAllowedToPortalUsers) && (UserRights::IsPortalUser())) + { + // No rights to be here, redirect to the portal + header('Location: ../portal/index.php'); + } } } // End of class diff --git a/application/user.preferences.class.inc.php b/application/user.preferences.class.inc.php index 14a7ed1e4..873c1055d 100644 --- a/application/user.preferences.class.inc.php +++ b/application/user.preferences.class.inc.php @@ -125,14 +125,14 @@ class appUserPreferences extends DBObject { if (self::$oUserPrefs != null) return; $oSearch = new DBObjectSearch('appUserPreferences'); - $oSearch->AddCondition('userid', UserRights::GetUser(), '='); + $oSearch->AddCondition('userid', UserRights::GetUserId(), '='); $oSet = new DBObjectSet($oSearch); $oObj = $oSet->Fetch(); if ($oObj == null) { // No prefs (yet) for this user, create the object $oObj = new appUserPreferences(); - $oObj->Set('userid', UserRights::GetUser()); + $oObj->Set('userid', UserRights::GetUserId()); $oObj->Set('preferences', array()); // Default preferences: an empty array $oObj->DBInsert(); } diff --git a/core/userrights.class.inc.php b/core/userrights.class.inc.php index 94e3ff214..0f63306c4 100644 --- a/core/userrights.class.inc.php +++ b/core/userrights.class.inc.php @@ -529,6 +529,8 @@ class UserRights if (!self::CheckLogin()) return true; if (self::IsAdministrator()) return true; + // Portal users actions are limited by the portal page... + if (self::IsPortalUser()) return true; // this module is forbidden for non admins.... BUT I NEED IT HERE TO DETERMINE USER RIGHTS if (MetaModel::HasCategory($sClass, 'addon/userrights')) return true; diff --git a/dictionaries/dictionary.itop.ui.php b/dictionaries/dictionary.itop.ui.php index a0b45eab5..6e536929c 100644 --- a/dictionaries/dictionary.itop.ui.php +++ b/dictionaries/dictionary.itop.ui.php @@ -39,7 +39,7 @@ // Dict::Add('EN US', 'English', 'English', array( - 'Class:AuditCategory' => 'AuditCategory', + 'Class:AuditCategory' => 'Audit Category', 'Class:AuditCategory+' => 'A section inside the overall audit', 'Class:AuditCategory/Attribute:name' => 'Category Name', 'Class:AuditCategory/Attribute:name+' => 'Short name for this category', @@ -47,6 +47,8 @@ Dict::Add('EN US', 'English', 'English', array( 'Class:AuditCategory/Attribute:description+' => 'Long description for this audit category', 'Class:AuditCategory/Attribute:definition_set' => 'Definition Set', 'Class:AuditCategory/Attribute:definition_set+' => 'OQL expression defining the set of objects to audit', + 'Class:AuditCategory/Attribute:rules_list' => 'Audit Rules', + 'Class:AuditCategory/Attribute:rules_list+' => 'Audit rules for this category', )); // @@ -54,7 +56,7 @@ Dict::Add('EN US', 'English', 'English', array( // Dict::Add('EN US', 'English', 'English', array( - 'Class:AuditRule' => 'AuditRule', + 'Class:AuditRule' => 'Audit Rule', 'Class:AuditRule+' => 'A rule to check for a given Audit category', 'Class:AuditRule/Attribute:name' => 'Rule Name', 'Class:AuditRule/Attribute:name+' => 'Short name for this rule', @@ -788,6 +790,10 @@ When associated with a trigger, each action is given an "order" number, specifyi 'UI:NotificationsMenu:Actions' => 'Actions', 'UI:NotificationsMenu:AvailableActions' => 'Available actions', + 'Menu:AuditCategories' => 'Audit Categories', + 'Menu:AuditCategories+' => 'Audit Categories', + 'Menu:Notifications:Title' => 'Audit Categories', + 'Menu:RunQueriesMenu' => 'Run Queries', 'Menu:RunQueriesMenu+' => 'Run any query', @@ -829,6 +835,25 @@ When associated with a trigger, each action is given an "order" number, specifyi 'UI:PasswordConfirm' => '(Confirm)', 'UI:BeforeAdding_Class_ObjectsSaveThisObject' => 'Before adding more %1$s objects, save this object.', 'UI:DisplayThisMessageAtStartup' => 'Display this message at startup', + + 'Portal:Title' => 'iTop user portal', + 'Portal:Refresh' => 'Refresh', + 'Portal:Back' => 'Back', + 'Portal:CreateNewRequest' => 'Create a new request', + 'Portal:ChangeMyPassword' => 'Change my password', + 'Portal:Disconnect' => 'Disconnect', + 'Portal:OpenRequests' => 'My open requests', + 'Portal:ResolvedRequests' => 'My resolved requests', + 'Portal:SelectService' => 'Select a service from the catalog:', + 'Portal:PleaseSelectOneService' => 'Please select one service', + 'Portal:SelectSubcategoryFrom_Service' => 'Select a sub-category for the service %1$s:', + 'Portal:PleaseSelectAServiceSubCategory' => 'Please select one sub-category', + 'Portal:DescriptionOfTheRequest' => 'Enter the description of your request:', + 'Portal:TitleRequestDetailsFor_Request' => 'Details for request %1$s:', + 'Portal:NoOpenRequest' => 'No request in this category.', + 'Portal:Button:CloseTicket' => 'Close this ticket', + 'Portal:EnterYourCommentsOnTicket' => 'Enter your comments about the resolution of this ticket:', + 'Portal:ErrorNoContactForThisUser' => 'Error: the current user is not associated with a Contact/Person. Please contact your administrator.', )); diff --git a/dictionaries/fr.dictionary.itop.ui.php b/dictionaries/fr.dictionary.itop.ui.php index ebaae475e..896fbf2ee 100644 --- a/dictionaries/fr.dictionary.itop.ui.php +++ b/dictionaries/fr.dictionary.itop.ui.php @@ -47,6 +47,8 @@ Dict::Add('FR FR', 'French', 'Français', array( 'Class:AuditCategory/Attribute:description+' => 'Description', 'Class:AuditCategory/Attribute:definition_set' => 'Ensemble de définition', 'Class:AuditCategory/Attribute:definition_set+' => 'Expression OQL qui défini le périmètre d\'application de l\'audit', + 'Class:AuditCategory/Attribute:rules_list' => 'Règles d\'audit', + 'Class:AuditCategory/Attribute:rules_list+' => 'Règles d\'audit pour cette catégorie', )); // @@ -802,6 +804,9 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé 'UI:NotificationsMenu:Actions' => 'Actions', 'UI:NotificationsMenu:AvailableActions' => 'Actions existantes', + 'Menu:AuditCategories' => 'Catégories d\'audit', + 'Menu:AuditCategories+' => 'Catégories d\'audit', + 'Menu:Notifications:Title' => 'Catégories d\'audit', 'Menu:RunQueriesMenu' => 'Requêtes OQL', 'Menu:RunQueriesMenu+' => 'Executer une requête OQL', @@ -840,6 +845,25 @@ Lors de l\'association à un déclencheur, on attribue à chaque action un numé 'UI:PasswordConfirm' => '(Confirmer)', 'UI:BeforeAdding_Class_ObjectsSaveThisObject' => 'Enregistrez l\'objet courant avant de créer de nouveaux éléments de type %1$s.', 'UI:DisplayThisMessageAtStartup' => 'Afficher ce message au démarrage', + + 'Portal:Title' => 'Portail utilisateur iTop', + 'Portal:Refresh' => 'Rafraîchir', + 'Portal:Back' => 'Retour', + 'Portal:CreateNewRequest' => 'Créer une nouvelle requête', + 'Portal:ChangeMyPassword' => 'Changer mon mot de passe', + 'Portal:Disconnect' => 'Déconnexion', + 'Portal:OpenRequests' => 'Mes requêtes en cours', + 'Portal:ResolvedRequests' => 'Mes requêtes résolues', + 'Portal:SelectService' => 'Choisissez un service dans le catalogue:', + 'Portal:PleaseSelectOneService' => 'Veuillez choisir un service', + 'Portal:SelectSubcategoryFrom_Service' => 'Choisissez une sous-catégorie du service %1$s:', + 'Portal:PleaseSelectAServiceSubCategory' => 'Veuillez choisir une sous-catégorie', + 'Portal:DescriptionOfTheRequest' => 'Entrez la description de votre requête:', + 'Portal:TitleRequestDetailsFor_Request' => 'Détails de votre requête %1$s:', + 'Portal:NoOpenRequest' => 'Aucune requête.', + 'Portal:Button:CloseTicket' => 'Clôre cette requête', + 'Portal:EnterYourCommentsOnTicket' => 'Vos commentaires à propos du traitement de cette requête:', + 'Portal:ErrorNoContactForThisUser' => 'Erreur: l\'utilisateur courant n\'est pas associé à une Personne/Contact. Contactez votre administrateur.', )); ?> diff --git a/images/back.png b/images/back.png new file mode 100644 index 0000000000000000000000000000000000000000..f0e128b03797be64bebc1698b2c749431c192782 GIT binary patch literal 3704 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 W1xmqkBdS3F0000>6 literal 0 HcmV?d00001 diff --git a/images/logoff.png b/images/logoff.png new file mode 100644 index 0000000000000000000000000000000000000000..7e1bfb68c7cb194e0fbd88d31454cf471e0f7835 GIT binary patch literal 2067 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 LNkvXXu0mjfjdEpB literal 0 HcmV?d00001 diff --git a/pages/ajax.render.php b/pages/ajax.render.php index cbd1796da..eb1b4aaef 100644 --- a/pages/ajax.render.php +++ b/pages/ajax.render.php @@ -33,7 +33,7 @@ require_once('../application/startup.inc.php'); require_once('../application/user.preferences.class.inc.php'); require_once('../application/loginwebpage.class.inc.php'); -LoginWebPage::DoLogin(); // Check user rights and prompt if needed +LoginWebPage::DoLogin(false /* bMustBeAdmin */, true /* IsAllowedToPortalUsers */); // Check user rights and prompt if needed $oPage = new ajax_page(""); $oPage->no_cache(); diff --git a/pages/logoff.php b/pages/logoff.php index 5f8c2ccd7..0ceef4da6 100644 --- a/pages/logoff.php +++ b/pages/logoff.php @@ -31,7 +31,16 @@ $sVersionShort = Dict::Format('UI:iTopVersion:Short', ITOP_VERSION); $oPage->add("
\n"); $oPage->add("
\n"); $oPage->add("

".Dict::S('UI:LogOff:ThankYou')."

\n"); -$oPage->add("

".Dict::S('UI:LogOff:ClickHereToLoginAgain')."

"); +$bPortal = utils::ReadParam('portal', false); +if ($bPortal) +{ + $sUrl = '../portal/'; +} +else +{ + $sUrl = '../pages/UI.php'; +} +$oPage->add("

".Dict::S('UI:LogOff:ClickHereToLoginAgain')."

"); $oPage->add("
\n"); $oPage->output(); ?>