Bladeren bron

Ticket #2816 - Core changes and usage in Organizations.

AntonLV 6 jaren geleden
bovenliggende
commit
73b2720a1e

+ 0 - 31
modules/base/groups/classes/BxBaseModGroupsConfig.php

@@ -11,9 +11,6 @@
 
 class BxBaseModGroupsConfig extends BxBaseModProfileConfig
 {
-    protected $_bRoles;
-    protected $_aRoles;
-
     function __construct($aModule)
     {
         parent::__construct($aModule);
@@ -26,34 +23,6 @@ class BxBaseModGroupsConfig extends BxBaseModProfileConfig
             'profile-actions-more' => 'checkAllowedViewMoreMenu',
             'convos-compose' => 'checkAllowedCompose',
         );
-
-        $this->_bRoles = false;
-        $this->_aRoles = false;
-    }
-
-    public function isRoles()
-    {
-        if($this->_aRoles === false)
-            $this->_initRoles();
-
-        return $this->_bRoles;
-    }
-
-    public function getRoles()
-    {
-        if($this->_aRoles === false)
-            $this->_initRoles();
-
-        return $this->_aRoles;
-    }
-    
-    protected function _initRoles()
-    {
-        if(empty($this->CNF['OBJECT_PRE_LIST_ROLES'])) 
-            return;
-
-        $this->_aRoles = BxDolFormQuery::getDataItems($this->CNF['OBJECT_PRE_LIST_ROLES']);
-        $this->_bRoles = !empty($this->_aRoles) && is_array($this->_aRoles);
     }
 }
 

+ 3 - 0
modules/base/groups/classes/BxBaseModGroupsGridConnections.php

@@ -166,6 +166,9 @@ class BxBaseModGroupsGridConnections extends BxDolGridConnections
         return parent::_getActionDelete ($sType, $sKey, $a, $isSmall, $isDisabled, $aRow);
     }
 
+    /**
+     * Note. Methods related to 'To Admin'/'From Admin' functionality can be removed after UNA 12 will be released.
+     */
     protected function _getActionToAdmins ($sType, $sKey, $a, $isSmall = false, $isDisabled = false, $aRow = array())
     {
         if ($this->_oModule->_oDb->isAdmin($this->_iGroupProfileId, $aRow[$this->_aOptions['field_id']]))

+ 33 - 2
modules/base/profile/classes/BxBaseModProfileConfig.php

@@ -13,7 +13,10 @@ class BxBaseModProfileConfig extends BxBaseModGeneralConfig
 {
     protected $_aMenuItems2MethodsActions = array();
     protected $_aMenuItems2MethodsSubmenu = array();
-    
+
+    protected $_bRoles;
+    protected $_aRoles;
+
     function __construct($aModule)
     {
         parent::__construct($aModule);
@@ -33,7 +36,35 @@ class BxBaseModProfileConfig extends BxBaseModGeneralConfig
             'profile-set-acl-level' => 'checkAllowedSetMembership',
             'convos-compose' => 'checkAllowedCompose',
             'messenger' => 'checkAllowedCompose',
-        );        
+        );
+
+        $this->_bRoles = false;
+        $this->_aRoles = false;
+    }
+
+    public function isRoles()
+    {
+        if($this->_aRoles === false)
+            $this->_initRoles();
+
+        return $this->_bRoles;
+    }
+
+    public function getRoles()
+    {
+        if($this->_aRoles === false)
+            $this->_initRoles();
+
+        return $this->_aRoles;
+    }
+    
+    protected function _initRoles()
+    {
+        if(empty($this->CNF['OBJECT_PRE_LIST_ROLES'])) 
+            return;
+
+        $this->_aRoles = BxDolFormQuery::getDataItems($this->CNF['OBJECT_PRE_LIST_ROLES']);
+        $this->_bRoles = !empty($this->_aRoles) && is_array($this->_aRoles);
     }
 }
 

+ 6 - 2
modules/boonex/organizations/classes/BxOrgsConfig.php

@@ -147,6 +147,7 @@ class BxOrgsConfig extends BxBaseModProfileConfig
             'OBJECT_CONNECTIONS' => 'bx_organizations_fans',
             'OBJECT_UPLOADERS_COVER' => array('bx_organizations_cover_crop'),
             'OBJECT_UPLOADERS_PICTURE' => array('bx_organizations_picture_crop'),
