diff --git a/app/main/controller/admin.php b/app/main/controller/admin.php index f95cd3d0..3e911609 100644 --- a/app/main/controller/admin.php +++ b/app/main/controller/admin.php @@ -10,7 +10,6 @@ namespace Controller; use Controller\Ccp\Sso; -use Model\BasicModel; use Model\CharacterModel; use Model\CorporationModel; @@ -84,7 +83,9 @@ class Admin extends Controller{ $adminCharacter = null; if( !$f3->exists(Sso::SESSION_KEY_SSO_ERROR) ){ if( $character = $this->getCharacter() ){ - if($character->roleId == 1){ + $this->setCharacterRole($character); + + if($character->role != 'MEMBER'){ // current character is admin $adminCharacter = $character; }else{ @@ -103,6 +104,36 @@ class Admin extends Controller{ return $adminCharacter; } + /** + * set temp "virtual" field with current admin role name for a $characterModel + * @param CharacterModel $character + */ + protected function setCharacterRole(CharacterModel $character){ + $character->virtual('role', function($character){ + // default role based on roleId (auto-detected) + if( ($role = array_search ($character->roleId, CharacterModel::ROLES)) === false ){ + $role = 'MEMBER'; + } + + /** + * check config files for hardcoded character roles + * -> overwrites default role (e.g. auto detected by corp in-game roles) + */ + if($this->getF3()->exists('PATHFINDER.ADMIN.CHARACTER', $globalAdminData)){ + foreach((array)$globalAdminData as $adminData){ + if($adminData['ID'] === $character->_id){ + if( CharacterModel::ROLES[$adminData['ROLE']] ){ + $role = $adminData['ROLE']; + } + break; + } + } + } + + return $role; + }); + } + /** * dispatch page events by URL $params * @param \Base $f3 @@ -112,7 +143,6 @@ class Admin extends Controller{ public function dispatch(\Base $f3, $params, $character = null){ if($character instanceof CharacterModel){ // user logged in - $parts = array_values(array_filter(array_map('strtolower', explode('/', $params['*'])))); $f3->set('tplPage', $parts[0]); @@ -233,12 +263,31 @@ class Admin extends Controller{ * @param CharacterModel $character */ protected function initMembers(\Base $f3, CharacterModel $character){ - $data = (object) [];; + $data = (object) []; - $test = BasicModel::getNew('CharacterModel'); - $test->getById( $character->_id, 0); + if($characterCorporation = $character->getCorporation()){ + $corporations = []; - $data->members = $test->getCorporation()->getCharacters(); + switch($character->role){ + case 'SUPERADMIN': + if($accessCorporations = CorporationModel::getAll(['addNPC' => true])){ + $corporations = $accessCorporations; + } + break; + case 'CORPORATION': + $corporations[] = $characterCorporation; + break; + } + + foreach($corporations as $corporation){ + $data->corpMembers[$corporation->name] = $corporation->getCharacters(); + } + + // sort corporation from current user first + if( !empty($data->corpMembers[$characterCorporation->name]) ){ + $data->corpMembers = array($characterCorporation->name => $data->corpMembers[$characterCorporation->name]) + $data->corpMembers; + } + } $f3->set('tplMembers', $data); } diff --git a/app/main/model/basicmodel.php b/app/main/model/basicmodel.php index 135c7807..272080f7 100644 --- a/app/main/model/basicmodel.php +++ b/app/main/model/basicmodel.php @@ -605,7 +605,7 @@ abstract class BasicModel extends \DB\Cortex { * @return false|null|string */ public function getFormattedColumn($column, $format = 'Y-m-d H:i'){ - return $this->get($column) ? date($format, strtotime( $this->get($column) )) : null;; + return $this->get($column) ? date($format, strtotime( $this->get($column) )) : null; } /** diff --git a/app/main/model/charactermodel.php b/app/main/model/charactermodel.php index ba0ef1ae..f0c8b345 100644 --- a/app/main/model/charactermodel.php +++ b/app/main/model/charactermodel.php @@ -33,6 +33,15 @@ class CharacterModel extends BasicModel { 'KICKED' => 'character is kicked', 'BANNED' => 'character is banned' ]; + + /** + * all admin roles and related roleId for a character + */ + const ROLES = [ + 'MEMBER' => 0, + 'SUPERADMIN' => 1, + 'CORPORATION' => 2 + ]; /** * enables change for "kicked" column @@ -582,13 +591,13 @@ class CharacterModel extends BasicModel { * @return int */ public function requestRoleId(){ - $roleId = 0; - $rolesData = $this->requestRoles(); - if( !empty($rolesData) ){ + $roleId = self::ROLES['MEMBER']; + + if( !empty($rolesData = $this->requestRoles()) ){ // roles that grant admin access for this character $adminRoles = array_intersect(CorporationModel::ADMIN_ROLES, $rolesData); if( !empty($adminRoles) ){ - $roleId = 1; + $roleId = self::ROLES['CORPORATION']; } } diff --git a/app/main/model/corporationmodel.php b/app/main/model/corporationmodel.php index c60021c8..02cfc789 100644 --- a/app/main/model/corporationmodel.php +++ b/app/main/model/corporationmodel.php @@ -202,4 +202,23 @@ class CorporationModel extends BasicModel { return $characterRolesData; } + + /** + * get all corporations + * @param array $options + * @return \DB\CortexCollection + */ + public static function getAll($options = []){ + $query = [ + 'active = :active', + ':active' => 1 + ]; + + if( !$options['addNPC'] ){ + $query[0] .= ' AND isNPC = :isNPC'; + $query[':isNPC'] = 1; + } + + return (new self())->find($query); + } } \ No newline at end of file diff --git a/public/templates/admin/members.html b/public/templates/admin/members.html index b266c81e..87850fb2 100644 --- a/public/templates/admin/members.html +++ b/public/templates/admin/members.html @@ -4,99 +4,102 @@
| id | -name | -role | -share | -tracking | -security | -last login | -kicked until | -kick | -banned since | -ban | -
|---|
| {{ @member->_id }} | -
- {{ @member->name }}
- |
-
- |
-
- |
-
- |
- {{ number_format(round(@member->securityStatus, 2), 2) }} | -{{ @member->getFormattedColumn('lastLogin') }} | -{{ @member->getFormattedColumn('kicked') }} | -
-
- id |
+ name |
+ role |
+ share |
+ tracking |
+ security |
+ last login |
+ kicked until |
+ kick |
+ banned since |
+ ban |
+ |
| {{ @member->_id }} | +
+ {{ @member->name }}
+ |
+
+ |
+
+ |
- {{ @member->getFormattedColumn('banned') }} | -
- |
-