+            'OBJECT_PRE_LIST_ROLES' => 'bx_organizations_roles',
             
             'BADGES_AVALIABLE' => true,
 
@@ -156,6 +157,7 @@ class BxOrgsConfig extends BxBaseModProfileConfig
             'EMAIL_JOIN_CONFIRM' => 'bx_organizations_join_confirm',
             'EMAIL_FAN_BECOME_ADMIN' => 'bx_organizations_fan_become_admin',
             'EMAIL_ADMIN_BECOME_FAN' => 'bx_organizations_admin_become_fan',
+            'EMAIL_FAN_SET_ROLE' => 'bx_organizations_set_role',
             'EMAIL_FAN_REMOVE' => 'bx_organizations_fan_remove',
             'EMAIL_JOIN_REJECT' => 'bx_organizations_join_reject',
 
@@ -240,12 +242,14 @@ class BxOrgsConfig extends BxBaseModProfileConfig
         ));
 
         $this->_aJsClasses = array(
-        	'manage_tools' => 'BxOrgsManageTools',
+            'main' => 'BxOrgsMain',
+            'manage_tools' => 'BxOrgsManageTools',
             'categories' => 'BxDolCategories'
         );
 
         $this->_aJsObjects = array(
-        	'manage_tools' => 'oBxOrgsManageTools',
+            'main' => 'oBxOrgsMain',
+            'manage_tools' => 'oBxOrgsManageTools',
             'categories' => 'oBxDolCategories'
         );
 

+ 13 - 2
modules/boonex/organizations/install/langs/en.xml

@@ -383,6 +383,11 @@
     <string name="_bx_orgs_cat_University"><![CDATA[University]]></string>
     <string name="_bx_orgs_cat_Other"><![CDATA[Other]]></string>
 
+    <string name="_bx_orgs_pre_lists_roles"><![CDATA[Organization roles]]></string>
+    <string name="_bx_orgs_role_regular"><![CDATA[Regular]]></string>
+    <string name="_bx_orgs_role_administrator"><![CDATA[Administrator]]></string>
+    <string name="_bx_orgs_role_moderator"><![CDATA[Moderator]]></string>
+
     <string name="_bx_organizations_alert_action_fan_added"><![CDATA[member joined]]></string>
     <string name="_bx_organizations_alert_action_join_request"><![CDATA[join request]]></string>
     <string name="_bx_organizations_alert_action_profile_cover_changed"><![CDATA[cover changed]]></string>
@@ -403,8 +408,8 @@
     <string name="_bx_orgs_txt_sample_pi_action"><![CDATA[changed {0}]]></string>
     <string name="_bx_orgs_txt_sample_pi_action_user"><![CDATA[{0} changed {1}]]></string>
     <string name="_bx_orgs_txt_N_friends"><![CDATA[{0} friends]]></string>
-    <string name="_bx_orgs_txt_to_admins"><![CDATA[To Admins]]></string>
-    <string name="_bx_orgs_txt_from_admins"><![CDATA[From Admins]]></string>
+    <string name="_bx_orgs_txt_role"><![CDATA[Role]]></string>
+    <string name="_bx_orgs_txt_set_role"><![CDATA[Set Role]]></string>
     <string name="_bx_orgs_txt_private_organization"><![CDATA[Private organization]]></string>
     <string name="_bx_orgs_ps_group_title_participants"><![CDATA[Employees]]></string>
 
@@ -448,6 +453,12 @@
     <string name="_bx_orgs_email_admin_become_fan_subject"><![CDATA[Your organization admin status was revoked]]></string>
     <string name="_bx_orgs_email_admin_become_fan_body"><![CDATA[{email_header}
 <p>Your admin status was revoked from <a href="{EntryUrl}">{EntryTitle}</a> organization.</p>
+{email_footer}]]></string>
+
+    <string name="_bx_orgs_email_set_role"><![CDATA[Organization member status was changed]]></string>
+    <string name="_bx_orgs_email_set_role_subject"><![CDATA[Your organization status was changed]]></string>
+    <string name="_bx_orgs_email_set_role_body"><![CDATA[{email_header}
+<p>Your status in <a href="{EntryUrl}">{EntryTitle}</a> organization was changed to <b>{Role}</b>.</p>
 {email_footer}]]></string>
 
     <string name="_bx_orgs_email_invitation"><![CDATA[Invitation to organization]]></string>

+ 5 - 3
modules/boonex/organizations/install/sql/enable.sql

@@ -531,12 +531,13 @@ INSERT INTO `sys_objects_grid` (`object`, `source_type`, `source`, `table`, `fie
 
 INSERT INTO `sys_grid_fields` (`object`, `name`, `title`, `width`, `params`, `order`) VALUES
 ('bx_organizations_fans', 'name', '_sys_name', '50%', '', 10),
-('bx_organizations_fans', 'actions', '', '50%', '', 20);
+('bx_organizations_fans', 'role', '_bx_orgs_txt_role', '10%', '', 15),
+('bx_organizations_fans', 'actions', '', '40%', '', 20);
 
 INSERT INTO `sys_grid_actions` (`object`, `type`, `name`, `title`, `icon`, `confirm`, `order`) VALUES
 ('bx_organizations_fans', 'single', 'accept', '_sys_accept', '', 0, 10),
-('bx_organizations_fans', 'single', 'to_admins', '_bx_orgs_txt_to_admins', '', 0, 20),
-('bx_organizations_fans', 'single', 'from_admins', '_bx_orgs_txt_from_admins', '', 0, 30),
+('bx_organizations_fans', 'single', 'set_role', '_bx_orgs_txt_set_role', '', 0, 20),
+('bx_organizations_fans', 'single', 'set_role_submit', '', '', 0, 21),
 ('bx_organizations_fans', 'single', 'delete', '', 'remove', 1, 40);
 
 -- GRIDS: administration
@@ -621,6 +622,7 @@ INSERT INTO `sys_email_templates` (`Module`, `NameSystem`, `Name`, `Subject`, `B
 ('bx_organizations', '_bx_orgs_email_fan_remove', 'bx_organizations_fan_remove', '_bx_orgs_email_fan_remove_subject', '_bx_orgs_email_fan_remove_body'),
 ('bx_organizations', '_bx_orgs_email_fan_become_admin', 'bx_organizations_fan_become_admin', '_bx_orgs_email_fan_become_admin_subject', '_bx_orgs_email_fan_become_admin_body'),
 ('bx_organizations', '_bx_orgs_email_admin_become_fan', 'bx_organizations_admin_become_fan', '_bx_orgs_email_admin_become_fan_subject', '_bx_orgs_email_admin_become_fan_body'),
+('bx_organizations', '_bx_orgs_email_set_role', 'bx_organizations_set_role', '_bx_orgs_email_set_role_subject', '_bx_orgs_email_set_role_body'),
 ('bx_organizations', '_bx_orgs_email_invitation', 'bx_organizations_invitation', '_bx_orgs_email_invitation_subject', '_bx_orgs_email_invitation_body');
 
 

+ 9 - 0
modules/boonex/organizations/install/sql/install.sql

@@ -204,6 +204,7 @@ CREATE TABLE IF NOT EXISTS `bx_organizations_admins` (
   `id` int(11) NOT NULL AUTO_INCREMENT,
   `group_profile_id` int(10) unsigned NOT NULL,
   `fan_id` int(10) unsigned NOT NULL,
+  `role` int(10) unsigned NOT NULL default '0',
   PRIMARY KEY (`id`),
   UNIQUE KEY `admin` (`group_profile_id`,`fan_id`)
 );
@@ -383,6 +384,14 @@ INSERT INTO `sys_form_pre_values`(`Key`, `Value`, `Order`, `LKey`, `LKey2`) VALU
 ('bx_organizations_cats', '34', 34, '_bx_orgs_cat_University', ''),
 ('bx_organizations_cats', '35', 35, '_bx_orgs_cat_Other', '');
 
+INSERT INTO `sys_form_pre_lists`(`key`, `title`, `module`, `use_for_sets`) VALUES
+('bx_organizations_roles', '_bx_orgs_pre_lists_roles', 'bx_organizations', '0');
+
+INSERT INTO `sys_form_pre_values`(`Key`, `Value`, `Order`, `LKey`, `LKey2`) VALUES
+('bx_organizations_roles', '0', 1, '_bx_orgs_role_regular', ''),
+('bx_organizations_roles', '1', 2, '_bx_orgs_role_administrator', ''),
+('bx_organizations_roles', '2', 3, '_bx_orgs_role_moderator', '');
+
 -- COMMENTS
 INSERT INTO `sys_objects_cmts` (`Name`, `Module`, `Table`, `CharsPostMin`, `CharsPostMax`, `CharsDisplayMax`, `Html`, `PerView`, `PerViewReplies`, `BrowseType`, `IsBrowseSwitch`, `PostFormPosition`, `NumberOfLevels`, `IsDisplaySwitch`, `IsRatable`, `ViewingThreshold`, `IsOn`, `RootStylePrefix`, `BaseUrl`, `ObjectVote`, `TriggerTable`, `TriggerFieldId`, `TriggerFieldAuthor`, `TriggerFieldTitle`, `TriggerFieldComments`, `ClassName`, `ClassFile`) VALUES
 ('bx_organizations', 'bx_organizations', 'bx_organizations_cmts', 1, 5000, 1000, 3, 5, 3, 'tail', 1, 'bottom', 1, 1, 1, -3, 1, 'cmt', 'page.php?i=view-organization-profile&id={object_id}', '', 'bx_organizations_data', 'id', 'author', 'org_name', 'comments', '', ''),

+ 1 - 1
modules/boonex/organizations/install/sql/uninstall.sql

@@ -22,7 +22,7 @@ DELETE FROM `sys_form_display_inputs` WHERE `display_name` IN('bx_organization_a
 -- PRE-VALUES
 DELETE FROM `sys_form_pre_lists` WHERE `module` = 'bx_organizations';
 
-DELETE FROM `sys_form_pre_values` WHERE `Key` IN('bx_organizations_cats');
+DELETE FROM `sys_form_pre_values` WHERE `Key` LIKE 'bx_organizations%';
 
 -- COMMENTS
 DELETE FROM `sys_objects_cmts` WHERE `Name` LIKE 'bx_organizations%';

+ 29 - 0
modules/boonex/organizations/js/main.js

@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) UNA, Inc - https://una.io
+ * MIT License - https://opensource.org/licenses/MIT
+ *
+ * @defgroup    Organizations Organizations
+ * @ingroup     UnaModules
+ *
+ * @{
+ */
+
+function BxOrgsMain(oOptions) {
+    this._sActionsUrl = oOptions.sActionUrl;
+    this._sObjName = oOptions.sObjName == undefined ? 'oBxOrgsMain' : oOptions.sObjName;
+    this._sObjNameGrid = oOptions.sObjNameGrid == undefined ? '' : oOptions.sObjNameGrid;
+    
+    this._sAnimationEffect = oOptions.sAnimationEffect == undefined ? 'fade' : oOptions.sAnimationEffect;
+    this._iAnimationSpeed = oOptions.iAnimationSpeed == undefined ? 'slow' : oOptions.iAnimationSpeed;
+
+    this._aHtmlIds = oOptions.aHtmlIds == undefined ? {} : oOptions.aHtmlIds;
+}
+
+BxOrgsMain.prototype.onClickSetRole = function(iFanProfileId, iRole) {
+    $('.bx-popup-applied:visible').dolPopupHide();
+
+    if(glGrids[this._sObjNameGrid] != undefined)
+        glGrids[this._sObjNameGrid].actionWithId(iFanProfileId, 'set_role_submit', {role: iRole}, '', false, false);
+};
+
+/** @} */

+ 6 - 0
modules/boonex/organizations/template/css/main.css

@@ -1 +1,7 @@
 @import url(../../../../base/profile/template/css/main.css);
+
+
+/*-- Group Roles --*/
+#bx-organizations-set-role-popup .bx-menu-ver {
+    margin: 0;
+}

+ 13 - 2
modules/boonex/russian/data/langs/bx_organizations/ru.xml

@@ -377,6 +377,11 @@
     <string name="_bx_orgs_cat_University"><![CDATA[Преподавание]]></string>
     <string name="_bx_orgs_cat_Other"><![CDATA[Другое]]></string>
 
+    <string name="_bx_orgs_pre_lists_roles"><![CDATA[Роли в организациях]]></string>
+    <string name="_bx_orgs_role_regular"><![CDATA[Обычный]]></string>
+    <string name="_bx_orgs_role_administrator"><![CDATA[Администратор]]></string>
+    <string name="_bx_orgs_role_moderator"><![CDATA[Модератор]]></string>
+
     <string name="_bx_organizations_alert_action_fan_added"><![CDATA[присоединение нового участника]]></string>
     <string name="_bx_organizations_alert_action_join_request"><![CDATA[запрос на присоединение к организации]]></string>
     <string name="_bx_organizations_alert_action_profile_cover_changed"><![CDATA[обложка изменена]]></string>
@@ -397,8 +402,8 @@
     <string name="_bx_orgs_txt_sample_pi_action"><![CDATA[сменила {0}]]></string>
     <string name="_bx_orgs_txt_sample_pi_action_user"><![CDATA[{0} сменила {1}]]></string>
     <string name="_bx_orgs_txt_N_friends"><![CDATA[Друзья: {0}]]></string>
-    <string name="_bx_orgs_txt_to_admins"><![CDATA[В админы]]></string>
-    <string name="_bx_orgs_txt_from_admins"><![CDATA[Из админов]]></string>
+    <string name="_bx_orgs_txt_role"><![CDATA[Роль]]></string>
+    <string name="_bx_orgs_txt_set_role"><![CDATA[Задать роль]]></string>
     <string name="_bx_orgs_txt_private_organization"><![CDATA[Приватная организация]]></string>
     <string name="_bx_orgs_ps_group_title_participants"><![CDATA[Сотрудники]]></string>
 
@@ -441,6 +446,12 @@
     <string name="_bx_orgs_email_admin_become_fan_subject"><![CDATA[Вы были лишены статуса администратора организации]]></string>
     <string name="_bx_orgs_email_admin_become_fan_body"><![CDATA[{email_header}
 <p>Вы были лишены статуса администратора организации <a href="{EntryUrl}">{EntryTitle}</a></p>
+{email_footer}]]></string>
+
+    <string name="_bx_orgs_email_set_role"><![CDATA[Изменение статуса в организации]]></string>
+    <string name="_bx_orgs_email_set_role_subject"><![CDATA[Ваш статус в организации был изменен]]></string>
+    <string name="_bx_orgs_email_set_role_body"><![CDATA[{email_header}
+<p>Ваш статус в организации <a href="{EntryUrl}">{EntryTitle}</a> был изменен на <b>{Role}</b>.</p>
 {email_footer}]]></string>
 
     <string name="_bx_orgs_email_invitation"><![CDATA[Приглашение в организацию]]></string>

+ 4 - 6
modules/boonex/russian/data/langs/bx_spaces/ru.xml

@@ -272,8 +272,6 @@
     <string name="_bx_spaces_txt_sample_score_up_single"><![CDATA[голос за пространство]]></string>
     <string name="_bx_spaces_txt_sample_score_down_single"><![CDATA[голос против пространства]]></string>
     <string name="_bx_spaces_txt_set_role"><![CDATA[Задать роль]]></string>
-    <string name="_bx_spaces_txt_to_admins"><![CDATA[В админы]]></string>
-    <string name="_bx_spaces_txt_from_admins"><![CDATA[Из админов]]></string>
     <string name="_bx_spaces_txt_private_group"><![CDATA[Приватная пространство]]></string>
 	<string name="_bx_spaces_txt_invite_popup_text"><![CDATA[Вы были приглашены в это пространство.  Нажмите кнопку ниже чтобы принять приглашение.]]></string>
     <string name="_bx_spaces_txt_invite_popup_title"><![CDATA[Приглашение в пространство]]></string>
@@ -296,7 +294,7 @@
     <string name="_bx_spaces_cat_Fun"><![CDATA[Юмор]]></string>
     <string name="_bx_spaces_cat_Uncategorised"><![CDATA[Без категории]]></string>
 
-    <string name="_bx_spaces_pre_lists_roles"><![CDATA[Роли в группах]]></string>
+    <string name="_bx_spaces_pre_lists_roles"><![CDATA[Роли в пространствах]]></string>
     <string name="_bx_spaces_role_regular"><![CDATA[Обычный]]></string>
     <string name="_bx_spaces_role_administrator"><![CDATA[Администратор]]></string>
     <string name="_bx_spaces_role_moderator"><![CDATA[Модератор]]></string>
@@ -337,10 +335,10 @@
 <p>Вы были лишены статуса администратора пространства <a href="{EntryUrl}">{EntryTitle}</a></p>
 {email_footer}]]></string>
 
-    <string name="_bx_spaces_email_set_role"><![CDATA[Изменение статуса в группе]]></string>
-    <string name="_bx_spaces_email_set_role_subject"><![CDATA[Ваш статус в группе был изменен]]></string>
+    <string name="_bx_spaces_email_set_role"><![CDATA[Изменение статуса в пространстве]]></string>
+    <string name="_bx_spaces_email_set_role_subject"><![CDATA[Ваш статус в пространстве был изменен]]></string>
     <string name="_bx_spaces_email_set_role_body"><![CDATA[{email_header}
-<p>Ваш статус в группе <a href="{EntryUrl}">{EntryTitle}</a> был изменен на <b>{Role}</b>.</p>
+<p>Ваш статус в пространстве <a href="{EntryUrl}">{EntryTitle}</a> был изменен на <b>{Role}</b>.</p>
 {email_footer}]]></string>
 
     <string name="_bx_spaces_email_invitation"><![CDATA[Приглашение в пространство]]></string>

+ 4 - 6
modules/boonex/spaces/install/langs/en.xml

@@ -271,8 +271,6 @@
         <string name="_bx_spaces_txt_sample_score_up_single"><![CDATA[score up vote to space]]></string>
         <string name="_bx_spaces_txt_sample_score_down_single"><![CDATA[score down vote to space]]></string>
         <string name="_bx_spaces_txt_set_role"><![CDATA[Set Role]]></string>
-	<string name="_bx_spaces_txt_to_admins"><![CDATA[To Admins]]></string>
-	<string name="_bx_spaces_txt_from_admins"><![CDATA[From Admins]]></string>
 	<string name="_bx_spaces_txt_private_space"><![CDATA[Private space]]></string>
   <string name="_bx_spaces_txt_invite_popup_text"><![CDATA[You have been invited to a space. Click the button below to accept the invitation.]]></string>
   <string name="_bx_spaces_txt_invite_popup_title"><![CDATA[Invitation to a space]]></string>
@@ -295,7 +293,7 @@
 	<string name="_bx_spaces_cat_Fun"><![CDATA[Fun]]></string>
 	<string name="_bx_spaces_cat_Uncategorised"><![CDATA[Uncategorised]]></string>
 
-    <string name="_bx_spaces_pre_lists_roles"><![CDATA[Group roles]]></string>
+    <string name="_bx_spaces_pre_lists_roles"><![CDATA[Space roles]]></string>
     <string name="_bx_spaces_role_regular"><![CDATA[Regular]]></string>
     <string name="_bx_spaces_role_administrator"><![CDATA[Administrator]]></string>
     <string name="_bx_spaces_role_moderator"><![CDATA[Moderator]]></string>
@@ -336,10 +334,10 @@
 	<p>Your admin status was revoked from <a href="{EntryUrl}">{EntryTitle}</a> space.</p>
 	{email_footer}]]></string>
 
-    <string name="_bx_spaces_email_set_role"><![CDATA[Group member status was changed]]></string>
-    <string name="_bx_spaces_email_set_role_subject"><![CDATA[Your group status was changed]]></string>
+    <string name="_bx_spaces_email_set_role"><![CDATA[Space member status was changed]]></string>
+    <string name="_bx_spaces_email_set_role_subject"><![CDATA[Your space status was changed]]></string>
     <string name="_bx_spaces_email_set_role_body"><![CDATA[{email_header}
-<p>Your status in <a href="{EntryUrl}">{EntryTitle}</a> group was changed to <b>{Role}</b>.</p>
+<p>Your status in <a href="{EntryUrl}">{EntryTitle}</a> space was changed to <b>{Role}</b>.</p>
 {email_footer}]]></string>
 
 	<string name="_bx_spaces_email_invitation"><![CDATA[Invitation to space]]></string>

+ 1 - 1
modules/boonex/spaces/js/main.js

@@ -2,7 +2,7 @@
  * Copyright (c) UNA, Inc - https://una.io
  * MIT License - https://opensource.org/licenses/MIT
  *
- * @defgroup    Groups Groups
+ * @defgroup    Spaces Spaces
  * @ingroup     UnaModules
  *
  * @{